OOPと関数型における設計原則のまとめ
このセクションでは、OOP(オブジェクト指向)とFP(関数型プログラミング)における設計原則(SRP、OCP、LSP、ISP、DIP)の適用方法と考え方の違いを総括します。
各原則の適用比較
原則 | OOPにおける実践 | FPにおける実践 |
---|---|---|
SRP(単一責任の原則) | クラス単位で責務を分離する | 関数単位で責務を分離し、副作用を分離する |
OCP(開放/閉鎖原則) | インターフェースと継承で拡張 | 関数マップやデータ駆動設計で拡張 |
LSP(リスコフの置換原則) | インターフェースの継承における意味的な互換性の保証 | 型ガードと構造的な安全性による置換保証 |
ISP(インターフェース分離の原則) | 機能単位に分割されたインターフェースを実装 | 関数を機能単位で注入・構成する |
DIP(依存性逆転の原則) | インターフェースに依存し、依存注入で差し替え可能に | 高階関数や引数による依存関数の注入 |
共通点と違い
- 両者とも「責務の分離」「拡張性の確保」「テスト容易性」など設計上のゴールは共通している。
- OOPは構造(クラスやインターフェース)で抽象化し、FPは関数とデータで抽象化する。
- FPでは、状態を持たない分、副作用を外部から注入する形で「責務」を柔軟に管理できる。
どちらを選ぶべきか?
- 小規模なロジックや副作用の少ない処理には関数型が適している。
- 複雑な状態管理やエンティティ設計にはOOPの恩恵を受けやすい。
- 実際には両者を併用するミックススタイルが現代的であり、文脈に応じて使い分けるのが理想。
最後に
OOPとFPは対立するものではなく、補完しあう設計スタイルです。
設計原則を理解し、それぞれの文脈に応じた適用ができることが、柔軟で保守性の高いコードを生む第一歩となります。