Beruflich Dokumente
Kultur Dokumente
Datentyp Datenstruktur
Spezikation des Typs von Datenobjekten logische Ordnung von Elementen eines Datentyps zur (efzienten) Speicherung, Verwaltung, Zugriff auf die Elemente Datentyp + Operationen (ein Plan fr Objekte) konkrete Datenstruktur (eine Instanz einer Klasse)
1
Klasse Objekt
Beispiel:
Rationale Zahlen
Eine rationale Zahl q Q hat die Form q = x , wobei x, y Z. y x und y heien Zhler und Nenner von q. Ein Objekt vom Typ Rational sollte deshalb als Komponenten int-Variablen zaehler und nenner enthalten: Objekt:
zaehler nenner
zaehler nenner
3 4
Der Konstruktor ist eine Prozedur, die die Attribute des neuen Objekts initialisieren kann.
3
Der Wert einer Rational-Variable ist ein Verweis auf einen Speicherbereich.
Rational b = a;
a b
zaehler nenner
3 4
int b = a.zaehler;
a b
3
zaehler nenner
3 4
a.add(b) ruft die Operation add fr a mit dem zustzlichen aktuellen Parameter b auf:
zaehler nenner
3 4
Rational c = a.add(b);
zaehler nenner
3 4
zaehler nenner
1 2
zaehler nenner
1 2
zaehler nenner
2 8
zaehler nenner
3 4
a = a.add(b);
zaehler nenner
3 4
zaehler nenner
1 2
zaehler nenner
1 2
zaehler nenner
2 8
Die Operationen auf Objekten einer Klasse heien auch Methoden, genauer: Objekt-Methoden.
Zusammenfassung:
Eine Klassen-Deklaration besteht folglich aus Deklarationen von: Attributen fr die verschiedenen Wert-Komponenten der Objekte; Konstruktoren zur Initialisierung der Objekte; Methoden, d.h. Operationen auf Objekten.
public class Rational { // Attribute: private int zaehler, nenner; // Konstruktoren: public Rational (int x, int y) { zaehler = x; nenner = y; } public Rational (int x) { zaehler = x; nenner = 1; } ...
9
// Objekt-Methoden: public Rational add (Rational r) { int x = zaehler * r.nenner +r.zaehler * nenner; int y = nenner * r.nenner; return new Rational (x,y); } public boolean equals (Rational r) { return (zaehler * r.nenner == r.zaehler * nenner); } public String toString() { if (nenner == 1) return "" + zaehler; if (nenner > 0) return zaehler +"/"+ nenner; return (-zaehler) +"/"+ (-nenner); } } // end of class Rational
10
Bemerkungen:
Jede Klasse sollte in einer separaten Datei des entsprechenden Namens stehen. Die Schlsselworte private bzw. public klassizieren, fr wen die entsprechenden Members sichtbar, d.h. zugnglich sind.
private heit: nur fr Members der gleichen Klasse sichtbar. public heit: innerhalb des gesamten Programms sichtbar.
Nicht klassizierte Members sind nur innerhalb des aktuellen Package sichtbar.
11
Konstruktoren haben den gleichen Namen wie die Klasse. Es kann mehrere geben, sofern sie sich im Typ ihrer Argumente unterscheiden. Konstruktoren haben keine Rckgabewerte und darum auch keinen Rckgabetyp. Methoden haben dagegen stets einen Rckgabe-Typ, evt. void.
12
Die Objekt-Methode inc() modiziert das Objekt, fr das sie aufgerufen wurde.
zaehler nenner
3 4
a.inc(b);
a
zaehler nenner
7 4
13
Die Objekt-Methode equals() ist ntig, da der Operator == bei Objekten die Identitt der Objekte testet, d.h. die Gleichheit der Referenz !!! Die Objekt-Methode toString() liefert eine String-Darstellung des Objekts. Sie wird implizit aufgerufen, wenn das Objekt als Argument fr die Konkantenation + auftaucht. Innerhalb einer Objekt-Methode/eines Konstruktors kann auf die Attribute des Objekts direkt zugegriffen werden.
private-Klassizierung bezieht sich auf die Klasse nicht das Objekt: die Attribute aller Rational-Objekte sind fr add sichtbar !!
14
Eine graphische Visualisierung der Klasse Rational, die nur die wesentliche Funktionalitt bercksichtigt, knnte so aussehen:
Rational zaehler : int nenner : int + add (y : Rational) : Rational + equals (y : Rational) : boolean + toString () : String
15
Achtung:
UML wurde nicht speziell fr Java entwickelt. Darum werden Typen abweichend notiert. Auch lassen sich manche Ideen nicht eindeutig oder nur schlecht modellieren :-(
16
Achtung:
UML wurde nicht speziell fr Java entwickelt. Darum werden Typen abweichend notiert. Auch lassen sich manche Ideen nicht eindeutig oder nur schlecht modellieren
17
1.1
Klassen-Attribute
Objekt-Attribute werden fr jedes Objekt neu angelegt, Klassen-Attribute einmal fr die gesamte Klasse Klassen-Attribute erhalten die Qualizierung
static.
public class Count { private static int count = 0; private int info; // Konstruktor public Count() { info = count; count++; } ... } // end of class Count
18
Modellierung:
Count static count info + Count () : int : int
Die Zusatzinformation, dass das Attribut count statisch ist, wird in in spitzen Klammern im Diagramm vermerkt. Solche Annotationen heien Stereotype.
19
count
20
count
info
21
count
a b
info info
0 1
22
count
a b c
0 1 2
23
Das Klassen-Attribut count zhlt hier die Anzahl der bereits erzeugten Objekte. Das Objekt-Attribut info enthlt fr jedes Objekt eine eindeutige Nummer. Auerhalb der Klasse Class kann man auf eine ffentliche Klassen-Variable name mithilfe von Class.name zugegreifen.
Objekt-Methoden werden stets mit einem Objekt aufgerufen ... dieses Objekt fungiert wie ein weiteres Argument :-) Funktionen und Prozeduren der Klasse ohne dieses implizite Argument heien Klassen-Methoden und werden durch das Schlsselwort static kenntlich gemacht.
24
Das Klassen-Attribut count zhlt hier die Anzahl der bereits erzeugten Objekte. Das Objekt-Attribut info enthlt fr jedes Objekt eine eindeutige Nummer. Auerhalb der Klasse Class kann man auf eine ffentliche Klassen-Variable name mithilfe von Class.name zugegreifen.
Objekt-Methoden werden stets mit einem Objekt aufgerufen ... dieses Objekt fungiert wie ein weiteres Argument Funktionen und Prozeduren der Klasse ohne dieses implizite Argument heien Klassen-Methoden und werden durch das Schlsselwort static kenntlich gemacht.
25
In
Rational knnten wir denieren: public static Rational[] intToRationalArray(int[] a) { Rational[] b = new Rational[a.length]; for(int i=0; i < a.length; ++i) b[i] = new Rational (a[i]); return b; }
Die Funktion erzeugt fr ein Feld von ints ein entsprechendes Feld von Rational-Objekten. Auerhalb der Klasse Class kann die ffentliche Klassen-Methode meth() mithilfe von Class.meth(...) aufgerufen werden.
26
In
Rational knnten wir denieren: public static Rational[] intToRationalArray(int[] a) { Rational[] b = new Rational[a.length]; for(int i=0; i < a.length; ++i) b[i] = new Rational (a[i]); return b; }
Die Funktion erzeugt fr ein Feld von ints ein entsprechendes Feld von Rational-Objekten. Auerhalb der Klasse Class kann die ffentliche Klassen-Methode meth() mithilfe von Class.meth(...) aufgerufen werden.
27
28