Die objektorientierte Programmierung (abgekürzt OOP) ist ein Ansatz beim Entwickeln von Software, der darauf abzielt, den Softwarecode mithilfe von Klassen und Objekten zu strukturieren und zu organisieren. Eine Klasse dient hierbei als eine Art Bauplan oder Vorlage für die Erstellung von Objekten. Sie legt die Eigenschaften (bekannt als Attribute) und das Verhalten (in Form von Funktionen oder anders genannt als Methoden) fest, die ein Objekt ihrer Art besitzen wird. Ein auf der Basis einer Klasse erstelltes Objekt wird als Instanz dieser Klasse bezeichnet. Jede Instanz hat Zugriff auf die in der Klasse definierten Attribute und Methoden, kann aber auch eigene Werte für diese Attribute festlegen.
Um das Prinzip der objektorientierten Programmierung besser zu verstehen, betrachten wir ein Beispiel aus dem Alltag. Nehmen wir ein Auto. Es hat eine Marke, einen Modellnamen, eine Farbe, einen Motorhubraum und so weiter. Darüber hinaus kann ein Fahrer das Auto durch verschiedene Befehle steuern: vorwärts fahren, rückwärts fahren, bremsen, rechts abbiegen, links abbiegen usw. Man kann verallgemeinert sagen, dass es eine Klasse von Autos gibt, die gemeinsame Eigenschaften besitzt (alle Autos haben eine Marke, eine Modellbezeichnung, eine Farbe usw. und alle können Befehle entgegennehmen).
Ein bestimmtes Auto, das auf der Straße steht, ist ein Exemplar dieser Klasse oder, anders ausgedrückt, ein Objekt dieser Klasse. Alle Objekte dieser Klasse haben Eigenschaften wie die Marke, den Modellnamen, die Farbe, den Motorhubraum und Methoden wie vorwärts fahren, rückwärts fahren, bremsen, rechts abbiegen, links abbiegen. Mit anderen Worten, die Klasse ist der Bauplan, nach dem Autos im Automobilwerk hergestellt werden. Das Objekt hingegen ist das Auto selbst, das nach diesen Plänen gefertigt wurde. Das folgende Bild stellt dieses Beispiel anschaulich dar:
Die Klasse Vehicle bildet eine Vorlage mit entsprechenden Attributen, auf deren Basis drei unterschiedliche Fahrzeuge (Objekte) produziert worden sind.
Deklaration einer Klasse
Jetzt schauen wir uns an, wie sich das oben erwähnte Beispiel im Kotlin-Code realisieren lässt. Zuerst erstellen wir eine Klasse namens Vehicle mit entsprechenden Attributen und Methoden.
Um eine Klasse in Kotlin zu deklarieren, wird das Schlüsselwort class verwendet, gefolgt vom Namen der Klasse.
Der Inhalt einer Klasse wird nach ihrem Namen innerhalb von geschweiften Klammern definiert.
Eigenschaften (Attribute) einer Klasse
Als Erstes bestimmen wir die Eigenschaften jedes Autos, das gemäß diesem Entwurf hergestellt wird. Dazu definieren wir innerhalb der Klasse die Attribute als Variablen für Marke, Model, Farbe und Motorhubraum. Damit wir diese Attribute später ändern können, legen wir diese als veränderliche (mutable) Variablen an. Da Attribute innerhalb einer Klasse in Kotlin immer mit Werten belegt werden müssen, erhalten diese zunächst die initialen Werte „Undefined“ bzw. 0.00.
Funktionen (Methoden) einer Klasse
Die Methoden einer Klasse beschreiben das Verhalten von Objekten und werden in Form von Funktionen definiert. Damit unsere zukünftigen Autos auch fahren können, definieren wir die Methoden, die verschiedene Befehle/Aktionen beschreiben: vorwärts fahren, rückwärts fahren, bremsen.
Nun haben wir den Bauplan (eine Klasse namens Vehicle) für unsere zukünftigen Fahrzeuge angelegt. Jetzt ist es an der Zeit, basierend darauf in einem Automobilwerk ein konkretes Auto zu bauen, das heißt, ein Objekt dieser Klasse zu erstellen.
Erstellung eines Objekts einer Klasse
Um ein Objekt einer Klasse zu erstellen, muss zunächst eine Variable, die auf die Klasse verweist, initialisiert werden. In dieser Variable wird das Objekt gespeichert. Anschließend wird der Konstruktor der Klasse aufgerufen:
Der Aufruf des Konstruktors befindet sich nach dem Zuweisungsoperator =. Dieser hat den gleichen Namen wie die Klasse und seine Aufgabe ist es, das neue Objekt zu initialisieren und ihm Anfangswerte zuzuweisen.
Zugriff auf Attribute und Funktionen eines Objekts
Nachdem wir ein Auto erstellt und in der Variable vehicle1 gespeichert haben, können wir das Ergebnis betrachten, indem wir die Attribute und Methoden dieses Objekts in der Konsole ausgeben. Die Syntax für den Zugriff auf Attribute und Funktionen eines Objekts sieht im Allgemeinen wie folgt aus:
Man verwendet den Namen der Variablen, die das Objekt repräsentiert, und nach einem Punkt (oder auch Punktoperator genannt) gibt man den Namen des Attributs oder der Methode an. Bei einem Methodenaufruf folgen noch zusätzlich die Klammern.
In unserem konkreten Fall realisieren wir das im Code wie folgt:
Änderung von Attributen eines Objekts
Führe den obenstehenden Code aus und schau dir die Ausgabe an. Wie du sehen kannst, hat unser erstes Auto die initialen Werte aus der Klasse übernommen.
Wir möchten aber ein spezifisches Fahrzeug mit eigenen, einzigartigen Eigenschaften herstellen. Also ändern wir unser Auto, indem wir die Attribute des Objekts überschreiben. Um den Wert eines Attributs zu ändern, nutzen wir den uns bereits bekannten Syntax: Zuerst schreiben wir den Variablennamen, gefolgt von einem Punktoperator und dann den Namen des Attributs. Zusätzlich nach dem Zuweisungsoperator = definieren wir den neuen Wert:
Nun der vollständige Code mit dem finalen Ergebnis: