Attribute sind Eigenschaften
Attribute sind die Eigenschaften eines Objektes. Alle Objekte, die der gleichen Klasse angehören, haben die gleichen Attribute. Allerdings können sich die Attributwerte der einzelnen Objekte unterscheiden.
Attribute sind besondere Variablen, die im Kopf der Klassendeklaration festgelegt werden.
public class Schiff
{
private String name;
private int gewicht;
public Schiff()
{
}
}
In diesem Quelltext sind name und gewicht die beiden einzigen Attribute der Klasse Schiff. Diese Attribute können innerhalb der Klasse von allen Methoden der Klasse benutzt werden. Außerhalb der Klasse sind die beiden Attribute nicht zugänglich, weil sie mit dem Zugriffsmodifizierer private deklariert wurden.
Solche als private deklarierten Attribute sind nur innerhalb der Klasse gültig; selbst Tochterklassen können nicht auf private -Attribute zugreifen. Will man möglich machen, dass ein Attribut von außen sichtbar ist, so muss man es als public deklarieren. Um private-Attribute zu lesen oder zu verändern, bedarf es sondierender bzw. verändernder Methoden.
Die verschiedenen Objekte einer Klasse besitzen dann die in der Klassendefinition festgelegten Attribute, und logischerweise haben dann alle Objekte die gleichen Attribute. Jedes Schiff-Objekt hat also einen Namen vom Typ String und ein Gewicht vom Typ int. Allerdings können sich die Attributwerte der einzelnen Objekte voneinander unterscheiden. So kann der Name von Schiff-Objekt Nr. 1 "Helene" sein, der von Schiff-Objekt Nr. 2 "Klaus" - nur als Beispiel.
Die Gesamtheit aller Attributwerte bestimmt den Status eines Objektes.
Attribute und Instanzvariablen
Ein anderer Begriff, der oft verwendet wird, ist der Begriff Instanzvariable. Die Begriffe Attribut und Instanzvariable sind nicht unbedingt synonym. Wir machen uns das an einem kleinen Beispiel klar. Die Klasse Kreis im folgenden Quelltext besitzt drei Instanzvariablen: xPosition, yPosition und radius.
class Kreis
{
double xPosition, yPosition, radius; // Instanzvariablen
...
}
Diese Instanzvariablen könnte man durchaus auch als Attribute bezeichnen. Was aber ist mit den Attributen Umfang und Fläche, die über den Radius für jeden Kreis definiert sind. Es handelt sich zweifelsfrei um Attribute eines Kreises bzw. eines Kreis-Objektes. Aber diese beiden Attribute werden nicht durch Instanzvariablen realisiert, sondern aus der Instanzvariabler radius berechnet. Man kann also ohne weiteres Getter-Methoden für die Fläche und den Umfang des Kreises schreiben:
public double getUmfang()
{
return Math.PI * 2 * radius;
}
public double getFlaeche()
{
return Math.PI * radius * radius;
}
Instanz- und Klassenattribute
Wird ein Attribut einer Klasse als static bezeichnet:
private static int anzahl;
so hat dieses Attribut bei jedem Objekt der Klasse den gleichen Wert. Solche Attribute werden auch als Klassenattribute bezeichnet, da sie keine Eigenschaft eines einzelnen Objektes sind, sondern eine Eigenschaft aller Objekte, also eine Eigenschaft der ganzen Klasse [4].
Ein Klassen-Attribut kann man beispielsweise einsetzen, wenn jedes neu erzeugte Objekt einer Klasse eine eigene laufende Nummer haben soll.
Während Klassen-Attribute wie Variablen jederzeit verändert werden können, sind Klassen-Konstanten nicht mehr veränderbar, nachdem ihr Wert festgelegt wurde.
private static final int anzahl = 100;
Das Schlüsselwort final legt das Klassenattribut als Konstante fest. Ein bekanntes Beispiel für solche Konstanten sind Math.PI sowie die Farb-Konstanten der Klasse Color wie beispielsweise Color.RED oder Color.BLUE.
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.
- Kecher et al.: UML 2.5 - Das umfassende Handbuch, Rheinwerk Computing 2021