Wirtschaftsinformatik (Bachelor-Studiengang): Programmierung (1. Semester)

Sie sind hier: StartseiteWirtschaftsinformatikProgrammierung Java (Kurs 1): Attribute

HB / CM, Kurs vom 01.04.2002 - 30.09.2002

Programmierung Java (Kurs 1): Attribute: Attribute (Die Deklaration von Attributen. Wozu dient die Angabe des Datentyps? Wozu dienen die Attributmodifizierer? Welche Auswirkungen haben die Attributmodifizierer? Der Zugriffsmodifizierer private. Der Zugriffsmodifizierer static).

Attribute

Die Deklaration von Attributen

Attribute werden im Rumpf der Klasse deklariert.

Programmierregel: Java-Code-Conventions: Erst Attribute, dann Konstruktoren, dann Methoden.

Wie muss eine Attributdeklaration aussehen?

Sie kann aus bis zu drei Teilen bestehen:

Hinweis: Jede Attributdeklaration muss mit einem Semikolon enden!

AttributmodifiziererDatentypAttributbezeichner;
private String inhalt;

Wozu dient die Angabe des Datentyps?

Durch den Datentyp wird festgelegt

Java ist eine streng typisierte Sprache!

Welche Datentypen gibt es in Java?

Es gibt in Java zwei Arten von Datentypen:

  1. primitive Datentypen (elementare), die vordefiniert sind
  2. Referenzdatentypen, die selbst gestaltet werden können

Hinweis: Da die primitiven Datentypen in Java keine Klassen sind, ist Java aus puristischer Sicht keine rein objektorientierte Sprache (wie z.B. Smalltalk, Eiffel)!

Die Verwaltung von Referenzdatentypen ist zeitaufwendiger als die Verwaltung von primitiven Datentypen.

Aus Performancegründen wurde in Java bewusst ein Kompromiss gemacht.

Welche primitiven Datentypen gibt es in Java?

  1. numerische Datentypen
    • ganzzahlige Datentypen (byte, short, int, long, char)
    • Gleitkommadatentypen (float, double)
  2. boolean (Achtung: Schlüsselwort!)

Wozu dienen die Attributmodifizierer?

Mit ihrer Hilfe kann über Angabe des Datentyps hinaus das Verhalten der Attribute beeinflusst werden.

Welche Attributmodifizierer gibt es?

  1. public, protected, private
  2. static, final, transient, volatile

Es dürfen mehrere Attributmodifizierer angegeben werden. Jedoch nicht beliebig:

Programmierregel: Wenn mehrere Attributmodifizierer angegeben werden, sollen sie in der gerade angegebenen Reihenfolge erscheinen.

Beispiel:
public static (2 Zugriffsmodifizierer) int (Datentyp) zaehler (Bezeichner);
private static final (3 Zugriffsmodifizierer) double (Gleitkommadatentyp) normwert (Bezeichner);

Welche Auswirkungen haben die Attributmodifizierer?

Die Attributmodifizierer der Gruppe 1 legen fest, von welchen Stellen des Programms aus auf das zugehörige Attribut zugegriffen werden kann ("Zugriffsmodifizierer").

Die Attributmodifizierer der Gruppe 2 dienen verschiedenen Zwecken.

Der Zugriff auf ein Attribut ist vom Code innerhalb der eigenen Klasse aus (fast) immer möglich (siehe Information.java: inhalt).

Quelltext überspringen

Java-Beispiel: import java.io.*; //wegen IOException, InputStreamReader, BufferedReader
class Information
{
private String inhalt;
Information(String info)
{
inhalt = info;
}
void schreibe()
{
System.out.print(inhalt);
}
void erneuere(String info)
{
inhalt = info;
}
void erfasse() throws IOException
{
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
inhalt = eingabe.readLine();
}
}

Der Zugriffsmodifizierer private

Durch den Zugriffsmodifizierer private wird festgelegt, dass der Zugriff auf das Attribut ausschließlich vom Code innerhalb der eigenen Klasse aus möglich ist (siehe Information.java / HalloMain.java: letztere kann auf das Attribut inhalt nicht zugreifen).

Damit wird erreicht, dass der Zugriff auf das Attribut nur über die Methoden (und Konstruktoren) der eigenen Klasse möglich ist.

Quelltext überspringen

Beispiel: zur Verdeutlichung von private
class TestKlasse
{
int x;
private int y;
void verändereY(int wert)
{
y = wert
}
void schreibe()
{
System.out.print( x + "|" + y + "\n");
}
}
class PrivateText
{
public static void main(String[] args)
{
TestKlasse testObjekt1 = new TestKlasse();
TestObjekt1.schreibe(); // Ausgabe: 0 | 0
testObjekt1.x = 100; // Okay!
testObjekt1.schreibe(); // Ausgabe: 100 | 0

falsch:
testObjekt1.y = 200; // Nicht möglich!
testObject1.x = testObject1.y; // Nicht möglich!
System.out.print(testObjekt1.y); // Nicht möglich!

wieder richtig:
testObjekt1.verändereY(200);
testObject1.schreibe(); // Ausgabe 100 | 200
}
}

Durch private werden Attribute vor dem Zugriff "von außen" geschützt.

Zustandsänderungen sind nur in dem Maß möglich, wie sie vom Programmierer zugelassen werden ("Datenkappselung", "encapsulation").

Hinweis: Die Möglichkeit zur Datenkappselung ist eines der drei charakteristischen Merkmale objektorientierter Programmierung!

Der Zugriffsmodifizierer private dient zur Datenkapselung.

Programmierregel: Attribute einer Klasse sollten immer als private deklariert werden! Es sei denn, es gibt gute Gründe dies nicht zu tun (z.B. bei Vererbung).

Wenn kein Zugriffsmodifizierer angegeben wird, ist der Zugriff auf das Attribut von allen Methoden (und Konstruktoren) aller Klassen desselben Packages aus möglich.

Sie werden als friendly betrachtet.

Von Klassen außerhalb des Packages ist der Zugriff auf das Attribut nicht möglich.
Der Zugriffsmodifizierer public hebt diese Beschränkung auf.

Hinweis: Direkter Zugriff von überall her möglich (unerwünscht!)!

Der Zugriffsmodifizierer protected wird erst relevant im Zusammenhang mit Vererbung.

Der Zugriffsmodifizierer static

Der Attributmodifizierer static legt fest, dass für das zugehörige Attribut im Hauptspeicher unabhängig von der Anzahl zu erzeugender Objekte nur genau einmal Speicherplatz angelegt wird.

Da alle Objekte einer Klasse in ihrem static-Attribut jeweils denselben Wert haben, sagt man, dass static-Attribute Klasseneigenschaften haben / beschreiben (Klassenattribut).

Die static-Attribute einer Klasse werden bereits beim Laden einer Klasse angelegt.
Sie existieren unabhängig davon, ob überhaupt Objekte der Klasse erzeugt werden.
Wenn sie nicht private sind, kann sogar direkt auf sie zugegriffen werden.
static-Attribute werden typischerweise dann eingesetzt, wenn alle Objekte der Klasse dieselbe Information benötigen.

klassisches Beispiel: Simulation (Anzahl, Zeit beim Autorennen)

Mit einer Deklaration können mehrere Attribute gleichzeitig deklariert werden.

private int x, y, z, startwert

ist gleichbedeutend mit

private int x
private int y
private int z
private int startwert

Vorteile der letzteren Schreibweise:

Attribute können im Rahmen ihrer Deklaration initialisiert werden.