Wirtschaftsinformatik (Bachelor-Studiengang): Programmierung (1. Semester)
Sie sind hier: Startseite › Wirtschaftsinformatik › Programmierung Java (Kurs 1): Attribute
HB / CM, Kurs vom 01.04.2002 - 30.09.2002
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:
- Attributmodifizierer (kann fehlen)
- Datentyp
- Attributbezeichner (mindestens einer)
Hinweis: Jede Attributdeklaration muss mit einem Semikolon enden!
AttributmodifiziererDatentypAttributbezeichner;
private String inhalt;
Wozu dient die Angabe des Datentyps?
Durch den Datentyp wird festgelegt
- welche Werte das Attribut annehmen kann.
- welche Operationen mit den Werten des Attributs zulässig sind.
- wieviel Speicherplatz für das Attribut erforderlich ist.
Java ist eine streng typisierte Sprache!
Welche Datentypen gibt es in Java?
Es gibt in Java zwei Arten von Datentypen:
- primitive Datentypen (elementare), die vordefiniert sind
- 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?
- numerische Datentypen
- ganzzahlige Datentypen (
byte, short, int, long, char
) - Gleitkommadatentypen (
float, double
)
- ganzzahlige Datentypen (
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?
public, protected, private
static, final, transient, volatile
Es dürfen mehrere Attributmodifizierer angegeben werden. Jedoch nicht beliebig:
- Aus der Gruppe 1 immer nur höchstens einer.
- Niemals zweimal der gleiche.
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
).
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.
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:
- besser lesbar
- besser bei Änderungen zu behandeln
- jedes einzelne Attribut kann bei Bedarf kommentiert werden
Attribute können im Rahmen ihrer Deklaration initialisiert werden.