#input - [[🗃️SOLID原則]]は、[[🗃️オブジェクト指向]]の開発だけでなく、[[🗃️ソフトウェア]]一般に応用できる。 ## 5-2 [[🗃️単一責任原則(SRP)]] - 単一責任だと、モジュールの交換が容易になる。 - 例: ニュース記事管理システム - 購読と入稿は、別々に分かれていて欲しい - データベースドライバはどうか? - reactとwriteで分けてしまうと、チグハグになってしまう - 一緒にするとしたら、どのような概念として単一責務があると言えば良いのか? - 「バージョンを明確に区別できる」方が優先と考えても良い - [[🗃️全再利用の原則(CRP)]]と[[🗃️閉鎖性共通の原則(CCP)]]の考え方と同じように、一度に再利用されるものは分散することなく一つのパッケージにまとまっているのが適切。 ## 5-3 [[🗃️開放閉鎖原則(OCP)]] - [[🗃️安定度・抽象度等価の原則(SAP)]]の発想が役にたつ。 - FizzBuzzのケースが載っていた。 ## 5-4 [[🗃️リスコフの置換原則(LSP)]] - [[🗃️リスコフの置換原則(LSP)]]は、正しい[[🗃️継承]]とは何かを述べた原則。 - 派生クラスは常に同じ使い方を保証しないといけない。 ## 5-5 [[🗃️インターフェース分離の原則(ISP)]] - メリット - 無関係なメソッドが見えなくなり、使い方が簡単になる - 呼び出されるメソッドを限定できて、問題分析しやすくなる - 別のクラスで代替しやすくなる。 - [[🗃️Interface(抽象型)]]は、「使用者が認識する部分概念」 - 補足、外部の[[🗃️クラス]]と接続するのが良い。 ## 5-6 [[🗃️依存性逆転の原則(DIP)]] - 象徴的な原則。 - [[🗃️構造化プログラミング]]は、アプリケーション全体を部分的な小さな機能部品に分けて、その小さな機能部品をさらに小さな詳細機能に分けて作る方針。 - ただこれは、上位構造の正しさが、下位の実体の動作に依存してしまう問題がある。 - 抽象の実装を生かせば、依存の向きは、必ずしも制御の向きと同じではなくてよくなる。 - → 安定した方に依存を向けることができる。