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 

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;

    }

   

}