OO
artima developerに連載されている、Erich Gammaインタビュー。気になったところをメモしておきます。 (Web積読解消の一環) How to Use Design Patterns 問題を解決するためにパターンを使うべき。パターンをやたらに使って、設計を複雑にしてはだめ。要求…
http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/dp-ocp-2.html 先日の列車事故で亡くなられた石井勝さんによる、OCPとデザインパターンについてのわかりやすい解説です。亡くなられたことが、返す返すも残念。http://www.objectmentor.co…
クラスCの操作Oは、以下のオブジェクトの操作だけを呼び出すべきである。 それはクラスC、操作Oの引数、操作Oが生成したオブジェクト、クラスCのインスタンスオブジェクトである。 オブジェクトのはしご(別のオブジェクトのメソッド呼び出しで得られたオブ…
継承よりもオブジェクトの多相なコンポジションの方がよい。 再利用するには、継承を使うより委譲したほうがいいですよ。(だんだん説明が適当になってきた)
単独の汎用的なインターフェイスよりも、多くの特化したインターフェイスの方がよい。 関連する機能一式をすべてメソッドとして備えたインターフェイスを定義すると、クライアントが使わないメソッドに依存することになる。凝集度を保ったままインターフェイ…
DIPは、OCPに準拠する方法を教える。 抽象に依存する。具象に依存してはいけない。 具象クラスでなく、親クラスやインターフェイスを通してオブジェクトを参照しなさい、ということ。 オブジェクトを生成するときが厄介。 HogeAbstract = new HogeConclete()…
OCPの拡張。LSPを侵害するとOCPも侵害することになるが、逆はかならずしも真ならず。 サブクラスは基底クラスと置換可能でなければならない。 サブクラスは基底クラスのした約束をすべて守らなければならない、ということ。 Design by Contract の事前条件・…
クラス間の関係についてのもっとも重要な原則。他の原則は、すべてOCPから導かれる。 クラスは拡張には開放され、修正には閉鎖されているべきである。 既存のソースに手を加えずに、システムに新しい機能を追加できるようにしなければならない、ということ。…
前回のJ2EE勉強会で、ひがさんから「DIの本質」として発表された中にでてきたOpen Closed Principle(OCP)。 以前から、「オブジェクト指向入門 (ASCII SOFTWARE SCIENCE Programming Paradigm)」で読んだりして言葉は知っている状態だったけど、正直どうい…