Sie haben jetzt einen unmittelbaren Eindruck davon bekommen, was Klassen und Objekte in Java sind. In den letzten Übungen haben Sie selbst eine Klasse programmiert (Zeichnung) und darin vier oder mehr Objekte einer anderen Klasse eingebunden.
1.4.1 Objekte im Alltag
Versuchen wir einmal, den Begriff "Objekt" zu definieren. Wir können uns dabei etwas an dem Objekt-Begriff aus dem Alltag orientieren.
Objekte im Alltag
Im Alltag ist eigentlich alles ein Objekt, was man mit den Händen anfassen kann: Ein Auto, ein Hund, ein Buch und so weiter.

Ein Auto als Objekt
Autor: Ulrich Helmich 2025, Lizenz: Public domain
Objekte haben bestimmte Eigenschaften oder Attribute. Ein Auto hat eine Farbe, eine gewisse Größe, eine bestimmte Leistung, eine Höchstgeschwindigkeit und so weiter. Auch für Hunde und Bücher kann man jede Menge Eigenschaften finden, die wir hier nicht weiter aufzählen müssen.
Neben konkreten Objekten, die man anfassen kann, gibt es aber auch eher abstrakte Objekte wie beispielsweise ein Bankkonto, das man nicht anfassen kann, das aber dennoch existiert. Auch ein Objekt wie ein Bankkonto hat Attribute wie Name des Eigentümers, Kontostand und so weiter.
Neben diesen Eigenschaften zeichnen sich Objekte aber auch durch bestimmte Fähigkeiten aus bzw. durch Operationen, die sie durchführen oder die man mit ihnen durchführen kann.

Ein Auto als Objekt
Autor: Ulrich Helmich 2025, Lizenz: Public domain
Ein Auto beispielsweise kann beschleunigen, fahren und bremsen, man kann es volltanken, man kann die Scheinwerfer einschalten und so weiter. Auf ein Bankkonto kann man Geld einzahlen, man kann Überweisungen tätigen, man kann Kontoauszüge abfragen etc.
Wir halten fest: Konkrete und abstrakte Objekte des Alltags zeichnen sich durch bestimmte Eigenschaften oder Attribute aus und sie haben bestimmte Fähigkeiten bzw. man kann Operationen mit ihnen durchführen.
1.4.2 Objekte in Java: Attribute und Instanzvariablen
In Java (und anderen Programmiersprachen) werden die Eigenschaften bzw. Attribute eines Objekts durch Instanzvariablen realisiert. Als Beispiel habe ich Ihnen einmal die Attribute und Instanzvariablen der Objekte aufgelistet, die aus der Klasse Circle (Shapes-Projekt) erzeugt werden können:
Attribut | Instanzvariable |
X-Position | int xPosition |
Y-Position | int yPosition |
Durchmesser | int diameter |
Farbe | String color |
Sichtbarkeit | boolean isVisible |
Schauen wir uns dazu die ersten Zeilen des Quelltextes der Klasse Circle an:

Die ersten Quelltext-Zeilen der Klasse Circle
Die Instanzvariablen werden im Kopf der Klasse deklariert, noch vor dem Konstruktor. Die Aufgabe des Konstruktors ist dann die Initialisierung dieser Variablen mit Default-Werten.
Unterschied Attribut / Instanzvariable
Selbst in dem bekannten BlueJ-Buch ("Objects first") von Barnes und Kölling [2] wird der Begriff "Attribut" nicht immer korrekt verwendet. In dem Buch von Lahres et al. [1] wird dagegen streng unterschieden zwischen diesen beiden Begriffen.
Attribute sind demnach die von außen beobachtbaren Eigenschaften eines Objektes. Sie können direkt aus den Instanzvariablen übernommen oder aus diesen berechnet werden.
In der obigen Tabelle wird jedes Attribut durch eine Instanzvariable repräsentiert. Die X-Position eines Kreises (ein Attribut) wird durch die Instanzvariable xPosition realisiert. Die Sichtbarkeit des Objektes wird durch die Instanzvariable isVisible verwirklicht.
Es gibt aber auch Attribute eines Kreises, die nicht durch eine Instanzvariable abgebildet werden. Der Umfang eines Kreises ist sicherlich ein typisches Attribut, genau wie auch der Flächeninhalt eines Kreises. Für beide Attribute gibt es aber keine Instanzvariable in der Definition der Klasse Circle. Trotzdem könnte man eine Methode schreiben, die genau diese beiden Attribute aus der Instanzvariable diameter berechnet und zurückliefert.
1.4.3 Objekte in Java: Methoden
Manipulierende und sondierende Methoden
Die Operationen, die man auf ein Java-Objekt ausführen kann, werden durch Methoden realisiert. Dabei unterscheidet man - nach Barnes und Kölling - manipulierende und sondierende Methoden und nach den meisten anderen Autoren Setter- und Getter-Methoden oder kurz Setter und Getter.
Manipulierende Methoden verändern den Inhalt von Instanzvariablen, während sondierende Methoden die Instanzvariablen auswerten und direkt den Inhalt zurückliefern oder aus den Werten dieser Variablen ein Ergebnis berechnen und dieses dann zurückgeben.

Analyse der Methode moveHorizontal() der Klasse Circle
Autor: Ulrich Helmich 2025, Lizenz: Public domain
Die Arbeitsweise einer manipulierenden Methode wollen wir uns einmal am Beispiel der Methode moveHorizontal() der Klasse Circle aus dem Shapes-Projekt klar machen.
Zunächst wird das Bild des Kreises an der alten Position gelöscht. Dies geschieht durch den Aufruf der Circle-Methode erase().
Dann wird der Wert der Instanzvariable xPosition manipuliert. Und zwar wird der Wert von xPosition um den Wert des Parameters distance erhöht. Wenn distance einen negativen Wert hat, wird xPosition entsprechend verringert.
Schließlich wird das Bild des Kreises an der neuen Position wieder dargestellt, durch Aufrufen der Circle-Methode draw().
Setter-Methoden
Setter-Methoden sind manipulierende Methoden, die genau eine Instanzvariable verändern. Der Name einer solchen Setter-Methode setzt sich aus dem Wort "set" und dem Namen der zu manipulierenden Instanzvariablen zusammen.
Eine Methode, die den Radius eines Kreises verändern kann, würde nach dieser Vereinbarung setRadius() heißen. Wenn man unbedingt auf Deutsch programmieren möchte, würde man setzeRadius() als Methoden-Bezeichner wählen.
Getter-Methoden
Getter-Methoden sind das Gegenstück der Setter-Methoden. Sie lesen genau eine Instanzvariable aus und liefern deren Wert als Ergebnis zurück. Der Name einer Getter-Methode besteht normalerweise aus dem Wort "get" und dem Namen der Instanzvariable, also beispielsweise getRadius() bzw. gibRadius().
Die Methoden der Circle-, Square- und Triangle-Objekte aus dem Shapes-Projekt von Barnes und Kölling halten sich leider nicht an diese Syntax. Hier heißt eine Methode zur Veränderung der Farbe changeColor() und nicht etwa setColor(). Genau so ist es mit changeSize(), mit dem der Durchmesser des Objektes verändert werden kann.
Parameter
Wenn man den Durchmesser eines Kreises verändern will, muss dem Objekt mitgeteilt werden, welchen neuen Durchmesser der Kreis denn genau haben soll. Da ein Objekt keine Gedanken lesen kann, muss man der Methode diese Information beim Aufruf mitgeben. Dazu dienen die Parameter im Kopf der Methode.
Schauen wir uns ein solche Methode aus dem Quelltext der Klasse Circle an:
public void moveHorizontal(int distance) { erase(); xPosition += distance; draw(); }
Diese Methode soll den Kreis um eine bestimmte Distanz horizontal bewegen. Der int-Parameter distance gibt diese Distanz genau an.
Die Methode moveHorizontal(int distance) löscht zunächst den vorhandenen Kreis, erhöht dann den Wert der Instanzvariable xPosition um den Wert des übergebenen Parameters und zeichnet den Kreis anschließend neu.
Aufgabe 1.4.1 #1
Ergänzen Sie die Klasse Circle um eine Methode
public void moveDiagonal(int xDistance, int yDistance)
welche den Kreis gleichzeitig in horizontaler und vertikaler Richtung bewegen kann.
Testen Sie die Methode dann.
Eine Methode kann natürlich mehr als einen Parameter besitzen. Betrachten wir dazu die Methode changeSize() der Klasse Triangle:
public void changeSize(int newHeight, int newWidth) { erase(); height = newHeight; width = newWidth; draw(); }
Hier werden zwei Instanzvariablen gleichzeitig verändert. Eine klassische Setter-Methode ist das dann nicht mehr, aber auf jeden Fall eine manipulierende Methode.
Aufgabe 1.4.1 #2
Ergänzen Sie die Klasse Circle um eine Getter-Methode, die den Umfang des Kreises zurück liefert. Die Formel zur Berechnung des Umfangs kennen Sie sicherlich noch aus dem Schulunterricht.
Und wenn Sie schon mal dabei sind: Schreiben Sie auch noch eine Getter-Methode zur Berechnung des Flächeninhaltes.
Aufgabe 1.4.1 #3 (Experten)
Umfang und Fläche sind Attribute eines jeden Kreises. Allerdings werden in der Klasse Circle diese Attribute nicht durch Instanzvariablen repräsentiert, sondern müssen aus dem Durchmesser (diameter) berechnet werden.
Schreiben Sie jetzt eine Setter-Methode, die den neuen Flächeninhalt des Kreises als Parameter übernimmt und dann den Durchmesser des Kreises entsprechend anpasst.
1.4.2 Zusammenfassung der Folge 1
Ich habe ChatGPT die vier HTML-Seiten der Folge 1 zur Verfügung gestellt und dann den Auftrag gegeben: "Erstelle aus diesen vier Seiten eine übersichtliche Zusammenfassung." Das Ergebnis, das dabei herausgekommen ist, finde ich recht gut, viel besser hätte ich es auch nicht machen können.
KI-Zusammenfassung von ChatGPT 4.0
Java – nach wie vor aktuell
Java zählt trotz moderner Konkurrenz weiterhin zu den wichtigsten Programmiersprachen – nicht nur im Schulunterricht und an Hochschulen, sondern auch im professionellen Umfeld. Gründe hierfür sind die klare Umsetzung objektorientierter Konzepte, Plattformunabhängigkeit, ein reichhaltiges Ökosystem, die Bedeutung für Unternehmensanwendungen und eine konstante Weiterentwicklung.
BlueJ – eine didaktisch reduzierte Entwicklungsumgebung
BlueJ wurde speziell für Einsteiger entwickelt und bietet eine einfache, visuelle Oberfläche. Es unterstützt das Lernen objektorientierter Konzepte durch direkte Interaktion mit Klassen und Objekten und stellt Methoden und Instanzvariablen grafisch dar. BlueJ ist kostenlos, läuft auch auf älteren Systemen und ist ideal für den Einsatz im Unterricht geeignet.
Erste Schritte mit Objekten
Im Shapes-Projekt lernen Sie, wie man aus Klassen wie Circle, Triangle oder Square Objekte erzeugt. Durch die Verwendung von Methoden wie makeVisible() oder moveHorizontal() kann man diese Objekte sichtbar machen und manipulieren.
Besonders hilfreich ist der Objekt-Inspektor in BlueJ, mit dem sich die Instanzvariablen eines Objekts grafisch anzeigen lassen. So wird sichtbar, wie sich Objekte durch Methodenaufrufe verändern.
Eigene Klassen schreiben
Am Beispiel einer Klasse Zeichnung wird gezeigt, wie man eigene Java-Klassen mit Instanzvariablen und Methoden erstellt. Der Konstruktor initialisiert die Objekte, während eine separate Methode wie zeichne() alle weiteren Zeichenbefehle zusammenfasst.
Grundlagen von Klassen, Objekten und Methoden
Objekte haben Eigenschaften (Attribute) und Fähigkeiten (Methoden). In Java werden die Attribute durch Instanzvariablen umgesetzt, z. B. xPosition oder color. Methoden lassen sich in manipulierende (z. B. changeSize()) und sondierende (z. B. getDiameter()) Methoden unterscheiden.
Parameter übergeben bei einem Methodenaufruf zusätzliche Informationen. Eine Methode wie moveHorizontal(int distance) verschiebt ein Objekt z. B. um eine angegebene Pixelanzahl.
Beispiele und Aufgaben
- Objekte erzeugen, sichtbar machen, bewegen und färben.
- Eigene Methoden entwickeln (z. B. moveDiagonal(int, int)).
- Getter-Methoden schreiben, um Umfang und Fläche zu berechnen.
- Komplexere Klassen wie Rectangle oder Pentangle entwickeln.
Die Arbeit mit BlueJ macht Konzepte der OOP von Anfang an greifbar und ermöglicht einen intuitiven Einstieg in die Programmierung mit Java.
Quellen:
- Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.
- Barnes, Kölling: Java lernen mit BlueJ - Objects first. Pearson-Verlag 2019.
- Ullenboom: Java ist auch eine Insel, Rheinwerk Computing 2023.