クラスの関連 (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();
    }
  }
}