【ITエンジニア】オブジェクト指向を解説してみる
こんにちは、ITエンジニア教育のスクータムです。
今回はオブジェクト指向について、自分なりに解説してみようと思います。
オブジェクト指向って?
まずは定義があればそれを確認してみましょう。
自分はたまたまソフトウェア工学の教科書があったので、それを参考にします。
なお、下記の書籍では「オブジェクト指向設計」と読んでいます。
わかりそうで、わからない感じがしますね。
(とはいえ、自分としては一番しっくりくる説明だったりします。)
なお、モジュールは、「ソフトウェアの構成要素」と説明されています。
もうちょっとざっくり解釈する
さて、これらの説明を聞いて、すぐに理解できるかというと、
ちょっと難しいですよね。
もう少し、噛み砕れた説明をみてみます。
自分の手元にちょうどJavaの入門本があったのでそこから引用します。
上記の教科書から、目的やメリットを引用してみます。
特に、部品化のルールが大切です。
現実世界をプログラムに落とし込む…ここがとても大切なわけです。
たとえば、
「ATMから、顧客が現金を引き下ろす」
という作業は、
ATMオブジェクトと、顧客オブジェクトで表現できますね。(お金オブジェクトは…まあいいでしょう。)
上記の教科書にもあるわけですが、
わけです。
このような書き方をすると、単なるコードが、人間にとって意味の通りやすいコードになりやすい、というわけです。
何が便利なのか?
ここからが本題です。
「オブジェクト指向のなにが便利なんだろう?」
ということです。
確かに現実世界の模倣…がなんとなく人にとってわかりやすそうな気はしますが、本当にそうなんでしょうか?
試しに上記のATMとユーザーの例を見てみましょう。
オブジェクト指向を使わない
int withDrowmoney = 1000;
int atmCash = 1000000;
if (withDrowmoney < atmCash) {
System.out.println(String.format("%s円を引き出します", withDrowmoney));
atmCash = atmCash - withDrowmoney;
} else {
System.out.println(String.format("ATMが扱える金額を超えています"));
}
こんな感じになりそうですよね。
今回は短い例なので体感しづらいかもしれませんが、
「結局これはなんなのだ??」
という印象をちょっとうけます。
オブジェクト指向で書いてみよう。
User user = new User();
Atm atm = new Atm();
user.withdrow(1000, atm);
お分かりいただけますでしょうか?
誰が、どんなことをやっているかよくわかります。
「userが、atmから1000円引き出す」
と、すぐにわかりますね。
ものとものの振る舞いで記述すると、この機能の意味が通りやすいですよね。
※他にいい例があれば教えてください!!
オブジェクト指向を使わない例での処理は、Atmクラスが持っていればよさそうですね!
どんなことに気をつければいいのか?
さて、ここで疑問が残ります。
オブジェクト指向設計をかじった人ならわかると思いますが、
「継承・カプセル化・多態性の話は?」
「SOLID原則も触れるべきでは?」
「オブジェクトを分けるための良い考え方は?」
と思うかもしれません。
ここらへんは後ほど記載します。
今回言いたいことは、
「オブジェクト指向設計は、設計のノウハウの一つだよ」
ということです。
考え方の一つなので、個人的にはとても深く考えている訳ではないです。
ただ、読みづらいベタ書きとならないように、詳細設計時にきちんと整理してからコーディングするようにしています。
参考
上記で述べた教科書
宣伝
ITエンジニア教育サービスを展開中です。
関心があれば、
をご覧ください!