-
Notifications
You must be signed in to change notification settings - Fork 0
DNET_SOLID
-
オブジェクト指向プログラミングの分野において、
-
ソフトウェア設計の5つの原則を記憶するための頭字語。
-
Robert C. Martinにより提唱された原則の一部を集めたもの。
-
以下の目的で考案された。
ソフトウェアを、- より理解し易くする。
- より柔軟にする。
- よりメンテナンス性を高くする。
-
-
ソフトウェア設計の原則であるGRASPとは無関係。
- 1つのクラスは1つだけの責任を持たなければならない。
- すなわち、ソフトウェアの仕様の一部分を変更したときには、
それにより影響を受ける仕様は、そのクラスの仕様でなければならない。
-
「ソフトウェアのエンティティは
拡張に対して開かれていなければならないが、
変更に対しては閉じていなければならない。」 -
変更に強く、拡張を容易にするために、できるだけ、
「部分型付け(Subtyping)(GRASPの該当節を参照)で実装しろ。」
みたいな話。
-
「プログラムの中にある任意のオブジェクトは、
プログラムの正しさを変化させることなく、
そのサブクラスのオブジェクトと置換できなければならない。」 -
部分型付け(Subtyping)(GRASPの該当節を参照)を実装できるように、
「基本クラスのインターフェイスに対応する実装をしとけ。」
みたいな話。
-
「汎用的な目的のインターフェイスが1つだけあるよりも、
特定のクライアント向けのインターフェイスが多数あった方がよりよい。」 -
オプショナルな機能を基本クラスのインターフェイスに実装するとアレ。
従って、- インターフェースをグループ毎に分け
- 必要に応じてインターフェースを継承する。
「具体ではなく、抽象に依存しなければならない」
-
SOLID - Wikipedia
https://ja.wikipedia.org/wiki/SOLID -
開発者が知っておくべきSOLIDの原則 | POSTD
https://postd.cc/solid-principles-every-developer-should-know/
https://note.com/erukiti/n/n67b323d1f7c5
https://note.com/erukiti/n/n959277a74dd0
https://note.com/erukiti/n/n88b8ed99f1e1
https://note.com/erukiti/n/n3daa55541bc8
https://note.com/erukiti/n/n913e571e8207
https://qiita.com/kahirokunn/items/84b70631507928786bbb
https://qiita.com/yui_mop/items/93fef037a787318e7067
正誤
- 見出し「開放閉鎖の原則(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
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。