オブジェクト志向は結合度を弱く

Author:
zen-stones-1458065699amy

オブジェクト志向という言語には、継承っていうものがあります。
共通処理を親に置いて、差分だけを子におけばいい、という考えですね。
便利ではあるのですが、一歩間違えるととんでもないことになったりしてしまうのですよ。

たとえばクラスAを継承したクラスB、クラスC、クラスDがあります。
んで、クラスBの処理を修正したくなりました。
で、修正する場所はクラスA側にもありました。
そのままクラスAを修正したらさあ大変、クラスCとクラスDが動かなくなってしまいました。

とまあ、こういう事はよくあるのです。
クラス継承に関わらず、共通関数とか共通ヘッダーとかそういうものでもよく起きる話。
モジュールの結合度をできるだけ低く、というのはこういう問題を避けるためのものなのですよね。

ってことで共通部分に置くのはモジュールごとで絶対同じでないといけないものにしましょ。
いわゆるdefineとかそんなやつですね。
それか基底クラスはあくまでabstractとして型だけ用意。実装は子供側でしましょう。

ただスクリプト言語のオブジェクト志向、いわゆるMVCだとこういう勝手がまた違うのが困り者。
すべてのコントローラーが同じところ継承するし。
そういう場合はミドルウェアとかコンポーネントとか、外部モジュールを使うといいかと。

結局のところ、なんでもかんでも共通化させればいいってものではないのです。

Share on Facebook
Pocket