クラスの関連 (Association) とは
継承が「AはBの一種である (Is-a)」という関係なのに対し、関連は「AはBを部品として持っている (Has-a)」という関係です。
[!TIP] 「携帯扇風機 (子)」は「扇風機 (親)」の一種ですが、「バッテリー」は携帯扇風機が持っている「部品」です。
コンポジション (Composition)
あるクラスが別のクラスを「部品」として完全に包含する強い結びつきのことです。複雑な機能を小分けにして管理しやすくします。
class PortableFan extends Fan {
constructor() {
super();
// 別のクラス(Battery)をインスタンス化して保持する
this.battery = new Battery();
}
}
委譲 (Delegation)
自分の仕事を「専門の部品」に任せることです。詳細なロジックを部品側に隠すことで、メインのクラスをシンプルに保てます。
class PortableFan extends Fan {
blowing() {
// 残量のチェックや計算は Battery クラスに任せる(委譲)
if (this.battery.isValid()) {
super.blowing();
this.battery.consume();
}
}
}