Inhaltsverzeichnis
24. Open-Closed-Prinzip
- Themen
- Das Open-Closed-Prinzip
- Beispiele für seinen Einsatz
- Bedeutung im Gesamtkontext der Software-Architektur
- Glossar
- Kapitel bei Springer
- https://link.springer.com/chapter/10.1007/978-3-662-71607-6_24
Zentrale Aspekte
- Softwareeinheiten sollten offen für Erweiterungen,
aber verschlossen gegenüber Veränderungen sein. - Schlüssel des Prinzips sind zwei Kernaspekte der OOP:
Vererbung und Polymorphie (zusammen mit Abstraktion). - Implementiert werden sollte immer nur
gegen (abstrakte) Schnittstellen. - Verschlossenheit gegenüber Veränderung ist nie vollständig.
- Kern objektorientierten Entwurfs:
Führt zu Flexibilität, Wiederverwendbarkeit, Wartbarkeit.
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.
- Welche konstituierenden Prinzipien des Paradigmas der objektorientierten Programmierung stellen die Grundlage des OCP dar? Welches daraus abgeleitete Konzept ist essentiell für das OCP?
- Bei welchem anderen der SOLID-Prinzipien wird das verbleibende dritte konstituierende Prinzip der OOP noch wichtig?
- Warum ist das OCP essentiell für eine gute Architektur objektorientierter Software? Welche Versprechen der OOP löst das OCP ein?
- Diskutieren Sie die wechselseitigen Beziehungen zwischen dem OCP und den anderen vier SOLID-Prinzipien.
- Wie lautet die Verallgemeinerung des Open-Closed-Prinzips auf der Ebene der Komponenten bzw. darüber hinaus?
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.
- Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995): Design Patterns. Elements of Reusable Object-Oriented Software, Addison-Wesley, Boston
- Martin, Robert C. (2003): Agile Software Development. Principles, Patterns, and Practices, Prentice Hall, Upper Saddle River, New Jersey
- Martin, Robert C. (2018): Clean Architecture. A Craftman's Guide to Software Structure and Design, Prentice Hall, Boston
- Meyer, Bertrand (1997): Object-Oriented Software Construction, Prentice Hall PTR, Upper Saddle River, New Jersey
