ソフトウェア開発メモ

日々のソフトウェア設計、実装で考えている、気づいた事を書いています。それが真実か否かは保証しません。悪しからず。

継承とコンポジション 長所、短所比較

この記事について

当時の雑感について書いた物です。今ではちょっと認識が変わった。

はじめに

ネットにも色々情報があるけど。自分の頭で考えて咀嚼するのが必要。

継承

長所

  • プロテクトメソッド、変数を使って柔軟なアクセスを提供できる。
  • 派生クラスは基底クラスとして取り回せる。
  • 記述量が少ない。
  • 階層化できる。

短所

  • 強く結合してしまう。
  • 階層が深いと理解しづらい。

コンポジション

長所

  • 結合先のクラスを動的に変更できる。余り使わないけど多重化もできる。
  • 緩く結合でクラス間の分離が良い。
  • (実は)派生クラスは基底クラスとして取り回せる(Javaを例に挙げると、final等で制限されていない場合)たりする。

短所

  • 記述が多い。
  • 階層化できない?。デレゲードを多重化すればできる。
  • 設計の難易度が高い。とは言っても継承をすすめる理由にはならないけど。コンポジションが使いこなせれば中級クラスの仲間入り。

疑問

Effective JavaにあるSELF問題ってなんやろ?よくわからんかった。 後、Goとかは継承自体がないらしい。それを言えばJSとかもそうだけど。