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:
- Name der Klasse
- Variablen der Klasse
- Konstruktor der Klasse
- Funktionen der Klasse
- Ableitung
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 istBall ball; //Objekt deklarieren
ImĀ setup()
Ā initialisieren wir dann dieses Objektball = new Ball(); //Objekt initialisieren
Dann kƶnnen wir im draw() auf die Funktionen der Klasse zugreifenball.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:
- Farbe der Objekte
- Startposition der Objekte
- Geschwindigkeit der Objekte
- Grƶsse der Objekte
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
- Klassen sind generische Objekte
- Objekte sind initialisierte Ableitungen von Klassen
- Argumente kƶnnen den Objekten als Individualisierungs-Merkmale Ć¼bergeben werden
Aufgaben
- Nutzt eure Kenntnisse und programmiert ein weiteres Argument fĆ¼r die Steuerung der Strichbreite
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 ObjektenBall [] balls; //Array von Ball-Objekten
Danach legen wir fest, wie viele Objekte wir darstellen mƶchtenint 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 Arraysballs = 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
- Lest und versteht Seiten 67 ā 83 aus dem Buch āNature Of Codeā von Daniel Shiffman
- Erweitert euer Beispiel āP02_3_Bouncing_Ball_OOP_Arrayā so dass ihr mehrere BƤlle habt, welche auf euren Mauszeiger reagieren.
Weiteres
- OOPĀ ā Tutorial mit Darstellungen
- Learning Processing ā Shiffman Seiten 121 ā 137