5回目は、4回目で作成したクラスを操作するロジッククラスを作成します。
この企画の受講状況を各自で管理してもらおうと思い管理表をGW_firstJava.xlsからダウンロードできますので使ってもらえると各自の進行具合が分かります。学び終えた場所の「日付」に「Ctrl+;」を「時刻」に「Ctrl+:」を押せば終了した日付と時刻を記憶できます。PDF版はGW_firstJava.pdfからダウンロードできます。なお、ファイルはウィルスバスターでウィルスチェックしています。
5-1.ロジッククラス
5-1-1.長いソースを理解するには
ロジッククラスは、300行近くあるので
JavaBankLogic.javaからダウンロードしてタイピングしないでそのまま使ってもらってもかまいません。長いソースを理解するには、自分自身で「main()」メソッドを作成し実際に動きを確認する方法が効果的です。
下のソースに、サンプルとして載せて置いたのでサンプルソースを見ながら進めるのもいいでしょう。
また、いっぺんに見ようとはせずメソッド単位を見れば大した処理では無い事に気づき他のメソッドも似たような処理とも分かります。
ロジッククラスで新しく加わった処理を説明していきます。
5-1-2.リスト
リストは、その名の通り一覧と言う意味ですが、Javaではリストを管理できるクラス「ArrayList」があります。
「ArrayList」は、「List」インタフェースを実装して「<>」の中に、格納するクラスを記述します。
例えば、ユーザをリストで管理したい場合には、「List<UserModel>」のように宣言時には、「List」を使いインスタンス化するときには、「ArrayList<UserModel>」で行います。
リストに追加するには、「set(追加する値)」となり、値に「UserModel」オブジェクトを格納します。
リストから取り出すには、「get(位置)」となり、追加した何番目かを指定してあげます。
リストから登録数を取得するには、「size()」で取得できます。
5-1-3.if文
プログラムがただ一方的に流れていては柔軟なプログラムが出来ませんよね。ではどうすればいいと思いますか。
それは、処理の流れを状況に応じて変えることが一番大きく影響しますよね。
Javaでは、if文を使用し状況に応じて適切な処理に振る事ができます。
書き方は、以下のように記述します。
if (条件式) {
:
:
}「条件式」が真の時にだけ「{}」の中を処理し、偽は「}」以降から処理します。
条件の式は「==」「!=」「<」「<=」「>」「>=」を使い、それぞれ「等しい」「等しくない」
「小さい」「以下」「大きい」「以上」を意味しています。
条件が合えば「true」という真の意味に、合わなければ「false」という偽の意味になります。
5-1-4.for文
リストのように1つ1つデータをif文で調べていくのは大変ですね。それではコンピュータを使ってプログラミングする必要性がありません。
for文は、決められた回数繰り返すのに、変数をうまく使い処理を繰り返しています。
書き方は、以下のように記述します。
for (最初に一回; 条件; 文の後に) {
文
}
サンプルプログラムの一番多い書き方は、for (int i = 0; i < リスト.size(); i++) { : : }で「int i = 0」でiの宣言をして0で初期化してリスト.size()まで繰り返しています。「{」から始まり「}」を過ぎると「i++」が実行されてiに1を足して繰り返します。
5-2.サンプルプログラムで実行してみよう
5-2-1.サンプルソース
| Sample4_1 .java |
|---|
package jp.co.ncad.gw.erd.sample;
import jp.co.ncad.gw.erd.logic.JavaBankLogic;
import jp.co.ncad.gw.erd.model.UserModel;
public class Sample4_1 {
// ここからスタート
public static void main(final String[] args) {
// ユーザ「ジャバ太郎」を作成
UserModel javaTarou = new UserModel();
javaTarou.setUserID("java");
javaTarou.setName("ジャバ太郎");
javaTarou.setPassword("obj");
JavaBankLogic javaBankLogic = new JavaBankLogic();
javaBankLogic.addUser(javaTarou); // ユーザ登録
javaBankLogic.newAccount("pro", "普通預金"); // 存在しないユーザIDを選択すると・・・
javaBankLogic.newAccount(javaTarou.getUserID(), "特別預金"); // 存在しない口座の種類を選択すると・・・
javaBankLogic.newAccount(javaTarou.getUserID(), "普通預金");
int javaAccNum = javaBankLogic.getAccountNumber(javaTarou.getUserID());
javaBankLogic.addSaving(javaAccNum, 10000); // 預金を預ける
UserModel user = javaBankLogic.getUser(javaTarou.getUserID()); // 銀行にユーザIDから自分の情報を貰う
System.out.println(user.getUserID() + "の銀行情報");
System.out.println("銀行名:" + javaBankLogic.getJavaBankName());
System.out.println("銀行住所:" + javaBankLogic.getJavaBankAddress());
System.out.println("ユーザID:" + user.getUserID());
System.out.println("ユーザ名:" + user.getName());
System.out.println("パスワード:" + user.getPassword());
System.out.println("生年月日:" + user.getBirth());
int accNum = javaBankLogic.getAccountNumber(user.getUserID()); // 口座番号を取得
System.out.println("口座番号:" + accNum);
System.out.println("預金金額:" + javaBankLogic.getSaving(accNum));
System.out.println("口座種類名:" + javaBankLogic.getAccountTypeName(accNum));
}
}
|
proはユーザの登録が行われていません 特別預金が存在しません。存在する口座の種類名を指定下さい javaの銀行情報 銀行名:ジャバ銀行 銀行住所:東京 ユーザID:java ユーザ名:ジャバ太郎 パスワード:obj 生年月日:null 口座番号:1 預金金額:10000 口座種類名:普通預金 |
難しいと感じたらロジッククラスに例えば以下のように追加してみましょう。
/**
* コンストラクタ
* 初期化処理
*/
public JavaBankLogic() {
System.out.println("コンストラクタ通過1");
javaBank = new JavaBankModel();
:
以下省略
一通り3回目で登場した文章の動作に近づきましたね。でも、Javaはオブジェクト指向でありDB設計のERDとは相反します。ERDは正規化を求めたのに対して、オブジェクト指向は要素とメッセージを一つに併せた考えです。
次回は、オブジェクト指向により近づける為にソースプログラムを変えて説明します。
参考引用したWeb
・KMG プロ3ゼミ Java入門講座 単位3 判断が分かるときは
・KMG プロ3ゼミ Java入門講座 単位4 処理を繰り返すには