05 Processing – Objekte und Klassen

Das ist ein sehr umfangreiches und komplexes Thema, aber leider unbedingt notwendig. Lasst euch nicht entmutigen, wenn nicht immer gleich alles klar ist. Ich werde das Thema auf mehrere Tutorials verteilen und mit nützlichen Funktionen verbinden. Am Freitag gehen wir das Thema dann noch einmal in ruhe durch…

Bisher mussten wir in unseren Programmen mit relativ primitiven Datentypen wie z.B. Zahlen und Wahrheitswerten auskommen.

Jedes größere Programm muss komplexe Daten wie z.B. Termine, Adressen, Listen usw. verarbeiten und speichern können. Außerdem werden Funktionen benötigt, um mit diesen Daten arbeiten zu können.

Dazu gibt es in Processing und den meisten modernen Programmiersprachen das Konzept der Objektorientierten Programmierung. Damit kann man eigene Datentypen und Objekte bauen, mit denen wir die wirkliche Welt simulieren und modellieren können. Zunächst werden wir uns aber einige einfache Objekt-Typen ansehen, die in Processing eingebaut sind.

Ein Objekt ist zunächst einfach eine Variable, die Eigenschaften und Funktionen besitzt.

Alle Objekte haben einen Datentyp, der bestimmt, welche Eigenschaften und Funktionen sie besitzen. In Processing heissen diese Datentypen „Klassen“.

Beispiel:

Die Klasse „PVector“ dient in Processing dazu, Punkte (und Vektoren) zu repräsentieren. Näheres dazu steht in der Processing Referenz. Wenn wir diese Klasse benutzen wollen, brauchen wir zunächst eine Variable vom Typ PVector:

PVector punkt;

Die Variable hat zwar den Typ PVector, ist aber noch leer. Wenn wir sie jetzt benutzen würden, gäbe es einen Fehler.

Als nächstes erzeugen wir ein Objekt vom Typ PVector und weissen es unserer Variable zu:

punkt		= new PVector();

Mit „new“, gefolgt vom Namen der Klasse und einem paar Klammern werden neue Objekte erzeugt. Nun haben wir ein Objekt vom Typ PVector in der Variablen “punkt” und können auf dessen Eigenschaften und Funktionen zugreifen.

Ein Objekt vom Typ PVector besitzt 3 Eigenschaften „x“, „y“ und „z“, nämlich die Koordinaten des Vektors. Die z-Koordinate lassen wir erstmal weg, die brauchen wir erst für 3D Grafik.

Diese können wir wie normale Variablen benutzen. Mit dem Punkt . Operator zwischen dem Objekt und der Eigenschaft greifen wir auf die Eigenschaften und Funktionen eines Objektes zu.

// setze die Koordinaten von punkt auf 0 und 1
punkt.x	= 0;
punkt.y	= 1;

// zeichne eine Ellipse an die Position von punkt
ellipse( punkt.x, punkt.y, 20, 20 );

Genauso können wir auf Funktionen des Objektes zugreifen. Die Funktion „mag()“ berechnet z.B. die Länge des PVectors oder einfach gesagt, den Abstand unseres Punktes vom Nullpunkt:

float abstand		= punkt.mag();

Konstruktor

Wir haben oben mit „new PVector()“ ein neues Objekt der Klasse PVector erzeugt.

PVector() ist dabei eine besondere Funktion: Sie heisst meistens genau so wie die Klasse selbst und erzeugt neue Objekte der Klasse. Diese Funktion nennt man Konstruktor.

Der Konstruktor von PVector kann auch optional mit den Koordinaten des Vektors als Parameter aufgerufen werden, so dass man komfortabler schreiben kann:

punkt	= new PVector( 0, 1 );

Eine nützliche Funktion von PVector ist z.B. „dist( )“. Diese Funktion berechnet den Abstand eines Punkts zu einem anderen. Dazu muss man der Funktion einen anderen PVector als Parameter übergeben:

PVector mittelpunkt	= new PVector( width / 2, height / 2 );
PVector mausPosition	= new PVector( mouseX, mouseY );
float abstand		= mittelpunkt.dist( mausPosition );

Kommentare sind geschlossen.