Skip to content

DNET_SOLID

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

SOLID(SRP, OCP, LSP, ISP, DIP)

概要

  • オブジェクト指向プログラミングの分野において、

    • ソフトウェア設計の5つの原則を記憶するための頭字語。

    • Robert C. Martinにより提唱された原則の一部を集めたもの。

    • 以下の目的で考案された。
      ソフトウェアを、

      • より理解し易くする。
      • より柔軟にする。
      • よりメンテナンス性を高くする。
  • ソフトウェア設計の原則であるGRASPとは無関係。

詳細

単一責任の原則(Single responsibility principle)

  • 1つのクラスは1つだけの責任を持たなければならない。
  • すなわち、ソフトウェアの仕様の一部分を変更したときには、
    それにより影響を受ける仕様は、そのクラスの仕様でなければならない。

開放閉鎖の原則(Open–closed principle)

  • 「ソフトウェアのエンティティは
    拡張に対して開かれていなければならないが、
    変更に対しては閉じていなければならない。」

  • 変更に強く、拡張を容易にするために、できるだけ、

    「部分型付け(Subtyping)(GRASPの該当節を参照)で実装しろ。」

    みたいな話。

リスコフの置換原則(Liskov substitution principle)

  • 「プログラムの中にある任意のオブジェクトは、
    プログラムの正しさを変化させることなく、
    そのサブクラスのオブジェクトと置換できなければならない。」

  • 部分型付け(Subtyping)(GRASPの該当節を参照)を実装できるように、

    「基本クラスのインターフェイスに対応する実装をしとけ。」

    みたいな話。

インターフェイス分離の原則(Interface segregation principle)

  • 「汎用的な目的のインターフェイスが1つだけあるよりも、
    特定のクライアント向けのインターフェイスが多数あった方がよりよい。」

  • オプショナルな機能を基本クラスのインターフェイスに実装するとアレ。
    従って、

    • インターフェースをグループ毎に分け
    • 必要に応じてインターフェースを継承する。

依存性逆転の原則(Dependency inversion principle)

「具体ではなく、抽象に依存しなければならない」

参考

GRASP

よくわかるSOLID原則|erukiti|note

1: S(単一責任の原則)

https://note.com/erukiti/n/n67b323d1f7c5

2: O(オープン・クローズドの原則)

https://note.com/erukiti/n/n959277a74dd0

3: L(リスコフの置換原則)

https://note.com/erukiti/n/n88b8ed99f1e1

4: I(インターフェース分離の原則)

https://note.com/erukiti/n/n3daa55541bc8

5: D(依存性逆転の原則)

https://note.com/erukiti/n/n913e571e8207

Qiita

SOLID原則まとめ

https://qiita.com/kahirokunn/items/84b70631507928786bbb

SOLID原則について簡単に書く

https://qiita.com/yui_mop/items/93fef037a787318e7067

マイクロソフト系技術情報 Wiki

正誤

  • 見出し「開放閉鎖の原則(Open–closed principle」の閉じ括弧が欠落していたため補った。
  • 「よりメンテナナンス性を高くする。」→「よりメンテナンス性を高くする。」
  • 「基本クラスのインターフェイスに実装るとアレ。」→「〜に実装するとアレ。」
  • 「必要に応じてにインターフェース継承する。」→「必要に応じてインターフェースを継承する。」

移行メモ

  • 元 Wiki では見出しそのものが他ページへのリンクになっていた箇所 (「依存性逆転の原則」「GRASP」「デザイン・パターン」「IoC」「DI」 「IoC、AOP → DI → 依存性反転原則」)は、GitHub Wiki では 見出しからアンカが生成されるため、見出しをプレーン・テキストとし、 リンクは直下の本文に置いた。
  • 「依存性逆転」のページ内アンカ(#r6df87fb)は、参考節の マイクロソフト系技術情報 Wiki 「IoC、AOP → DI → 依存性反転原則」への リンクを指していたため、IoC、AOP → DI → 依存性反転原則 に 直接張り替えた。あわせて本 Wiki の 依存性反転原則 への参照を補った。
  • マイクロソフト系技術情報 Wiki(techinfoofmicrosofttech.osscons.jp)への URL リンクは、移行済みの デザイン・パターン / IoC / DI / IoC、AOP → DI → 依存性反転原則 に張り替えた。
  • PukiWiki のページ内アンカ(#xxxxxxxx)は GitHub Wiki では再現できないため、 他ページのアンカを指すリンクは「〜(ページ名 の該当節を参照)」の形に置き換えた。

Tags: 移行, SOLID, SRP, OCP, LSP, ISP, DIP, オブジェクト指向, 設計原則, Robert C. Martin

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally