SOLID

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動

オブジェクト指向プログラミングの分野において、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]
「具体ではなく、抽象に依存しなければならない」

関連項目[編集]

参考文献[編集]

  1. ^ Robert C. Martin. “Principles Of OOD”. butunclebob.com. 2014年7月17日閲覧。
  2. ^ Robert C. Martin. “Getting a SOLID start”. objectmentor.com. 2013年8月19日閲覧。
  3. ^ Sandi Metz (2009年5月). “SOLID Object-Oriented Design”. 2019年8月13日閲覧。 Talk given at the 2009 Gotham Ruby Conference.
  4. ^ a b Robert C. Martin (2000年). “Design Principles and Design Patterns”. objectmentor.com. 2015年9月6日時点のオリジナルよりアーカイブ。2009年1月14日閲覧。
  5. ^ Fenton, Steve (2017). Pro TypeScript: Application-Scale JavaScript Development. p. 108. ISBN 9781484232491. https://books.google.co.uk/books?id=ZEtADwAAQBAJ&pg=PA108. 
  6. ^ Single Responsibility Principle”. objectmentor.com. 2015年6月1日時点のオリジナルよりアーカイブ。2015年9月5日閲覧。
  7. ^ Open/Closed Principle”. objectmentor.com. 2015年9月5日時点のオリジナルよりアーカイブ。2015年9月5日閲覧。
  8. ^ Liskov Substitution Principle”. objectmentor.com. 2015年9月5日時点のオリジナルよりアーカイブ。2015年9月5日閲覧。
  9. ^ Interface Segregation Principle”. objectmentor.com (1996年). 2015年9月5日時点のオリジナルよりアーカイブ。2015年9月5日閲覧。
  10. ^ Dependency Inversion Principle”. objectmentor.com. 2015年9月5日時点のオリジナルよりアーカイブ。2015年9月5日閲覧。