オブジェクト指向設計と SOLID 原則

OO の3要素 (カプセル化・継承・多態性) と SOLID 原則 (SRP/OCP/LSP/ISP/DIP) を整理。

オブジェクト指向設計の原則 SOLID は、AP科目Aと科目B問8で頻出。各原則を1文で説明できるようにしましょう。

鳴海 理央(普段) 鳴海 理央

オブジェクト指向 の3要素は カプセル化・継承・多態性。
SOLID原則 は OO設計の5つの指針: SRP・OCP・LSP・ISP・DIP。

砂原 ニコ(普段) 砂原 ニコ

SOLID の各文字って何の略なの?

緒方 ナオミ 先生(笑顔) 緒方 ナオミ 先生

S = Single Responsibility (単一責任)。
O = Open-Closed (拡張開放・修正閉鎖)。
L = Liskov Substitution (派生クラスで親に置換可能)。
I = Interface Segregation (使わないインタフェースに依存しない)。
D = Dependency Inversion (具象でなく抽象に依存)。

藤咲 まりあ(しょんぼり) 藤咲 まりあ

リスコフ置換原則、まりあにはちょっと難しいですぅ…

鳴海 理央(普段) 鳴海 理央

派生クラス (子) は基底クラス (親) と置換可能でなければならない、という原則です。
古典的な反例: Rectangle と Square。
Square を Rectangle の派生にすると、setWidth が setHeight にも波及して『Rectangle として呼んだ時の挙動が変わる』ため LSP 違反です。

緒方 ナオミ 先生(普段) 緒方 ナオミ 先生

AP では『次のコードはどの SOLID 原則に違反しているか』っていう問題が頻出なのよ。
実際のコード例で覚えるのが一番ね。

確認クイズ

SOLID 原則のうち『DIP (依存性逆転)』が示す内容として、最も適切なものはどれか。

  1. 高水準モジュールは低水準モジュールに直接依存すべきである
  2. 高水準モジュールも低水準モジュールも、抽象 (interface) に依存すべきである
  3. 派生クラスは基底クラスと完全に置換可能でなければならない
  4. 1つのクラスは1つの責任のみを持つべきである
こたえを見る

正解: 2. 高水準モジュールも低水準モジュールも、抽象 (interface) に依存すべきである

DIP は『高水準モジュールも低水準モジュールも、共通の抽象 (interface) に依存すべき』という原則。具象クラスへの直接依存を避けることで、テストや実装の差し替えが容易になります。3 は LSP、4 は SRP。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。