Javaのオブジェクト設計の本読んでみると当たり前のようにコンポジション、コンポジションと書かれている。
入門書にはコンポジション(集約とも言うらしい)なんて言葉は出てこなかったので理解できなかった。
なんてことは無い、クラスの中に別のクラスを取り込む(わかりやすく言えばクラスの中でインスタンス化する)ことみたいだ。
そしてその取り込んだクラスのインスタンスに仕事をさせることを委譲と言うらしい。
コンポジションなんて言葉は入門書には出てこなかったが、ちゃんと行っていたようだ。
ただ、Javaでは「継承よりコンポジション」という言葉があるらしい。
入門書では継承を頻繁に使うかもしれないが、コンポジションの方が大事なんだなぁ。
まぁ自分にとっては継承なんて使いどころの難しそうなシステムよりコンポジションの方がわかりやすくて助かるけど。
p.s.
継承はある別クラスを「拡張」するのに使わなくてはならないらしい。(参考書には拡張されたクラスを特化クラスと書いてあった)
オーバーライドとかするなら継承ではなくコンポジションを使うべきとか。
コンポジションは別クラスの変種を作るのに向いてるってとこか。
自分流にわかりやすく書くなら、例えばclassAというクラスを作りたい。
これはclassBにあるメソッドを引き継ぎたい。
しかしclassBにあるメソッドをオーバーライドしたり、一部しか使わなかったりする。
よって継承ではなくコンポジションを使ってclassAを作ることにする。
classAではclassBをインスタンス化し、使用。また、追加したいメソッド等を作る。
するとまるでclassBを継承したかのような亜種classB(classA)ができあがる。