Objekt und Klasse


Message Passing: Nachrichten schicken

Das Ziel der OOP ist es, Details der Implementierung zu verpacken und zu verbergen. Der Programmierer von main() weiss von den Klassen nichts als die Methoden, die in dieser Klasse definiert sind. Diese Methoden sind Grundlage der gleichnamigen Nachrichten, die dem Objekt geschickt werden, um beim Objekt ein Unterprogramm in Gang zu setzen.

Wenn z.B. die Fläche eines Kreises berechnet wird, soll aus Sicht desjenigen, der das Programm aufruft, nicht zu sehen sein, auf welche Weise eine Kreisfläche berechnet wird, sondern es soll an ein Kreis-Objekt eine Nachricht geschickt werden, die dem Kreis-Objekt sagt: "Bitte Fläche berechnen!" :

kreis1.flaeche();
Wenn das Kreis-Objekt seine Fläche berechnen soll, braucht es zuerst einen bestimmten Radius. Man sagt also zuvor dem Kreis-Objekt: "Dein Radius ist 13!" :
kreis1.setRadius( 13 );

Die Definition dieser und anderer Nachrichten kennt das Objekt, weil es der Klasse Kreis angehört. In der Klasse werden die Methoden definiert, die man dem Objekt als Nachrichten schicken kann.

Klasse: Definition von Eigenschaften und Methoden

Die Klasse definiert also die Möglichkeiten der Objekte, die der Klasse angehören, und zwar im Beispiel Kreis:

Eigenschaften als Variablen:

und Methoden als Funktionen:

Insgesamt also Definition der Klasse

Instanziierung: Objekt von einer Klasse erzeugen

Zur Klasse können dann die zugehörigen Objekte erzeugt werden durch Aufruf des Konstruktors mit new

Jede Klasse besitzt automatisch einen Konstruktor, den sogenannten Standard-Konstruktor. Der Konstruktor heisst genauso wie die Klasse und hat runde Klammern:

Kreis()
Der Konstruktor erzeugt Objekte der Klasse mittels des Schlüsselwortes new. Dieses Erzeugen eines Objekts nennt man Instanziierung. Die Namen der Objekte sind frei wählbar, es können beliebig viele Objekte erzeugt werden, die voneinander unabhängig sind:
Kreis kreis1 = new Kreis();
Kreis kreis2 = new Kreis();

Die Klasse ist ein Typ. Deklaration des neuen Objekts und Konstruktor-Aufruf kann man auch auf 2 Zeilen aufteilen:

Kreis kreis3;
kreis3 = new Kreis();
Das vollständige Programm enthält neben der Definition der Klasse ein Hauptprogramm main, in welchem durch Konstruktoraufruf ein Objekt erzeugt wird, dem dann Nachrichten geschickt werden: Kreisberechnung

Übung:

Man erzeuge in main() mehrere Kreis-Objekte und beobachte, dass diese ganz unabhängig voneinander funktionieren.

Aufruf einer Klasse in einer anderen Klasse

Die Funktion main muss nicht in derselben Datei stehen wie die Klassen-Definition: Der Konstruktor einer Klasse kann auch innerhalb einer anderen Klasse zur Erzeugung eines Objekts aufgerufen werden. Voraussetzung ist, dass beide Dateien im selben Verzeichnis stehen.

Eine etwa vorhandene main()-Funktion in der ersten Datei wird von der aufrufenden Datei ignoriert.

Im folgenden Beispiel Kreistest wird in einer Klasse Kreistest der Konstruktor der Klasse Kreis aufgerufen. Die Klasse Kreistest greift dabei auf die Datei Kreis.class zu, sofern diese im selben Verzeichnis angetroffen wird.

Beispiel Kreistest.java

Man sieht jetzt auch, warum die Klassen immer genauso heissen müssen wie die Datei; die Klassen würden sonst nicht gefunden.

Übung:

Man schreibe eine Klasse Viereck, in der Flächen- und Umfangberechnung möglich sein soll.

Wie man eine neue Klasse schreibt

Zunächst überlegt man, welche Eigenschaften die Objekte haben müssen, um sinnvoll einsetzbar zu sein. Ein Viereck könnte z.B. Breite und Höhe als Eigenschaften haben. Dann müssen die Werte der Eigenschaften gesetzt und später abgefragt werden können durch set- und get-Methoden. Schliesslich kommen die Methoden, die inhaltlich etwas tun, also flaeche() und umfang()


www.AndreasGoedel.de