開放/閉鎖原則
開放/閉鎖原則(かいほうへいさげんそく、open/closed principle、OCP)とは、オブジェクト指向プログラミングの設計への提言である。
ソフトウェア要素(クラス、モジュール、関数など)は、拡張に対しては開いており、修正に対しては閉じているべきである。 software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.
この原則に従っていれば、ソースコードの修正をせずとも、各要素の振る舞いを拡張することが可能になるとしている。
この開放/閉鎖の原則は、1988年にバートランド・メイヤーが提唱したものと、1996年頃にロバート・C・マーチン(英語版)らが提唱したものの二通りがある。どちらも継承やポリモーフィズムによる汎用化を用いて、開放/閉鎖のジレンマ解決を図っているが、その目標と技術と結果は異なっている。
この原則は、本番環境で稼働中のソフトウェアにとって特に重要である。稼働中のソフトウェアでは、ソースコードを変更した場合、コードレビューやユニットテストなどの品質検査が必要となる。しかし、開放/閉鎖原則に沿ったソフトウェアは、既存のソースコードを変更せずに機能修正や機能追加を行うことができる。そのため、品質検査を再実行する必要がない。