Objekte und Klassen hatten wir ja schon eingeführt und einige kennengelernt:
String, PVector, Phape, PFont etc.
Interessant wird es, wenn wir eigene Klassen definieren und damit eigene Objekte erzeugen.
Nehmen wir an, wir wollen in unserem Programm Termine verwalten. Ein Termin enthält beispielsweise eine Anfangszeit und eine Endzeit sowie einen Titel.
Wir können nun einen Datentyp (Klasse) mit diesen Daten als Eigenschaften definieren.
Eine eigene Klasse definieren wir mit “class”
class Termin { }
In der Regel schreibt man die Namen von Klassen mit großem, Namen von Variablen mit kleinem Anfangsbuchstaben.
Nun können wir in den geschweiften Klammern Eigenschaften wie ganz normale Variablen definieren. Wir definieren die Anfangs- und Endzeit der Einfachheit als int (z.B. Sekunden), weil Datumsfunktionen recht komplex sind:
class Termin { int startTime; int endTime; String title; }
Damit wir Termine in unserem Programm verwenden können, müssen wir sie erzeugen und in Variablen vom Typ Termin speichern. Dazu verwenden wir das Wort „new“ und dem Klassennamen mit Klammern:
Termin workshop; workshop = new Termin();
Dann können wir auf die Eigenschaften des Objektes mit dem “.” Operator zugreifen:
workshop.startTime = 1000; workshop.endTime = workshop.startTime + 200; workshop.title = „diner“;
Wir können aber nicht nur Eigenschaften, also Variablen definieren, sondern auch eigene Funktionen. Die Funktion „duration()“ kann beispielsweise die Dauer des Termins berechnen:
class Termin { int startTime; int endTime; String title; int duration() { return endTime - startTime; } }
Innerhalb der Funktionen kann man die Variablen ganz normal (d.h. ohne Punkt) verwenden. Die Funktion „duration()“ wird ebenfalls über den . operator aufgerufen:
if ( workshop.duration() > 400 ) {
println( „Langer Termin“ );
}
Eine spezielle Funktion ist der Konstruktor, mit dem man neue Objekte aus der Klasse erzeugt. Er heisst genau so wie die Klasse und wird mit „new“ aufgerufen. Man kann auch eigene Konstrukturen schreiben, um z.B. das Objekt zu initialisieren und ggf. Parameter zu übergeben. Der Konstruktur wird wie eine Funktion definiert, nur dass er keinen Typ besitzt und genau so wie die Klasse heisst:
Termin( String name, int anfang, int dauer ) { startTime = anfang; endTime = anfang + dauer; title = name; }
Die Funktion Termin ist jetzt der Konstruktor für die Klasse Termin und erwartet 3 Parameter name, anfang und dauer, die wir dann den Eigenschaften zuweisen.
Damit kann man jetzt einen Termin erzeugen und ihm gleich Werte zuweisen:
Termin hochzeit = new Termin( „Hochzeit“, 3000, 20 ); println( hochzeit.endTime );
Im Allgemeinen sollte man eigene Klassen der Übersichtlichkeit halber in einem eigenen Karteireiter definieren.
Hier noch einmal die Klasse mit Konstruktor:
class Termin { int startTime; int endTime; String title; Termin( String name, int anfang, int dauer ) { startTime = anfang; endTime = anfang + dauer; title = name; } int duration() { return endTime - startTime; } }
Objekte können wiederum andere Objekte als Eigenschaften beinhalten:
class Person { String vorname; String nachname; Person( String vorN, String nachN ) { vorname = vorN; nachname = nachN; } } class Termin { int startTime; int endTime; String title; Person person; } // Termin erzeugen Termin meeting = new Termin( „Meeting“, 2000, 150 ); // Person erzeugen meeting.person = new Person( „Manfred“, „Kraft“ ); // Auf vorname zugreifen println( meeting.partner.vorname );