見出し画像

【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エンジニア教育サービスを展開中です。
関心があれば、

をご覧ください!

サポートいただけますと幸いです。さらなる励みにして精進します。