Das OCP kann besser verstanden werden, wenn man an Klassen oder Komponenten denkt, die von einem Anbieter A in einer Art Black-Box-Bibliothek zur Verwendung durch die Benutzer B, C und D bereitgestellt werden (beachten Sie, dass dies nur ein mentales Modell ist, das ich aus Gründen der Klarheit verwende). Es spielt keine Rolle, ob in Wirklichkeit der einzige Benutzer der Klasse A selbst ist.
Wenn B, C und D die bereitgestellten Klassen für verschiedene Anwendungsfälle verwenden oder wiederverwenden können, ohne dass der Quellcode der Bibliothek geändert werden muss, erfüllt die Komponente die OCP ( in Bezug auf eine Kategorie von Anwendungsfällen ). Es gibt verschiedene Mittel, um dies zu erreichen, wie z
Vererbbarkeit der Klasse (normalerweise in Verbindung mit dem Muster der Vorlagenmethode oder dem Strategiemuster)
durch Bereitstellen von "Injektionspunkten" für die Abhängigkeitsinjektion
durch Bereitstellen von Konfigurationsparametern für die Klasse oder Komponente (z. B. durch einen Konstruktorparameter "Steuerprozentsatz" wie in Ihrem Fall oder durch Verwendung eines anderen Konfigurationsmechanismus)
möglicherweise andere Mittel, abhängig von der Programmiersprache oder dem Ökosystem
Die typischen Beispiele, die Sie in Lehrbüchern finden, sind oft vom ersten oder zweiten Typ (ich denke, weil der dritte Typ in den Augen der Autoren dieses Buches zu trivial ist, um erwähnt zu werden).
Wie Sie sehen, hat dies nichts damit zu tun, eine Änderung des Quellcodes durch Anbieter A zu verbieten (z. B. zur Fehlerbehebung, Optimierung oder zum Hinzufügen abwärtskompatibler neuer Funktionen), die in keiner Beziehung zum OCP steht. In der OCP geht es darum, wie A die Schnittstelle und die Granularität der Komponenten in der Bibliothek gestaltet, sodass unterschiedliche Wiederverwendungsszenarien (wie die Wiederverwendung mit unterschiedlichen Steuersätzen) nicht automatisch Änderungsanforderungen hervorrufen.
Trotz allem, was Ihnen hier gesagt wird, lautet die Antwort eindeutig "Ja" . Dies wäre eine Verletzung der OCP.
BEARBEITEN: Zwischendurch hat jemand einen detaillierten Blog-Beitrag zu genau diesem Thema geschrieben. Obwohl Teile davon besser formuliert sein könnten (wie Derek Elkins betonte), scheint der Autor im Allgemeinen meinen Standpunkt zu teilen, dass "Erfüllung der OCP" keine absolute Eigenschaft ist, sondern etwas, das nur im Zusammenhang mit bestimmten bewertet werden kann Kategorien von Anforderungsänderungen.