今更ですが整理。


今まで、自分が書いてきたOOについての事は、殆どがOOD(オブジェクト指向設計)を指しておりました。
知人の暗黙のリクエスト(俗に言う“まとめて回答”)のために分かりやすく書こうと思っていたのですが、自分が率先して混乱させてしまったようで申し訳ありません。


とは言うものの、OODとOOPの明確な違いが、実は自分もよく分かっていなかったりします。
何がOODで何がOOPなのか、これを考えた場合、必ず「オブジェクトとは何ぞや?」という定理めいたものに突き当たってしまう為、なかなか説明が難しいです。

  • OOP
    • 実現方法そのものに対して、抽象化とカプセル化を行うもので、OODとは機能に対して抽象化とカプセル化を行うもの。(リフレクションとかDIとか)実現方法そのものに対して、抽象化とカプセル化を行うもの。
    • この場合のオブジェクトは、メモリ上に確保されたデータやら関数。
  • OOD

自分はこういった理解をしています。


では、MVCモデルはどちらにより近いか、というと恐らくはOODです。ModelもViewもControllerも、結局はメモリ上に確保される事になりはしますが、それぞれはModelとして、Viewとして、Controllerとしてロードされる必要は無いからです。全てを一つのJSPファイルなりに実装する事も可能で、一つの機能としてメモリ上にロードされても、実現性を脅かす事はありません。(開発効率や変更への強度は断然落ちますが)
転じて、Seasar2などを筆頭にEJB3にまでその手を広げたDIコンテナとかInversion of Controlとか呼ばれるものは、メモリへのロードのさせ方に対しての工夫なので、これはOOPに近いかなと感じています。


これが間違ってないといいな。。。