Informatik-Box

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.

📝 Arbeitsauftrag
  1. Erstelle einen neuen Tab "Sonne".
  2. Füge im neuen Tab das Grundgerüst der Klasse Sonne ein.

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 "-".

📝 Arbeitsauftrag

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)

📝 Arbeitsauftrag
  1. Implementiere in der Klasse Sonne die Getter getX(), getY() und getFarbe(). (Achte auf die passenden Rückgabetypen.)

  2. Implementiere die Methode draw() so, dass sie die Sonne in der Farbe farbe an die x/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);
    }
}
📝 Arbeitsauftrag
  1. Ergänze im Tab "Sonnensystem" den obigen Quelltext und teste das Programm.

  2. Die Sonne soll gelb sein und im Zentrum des Fensters gezeichnet werden.

  3. Erstelle testweise weitere Sonnen-Objekte und lasse sie zeichnen.

  4. 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 ...).

Teilbare URL erstellen

Abschnitte auswählen