Sie sind auf Seite 1von 28

1

Klassen und Objekte

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

Die Daten-Komponenten eines Objekts heien Objekt-Attribute oder (kurz) Attribute.


2

Rational name ; deklariert eine Variable fr Objekte der Klasse Rational.


Das Kommando new Rational(...) legt das Objekt an, ruft einen Konstruktor fr dieses Objekt auf und liefert das neue Objekt zurck: a

a = new Rational (3,4);

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; kopiert den Verweis aus a in die Variable b:


zaehler nenner 3 4

Rational b = a;

a b

zaehler nenner

3 4

a.zaehler liefert den Wert des Attributs zaehler des Objekts a:


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.

Diese Elemente heien auch Members der Klasse.

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.

public void inc (int b) { zaehler = zaehler + b * nenner; }

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

Diskussion und Ausblick:


Solche Diagramme werden von der UML, d.h. der Unied Modelling Language bereitgestellt, um Software-Systeme zu entwerfen (Software Engineering) Fr eine einzelne Klasse lohnt sich ein solches Diagramm nicht wirklich Besteht ein System aber aus sehr vielen Klassen, kann man damit die Beziehungen zwischen verschiedenen Klassen verdeutlichen

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

Diskussion und Ausblick:


Solche Diagramme werden von der UML, d.h. der Unied Modelling Language bereitgestellt, um Software-Systeme zu entwerfen (Software Engineering) Fr eine einzelne Klasse lohnt sich ein solches Diagramm nicht wirklich Besteht ein System aber aus sehr vielen Klassen, kann man damit die Beziehungen zwischen verschiedenen Klassen verdeutlichen

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

Count a = new Count();

20

count

Count b = new Count();

info

21

count

Count c = new Count();

a b

info info

0 1

22

count

a b c

info info info

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

Online-Tutorial Java static


http://www.gailer-net.de/tutorials/java/Notes/chap25/ch25_13.html

28

Das könnte Ihnen auch gefallen