「改訂第2版 Java言語プログラミング(下)」読了


object指向を学び始めて1週間が経過。一通り、改訂第2版 Java言語プログラミングレッスン (下)を読み終わりました。

目次
■ クラスとインスタンス
スーパークラスとサブクラス
■ 例外
■ インタフェース
ガーベッジコレクション
■ スレッド
■ パッケージ
■ ファイル操作と入出力、クラスの調べ方
■ コレクション

全章を通して、「クラス」と「インスタンス」の概念を理解するのにとても苦労しました。

「データ(フィールド)」と、「データの処理内容(メソッド)」が定義されているクラスをもとに、Heap上にインスタンス(オブジェクト)を生成。
宣言した変数には、Heap上のどこにインスタンスが格納されているかがしまわれている。(アドレス)

↑のように、「パソコン上で実際にどのような動作をしているのか」意識するところが、非常に難しく、時間がかかりました。


上記以外にも、UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)にて、クラス図とシーケンス図の作成方法を学びました。


今週1週間で勉強した内容を、1エントリーですべて表現するのはなかなか厳しいものがあるので、今週の課題だった「社員の給与管理プログラム」について書いていきたいと思います。

■課題
事務員(基本給15万)
プログラマー(基本給20万 + 残業代)
デザイナー(基本給25万 + 技能給)
事業開発(基本給25万 + 出張手当)

上記社員の年俸を計算するプログラムを作成せよ。
(ただし、残業代、技能給、出張手当は、個別にしか発生しないものとする。)

クラス図は、

シーケンス図は、

コードは、(Mainクラスのみ)

public class Main {
	public static void main(String[] args) {
	//Clerk tanakaさんの年俸計算
		IEmployee a = new Clerk("tanaka");	
		print(a);
	
	//Programer suzukiさんの年俸計算
		IEmployee b = new Programmer("suzuki",20000) ;
		print(b);
	
	//Designer satoさんの年俸計算
		IEmployee c = new Designer("sato",10000);
		print(c);
		
	//BusinessDevelopment itouさんの年俸計算
		IEmployee  d = new BusinessDevelopment("itou",20000);
		print(d);

	}
	
	public static void print(IEmployee e) {
		System.out.println(e.getName()+"さんの年俸は"+e.calculateAnnualSalary()+"です。");
		//e.name = "itabashi";
	}	
}

printメソッドの引数内を、スーパークラス、インタフェース型にすることで、コード数を減らすことができました。
(そのかわり、Clerk,Programmer,Designer,BusinessDevelopment のインスタンス作成時に、スーパークラスや、インタフェース型で宣言する)


また、クラスを作成する際に、どれをフィールドにして、どういうメソッドを構成するのかを考えるのがパっとでてきませんでした。本に出てくる内容を実際に書いて動かしていましたが、プログラムを書く場面になってみると、どいうクラス構造にすればいいのかがでてこず、頭がフリーズ状態になってしまいました。。。


ここら辺は経験がものをいうところなのかもしれませんが、自分がまだまだだなと痛感しました。コンストラクタ、特にsuper()を使うところなんかも理解できてなかったんだということを、課題に取り組むことで再確認することができました。


一週間みっちりobject指向を勉強したとはいえ、まだまだ理解できていなところがあると思うので、わからなくなったら、随時この本を読み直し、object指向の基礎をはずさないようにしたいと思います。


今後の課題としては、

・アクセスメソッドの理解度が低い
→上記の社員名や基本給の部分をprivateにすると動かなくなってしまう。
・クラスとインスタンス、継承、多態性、抽象クラス、インタフェースについては、もっと例をたくさん書かなければ。
・パッケージやコレクションも要復習


1週間経過するのが本当に最近あっという間です。咳が止まらない風邪はすっかり治りましたが、朝夜がだいぶ寒くなってきたので、ブリッ返さないよう気を付けます。。。