Inhaltsverzeichnis

24. Open-Closed-Prinzip

Themen
Das Open-Closed-Prinzip
Beispiele für seinen Einsatz
Bedeutung im Gesamtkontext der Software-Architektur
Glossar
PDF
Kapitel bei Springer
https://link.springer.com/chapter/10.1007/978-3-662-71607-6_24


Zentrale Aspekte

Zusammenfassung

Softwareeinheiten sollten offen für Erweiterungen, aber verschlossen gegenüber Veränderungen sein. Was zunächst wie ein Widerspruch klingt, ist eine wesentlicher, wenn nicht gar *der* zentrale Aspekt des Entwurfs objektorientierter Systeme. Gleichzeitig verbirgt sich dahinter eines der wesentlichen Versprechen der objektorientierten Programmierung: Modularität und damit Flexbilität, Wiederverwendbarkeit und Wartbarkeit der darauf aufbauenden Systeme. Entsprechend beruht das Open-Closed-Prinzip auf zwei grundlegenden Aspekten der objektorientierten Programmierung: Vererbung und Polymorphie in Verbindung mit Abstraktion: Eine konkrete Klasse hängt nur von abstrakten Klassen ab. Objekte dieser Klasse nutzen Objekte konkreter Klassen, die von der abstrakten Klasse erben.

Drei Symptome sind klare Hinweise auf eine Verletzung des Open-Closed-Prinzips: Starrheit, Zerbrechlichkeit und Unbeweglichkeit. Im ersten Fall zieht jede Änderung an einer Stelle viele Änderungen an anderen Stellen nach sich, im zweiten Fall führen Änderungen zu Fehlern in konzeptionell getrennten Bereichen des Systems, während sich im dritten Fall ein System schwer in wiederverwendbare Komponenten aufteilen lässt.

Fragen zur Vertiefung und Wiederholung

Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, es werden aber keine Antworten zur Verfügung gestellt.

Weiterführende Literatur

Eine kommentierte und handverlesene Liste mit weiterführender Literatur zum Thema. Die Auswahl ist zwangsläufig subjektiv.

Die Formulierung und Namensnennung geht auf Bertrand Meyer zurück: [Meyer, 1997Meyer, Bertrand (1997): Object-Oriented Software Construction, Prentice Hall PTR, Upper Saddle River, New Jersey], Kapitel 3.3, S. 57ff. In den Reigen der SOLID-Prinzipien aufgenommen wurde es von Robert C. Martin, der es in seinen Büchern diskutiert, z.B. in Kapitel 9 in [Martin, 2003Martin, Robert C. (2003): Agile Software Development. Principles, Patterns, and Practices, Prentice Hall, Upper Saddle River, New Jersey]. Die Erweiterung auf höhere Ebenen der Software-Architektur jenseits des Zusammenspiels von Klassen inklusive einer Diskussion des Zusammenhangs zwischen Abstraktion und Stabilität und Metriken für Abstraktion werden in [Martin, 2018Martin, Robert C. (2018): Clean Architecture. A Craftman's Guide to Software Structure and Design, Prentice Hall, Boston], S. 126ff., ausgeführt.

Viele der Muster, die in [Gamma, 1995Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995): Design Patterns. Elements of Reusable Object-Oriented Software, Addison-Wesley, Boston] vorgestellt werden, verwenden auf die eine oder andere Weise das OCP.