安定度・抽象度等価の原則(Stable Abstractions Principle: SAP)
1. 原則
コンポーネントの抽象度はその安定度と同程度でなければならない
- 安定度の高いコンポーネントは抽象度も高くあるべきで、安定度の高さが拡張の妨げになってはいけない
- 一方で安定度が低いことによってその内部の具体的なコードが変更しやすくなるため、安定度の低いコンポーネントはより具体的であるべきである
2. 根拠
システムの柔軟性向上
- 安定したコンポーネントを抽象化することで、変更に対する柔軟性や拡張性が向上する
再利用性の向上
- 抽象化されたコンポーネントは、具体的な実装に依存しないため、再利用性が高まる
保守性の向上
- 安定したコンポーネントは抽象化されているため、変更による影響を最小限に抑え、保守性が向上する
3. 指針
コンポーネントの安定性の評価
- コンポーネントの安定性を評価し、安定したコンポーネントと不安定なコンポーネントを区別する
コンポーネントの抽象度の評価
- コンポーネントの抽象度を評価し、抽象度の高いコンポーネントと低いコンポーネントを区別する
安定性と抽象度の調整
- 安定したコンポーネントは抽象度を高く、不安定なコンポーネントは抽象度を低くするように調整する
インターフェースと抽象クラスの利用
- インターフェースや抽象クラスを利用して、コンポーネントを抽象化する
4. 注意事項
過度な抽象化
- 過度な抽象化はシステムの複雑性が上昇し、保守性が低下することがある
抽象度の誤った評価
- コンポーネントの抽象度を誤って評価すると、安定性と抽象度のバランスが崩れ、システムの柔軟性が損なわれることがある
他の原則とのバランス
-他のコンポーネント設計原則(安定依存の原則、非循環依存関係の原則など)と合わせて考慮する必要がある