Instanzvariable
Einführung
Ein Attribut (auch Eigenschaft, Datenfeld oder Instanzvariable genannt) gilt im Allgemeinen als Merkmal, Kennzeichen, Informationsdetail etc., das einer konkreten Instanz zugeordnet ist. Daten über die Objekte werden in dieser Struktur mit ihrem Inhalt - den Attributwerten -gespeichert. Jedes Objekt repräsentiert sich somit durch die Gesamtheit seiner Attributwerte. Diese Gesamtheit aller Attributwerte bezeichnet man auch als Zustand eines Objektes (openbook.galileocomputing.de/javainsel9).
Jede Methode und jeder Konstruktor einer Klasse kann lesend und schreibend auf die Instanzvariable zugreifen.
Deklaration
Wie jede Variable müssen Instanzvariablen deklariert werden. Sie werden in der objektorientierten Programmierung in Klassen definiert. Hier muss der Datentyp und der Name der Instanzvariable festgelegt werden. Bei den Datentypen kann es sich um primitive und komplexe Datentypen handeln. Zusätzlich kann die Sichtbarkeit der Instanzvariable definiert werden. Wird keine Angabe zur Sichtbarkeit gemacht, ist die Sichtbarkeit standardmäßig public. #
private double rechnungsbetrag;
Standard
Für die Deklaration von Instanzvariablen haben sich gewisse Standards durchgesetzt. Die Einhaltung dieser Standards soll das Programm lesbarer machen und helfen, Fehler zu vermeiden. Hält man sich an die folgenden Standards, fällt es zudem anderen Programmieren leichter, sich im Quelltext zurecht zu finden:
Namensgebung
Um die Lesbarkeit von Programmen zu verbessern, hat es sich ein Standard der Benennung von Variablen etabliert. Demnach sollten
Variablennamen mit Nomen oder Adjektiven bezeichnet werden.
Der erste Buchstabe des Namens wird klein geschrieben.
Setzt sich eine Variable aus mehrere Wörtern zusammen, beginnt jedes neue Wort mit einem Großbuchstaben.
double rechnungsbetragNetto;
Sichtbarkeit
Die Sichtbarkeit von Instanzvariablen sollte als "private" gewählt werden. So wird sichergestellt, dass Daten nicht ungefiltert in die Instanzvariable hineingeschrieben und gelesen werden können. Der Zugriff auf eine private Instanzvariable erfolgt mittels einer öffentlichen (public) sondierenden-Methode. Das Zuweisen von Werten erfolgt durch verändernde-Methoden.
Der Datentyp (insbesondere primitive Datentypen) einer Instanzvariable legt fest, welche Art von Daten gespeichert werden können. Zudem wird der Wertebereich durch die Wahl des Datentyps eingeschränkt. Dennoch ist es sinnvoll die zulässigen Werte einer Instanzvariable sehr genau festzulegen.
So kann es sinnvoll sein, dass Rechnungsbeträge nur durch positive Gleitkommazahlen abgebildet werden sollen. Wählt man den Datentyp double, ist das Speichern von negativen Werten nach wie vor möglich. Eine valide Postleitzahl wiederum besteht stets aus fünf Ziffern. Das Passwort eines Mitarbeiters soll mindestens aus sechs Zeichen bestehen und mindestens eine Ziffer beinhalten. Diese Auswahl an Beispielen zeigt, dass ein Mechanismus benötigt wird, der sicherstellt, dass die Wertzuweisung von Instanzvariablen einer Qualitätskontrolle unterzogen wird.
Diese Qualitätskontrolle wird durch verändernde-Methoden realisiert. Diese Methode wird für jede Instanzvariable angelegt. Sie erhält einen Eingabeparameter, der den Wert für die Instanzvariable setzt. Bevor der Wert an die Instanzvariable übertragen wird, wird er auf Qualitätskriterien überprüft.
Beispiel
// Diese Klasse verwaltet Termine
public class Termin
{
// Deklaration von vier Instanzvariablen
// Grundsätzlich stehen die Sichtbarkeiten private, proteced und public zur Verfügung
// Standardmäßig werden Instanzvariablen jedoch mit der Sichtbarkeit private deklariert
private String datum; // Deklaration einer Instanzvariablen mit dem Namen datum und dem Datentyp String
private Kunde kunde; // Deklaration einer Instanzvariablen mit dem Namen kunde und dem komplexen Datentyp Kunde
private Mitarbeiter mitarbeiter; // Deklaration einer Instanzvariablen mit dem Namen mitarbeiter und dem komplexen Datentyp Mitarbeiter
private double rechnungsbetrag; // Deklaration einer Instanzvariablen mit dem Namen rechnungsbetrag und dem primitiven Datentyp double
// Konstruktor mit Eingabeparametern, die an die Instanzvariablen übergeben werden.
public Termin(Kunde einKunde, Mitarbeiter einMitarbeiter,String einDatum, double einRechnungsbetrag){
this.kunde=einKunde;
this.mitarbeiter=einMitarbeiter;
this.datum=einDatum;
this.rechnungsbetrag = einRechnungsbetrag;
}
// Sondierende und verändernde-Methoden für den Zugriff auf private Instanzvariablen
public double getRechnungsbetrag (){
return rechnungsbetrag;
}
public void setRechnungsbetrag (double rechnungsbetrag){
this.rechnungsbetrag = rechnungsbetrag;
}
public String getDatum(){
return datum;
}
public void setDatum (String datum){
this.datum=datum;
}
public void setMitarbeiter(Mitarbeiter mitarbeiter){
this.mitarbeiter = mitarbeiter;
}
public Mitarbeiter getMitarbeiter(){
return mitarbeiter;
}
public void setKunde(Kunde kunde){
this.kunde = kunde;
}
public Kunde getKunde(){
return kunde;
}
}