この原則は、ソフトウェアのクラスやモジュールは拡張には開かれて(Open)、修正には閉じて(Closed)いるべきだと述べています。既存のクラスやモジュールを修正することなく、拡張が可能な設計にすべきということです。
オープン・クローズドの原則を守ることで、既存のコードへの変更が最小限に抑えられ、新しい機能の追加が容易になります。これは、ソフトウェアの保守性や拡張性を向上させる助けとなります。
例として、異なる種類の報酬を計算するクラスを考えてみましょう。
オープン・クローズドの原則に従っていない例
報酬の種類を追加する場合、RewardCalculatorクラスを修正する必要があり、オープン・クローズドの原則に反していると言えます。
オープン・クローズドの原則に従っている例
新しい報酬の種類を追加する場合、既存のコードを修正することなく、新しいサブクラスをRewardCalculatorに追加することが出来ます。これにより、既存のクラスは修正に閉じられ、拡張には開かれていると言えます。