Skip to content

OOPと関数型における設計原則のまとめ

このセクションでは、OOP(オブジェクト指向)とFP(関数型プログラミング)における設計原則(SRP、OCP、LSP、ISP、DIP)の適用方法と考え方の違いを総括します。

各原則の適用比較

原則OOPにおける実践FPにおける実践
SRP(単一責任の原則)クラス単位で責務を分離する関数単位で責務を分離し、副作用を分離する
OCP(開放/閉鎖原則)インターフェースと継承で拡張関数マップやデータ駆動設計で拡張
LSP(リスコフの置換原則)インターフェースの継承における意味的な互換性の保証型ガードと構造的な安全性による置換保証
ISP(インターフェース分離の原則)機能単位に分割されたインターフェースを実装関数を機能単位で注入・構成する
DIP(依存性逆転の原則)インターフェースに依存し、依存注入で差し替え可能に高階関数や引数による依存関数の注入

共通点と違い

  • 両者とも「責務の分離」「拡張性の確保」「テスト容易性」など設計上のゴールは共通している。
  • OOPは構造(クラスやインターフェース)で抽象化し、FPは関数とデータで抽象化する。
  • FPでは、状態を持たない分、副作用を外部から注入する形で「責務」を柔軟に管理できる。

どちらを選ぶべきか?

  • 小規模なロジックや副作用の少ない処理には関数型が適している。
  • 複雑な状態管理やエンティティ設計にはOOPの恩恵を受けやすい。
  • 実際には両者を併用するミックススタイルが現代的であり、文脈に応じて使い分けるのが理想。

最後に

OOPとFPは対立するものではなく、補完しあう設計スタイルです。
設計原則を理解し、それぞれの文脈に応じた適用ができることが、柔軟で保守性の高いコードを生む第一歩となります。

Released under the CC-BY-4.0 license.