„Hallo Amigo! Ich möchte dir gerne von einem weiteren Vorteil der OOP erzählen. Weißt du, Programme sind eigentlich mehr wie Tiere als wie Gebäude. Sie werden nicht gebaut, sie werden gezüchtet. Entwicklung bedeutet ständige Veränderungen. Beim Gebäudebau kann man einen guten Plan erstellen und ihn genauestens befolgen. Doch in der Softwareentwicklung ist das nicht der Fall.“

Oftmals kann man etwas nicht so machen, wie man es sich vorgestellt hat, und man muss sein Programm stark überarbeiten. Und noch öfter ändern sich die Anforderungen des Kunden.

„Und was ist, wenn der Kunde eine wirklich detaillierte Spezifikation vorlegt?“

„Sehen wir uns an, was mit der Zeit passiert. Wenn ein Produkt erfolgreich ist, wird der Kunde eine neue Version veröffentlichen wollen, und dann noch eine und noch eine. Und natürlich musst du ein paar „kleine Änderungen“ am bestehenden Produkt vornehmen. Die Softwareentwicklung ist also eine lange Reihe von Änderungen, die sich nur in ihrer Häufigkeit unterscheiden. Eine neue Version könnte jede Woche, einmal im Monat oder alle sechs Monate veröffentlicht werden.“

„Und was schließen wir aus all dem?“

„Die interne Struktur des Produkts muss so beschaffen sein, dass größere (und kleinere) Änderungen mit einem Minimum an Arbeit durchgeführt werden können.“

„Wie macht man das?“

„Wir haben bereits darüber gesprochen, inwiefern ein Programm aus Objekten besteht, die miteinander interagieren. Ich werde alle Objekte unseres Programms auf der Tafel durch dicke Punkte darstellen. Dann zeichnen wir Pfeile von jedem Objekt (Punkt) zu allen anderen Objekten (Punkten), mit denen es interagiert.“

Nun wollen wir die Objekte (Punkte) in Gruppen zusammenfassen. Punkte gehören zur gleichen Gruppe, wenn sie viel mehr miteinander verbunden sind als die anderen Punkte. Wenn die meisten der Pfeile eines Punktes auf Punkte in seiner Gruppe zeigen, dann haben wir die Objekte richtig gruppiert. Punkte innerhalb derselben Gruppe sind fest gekoppelt, während Punkte in verschiedenen Gruppen lose gekoppelt sind.

Das nennt man das „Prinzip der losen Kopplung“. Ein Programm wird in mehrere Teile, oft Schichten, aufgeteilt, deren Logik stark an ihre interne Struktur und schwach an andere Schichten/Teile gebunden ist. Die Interaktion zwischen den Schichten ist in der Regel stark untergliedert. Eine Schicht kann eine andere Schicht mit nur einer kleinen Untermenge ihrer Klassen aufrufen.

„Dasselbe Prinzip der ‚Arbeitsteilung‘, aber in größerem Maßstab?“

„Genau. Dies erlaubt es uns, eine Abteilung neu zu organisieren, sie effizienter zu machen und noch mehr Leute einzustellen. Und wenn wir die abteilungsübergreifenden Protokolle nicht ändern, dann werden alle unsere Änderungen lokal sein. Niemand muss umgeschult werden. Wir müssen nicht das gesamte System überarbeiten. Jede Abteilung kann auf diese Weise ihre internen Angelegenheiten optimieren, wenn die Mechanismen für die Interaktion der Abteilungen gut gewählt sind.“

„Wenn sie gut gewählt sind. Und was, wenn sie nicht gut gewählt sind?“

Dann geht dir schnell der „Spielraum“ für Änderungen aus und du musst das gesamte System überarbeiten. Das kommt hin und wieder vor. Wir können die Zukunft nicht vorhersagen, aber wir können dafür sorgen, dass wir das Programm nicht ständig umschreiben müssen.“

„Okay. Ich verstehe, warum es sinnvoll ist, das Programm so aufzuteilen, aber inwiefern spielt die OOP hier eine Rolle?“

„Wenn wir uns dafür entscheiden, wie wir die Abteilungen strukturieren wollen und wie sie interagieren sollen, wenden wir das ‚Prinzip der Abstraktion‘ an. In der Programmierung wird die Abstraktion verwendet, um die beste Art und Weise zu bestimmen, wie das Programm aufgeteilt wird und wie die Teile interagieren sollen. Dieses Prinzip kann auch wiederholt auf die Bestandteile angewendet werden, bis wir das Programm in einzelne Klassen zerlegt haben.“

„Und die innere Struktur dieser Teile zu verbergen sowie die Interaktion mit anderen Teilen strikt zu begrenzen – das ist Kapselung, richtig?“

„Exakt. Kapselung und Abstraktion sind Eckpfeiler der OOP. Ein gutes Programm muss diese beiden Prinzipien beachten. Später schauen wir uns andere Prinzipien an und lernen ihre Vorteile kennen.“

„Hört sich gut an. Ich kann es kaum erwarten!“