„Hallo Amigo! Heute werde ich dir eine neue und interessante Welt eröffnen. Ich spreche von der objektorientierten Programmierung (Object-Oriented Programming; OOP). Du hast bereits Klassen und Objekte kennengelernt. Heute wirst du mehr über sie erfahren, sehr viel mehr.“

Wir beginnen mit den vier Säulen der OOP. Das sind Abstraktion, Kapselung, Vererbung und Polymorphismus. (Früher gab es drei Säulen, die Abstraktion wurde später hinzugefügt)

1) Abstraktion.

Stellenbeschreibungen eines Unternehmens sind ein gutes Beispiel für Abstraktion im realen Leben. Eine Berufsbezeichnung ist eine Sache, aber die damit verbundenen Aufgaben sind eine ganz andere.

Stell dir vor, du erstellst das Organigramm für dein zukünftiges Unternehmen. Du könntest die Aufgaben einer Sekretärin auf mehrere andere Positionen verteilen. Du könntest die Aufgaben des CEO in mehrere separate Positionen aufteilen: Chief Financial Officer, Chief Technology Officer, Chief Marketing Officer, Chief Human Resources Officer. Oder du könntest die Positionen des Büroleiters und des Recruiters zu einer einzigen Stelle kombinieren.

Nehmen wir einmal an, du überlegst dir die Bezeichnungen für Positionen in deinem Unternehmen und verteilst dann die Aufgaben für diese Positionen. Das ist Abstraktion – etwas Großes und Monolithisches wird in mehrere kleine Teile aufgespalten.

OOP: Grundlagen - 1

Aus der Perspektive eines Programmierers ist Abstraktion die angemessene Aufteilung eines Programms in Objekte.

Ein großes Programm kann in der Regel als interagierende Objekte in einer von einem Dutzend verschiedenen Arten dargestellt werden. Mit der Abstraktion kannst du die Hauptmerkmale eines Objekts herausgreifen und alles weniger wichtige weglassen.

Abstraktion ist wie eine Militärstrategie. Wenn du die falsche Strategie wählst, wird keine geniale Taktik deinen Tag retten.

2) Kapselung.

Die Kapselung soll die Interaktion zwischen den Objekten durch ihre Vereinfachung verbessern.

OOP: Grundlagen - 2

Die sinnvollste Möglichkeit, etwas zu vereinfachen, besteht darin, etwas Kompliziertes vor denen zu verbergen, die nichts darüber wissen müssen. Wenn du dich zum Beispiel hinter das Steuer eines Boeing-Jets setzen würdest, würdest du sehr lange brauchen, bis du die Steuerung verstanden hast:

OOP: Grundlagen - 3

Auf der anderen Seite sieht für die Passagiere im Flugzeug alles viel einfacher aus: Sie kaufen ein Ticket und steigen in das Flugzeug ein, das dann startet und landet. Du kannst problemlos von Kontinent zu Kontinent fliegen, obwohl du gerade einmal weißt, wie du ein Ticket kaufst und in ein Flugzeug einsteigst. Wir erfahren nichts über die Komplexität, die mit der Vorbereitung des Flugzeugs für den Flug, den Start, die Landung und verschiedene mögliche Notfallsituationen verbunden ist. Und wir bekommen nicht von Satellitennavigation, Autopilot und Flugsicherungszentren mit. Das macht unser Leben einfacher.

In Bezug auf die Programmierung verstehen wir unter Kapselung das „Verstecken der Implementierung“. Mir gefällt diese Definition. Unsere Klasse kann hunderte von Methoden enthalten und hochkomplexes Verhalten in verschiedenen Situationen implementieren. Aber wir können alle ihre Methoden vor neugierigen Augen verbergen (indem wir sie als „private“ markieren) und nur zwei oder drei Methoden für die Interaktion mit anderen Klassen übrig lassen (indem wir sie als „public“ markieren). Dann werden alle anderen Klassen in unserem Programm nur diese wenigen Methoden dieser Klasse sehen – und aufrufen. Die ganze Komplexität der Klasse wird im Inneren verborgen, so wie das Cockpit vor den Augen der fröhlichen Passagiere verborgen bleibt.

3) Vererbung.

Vererbung ist ein Konzept in der Programmierung und im echten Leben. In der Programmierung ist die Vererbung eine besondere Beziehung zwischen zwei Klassen. Aber die Vererbung im echten Leben ist viel interessanter.

Wenn wir etwas im echten Leben erschaffen wollen, haben wir zwei Möglichkeiten:

1) Wir stellen das, was wir brauchen, von Grund auf neu her, was viel Zeit und Mühe braucht.

2) wir stellen das, was wir brauchen, her, indem wir Dinge verwenden, die bereits vorhanden sind.

Die beste Strategie ist diese: Wir nehmen eine vorhandene gute Lösung, überarbeiten sie, passen sie an unsere Bedürfnisse an und verwenden sie dann.

Betrachte nur die menschliche Evolution. Wenn wir ihren Anfang bis zum Beginn des Lebens auf dem Planeten zurückverfolgen, sehen wir, dass Milliarden von Jahren vergangen sind. Aber wenn wir uns den Menschen als vom Affen ausgehend vorstellen, dann sind gerade mal ein paar Millionen Jahre vergangen. Etwas von Grund auf neu zu schaffen, dauert länger. Viel länger.

Ganz ähnlich können wir in der Programmierung eine Klasse auf der Grundlage einer anderen erstellen. Die neue Klasse wird ein Abkömmling (Erbe) einer bestehenden Klasse. Dies ist äußerst hilfreich, wenn du bereits eine Klasse hast, die 80 bis 90 Prozent der benötigten Daten und Methoden enthält. Wir deklarieren einfach eine passende Klasse als Elternklasse unserer neuen Klasse. Alle Daten und Methoden der Elternklasse werden automatisch Teil der neuen Klasse. Praktisch, oder?

4) Polymorphismus.

Polymorphismus ist ein Programmierkonzept, das die Situation beschreibt, wenn sich verschiedene Implementierungen hinter der gleichen Schnittstelle (dem gleichen Interface) verbergen. Als Beispiel aus dem echten Leben können wir uns das Autofahren vorstellen.

Wenn eine Person einen Laster fahren kann, dann kann sie auch problemlos hinters Steuer eines Krankenwagens oder eines Sportwagens gesetzt werden. Eine Person kann ein Auto unabhängig von der Art des Autos fahren, denn alle Autos haben die gleiche Schnittstelle zum Bedienen: Lenkrad, Pedale und Schalthebel. Die Autos sind innen unterschiedlich aufgebaut, aber alle haben die gleiche Bedienschnittstelle.

Zurück zur Programmierung: Der Polymorphismus lässt uns auf die gleiche Weise mit Objekten verschiedener Klassen (normalerweise mit einem gemeinsamen Vorfahren) interagieren. Die Bedeutung dieser Tatsache kann nicht genug betont werden. Sie wird umso wichtiger, je größer ein Programm wird.

OOP bedeutet Prinzipien. Programmiergesetze. Jedes von ihnen beschränkt uns in gewisser Weise, bietet aber im Gegenzug gewaltige Vorteile, wenn die Programme groß werden. Die vier Prinzipien der OOP sind wie die vier Beine eines Stuhls. Nimmt man auch nur eines davon weg, wird das gesamte System instabil.