タグ

OOPとdelegateに関するkiyo_hikoのブックマーク (2)

  • implementsを広める会

    この文章は以前「ObjectPascal Object Oriented Programming Vol.1 "implements" 第2版」と大上段な名前を付けて公開していたものに、簡易化と追記を行ったものです。 今更多重継承? そもそもオブジェクト指向の意義すら疑われる昨今、実装込みの多重継承(C++, Eiffel*1)はオブジェクト指向言語の主流からもすっかり遠のいて、型のみの多重継承、つまりインターフェース継承(Ada, C#, D, Java, ObjectPascal(Delphi))やDuck-Typing(Google Go, VB.NET)が主流となってきました。 そもそもC++の多重継承は問題が多く、Eiffelの多重継承は衝突を上手く捌けてC++のような問題はないものの、他の言語ではモジュールシステム(パッケージ、名前空間)で解決している部分までガンガン多重継承し

    kiyo_hiko
    kiyo_hiko 2012/04/16
    「インターフェースを能力の合成として捉えると、色々と単純になります。」
  • クラス設計に関するメモ

    経験的にこのようにした方がよいと思った点についての記録です。 仕事で大規模(2000クラス超)かつ製品寿命がながいパッケージソフトを作っていた関係で、 ちょっとした設計の間違いが、 あとあとで大変な苦労する羽目になったりすることを経験してきました。 このような規模が大きいアプリケーションを作ることはなかなかないかもしれませんが、 なにかの参考になれば、と思います。 継承する前に委譲を検討する Singleton パターンを使うときの注意 Template Method パターンを使うときの注意 クラス間の依存に関する注意 クラスの粒度 Singleton の問題を回避できるか? 継承する前に委譲を検討する 継承はスーパークラスの仕様をよく理解しておかないと、 バグを作りこみやすいので十分注意する必要があります。 メソッドのオーバーライドをするときも、 public void foo(){

    kiyo_hiko
    kiyo_hiko 2011/10/19
    なるほど:Singletonは「Java のコア API のソースを検索してみれば、 ほとんど使われていない」「継承による機能追加ができなくなります。 つまり、その唯一のクラスに次々に新しいメソッドを追加していくしかない」
  • 1