「SOLID」の版間の差分
表示
削除された内容 追加された内容
TAKAHASHI Shuuji (会話 | 投稿記録) ページ「SOLID」の翻訳により作成 |
(相違点なし)
|
2019年9月17日 (火) 08:36時点における版
オブジェクト指向プログラミングの分野において、SOLID(ソリッド)とは、ソフトウェア設計の5つの原則を記憶するための頭字語である。これらの原則は、ソフトウェアをより理解しやすく、より柔軟に、よりメンテナナンス性の高いものにするために考案されたものである。ソフトウェア設計の原則であるGRASPとは無関係である。これらの原則は、アメリカのソフトウェアエンジニアでインストラクタでもあるRobert C. Martinにより提唱された多数のソフトウェア設計の原則の一部を集めたものとなっている[1][2][3]。SOLIDはどんなオブジェクト指向の設計にも適用できるが、アジャイル開発や適応的ソフトウェア開発などの方法論の中心的な考えにもなっている。SOLIDの原則の理論は2000年に公開されたMartinの論文Design Principles and Design Patternsで発表された[4]ものであるが、SOLIDという頭字語自体は後にMichael Feathersによって導入されたものである[5]。
概念
- 単一責任の原則(Single responsibility principle)[6]
- 1つのクラスは1つだけの責任を持たなければならない。すなわち、ソフトウェアの仕様の一部分を変更したときには、それにより影響を受ける仕様は、そのクラスの仕様でなければならない。
- 開放閉鎖の原則(Open–closed principle)[7]
- 「ソフトウェアのエンティティは(中略)拡張に対して開かれていなければならないが、変更に対しては閉じていなければならない。」
- リスコフの置換原則(Liskov substitution principle)[8]
- 「プログラムの中にある任意のオブジェクトは、プログラムの正しさを変化させることなく、そのサブクラスのオブジェクトと置換できなければならない。」詳しくは契約プログラミングも参照。
- インターフェイス分離の原則(Interface segregation principle)[9]
- 「汎用的な目的のインターフェイスが1つだけあるよりも、特定のクライアント向けのインターフェイスが多数あった方がよりよい。」[4]
- 依存性逆転の原則(Dependency inversion principle)[10]
- 「具体ではなく、抽象に依存しなければならない」
関連項目
- コードの再利用
- 継承(オブジェクト指向プログラミング)
- パッケージの原則
- DRY(Don't repeat yourself)
- GRASP
- KISSの原則
- TAGNI(You aren't gonna need it)
参考文献
- ^ Robert C. Martin. “Principles Of OOD”. butunclebob.com. 2014年7月17日閲覧。
- ^ Robert C. Martin. “Getting a SOLID start”. objectmentor.com. 2013年8月19日閲覧。
- ^ Sandi Metz (2009年5月). “SOLID Object-Oriented Design”. 2019年8月13日閲覧。 Talk given at the 2009 Gotham Ruby Conference.
- ^ a b Robert C. Martin (2000年). “Design Principles and Design Patterns”. objectmentor.com. 2015年9月6日時点のオリジナルよりアーカイブ。2009年1月14日閲覧。
- ^ Fenton, Steve (2017). Pro TypeScript: Application-Scale JavaScript Development. p. 108. ISBN 9781484232491
- ^ “Single Responsibility Principle”. objectmentor.com. 2015年6月1日時点のオリジナルよりアーカイブ。 Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “Open/Closed Principle”. objectmentor.com. 2015年9月5日時点のオリジナルよりアーカイブ。 Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “Liskov Substitution Principle”. objectmentor.com. 2015年9月5日時点のオリジナルよりアーカイブ。 Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “Interface Segregation Principle”. objectmentor.com (1996年). 2015年9月5日時点のオリジナルよりアーカイブ。 Template:Cite webの呼び出しエラー:引数 accessdate は必須です。
- ^ “Dependency Inversion Principle”. objectmentor.com. 2015年9月5日時点のオリジナルよりアーカイブ。 Template:Cite webの呼び出しエラー:引数 accessdate は必須です。