Skip to content

1.2 Objekte und Klassen in BlueJ und SGE

BlueJ ist eine Java-Entwicklungsumgebung, die besonders zum Erlernen der objektorientierten Programmierung konzipiert wurde. In BlueJ hat man – anders als in anderen (professionellen) Entwicklungsumgebungen – die Möglichkeit, direkt mit den Objekten zu interagieren. Dies werden wir nach einem kurzen Überblick über die Benutzeroberfläche von BlueJ dazu nutzen, das Verständnis der Begriffe Klasse, Objekt, Eigenschaft/Attribut und Fähigkeit/Methode zu vertiefen.

Die Benutzeroberfläche von BlueJ weist vier verschiedene Bereiche auf. Links befindet sich eine Spalte mit Schaltflächen. Der große Bereich in der Mitte zeigt die Klassen an, die zu dem Projekt gehören. Im unteren Bereich findet sich links die Objektanzeige. Hier werden alle Objekte angezeigt, die aus einer Klasse erzeugt werden. In der Direkteingabe rechts daneben können Programmier-anweisungen direkt eingegeben werden.

Wird die Direkteingabe nicht angezeigt, kann sie im Menü unter Ansicht aktiviert werden.

1.2 Objekte und Klassen in BlueJ und SGE

Erstelle ein neues Projekt, indem du im Menü unter Projekt auf Neues Projekt klickst. Wähle als Speicherort dein Homeverzeichnis oder deinen USB-Stick.

Objekte interaktiv erzeugen

In der SGE-Welt kann man zweidimensionale Objekte platzieren. Dazu braucht man zuerst eine Leinwand, auf der diese Objekte angezeigt werden. Auch diese Leinwand, die wie ein Windows-Fenster aussieht, ist ein Objekt und zwar ein Objekt der Klasse SGLeinwand.

Erzeuge ein SGLeinwand-Objekt. Rufe dazu im Menü Werkzeuge den Menüpunkt Klasse aus Bibliothek verwenden auf.
Trage den Namen der Klasse SGE.SGLeinwand in das Textfeld ein. Nach einer Bestätigung mit der Eingabetaste erscheint eine Auswahl.

Bei den ersten drei Einträgen handelt es sich jeweils um einen Konstruktor. Dies ist eine spezielle Methode einer Klasse, die zum Erzeugen eines Objektes der Klasse ausgeführt wird. Der letzte Konstruktor verlangt zwei ganzzahlige Parameter: SGE.SGLeinwand(int, int). Sie geben die Breite und die Höhe des Fensters in Pixeln an.

1.2 Objekte und Klassen in BlueJ und SGE

Wähle den dritten Konstruktor. Gib im folgenden Dialog die beiden Zahlen 600 und 400 in die offenen Felder ein. Klicke dann auf Ok, um das Objekt durch den Aufruf new SGE.SGLeinwand(600, 400) zu erzeugen.

Die beiden Werte geben die Breite und die Höhe der Leinwand an. Der Instanzname ist die Bezeichnung, unter der das erzeugte Objekt zu erreichen ist.

Erzeuge nun auf die gleiche Weise einen Kreis aus der Klasse SGE.SGKreis. Wähle als Parameter (250,150,50).

Bei den Parametern definieren die ersten beiden Werte die Koordinaten der linken oberen Ecke des Kreises. Der dritte Wert gibt den Radius des Kreises an. Im Fenster ist das Objekt allerdings nicht oder nur ganz schwach zu sehen, da ein schwarzer Kreis auf einen schwarzen Hintergrund gezeichnet wird.

1.2 Objekte und Klassen in BlueJ und SGE

Positionierung in der SGE-Welt

In der SGE-Welt erfolgt eine Positionierung über Koordinaten, die in Pixeln angegeben werden. Dabei hat die obere linke Ecke des Leinwand-Objekts die Koordinaten (0,0). Anders als im Koordinatensystem aus dem Mathematikunterricht nimmt die y-Koordinate also zu, wenn man einen Punkt weiter unten beschreibt. Die Position (200,100) erreicht man also, wenn man von der oberen linken Ecke 200 Pixel nach rechts und 100 Pixel nach unten geht.

1.2 Objekte und Klassen in BlueJ und SGE

Methoden von Objekten aufrufen

In der Objektanzeige kann man mit Hilfe eines Rechtsklicks auf ein Objekt Methoden des Objektes mit dem Mauszeiger auswählen und aufrufen. Bei dem SGLeinwand-Objekt finden sich verschiedene Methoden, von denen wir uns nur die Methode setzeHintergrundfarbe ansehen wollen.

Klicke mit einem Rechtsklick auf das SGLeinwand-Objekt und wähle die Option setzeHintergrundfarbe(double,double,double). Gib als Parameter die Werte (0,0.8,1) ein und bestätige die Eingabe mit Ok.

Die Hintergrundfarbe des SGLeinwand-Objekts ist nun blau.
Bei dem Kreisobjekt finden sich auf den ersten Blick kaum Methoden, da fast alle Methoden der SGE-Objekte in den gemeinsamen Oberklassen SGObjekt und SGFigur zu finden sind. Diese Methoden können über den Kontextmenüeintrag geerbt von SGObjekt bzw. geerbt von SGFigur aufgerufen werden.

Rufe für das SGKreis-Objekt die Methode setzeFuellung(boolean) auf (von SGFigur geerbt). Dabei muss der Parameter auf den Wert true gesetzt werden.

Der Kreis sollte jetzt nicht mehr als Kreislinie, sondern als gefüllter Kreis gezeichnet werden. Dies könnte man wieder rückgängig machen, indem man erneut die Methode setzeFuellung(boolean) aufruft und als Parameter den Wert false wählt.

Farben in der SGE-Welt

Die SGE-Welt nutzt (wie viele andere Programme und Bibliotheken) den RGB-Farbraum. Eine Farbe wird dabei durch ihren Rot-, Grün- und Blau-Anteil festgelegt. Die Anteile werden mit Werten zwischen 0.0 und 1.0 angegeben. Entsprechend würden die Werte (1.0,0,0) zu einer hellroten Farbe führen, die Werte (1.0,1.0,0) ergeben eine gelbe Farbe. Mit (0.0,0.0,0.0) erhält man Schwarz und (1.0,1.0,1.0) ist weiß.
Eine Tabelle mit verschiedenen Farbcodes findet sich im hier.

1.2 Objekte und Klassen in BlueJ und SGE

Hinweis

Die Position eines Objekts ist immer die linke obere Ecke des umgebenden Rechtecks an.


1.2 Objekte und Klassen in BlueJ und SGE

Wichtig

Dezimalzahlen werden als double bezeichnet und wie beim Taschenrechner mit einem Punkt geschrieben. Das Komma hat eine andere Bedeutung – es wird zum Trennen von Parametern genutzt.

Hinweis

boolean ist ein Wahrheitswert und wie double ein Datentyp. Als Werte sind true oder false möglich.

Unterschiedliche Objekte und Objektzustand

Ein großer Vorteil der objektorientierten Programmierung ist die Möglichkeit, aus einer Klasse beliebig viele Objekte zu erzeugen.

Erzeuge zwei weitere SGKreis-Objekte mit dem Radius 50, aber an den Positionen (210, 190) und (290, 190). Das Ergebnis im SGLeinwand-Objekt und in der Objektanzeige ist rechts dargestellt.

In beiden Darstellungen sind alle drei Kreise erkennbar. Obwohl alle drei nach dem gleichen Bauplan, der Klasse SGKreis, erzeugt worden sind, sind es drei eigenständige Objekte, die jeweils einen eigenen Bereich im Computerspeicher belegen. In der Objektanzeige ist diese Eigenständigkeit der einzelnen Objekte auch daran erkennbar, dass jedes Objekt einen eigenen Namen erhalten hat.

Die individuellen Objekte können unabhängig voneinander agieren.

Führe einen Aufruf der Methode void setzeFarbe(double,double,double) bei dem Objekt sGKreis2 aus und wähle als Farbe Grün (0.0,1.0,0.0).

1.2 Objekte und Klassen in BlueJ und SGE
1.2 Objekte und Klassen in BlueJ und SGE

Der Kreis unten links ist nun grün gefärbt, während sich die beiden anderen Kreise nicht verändert haben. Die individuellen Kreisobjekte unterscheiden sich nicht nur in ihrem Namen, sondern auch in ihrem Zustand. Hier haben sie unterschiedliche Positionen und Farben. Sie könnten sich aber auch in ihren Radien oder ihrer Füllung unterscheiden.

Der Zustand eines Objekts ist nicht konstant. Er kann sich im zum Beispiel durch Methodenaufrufe verändern. Der Kreis unten links ist jetzt grün. Sein Zustand hat sich geändert, aber es ist immer noch der gleiche Kreis wie vor dem Methodenaufruf.

Führe für die drei Objekte verschiedene Methodenaufrufe aus. Daraus soll das nebenstehende Bild resultieren. Du brauchst dafür die Methoden void setzeFuellung(boolean) und void setzeFarbe(double,double, double) (beide geerbt von SGFigur). Abschließend ändere die Hintergrundfarbe der Leinwand auf weiß.

1.2 Objekte und Klassen in BlueJ und SGE

Objekte inspizieren

In BlueJ läßt sich der Zustand von Objekten untersuchen oder inspizieren. Klickt man mit der rechten Maustaste auf ein Objekt in der Objektanzeige, so öffnet sich nach Auswahl von Inspizieren der Objektinspektor, in dem alle Attribute mit ihrem aktuellen Wert angezeigt werden.

Methoden durch Programmbefehle aufrufen

In den Arbeitsanweisungen bisher wurden die Objekte in BlueJ interaktiv erzeugt und benutzt. Mit der Maus wurden die Kontruktoren zum Erzeugen eines Objektes oder Methoden eines existierenden Objektes ausgewählt. Die Parameterwerte wurden dann in Textfelder eines Dialogfensters eingetragen.

Diese Vorgehensweise ist nützlich, um erste Erfahrungen im Umgang mit Objekten in der objektorientierten Programmierung zu sammeln. Normalerweise werden die Abläufe in einem Programm aber durch Anweisungen in Textform in einer Programmdatei implementiert.

Mit der Direkteingabe gibt es in BlueJ eine Möglichkeit bei den bis hierhin erzeugten Objekten Methoden durch Anweisungen in Textform aufzurufen.

Ein Methodenaufruf an ein Objekt wird in der sogenannten Punktnotation eingegeben: objektname.methodenname(ggf. parameter);

Schreibe in die Direkteingabe die Anweisung sGKreis1.setzeX(100); , um die x-Koordinate dieses Objekts auf 100 zu setzen. Gebe im Anschluss weitere Anweisungen in die Direkteingabe ein, damit alle Kreise in einer Linie angeordnet sind. Nutze dafür die Methoden setzeX(double) und setzeY(double). Denke an die Punktnotation.

1.2 Objekte und Klassen in BlueJ und SGE

Hinweis

In der Programmiersprache Java werden Anweisungen immer mit einem Semikolon ; beendet.

Wichtig

Die Klammern müssen bei Methodenaufrufen immer angegeben werden, auch wenn die Methode keine Parameter hat.

Objekte in der Direkteingabe erzeugen

Es ist auch möglich, Objekte durch Textanweisungen in der Direkteingabe zu erzeugen. Die Anweisung zum Erzeugen eines neuen Kreisobjekts lautet: new SGE.SGKreis(100,100,50);

Das erzeugte Kreisobjekt erscheint auf der Leinwand, aber in der Objektanzeige erscheint kein Symbol für das Objekt. Daher ist es auch nicht möglich, bei diesem Objekt eine Methode durch einen Rechtsklick auf das zugehörige Symbol aufzurufen. Auch in der Direkteingabe ist dies nicht möglich, da das Objekt über einen zugeordneten Namen angesprochen werden muss und dieser nicht festgelegt wurde.

Daher muss vorab eine Objektvariable mit einem Namen angelegt werden (Fachsprache: Deklaration). In dieser Objektvariablen kann ein Verweis (Fachsprache: Referenz) auf ein Objekt gespeichert werden.

Gib die folgenden Zeilen in die Direkteingabe ein:
SGE.SGKreis nochEinKreis;
nochEinKreis = new SGE.SGKreis(200,100,50);

Die erste Anweisung deklariert eine Objektvariable vom Typ SGKreis mit dem Namen nochEinKreis. Damit wurde aber noch kein Objekt erzeugt. Es wurde nur der Name für eine Variable festgelegt, die eine Referenz auf ein SGKreis-Objekt enthalten kann.
In der zweiten Zeile wird mit new SGKreis(200,100,50) ein SGKreis-Objekt erstellt (Fachbegriff: Initialisierung). Damit später noch auf den Kreis zugegriffen werden kann, wird ein Verweis auf dieses SGKreis-Objekt in der Objektvariablen gespeichert.

Hinweis

Man kann sich die Referenz, die in einer Objektvariablen gespeichert wird, wie eine Postanschrift vorstellen. Mit einer Adresse kann man das zugehörige Haus finden. Die Adresse kann auch an verschiedenen Stellen gespeichert werden, z.B. im Telefonbuch oder im Handy eines Freundes: Sie verweisen aber alle auf dasselbe Haus. Das Objekt, das hinter der Referenz steht, ist also immer das gleiche.

Aufgaben

  1. Gib die folgenden Zeilen in die Direkteingabe ein und beschreibe mithilfe der Begriffe Referenz, Objekt und Objektvariable, was in dieser Situation passiert:
    SGE.SGKreis einLetzterKreis;
    einLetzterKreis = nochEinKreis;
    einLetzterKreis.setzeFarbe(1,0,0);
  2. Stelle eine Vermutung auf, was das Ändern der Farbe im folgenden Quelltext bewirkt. Gib die Anweisungen dann in die Direkteingabe ein und beschreibe deine Beobachtungen.
    SGE.SGKreis kreis;
    kreis = new SGKreis(70,0,25);
    kreis = new SGKreis(150,0,30);
    kreis.setzeFarbe(0,1,1);
  3. Frau Meier und ihr Mann haben ein gemeinsames Bankkonto. Beide haben eine eigene EC-Karte, mit der sie an Bankautomaten Geld von dem Konto abheben können.
    Vergleiche diese Situation mit der vorherigen Situation in BlueJ und ordne die Begriffe Referenz, Objekt und Objektvariable zu.