Open-Closed Principle (Uncle Bob と Bertrand Meyers が概説したように) は、クラスを決して変更しないということではないと思います (ソフトウェアが決して変更されないのであれば、それはハードウェアである可能性もあります)。
LabTest
&あなた自身の場合、クラスのすべての使用はの実装ではなくの抽象化に依存していると述べたので、OCPに違反しているとは思いませんRadiologyTest
。
Uncle Bob の入門論文から、OCP 用に設計されている場合、新しいサブクラスがシステムに追加されるDrawAllShapes
たびに変更する必要がないクラスの例があります。Shape
適用するレベルについて、ボブおじさんは次のように述べています —</p>
重要なプログラムを 100% クローズすることはできないことは明らかです。例えば、 allを any の前に描画する必要があると
DrawAllShapes
判断した場合、リスト 2 の関数がどうなるかを考えてみてください。このような変更に対して関数はクローズされません。一般に、モジュールがどれほど「閉じられている」かに関係なく、閉じられていない何らかの変更が常に存在します。Circles
Squares
DrawAllShapes
閉鎖は完全ではないため、戦略的でなければなりません。つまり、設計者は、設計を終了する変更の種類を選択する必要があります。
「変更のためにクローズ」を「リファクタリングしないでください」とは読みません。それ以上に、他のクラスがあなたに影響を与える変更を加えられないようにクラスを設計する必要があります。たとえば、基本的な OO のものを適用します — カプセル化ゲッター/セッターとプライベートメンバー変数を介して。