Interaction Design WikiSpatial Interaction

Klassen

In diesem Tutorial werden wir sehen, wie wir unseren Ball aus dem vorherigen Tutorial als eine eigene Klasse implementieren können. So nähern wir uns der Objek-Orientierten-Programmierung in Processing. Dafür werden wir Schritt für Schritt das Beispiel P01_2_BouncingBall_mit_Vektoren erweitern.

Was ist Objekt-Orientierte-Programmierung?

Objekt-Orientierte-Programmierung ermöglicht es uns generische Objekte (Klassen) zu erstellen und diese dann zu nutzen. Dies hat den Vorteil, dass oft verwendete Kombinationen aus Variablen und Funktionen in einem einzigen Objekt zusammengefasst werden können und dadurch leichter abrufbar sind. Weiter theoretische Grundlagen unter: Wikipedia.

Objekte und Klassen?

Ein Objekt ist immer die Instanz einer Klasse. Die Klasse beschreibt also ein generisches Objekt welches dann mit verschiedenen Parametern als Objekt von der Klasse installiert werden kann. Zum Beispiel könnte es eine generische Klasse “Mensch” geben. Jeder individuelle Mensch ist nun eine Ableitung der Klasse, aber mit unterschiedlichen individuellen Merkmalen (Hautfarbe, Haarfarbe, Grösse, usw.). 

Aus was besteht eine Klasse?

Eine Klasse besteht grundsätzlich aus:

Mit diesem Wissen können wir nun unsere Klasse “Ball” ableiten. 

Implementierung

Haben wir unsere generische Klasse “Ball” erstellt, können wir diese in unserem Hauptprogramm einbinden und nutzen. Dazu deklarieren wir zunächst ein Objekt, welches von unserer Klasse abgeleitet ist
Ball ball; //Objekt deklarieren
Im setup() initialisieren wir dann dieses Objekt
ball = new Ball(); //Objekt initialisieren
Dann können wir im draw() auf die Funktionen der Klasse zugreifen
ball.update()
ball.checkEdges()
ball.display()

Argumente

Bis jetzt haben wir noch nicht die Kompleten Möglichkeiten der OOP (Objekt-Orienterte-Programmierung) ausgenutzt. Wir haben zwar eine Klasse und können diese nun implementieren, aber wenn wir beispielsweise mehrere Objekte der selben Klasse “Ball” erstellen, so sehen diese immer gleich aus und haben das selbe Verhalten.
Um mehrere Objekte einer Klasse erstellen zu können, welche unterschiedlich aussehen und sich unterschiedlich verhalten verwenden wir sog. Argumente. Ein Argument kann sowohl bei der Initialisierung (also im Konstruktor der Klasse), als auch den einzelnen Funktionen einer Klasse übergeben werden.
Im folgenden wollen wir, folgende Parameter bestimmen können:

Dazu bearbeiten wir zunächst unsere Klasse “Ball” und erstellen einen neuen Konstruktor:

Der neue Konstruktor (Konstruktor2) unterscheidet sich darin, dass er die von uns gewünschten Argumente direkt akzeptiert und an unsere Funktionen weitergibt. Beim Initialisieren müssen wir nun nur noch die gewünschten Argumente übergeben und können kann verschiedene Objekte der Klasse “Ball” zeichnen.

Merke

Aufgaben

Mehrere Objekte einer Klasse

Der nächste Schritt ist es, ein Array von “Ball”-Objekten zu erstellen. Jedes der Objekte soll dabei die von uns zuvor individualisierten Parameter erhalten (Farbe, Startposition, Geschwindigkeit, Grösse). Unsere Klasse “Ball” bleibt also bestehen und wir müssen lediglich in unsrem Hauptprogramm einige Erweiterungen vornehmen.

1) Ein Array von Objekten

Zunächst deklarieren wir ein Array von Objekten
Ball [] balls; //Array von Ball-Objekten
Danach legen wir fest, wie viele Objekte wir darstellen möchten
int numOfBalls = 20 //20 Bälle darstellen

2) Bälle instanzieren

Im setup() müssen wir diese Bälle nun instanzieren. Dazu definieren wir erst die Grösse des Arrays
balls = new Ball[numOfBalls]
Dann iterieren wir über die Anzahl unserer Bälle und instanzieren sie mit unterschiedlichen Argumenten. Weil alle andere Argumente haben sollen, nutzen wir dazu die Funktion random().

Im draw() iterieren wir wieder über die Anzahl Bälle numOfBalls und rufen deren Funktionen zur Aktualisierung update(), zur Kantenkollision checkEdges() und Zeichnen display()

Aufgaben

Weiteres