Home > Informatik > Stufe EF > Lernbausteine

Attribute und Instanzvariablen

Was sind eigentlich Attribute? Diese Frage taucht im Informatikunterricht immer wieder auf, und als Schüler sollte man diese Frage natürlich im Schlaf beantworten können. In diesem Lernbaustein wird der Begriff "Attribut" am Beispiel der Klasse Circle aus dem Shapes-Projekt der Folge 1 und der Folge 2 erklärt. Diese Seite richtet sich eindeutig an Programmier-Anfänger(innen), nicht an Fortgeschrittene.

Betrachten Sie die folgende Skizze:

Datenkapselung und manipulierende Methoden mit/ohne Parameter. Weitere Erläuterungen siehe Text...

Diese Abbildung soll ein Objekt der Klasse Circle darstellen, zum Beispiel das Objekt sonne aus dem Workshop 2 der Folge 1. Wenn wir mit der rechten Maustaste auf den roten Kasten klicken, der für das Objekt sonne steht, dann sehen wir im Objektinspektor fünf Instanzvariablen mit ihren jeweiligen aktuellen Werten:

Siehe Erläuterungen im folgenden Text...

Diese fünf Instanzvariablen beschreiben den Zustand oder Status eines Circle-Objektes vollständig. In unserem Beispiel handelt es sich um einen sichtbaren blauen Kreis mit 30 Pixeln Durchmesser an den Koordinaten (20,60).

Attribute und Instanzvariablen

In Schulbüchern der Informatik ist oft von "Attributen" die Rede, wenn eigentlich Instanzvariablen gemeint sind. Wir wollen hier kurz auf den Unterschied zwischen diesen beiden Begriffen eingehen.

Unter einem Attribut versteht man in der Informatik eine Eigenschaft eines Objektes. Ein Kreis-Objekt kann beispielsweise folgende Attribute besitzen:

  • Durchmesser
  • Position
  • Farbe
  • Sichtbarkeit

Wenn man die Klasse Kreis oder Circle programmiert, muss man überlegen, wie man diese Attribute realisiert. Dazu dienen die Instanzvariablen. In der Klasse Circle aus dem Shapes-Projekt beispielsweise wird das Attribut Durchmesser durch die Instanzvariable diameter realisiert, das Attribut Position durch die beiden Instanzvariablen xPosition und yPosition, und das Attribut Farbe durch die Instanzvariable color.

private boolean isVisible;

Diese Instanzvariable entscheidet darüber, ob man den Kreis sehen kann oder nicht, sie steht also für das Attribut Sichtbarkeit. Wenn isVisible den Wert true hat, so ist der Kreis sichtbar. Hat isVisible den Wert false, kann man den Kreis nicht sehen. Andere Werte kann isVisible nicht annehmen, da der Datentyp boolean nur diese beiden Werte zulässt.

Wenn Sie mehr über Datentypen und ihre Verwendung lernen möchten, gehen Sie bitte auf den Lernbaustein "Datentypen".

private int diameter;

Diese Instanzvariable definiert das Attribut Durchmesser des Kreises. Es handelt sich um eine ganze Zahl, die anfangs den Wert 30 hat. Wenn Sie also einen neuen Kreis erzeugen, hat dieser einen Durchmesser von 30 Pixeln.

private int xPosition;
private int xPosition;

Die beiden Instanzvariablen xPosition und yPosition legen das Attribut Position eines Kreis-Objektes fest.

private String color;

Die letzte Instanzvariable - eine Zeichenkette - bestimmt die Farbe des Kreises. Anfangs wird der Wert von color auf "blue" gesetzt.

Das Schlüsselwort private

Dieses Schlüsselwort sorgt dafür, dass man die Instanzvariablen eines Kreis-Objektes nicht "von außen" einsehen kann. Sie sind nach außen hin verborgen. In der Abbildung 1 wird das durch den geschlossenen Kreis verdeutlicht, der um die Instanzvariablen gelegt ist.

Wenn Sie in BlueJ mit der rechten Maustaste auf den roten Objekt-Kasten klicken, der ein Circle-Object darstellt, dann werden Sie keine einzige dieser Instanzvariablen sehen. Die Methoden der Klasse Circle sind dagegen nach außen hin sichtbar. Vor den Methoden steht ja auch nicht das Wort private, sondern das Wort public, welches das genaue Gegenteil bewirkt.

Manipulierende Methoden und Attribute

Wie Sie in dem Lernbaustein "manipulierende Methoden" vielleicht schon gelesen haben, dienen manipulierende Methoden (bzw. Aufträge) dazu, Attribute der Objekte zu verändern.

Wenn Sie mit new Circle() ein neues Circle-Objekt erzeugt haben, dann ist dieses zunächst nicht auf der Zeichenfläche sichtbar. Der Grund: Die Instanzvariable isVisible hat den Wert false.

Nach außen hin ist diese Instanzvariable nicht sichtbar. Schuld daran ist das Schlüsselwort private, das vor der Instanzvariablen steht. Trotzdem können Sie als Benutzer den Wert dieser Instanzvariablen ändern, nämlich mit Hilfe der manipulierenden Methode makeVisible().

Diese Methode ist eine öffentlich zugängliche Methode, kann also von außen her benutzt werden. Weitere öffentlich zugängliche Methoden sind in der Abbildung oben auf dieser Seite eingezeichnet. Mit changeSize() kann zum Beispiel der Wert der Instanzvariable diameter geändert werden. Allerdings möchte diese Methode wissen, wie groß der neue Durchmesser des Kreises sein soll, daher reicht es nicht, die Methode changeSize() einfach aufzurufen, sondern Sie müssen der Methode auch mitteilen, welchen Wert der neue Durchmesser haben soll.

Ähnlich ist es mit der Methode changeColor(), auch diese manipulierende Methode benötigt eine Information von außen (einen Parameter), damit sie die neue Farbe des Objektes festlegen kann, die in color gespeichert ist.

Status eines Objektes

In diesem Zusammenhang ist ein neuer Fachbegriff interessant, der immer wieder im Zusammenhang mit Objekten und deren Attributen auftaucht, nämlich der Status eines Objektes.

Status eines Objektes

Unter dem Status eines Objektes versteht man die Gesamtheit der Werte aller Instanzvariablen eines Objektes.

Den Status des Objektes sonne der Klasse Circle könnte man umgangssprachlich vielleicht so beschreiben:

isVisible: true
diameter: 85
xPosition: 140
yPosition: 260
color: "yellow"

Damit hätte man den Status (Zustand) eines Circle-Objektes festgelegt. Ein zweites Circle-Objekt, wie zum Beispiel mond, hat die gleichen Instanzvariablen wie sonne, diese können aber völlig andere Werte haben. Somit hat mond dann auch einen anderen Status, zum Beispiel:

isVisible: true
diameter: 47
xPosition: 40
yPosition: 60
color: "blue"

Haben zwei Objekte, bei denen alle Instanzvariablen die gleichen Werte haben, nicht den gleichen Status?

Nein! Selbst dann, wenn alle fünf Instanzvariablen die gleichen Werte hätten, würde mond einen anderen Status besitzen als sonne, zwei Objekte unterscheiden sich noch in mindestens zwei weiteren Eigenschaften:

  1. Bezeichner: Jedes Objekt hat einen individuellen Namen.
  2. Adresse: Zwei Objekte der gleichen Klasse befinden sich an unterschiedlichen Stellen im Speicher des Rechners.