Clean Architecture Part III ch9 LSP: The Liskov Substitution Principle
- LSP: The Liskov Substitution Principle
- Guiding The Use of Inheritance
- The Square/Rectangle Problem
- LSP and Architecture
- Example LSP Violation
- Conclusion
- 英語
LSP: The Liskov Substitution Principle
- 置換可能性
- o1: S
- o2: T
- P --> T
- SがTのサブタイプならば、o2の代わりにo1を使ってもPの振る舞いは変わらない
- 基底型と派生型の間に成り立っていなければならない性質
- 【補】プログラミング言語機構の「継承」は必ずしもこれを保証しない(後述)
Guiding The Use of Inheritance
- LSPを満足している例
Billing
クラスはいずれの派生型にも依存していないPersonalLicense
,BusinessLicense
はいずれもLicense
と置換可能
The Square/Rectangle Problem
- LSPを満足していない例
-
- Rectangle: 幅高さ別々に設定できる
- Square: 幅高さ別々に設定できない
- 置換不可能なので、利用側は型情報で分岐するほかない
- 【補】汎化できないということ
- 【所感】汎化はできないことがわかったところで、Rectangleの実装をSquareに再利用したいときはこうするのがよいのかな
LSP and Architecture
- OO黎明期、LSPは「継承の使い方のガイド」だった
- やがて、「インタフェースの実装」についての、より広範な原則に変容した
- クラスよりも高水準なソフトウェア構造に対しても適用可能
- 例
- RESTインタフェース
- アーキテクチャ
- 共通点
- 利用者がある
- 利用者はwell-definedなインタフェースに依存している
- 利用者は、インタフェースの実装が置換可能であることに依存している
- 例
Example LSP Violation
- 置換不可能だとどうなる
- Special Caseが必要になる
- error-prone
- 肥大化する
Conclusion
英語
- pertain
- ...に関する、つきものである