Home > Informatik > Stufe EF > Folge 2 > Folge 2.2

2.2 Wir programmieren ein Bild, Teil 2

Bild programmieren - Sondierende Methoden - Fallunterscheidungen

Schritt 9 - Unser Projekt anpassen

⇒ Öffnen Sie ihr altes Projekt und speichern Sie mit "Speichern unter" eine Kopie des Projektes unter einem Namen wie "Zeichnung-nach-Schritt-9" ab.

Achtung: Sie können nur auf einem Laufwerk speichern, auf dem Sie Schreibzugriff haben. Am besten nehmen Sie dafür Ihren eigenen USB-Stick, ansonsten das vom Administrator zugewiesene Laufwerk!

⇒ Löschen Sie die beiden Klassen Triangle und Square aus dem bisherigen Projekt.

⇒ Löschen Sie aus dem Quelltext der Klasse Zeichnung alle Befehle, die sich auf die beiden gelöschten Klassen Triangle und Square beziehen.

So müsste der Quelltext der Klasse Zeichnung aussehen, wenn Sie die obigen Anweisungen befolgt haben:

Beschreibung siehe folgenden Text

Der neue Quelltext - wieder nur mit sonne und mond

⇒ Kompilieren Sie nun das Projekt erneut.

So müsste Ihr BlueJ-Projekt jetzt aussehen:

Das BlueJ-Projekt 'Zeichnung02' mit den gelöschten Klassen Square und Triangle. Es sind nur noch die Klassen Canvas und Circle zu sehen sowie die Klasse Zeichnung.

Das "bereinigte" BlueJ-Projekt

Schritt 10 - Die Klasse Circle ansehen

⇒ Doppelklicken Sie auf die Klasse Circle.

Es öffnet sich ein Editor-Fenster mit dem Quelltext der Klasse Circle. Wir schauen uns nicht den ganzen Quelltext an, sondern nur die Deklaration der fünf Attribute:

public class Circle
{
   private int diameter;
   private int xPosition;
   private int yPosition;
   private String color;
   private boolean isVisible;
   ...

Attribute

Wenn Sie den Lernbaustein "Attribute" noch nicht gelesen haben, wäre jetzt eine gute Gelegenheit, dies nachzuholen.

Betrachten wir jetzt den Konstruktor der Klasse Circle:

   public Circle()
   {
     diameter = 30;
     xPosition = 20;
     yPosition = 60;
     color = "blue";
     isVisible = false;
   }

Konstruktoren

Auch zum Thema "Konstruktoren" gibt es einen Lernbaustein, den Sie sich ansehen sollten.

Für Spezialisten

In einem Konstruktor werden normalerweise die Werte der Attribute festgelegt. Das kann entweder durch eine direkte Zuweisung erfolgen wie in unserem Beispiel, oder über Parameter, die der Konstruktor beim Aufruf erhält. Theoretisch könnte der Konstruktor der Klasse Circle also auch so aussehen:

   public Circle(int d, int x, int y, String c, boolean v)
   {
     diameter = d;
     xPosition = x;
     yPosition = y;
     color = c;
     isVisible = v;
   }

Beim Erzeugen eines neuen Circle-Objektes müsste man dann allerdings diese Werte auch mit angeben:

Circle sonne = new Circle(50, 250,100,"yellow",true);

So könnte zum Beispiel ein Aufruf der Klasse Circle aussehen, wenn der Konstruktor so gestaltet wäre, wie im obigen Quelltext angegeben. Die "Erfinder" von BlueJ haben den Konstruktor aber ohne Parameter gestaltet, so dass ein neuer Kreis die default-Werte 30, 20, 60, "blue" und false hat. Wollen wir die Werte dieser Attribute ändern, sind wir gezwungen, die entsprechenden manipulierenden Methoden der Klasse aufzurufen, zum Beispiel changeSize().

⇒ Suchen Sie in dem Quelltext der Klasse Circle nun die Methode moveRight().

Hier ist der Quelltext dieser Methode:

   public void moveRight()
   {
      moveHorizontal(20);
   }

Der Quelltext ist recht kurz. Er besteht lediglich aus dem Aufruf der Methode moveHorizontal(). Jetzt wollen wir natürlich wissen, wie diese Methode moveHorizontal()eigentlich arbeitet.

⇒ Suchen Sie in dem Quelltext der Klasse Circle die Methode moveHorizontal().

Auch diesen Quelltext finden wir recht schnell:

   public void moveHorizontal(int distance)
   {
      erase();
      xPosition += distance;
      draw();
   }

Diese manipulierende Methode verändert den Wert des Attributes xPosition. Dazu muss die Methode wissen, um wie viele Pixel die xPosition denn erhöht oder erniedrigt werden soll. Diese Information erhält die Methode über den Parameter distance.

In den geschweiften Klammern stehen drei Befehle

  1. erase(): Diese Methode löscht den gezeichneten Kreis von der Zeichenfläche.
  2. xPosition += distance: Dieser Befehl erhöht den Attributwert von xPosition um den Betrag, der in dem Parameter distance gespeichert ist. Hat distance zum Beispiel den Wert 50, wird xPosition um diesen Wert erhöht, beispielsweise von 70 auf 120.
  3. draw(): Diese Methode zeichnet den Kreis an der neuen Position.

Da die Methode moveHorizontal() von der Methode moveRight() mit dem Parameter 20 aufgerufen wird, wissen wir, dass sich bei jedem Aufruf von moveRight() der Kreis um 20 Pixel nach rechts bewegt.

Außerdem haben wir wieder etwas ganz Wichtiges gelernt: Eine Java-Methode kann andere Java-Methoden aufrufen und dabei auch noch Parameter übergeben.

Schritt 11 - Die Klasse Circle ergänzen

⇒ Scrollen Sie in dem Quelltext der Klasse Circle wieder nach oben und fügen Sie direkt unterhalb des Konstruktors den Quelltext von drei neuen Methoden ein:

    public Circle()
    {
      diameter = 30;
      xPosition = 20;
      yPosition = 60;
      color = "blue";
      isVisible = false;
    }
    
    public int getDiameter()
    {
       return diameter;
    }
    
    public int getXPosition()
    {
       return xPosition;
    }

    public int getYPosition()
    {
       return yPosition;
    }

⇒ Kompilieren Sie den Quelltext, erzeugen Sie ein Objekt sonne der Klasse Circle, und klicken Sie dann mit der rechten Maustaste auf sonne.

Das Projekt mit dem Objekt sonne. Es wurde die rechte Maustaste geklickt, und man sieht das Kontextmenü von 'sonne' mit allen öffentlichen Methoden. Auch die drei neuen Methoden getDiameter(), getXPosition() und getYPosition() sind zu sehen.

Wie man auf dieser Abbildung gut sehen kann, tauchen die drei neuen Methoden in dem Kontextmenü auf. Was passiert wohl, wenn man jetzt eine dieser selbst geschriebenen Methoden aufruft?

⇒ Rufen Sie mit der rechten Maustaste eine der drei Methoden aus dem Kontextmenü auf.

Es öffnet sich eine Dialogbox, die den Wert des Attributes xPosition anzeigt, nämlich 20.

Die Methode getXPosition() liefert einen Wert zurück, nämlich den aktuellen Wert des Attributes xPosition.

Wir haben die Klasse Circle um drei sondierende Methoden ergänzt. Sondierende Methoden dienen zum Abfragen von Attributwerten. Mit der sondierenden Methode getXPosition() wird der Wert des Attributes xPosition abgefragt. Diese sondierende Methode wurde als public deklariert, daher kann man von außen auf sie zugreifen. Sie erscheint auch im Kontextmenü des Objektes. Hätten wir die Methode als private deklariert, würde sie im Kontextmenü nicht auftauchen, und man könnte auch auf andere Weise nicht an die Methode "herankommen" - außer direkt über den Quelltext der Klasse Circle.

Übungen

Übung 2.1-2
  1. Überprüfen Sie die Funktionsweise der sondierenden Methoden, indem Sie ein Circle-Objekt anlegen und dieses dann 100 Pixel nach rechts und dann 60 Pixel nach unten verschieben. Rufen Sie danach die Methoden getXPosition() und getYPosition() auf.
  2. Erhöhen Sie den Durchmesser des Kreises im Konstruktor der Klasse Circle auf 100 und überprüfen Sie dann, ob die Methode getDiameter() korrekt funktioniert.

Seitenanfang -
Weiter mit Fallunterscheidungen...