Ein Bauplan für Sonnen
Wir beginnen damit, die Klasse Sonne für unsere Simulation zu implementieren.
classDiagram
class Sonne {
-x: float
-y: float
-farbe: color
+Sonne(pX: float, pY: float, pFarbe: color)
+getX() float
+getY() float
+getFarbe() color
+draw()
}
classDef default fill:#fff,stroke:#333;Eine Klasse ist ein Bauplan für Objekte. Sie beschreibt, welche Eigenschaften und Fähigkeiten alle Objekte dieser Art haben.
In unserem Fall hat jedes Sonne-Objekt die Eigenschaften x und y, sowie eine farbe. Der x- und y-Wert kann mit den Befehlen getX() und getY() ermittelt werden (das wird später für die Planeten wichtig).
Außerdem besitzt sie die Fähigkeit, auf der Zeichenfläche gezeichnet zu werden (draw()).
Jede Klasse besitzt auch einen besonderen Befehl, der genauso wie die Klasse heißt (hier Sonne) und die beim erstellen eines neuen Objektes die Eigenschaften initialisiert. Deshalb heißt dieser Befehl der Konstruktor der Klasse.
Der Grundaufbau einer Klasse
In Java wird eine Klasse immer mit dem Schlüsselwort class eingeleitet. Innerhalb von { und } stehen dann zuerst die Eigenschaften (Attribute) und dann die Fähigkeiten (Methoden).
public class Sonne {
// Eigenschaften (Attribute)
// Konstruktor
// Fähigkeiten (Methoden)
}
In Processing wird jede Klasse in einem eigenen Tab erstellt.
- Erstelle einen neuen Tab "Sonne".
- Füge im neuen Tab das Grundgerüst der Klasse
Sonneein.
Attribute implementieren
Die Eigenschaften der Klasse werden auch Attribute genannt und sind nichts anderes als Variablen. Sie werden (fast) wie gewohnt deklariert:
public class Sonne {
// Eigenschaften (Attribute)
private float x;
// Konstruktor
// Fähigkeiten (Methoden)
}
Die Schlüsselworte private und public legen fest, ob eine Eigenschaft oder Fähigkeit nur von der Klasse benutzt werden darf, oder auch von anderen Klassen.
Wir legen Attribute immer als private und kennzeichnen dies im Klassendiagramm mit "-".
Ergänze in der Klasse Sonne die Eigenschaften x, y und farbe.
🔎 Lösung
public class Sonne {
// Eigenschaften (Attribute)
private float x;
private float y;
private color farbe;
// Konstruktor
// Fähigkeiten (Methoden)
}
Methoden implementieren
Die Fähigkeiten der Klasse werden als Methoden implementiert und kennen wir als Befehle, die wir schon zuvor in Processing erstellt haben.
public class Sonne {
// Eigenschaften (Attribute)
private float x;
// Konstruktor
// Fähigkeiten (Methoden)
public float getX() {
// Den Wert des Attributs x zurückgeben
return x;
}
public void draw() {
// Kreis an (x/y) mit Farbe farbe zeichnen
}
}
Wir setzen Methoden immer auf public und kennzeichnen dies im Klassendiagramm mit "+".
Methoden die mit get beginnen nennt man Getter und ihre einzige Aufgabe ist es, den Wert ihres Attributs als Rückgabe zu übergeben. Deshalb werden sie nicht mit void, sondern dem Typ des zugehörigen Attributs deklariert. (z.B. public float getX() für das Attribut private float x)
-
Implementiere in der Klasse
Sonnedie GettergetX(),getY()undgetFarbe(). (Achte auf die passenden Rückgabetypen.) -
Implementiere die Methode
draw()so, dass sie die Sonne in der Farbefarbean diex/y-Koordinaten zeichnet (wähle eine angemessene Größe für den Kreis).In der Referenz zum `fill`-Befehl wird erklärt, wie du Farben nutzen kannst.
🔎 Lösung: Lösung zu 1
public class Sonne {
// Eigenschaften (Attribute)
private float x;
private float y;
private color farbe;
// Konstruktor
// Fähigkeiten (Methoden)
public float getX() {
return x;
}
public float getY() {
return y;
}
public color getFarbe() {
return farbe;
}
}
🔎 Lösung: Lösung zu 2
public class Sonne {
// Eigenschaften (Attribute)
private float x;
private float y;
private color farbe;
// Konstruktor
// Fähigkeiten (Methoden)
public void draw() {
// Kreis an (x/y) mit Farbe farbe zeichnen
noStroke();
fill(farbe);
circle(x, y, 50);
}
}
Den Konstruktor implementieren
Zuletzt braucht die Sonne noch ihren Konstruktor. Diese spezielle Methode heißt genauso wie die Klasse selbst, also "Sonne".
Sie besitzt für jedes Attribut einen Parameter und initialisiert die Attribute mit dem übergebenen Wert.
public class Sonne {
// Eigenschaften (Attribute)
private float x;
private float y;
private color farbe;
// Konstruktor
public Sonne(float pX, float pY, color pFarbe) {
x = pX;
y = pY;
farbe = pFarbe;
}
// Fähigkeiten (Methoden)
public float getX() {
// Den Wert des Attributs x zurückgeben
return x;
}
public void draw() {
// Kreis an (x/y) mit Farbe farbe zeichnen
}
}
Der Konstruktor ist eine besondere Methode und hat keinen Rückgabetyp.
Um die Parameter besser von den Attributen unterscheiden zu können, stellen wir den Parametern ein p voran, was "Parameter" bedeuten soll.
Objekte von Klassen erstellen
Zuletzt müssen wir die Sonne unserem Sonnensystem hinzufügen. Dazu erstellen wir ein neues Objekt (eine Instanz) der Klasse und setzen die Attribute jeweils auf einen Wert. Dazu wird das Schlüsselwort new benutzt:
Sonne sol = new Sonne(0, 0, color(255, 0, 0));
void setup() {
size(800, 600);
}
void draw() {
background(0);
// Aufruf der Methode "draw()" des Sonnen-Objektes "sol"
sol.draw();
}
public class Sonne {
// Eigenschaften (Attribute)
private float x;
private float y;
private color farbe;
// Konstruktor
public Sonne(float pX, float pY, color pFarbe) {
x = pX;
y = pY;
farbe = pFarbe;
}
// Fähigkeiten (Methoden)
public float getX() {
return x;
}
public float getY() {
return y;
}
public color getFarbe() {
return farbe;
}
public void draw() {
// Kreis an (x/y) mit Farbe farbe zeichnen
noStroke();
fill(farbe);
circle(x, y, 50);
}
}
-
Ergänze im Tab "Sonnensystem" den obigen Quelltext und teste das Programm.
-
Die Sonne soll gelb sein und im Zentrum des Fensters gezeichnet werden.
-
Erstelle testweise weitere Sonnen-Objekte und lasse sie zeichnen.
-
Verwende den Debugger, um Dir den Zustand der einzelnen Sonnen-Objekte anzusehen.
(Lösche die zusätzlichen Sonnen am Ende wieder.)
🧶 Sprinteraufgabe
Ändere die Darstellung der Sonne in der draw()-Methode ab. Ergänze dazu auch weitere Attribute, die die Darstellung der Sonne beeinflussen (radius ...).