Facebook
Twitter
Google+
Kommentare
9

Open-Closed-Prinzip

Wieder zurück in der Hansestadt nach einer Woche Urlaub im Schnee. Als erstes möchte ich mich natürlich bei meinen Co-Autoren bedanken, für fünf wirklich gute Artikel. Die Statistiken munkeln sogar so was wie „die beste Woche“ bisher. Also nochmal vielen Dank dafür. Jetzt aber wieder zum Ernst des Lebens … der Softwaretechnik. Leider kann ich bei diesem Artikel nicht aus anderen Quellen zitieren, da ich gerade kein Internet habe, aber ich versuche das mal auf eigene Faust und schreibe wild drauf los.

Im Open-Closed-Prinzip geht es darum, dass man seinen Code immer so schreibt, dass er offen für Erweiterungen (open) ist und geschlossen für Änderungen (closed). Das klingt jetzt vielleicht erstmal paradox. Erweiterungen und Änderungen sind doch eigentlich fast das gleiche oder gehen zumindest Hand in Hand. Deswegen erläutern wir das am besten mal ein wenig genauer. Falls etwas offen für Erweiterungen ist, so kann ich jederzeit neue Funktionalitäten hinzufügen ohne Probleme zu bekommen. Wenn ich diese Funktionalität einsetze, so ist es wichtig, dass ich bestehende Schnittstellen damit nicht beeinträchtige. Es darf sich also nach außen nichts verändern. Ich bin also geschlossen für Änderungen.

Eine Klasse, ein Modul oder ein Service ist also besonders gelungen, falls ich ihn erweitern kann, ohne das Konsumenten diese Erweiterung mitbekommen, sie aber trotzdem bei Bedarf nutzen können. Besonders wichtig ist dieses Prinzip falls man öffentliche Bibliotheken bereitstellt. Stellt euch mal vor, dass das Zend Framework bei jeder Erweiterung Schnittstellen anpassen würde und ihr euren kompletten Code umbauen müsstet, damit er weiterhin funktioniert. Wäre doch echt kacke!

Ich würde mal sagen, dass ich in der nächsten Zeit ein paar Beispiele mitbringen werde, damit wir darüber diskutieren können, wie man dieses Paradigma am effizientesten umsetzt. Bis dahin hoffe ich dem ein oder anderen ein neues Buzzword beigebracht zu haben.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

9 Comments

  1. Hmm… solange ich eine Schnittstelle erweitere, sagen wir mal, ich brauche einen weiteren Parameter, kann ich den ja so einbinden, dass bestehender Code nicht angepasst werden muss. Würde man das auch unter Erweiterung einordnen?

    Reply
  2. Okay – also es geht um das Erweitern einer Klasse ohne gezwungen zu sein deren Quelltext zu ändern. Also wohl zurück zu den Basics?

    Where is the bacon?

    Reply
  3. Das ganze geht auch in Richtung Interfaces. Wenn ich meinen Code immer gegen stabile Interfaces programmiere, werde ich auch dazu erzogen, mir vorher tiefgründige Gedanken über die Funktionen und Parameter zu machen, und diese im späteren Code-Leben nicht verändern zu müssen.
    Sollte ich eine Klasse erweitern müssen, kann ich mir überlegen sie entweder gegen ein zweites Interface zu programmieren oder das ursprüngliche Interface zu erweitern.

    Reply
  4. Das Stichwort „Modularisierung“, auch innerhalb von Klassen im Bereich der Objektorientierung spielt für mich hier auch eine wichtige Rolle, um einfacher in Abläufe eingreifen zu können.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen