Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Grundlagen der Programmierung: Entwurfsmuster

Prinzip 5: Offen und geschlossen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Klassen sollten gleichzeitig offen und geschlossen sein. Warum das kein Widerspruch ist, wie das geht und was es bringt, erfahren Sie in diesem Video.
04:10

Transkript

Das objektorientierte Entwurfsprinzip Nummer 5 behauptet, Klassen sollen für Erweiterungen offen, aber für Veränderungen geschlossen sein. Das ist das sogenannte Open-Closed-Principle. Im ersten Moment mag das vielleicht wie ein Wiederspruch klingen. Ich soll Klassen verändern dürfen aber gleichzeitig auch nicht. Etwas klarer wird das Ganze, wenn man sich deutlich macht, dass sich die beiden Formulierungen auf leicht unterschiedliche Aspekte beziehen. Für Erweiterungen offen heißt, dass ich meine Klassen um zusätzliche Funktionalitäten erweitern können soll und für Veränderungen geschlossen bedeutet, dass ich dafür den Quelltext nicht anfassen sollte. Das heißt, wenn eine Klasse fertig ist und funktioniert und eingesetzt werden kann, dann sollte an dieser Klasse, an diesem Quelltext keine Änderung mehr vorgenommen werden müssen. Wird nun aber weitere Funktionalität benötigt, dann sollte mir die Klasse aber Möglichkeiten für die Erweiterung bieten. Eine Möglichkeit die Funktionalität einer Klasse zu erweitern, besteht zum Beispiel darin, eine Unterklasse zu erstellen. Die Unterklasse erbt alles von meiner Klasse. Ich muss es also nicht alles nochmal schreiben und ich kann in der Unterklasse meine gewünschten zusätzlichen Funktionalitäten hinzufügen. Auf diese Weise habe ich meine ursprüngliche Klasse nicht verändern müssen, konnte sie aber trotzdem erweitern. Auch einige Entwurfsmuster zeigen Möglichkeiten, mit denen ich dieses Prinzip umsetzen kann. Ein Beispiel dafür ist das Entwurfsmuster Strategie. Die Ausgangssituation sieht so aus, dass ich eine Klasse habe, die ein oder mehrere Methoden anbietet. Nun soll der Client aber die Möglichkeit haben, bei der Implementierung der Methoden zwischen verschiedenen Varianten zu wählen. Ich habe in diesem Beispiel drei Methoden, also Dreieck, Quadrat und Kreis. Für die erste Methode soll es zum Beispiel drei verschiedene Möglichkeiten geben, für die zweite vier verschiedene und für die dritte drei verschiedene. Je nachdem welche Kombination der Client benötigt, also anfordert, muss sich unser Objekt entsprechend unterschiedlich verhalten. Eine mögliche Umsetzung bestünde in der Erzeugung unglaublich vieler Unterklasse. Eine andere in sehr vielen Verzweigungen innerhalb der Methoden. Wenn ich in der Kreismethode beispielsweise drei verschiedene Verhalten anbieten will, dann könnte ich testen. Will der Client Variante 1, mache ich Variante 1. Ansonsten will er Variante 2, mache ich Variante 2 usw. Das kann recht schnell zu recht komplexen Code führen und natürlich wird hier das gerade genannte Prinzip verletzt. Egal, was ich ändern möchte oder erweitern möchte, ich muss immer diese Klasse anfassen und den Quelltext der Klasse ändern. Ich möchte zum Beispiel die Anzahl der Varianten bei der Methode Kreis von 3 auf 4 erhöhen, dann muss ich diese Methode entsprechend anpassen und um einen weiteren if-Zweig ergänzen. Möchte ich ein vorhandenes Verhalten verändern, dann muss ich mich durch den Quelltext durcharbeiten, bis ich die richtige Stelle gefunden habe und diese Stelle entsprechend anpassen. Mit jeder Änderung am vorhandenen Code laufe ich natürlich Gefahr, dass ich irgendwelche Fehler einbaue oder auch, dass es Seiteneffekte gibt auf andere Teile in dieser Klasse. Mit jeder weiteren Änderung wird das System immer fragiler und auch schwerfälliger. Nun Anwendung unseres Open-Closed-Pinciple und Auftritt Strategiemuster. Um die Klasse für Veränderungen zu schließen, nehmen wir das, was ich verändern könnte aus der Klasse raus und bieten eine Schnittstelle an, über die die Klasse darauf zugreifen kann. Die verschiedenen Varianten des Verhaltens werden nun in separate Klassen ausgelagert und können nach Bedarf an der passenden Stelle in unsere Klasse eingestöpselt werden. Möchte ich weitere Varianten hinzufügen, dann füge ich einfach entsprechende Klassen hinzu. Möchte ich eine vorhandene Variante anpassen, dann gehe ich einfach in die entsprechende Klasse rein und ändere die. Das heißt, meine Klasse kann jetzt erweitert werden, ist also für Erweiterungsmöglichkeiten offen, ist aber für Veränderungen geschlossen. Das heißt, es besteht keine Notwendigkeit mehr, in die Klasse selbst hineinzugehen, den Quelltext zu ändern, um irgendwas erweitern zu können. Natürlich sollten Sie sich schon überlegen, wie weit Sie das Ganze treiben wollen. Um zum Beispiel das Verhalten Dreieck3 zu ändern, muss ich zwar nichts mehr in dieser Klasse anpassen, aber ich muss natürlich in diese Klasse hinein und dort die Änderung vornehmen. Diese Klasse ist also offensichtlich nicht für Veränderungen geschlossen. Hier nun aber eine weitere Indirektion hinzuzufügen, brächte uns eigentlich nicht mehr Flexibilität sondern nur mehr Komplexität. Sie sollten also auf jeden Fall vermeiden, dieses Prinzip immer und überall konsequent anwenden zu wollen. Konzentrieren Sie sich stattdessen auf die Bereich, in denen Erweiterungen und Veränderungen benötigt werden oder in naher Zukunft zu erwarten sind.

Grundlagen der Programmierung: Entwurfsmuster

Erhalten Sie einen fundierten Einstieg in das Thema Entwurfsmuster (Design Patterns) und erfahren Sie, wie Sie Entwurfsmuster in objektorientierten Programmiersprechen umsetzen.

2 Std. 49 min (33 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!