オブジェクト指向設計の原則 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 (依存性逆転)』が示す内容として、最も適切なものはどれか。
- 高水準モジュールは低水準モジュールに直接依存すべきである
- 高水準モジュールも低水準モジュールも、抽象 (interface) に依存すべきである
- 派生クラスは基底クラスと完全に置換可能でなければならない
- 1つのクラスは1つの責任のみを持つべきである
こたえを見る
正解: 2. 高水準モジュールも低水準モジュールも、抽象 (interface) に依存すべきである
DIP は『高水準モジュールも低水準モジュールも、共通の抽象 (interface) に依存すべき』という原則。具象クラスへの直接依存を避けることで、テストや実装の差し替えが容易になります。3 は LSP、4 は SRP。