Einführung in die Objektorientierung

Die objektorientierte Programmierung wurde in den 80er-Jahren entwickelt und soll die unstrukturierte Programmierung (am Anfang ein begin, dann Befehl auf Befehl und am Ende ein end, dazwischen möglichst viele Sprünge mit goto) ablösen. Die Objektorientierung ist ein sehr komplexes Gebiet und soll hier deshalb nur in einfachen Worten für das grundlegende Verständnis geschildert werden.

Wie der Name bereits sagt, sind Objekte zentrale Elemente der objektorientierten Programmierung. Ein Objekt ist eine Einheit mit einem Zustand und einem Verhalten, was gleich an einem Beispiel verdeutlicht wird. Zuvor müssen jedoch noch ein paar Begriffe geklärt werden.

Klassen

Klassen stellen den "Bauplan" eines Objekts dar. Sie definieren, welche Eigenschaften/Attribute und welche Methoden ein Objekt besitzt und wie es auf bestimmte Ereignisse reagiert. Klassennamen beginnen in Delphi üblicherweise mit einem großen T (Type). Dabei handelt es sich um eine Vereinbarung, nicht um eine Regel. Soll Programmcode weitergegeben werden, so sollte man sich an diesen Quasi-Standard halten.

Statt "Klasse" werden gelegentlich auch die Begriffe "Klassentyp", "Objektklasse" oder "Objekttyp" verwendet.

Instanzen

Instanzen sind nun "lebendige" Objekte, die nach dem Bauplan einer Klasse erstellt wurden. Sie belegen bei der Programmausführung Arbeitsspeicher und können Daten aufnehmen. Von jeder Klasse kann es beliebig viele Instanzen geben, die alle gleich aufgebaut sind, aber unterschiedliche Daten enthalten können.

Objekte

Der Begriff "Objekt" wird unterschiedlich verwendet. Manche gebrauchen ihn gleichbedeutend mit "Instanz", andere verwenden ihn als Oberbegriff für Klassen und Instanzen. Beim Auftauchen dieses Begriffs muss also mit allem gerechnet werden.

Methoden

Methode ist der Überbegriff für Prozeduren und Funktionen, die Teil einer Klasse sind. Die Methoden stellen das Verhalten eines Objekts dar.

Attribute oder Felder

Attribute sind mehr oder weniger Variablen, die zu einem Objekt gehören und damit seinen Zustand beschreiben. Attributnamen beginnen in Delphi mit einem großen F (Field). Wie auch beim T vor Klassennamen handelt es sich hierbei um eine Vereinbarung.

Eigenschaften oder Properties

Eigenschaften sind keine eigenständigen Variablen, sie belegen zur Laufzeit keinen Speicherplatz. Über sie lassen sich Lese- und Schreibzugriffe auf Attribute regeln. Die Eigenschaften sind es auch, die im Objektinspektor angezeigt werden.

Doch nun ein Beispiel einer Klassendefinition:

type
TAuto = class
private
FFarbe: string;
FBaujahr: integer;
procedure SetFarbe(Farbe: string);
public
property Farbe: string read FFarbe write SetFarbe;
end;

Eine solche Klassendefinition kann überall dort stehen, wo auch Typ-Deklarationen vorgenommen werden können. Pro Unit können natürlich auch mehrere Klassen deklariert werden. In Units, zu denen ein Fenster gehört, ist bereits die Klasse TForm1 zu finden. An diese kann man z.B. eigene Klassen anschließen:

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end; //Ende der Klasse TForm1
TAuto = class
private
FFarbe: string;
FBaujahr: integer;
procedure SetFarbe(Farbe: string);
public
property Farbe: string read FFarbe write SetFarbe;
end; //Ende der Klasse TAuto

Die Klasse TAuto stellt nun den Bauplan für beliebig viele Instanzen dar. FFarbe und FBaujahr sind Attribute, wobei es zum guten Ton gehört, Attribute immer in den private-Abschnitt zu schreiben. Was diese Zugriffsrechte bedeuten, wird unter "Zugriff auf Objekte" erläutert.

Zuerst wollen wir noch Instanzen von unserer Beispielklasse erzeugen.

Objektreferenzen

Variablen, deren Typ eine Klasse ist, heißen "Objektreferenzen", z. B.

var MeinAuto: TAuto;

Dies deklariert eine Variable ("Objektreferenz") von der Klasse TAuto.

Die Werte von Objektreferenzen sind Zeigerwerte (Adressen im Hauptspeicher).

Das Deklarieren einer Objektreferenz wie oben reicht jedoch nicht aus, um eine Instanz zu erzeugen. Denn durch die reine Deklaration enthält MeinAuto nun den Wert nil. Es ist also noch kein Bereich im Hauptspeicher für unsere Autoinstanz reserviert worden. Wir haben lediglich mit dem Compiler vereinbart, dass es sich um etwas, das dem Bauplan von TAuto entspricht, handelt, wenn wir die Variable MeinAuto verwenden.