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:

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 Attribute mit ihren fünf Attributwerten:

Diese fünf Attribute 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
private boolean isVisible;
Dieses Attribut entscheidet darüber, ob man den Kreis sehen kann oder nicht. 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;
Dieses Attribut definiert den 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;
Das Attribut xPosition
bestimmt, an welcher Stelle der Zeichenfläche sich der Kreis horizontal aufhält. Ist der Wert von xPosition
klein, wird der Kreis weit links gezeichnet, bei großen Werten für xPosition
erscheint der Kreis weit rechts. Der Anfangswert von xPosition ist 20.
private int yPosition;
Das Attribut yPosition
bestimmt, an welcher Stelle der Zeichenfläche sich der Kreis vertikal aufhält. Ist der Wert von yPosition
klein, wird der Kreis weit oben gezeichnet, bei großen Werten für yPosition erscheint der Kreis weit unten. Der Anfangswert von yPosition
ist 60.
private String color;
Das letzte Attribut - 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 Attribute bzw. die Attributwerte eines Kreis-Objektes nicht "von außen" einsehen kann. Sie sind nach außen hin verborgen. In der obigen Abbildung wird das durch den geschlossenen Kreis verdeutlicht, der um die Attribute gelegt ist.
Wenn Sie in BlueJ mit der rechten Maustaste auf den roten Objekt-Kasten klicken, der ein Circle-Object darstellt, dann werden Sie kein einziges dieser Attribute sehen. Die Methoden der Klasse Kreis 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: Das Attribut isVisible
hat den Wert false
.
Nach außen hin ist dieses Attribut nicht sichtbar. Schuld daran ist das Schlüsselwort private
, das vor dem Attribut steht. Trotzdem können Sie als Benutzer den Wert dieses Attributes ä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 des Attributes 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 Eingabeparameter), damit sie die neue Farbe des Objektes festlegen kann, die im Attribut 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 aller Attributwerte 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 Attribute wie sonne
, kann aber andere Attributwerte 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 Attributwerte identisch sind, nicht den gleichen Status?
Nein! Selbst dann, wenn alle fünf Attributwerte gleich wären, hätte mond
einen anderen Status als sonne
, denn neben den sichtbaren Attributen mit ihren sichtbaren Werten gibt es unsichtbare Attribute wie zum Beispiel die Identität eines Objektes. Und zwei Objekte der gleichen Klasse besitzen immer unterschiedliche Identitäten, selbst dann, wenn alle sichtbaren Attribute die gleichen Werte haben.
Was ist eigentlich der Plural von Status?
Diese Frage taucht in meinem Informatikunterricht immer wieder auf. Der Plural des Wortes Status ist ebenfalls Status, allerdings wird hier das "u" dann lang gesprochen (siehe Duden.de).
Wenn Sie etwas mehr über Attribute wissen möchten, gehen Sie doch bitte auf meine Lexikonseite "Attribute", die ich für fortgeschrittenere Schüler(innen) geschrieben habe.