転職活動の面談でも問われるオブジェクト指向言語の3大要素

Webプログラマーが高確率で最初にぶつかる!?のがオブジェクト指向の考え方。

TaNA
クラス!?インスタンス!? もちろん壁にぶつかることなく、簡単に理解できる方もいるとは思いますが、私は結構理解に苦労しましたね。

オブジェクト指向で大切な3大要素。

・カプセル化

・継承

・ポリモーフィズム

基礎中の基礎ですが、過去の転職活動で聞かれる事が多々ありました。

TaNA
特に20台若手プログラマーであれば、オブジェクト指向の考え方、簡単なアルゴリズム(ソートや2分木)、後はデータベースの正規化やインデックス。

若手時代に一旦理解しても、いざ面談の場で問われると・・・

・上流作業メインの人

・PHPレガシーな開発案件

上に該当する人は要注意(私のことなんですが)

カプセル化

クラスの変数・メソッドの修飾子を考慮。

上記のコードでは以下の問題が起こりうる。

・変数の読み書きを制御不可.

・変数の妥当性をチェック不可.

・内部表現の変更に弱い.

これらを解消するためには、どーすれば!?

POINT変数はprivate化、アクセサメソッド等でカプセル化すること!!

セッターメソッドは十分検討した後、出来るだけ書かないことを心掛ける。

継承

extendsキーワードで基底クラスを継承し、サブクラスを定義。

JavaやPHPでは多重継承が許可されていないので、継承実装時には注意!!

POINT継承が適切であるのは「is-a関係」が成り立つ局面のみ!!

具体的なコーディングにて、is-a関係が成り立つかを確認する方法は!?

リスコフの置換原則とは、「スーパークラス型の変数に、そのサブクラス型のインスタンスを代入しても、コードの妥当性が損なわれない」こと。

is-a関係が成り立たない場合は「委譲」。

POINT「委譲」とは他のインスタンスに処理を委ねること。

「継承」がクラス同士の静的な関係であるならば、「委譲」とはインスタンス同士の動的な関係であるということ。

委譲を活用すれば、クラス同士の関係が緩い。

ポリモーフィズム

ポリモーフィズムとは「同じ名前のメソッドで異なる挙動を実現する」こと。

変数に代入するインスタンスの中身を変えることで、動的に切り替わる。

抽象クラスやインタフェースでオーバーライドを強制させることが肝。

TaNA
日々新しい技術が生まれますが、オブジェクト指向の考え方は、多くの言語に共通した考え方なので、一度勉強すれば使い回せるのも◎。

記事中のコードはPHPですが、参考書はJavaで説明されています。