開放/閉鎖原則
元々の開放/閉鎖原則は、1988年のバートランド・メイヤー著書『Object Oriented Software Construction』で提唱されている。
拡張できるならば、そのモジュールは開放されていると言える。そのモジュールはデータ構造にフィールドを追加できて、関数の集合に新しいものを追加できるはずである。
外部から使用できるならば、そのモジュールは閉鎖されていると言える。そのモジュールはよく仕様定義されていて安定しており、実装は情報隠蔽(英語版)されている。
メイヤーは、親クラスで不変の仕様を定義をして、それを継承する各子孫クラスで実装の修正または拡張を行なっていくべきとした。親クラスの変数には、親クラスまたは各子孫クラスのインスタンスが代入される。クライアントはその親クラス変数を恒久的に使えて、その変数に子孫インスタンスが代入されていても支障をきたさない。
メイヤーの原則では、具象メソッド(シグネチャ+コード)の実装継承(implementation inheritance)と、子クラスを追加定義していく深い継承が基本になる。