Wie funktioniert eigentlich das Open Closed Principle

Das Open Closed Principle, oder kurz OCP, ist eines der fünf Prinzipien aus SOLID, das dabei helfen kann, wartbaren und evolvierbaren Code zu schreiben. Vereinfacht fordert es eine Struktur, die es erlaubt, Neues zu ergänzen (Open), ohne dabei Altes verändern zu müssen (Close). Im Original heißt es entsprechend:

Open for extension, but closed for modification

Das klingt oberflächlich betrachtet sinnvoll, denn so bleibt das Vertrauen in einmal geschriebenen (und erfolgreich getesteten) Code bestehen – er muss ja nicht mehr angefasst werden.

Klassisch finden sich hierzu Beispiele, die sich mit Switch/Case Statements auseinandersetzen und aufzeigen, wie sich diese in Schnittstellen und Klassen zerlegen lassen. Ich habe vor einigen Jahren auf CodePlex eine Solution hochgeladen, die hingegen mehrfach verschachtelte If/Then/Else-Zweige aufbricht und Schritt für Schritt mit Hilfe des sog. Strategy Patterns aufzeigt, wie das OCP eingehalten werden kann.

Tipp: Wo Du u.a. ein nicht öffentlich gelistetes Video zu dem Thema von mir sehen kannst, findest Du am Ende dieses Artikels heraus.

 

Um aufzuzeigen, was für einen messbaren Effekt das Vorgehen hat, hier einige Metriken zu einer der in dem Beispiel verwendeten Klassen:

image

Was aber bedeuten diese Metriken?

Hier eine kurze Einführung:

  • Der “Maintainability Index” misst, wie einfach Code gewartet werden kann. Je höher der Index, desto besser.
  • Die “Cyclomatic Complexity” zählt die Anzahl an Verzweigungen. Je weniger, desto besser.
  • Die “Depth of Inheritance” bringt die Tiefe der Vererbungshierarchie zum Ausdruck. Je geringer der Wert, desto besser.
  • Das “Class Coupling” misst, die Anzahl an Klassenreferenzen. Je weniger, desto besser.
  • Die “Lines of Code” zählt die Anzahl ausführbaren Codes. Je weniger, desto besser.

In meinem Beispiel zeigt sich also nach dem Refactoring, dass der Wartungsindex von 74 auf 90 gesteigert werden konnte und der Code damit um ca. 22% wartbarer ist als zuvor.

Die Zyklomatische Komplexität wurde mehr als halbiert. Es wurden während der Entwicklung 15 Verzweigungen entfernt.

Darüber hinaus wurden die ausführbaren Codezeilen massiv reduziert, was letztlich in deutlich lesbarerem Code resultiert und dadurch dazu beiträgt, potentiellen Bugs weniger Angriffsfläche zu bieten.

Was in diesem kurzen Artikel nicht gezeigt wird – dafür ist das Thema einfach zu umfangreich: Um diese Ziele zu erreichen, wurden auf der anderen Seite wiederum viele Schnittstellen und Klassen eingeführt. Auch bewegt sich die Struktur des Codes auf einem höheren Niveau und wird von Juniorentwicklern bspw. unter Umständen nicht auf Anhieb verstanden.

Gerade deshalb ist es wichtig, dass sich Entwickler mit Prinzipien, Mustern und auch High-Level Architekturen auseinandersetzen und diese zu erkennen lernen.

Falls Du Dich nun angesprochen fühlst, hast Du mindestens drei Möglichkeiten, von mir zu lernen, wie das Open Closed Principle funktioniert und Du es am Beispiel des Strategy Patterns umsetzen kannst:

  1. Du liest den Artikel, den ich hierzu bereits 2012 auf unserem Blog veröffentlicht habe.
  2. Du lädst meinen Beispielcode inkl. Lab-Beschreibung von codeplex herunter
    ACHTUNG: Codeplex schließt seine Pforten. Ich weiß nicht, wie lange Du das Learn & Research Lab dort noch bekommst!
  3. Du schaust Dir die Aufzeichnung meiner Session zu dem Thema von der Developer Week bei YouTube an (das Video ist nicht öffentlich gelistet).

Falls Du Fragen dazu hast, freue ich mich über Kommentare oder gerne auch Emails. Wenn Du diesen  Artikel bei CodeKicker liest: Vote ihn hoch, wenn er Dir geholfen hat.

Und nun: Viel Spaß beim Refaktorisieren!

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

Über die Autoren

Christian Jacob ist Leiter des Geschäftsbereiches Softwarearchitektur und -entwicklung und zieht als Trainer im Kontext der .NET Entwicklung sowie ALM-Themen Projekte auf links.

Marcus Jacob fokussiert sich auf die Entwicklung von Office-Addins sowie Windows Phone Apps und gilt bei uns als der Bezwinger von Windows Installer Xml.

Martin Kratsch engagiert sich für das Thema Projektmanagement mit dem Team Foundation Server und bringt mit seinen Java- und iOS-Kenntnissen Farbe in unser ansonsten von .NET geprägtes Team.

Aktuelle Kommentare

Comment RSS