Zusammenfassung: Eine Klassen-Deklaration besteht folglich aus Deklarationen von: Attributen für die verschiedenen Wert-Komponenten der Objekte; Konstruktoren zur Initialisierung der Objekte; Methoden, d.h. Operationen auf Objekten. Diese Elemente heißen auch Members der Klasse. 347
ÔÙ Ð Ð Ê Ø ÓÒ Ð ß»» ØØÖ ÙØ ÔÖ Ú Ø ÒØ Þ Ð Ö Ò ÒÒ Ö»» ÃÓÒ ØÖÙ ØÓÖ Ò ÔÙ Ð Ê Ø ÓÒ Ð ÒØ Ü ÒØ Ýµ ß Þ Ð Ö Ü Ò ÒÒ Ö Ý Ð ÔÙ Ð Ê Ø ÓÒ Ð ÒØ Üµ ß Þ Ð Ö Ü Ò ÒÒ Ö ½ Ð ººº 348
»» Ç Ø¹Å Ø Ó Ò ÔÙ Ð Ê Ø ÓÒ Ð Ê Ø ÓÒ Ð Öµ ß ÒØ Ü Þ Ð Ö ÖºÒ ÒÒ Ö ÖºÞ Ð Ö Ò ÒÒ Ö ÒØ Ý Ò ÒÒ Ö ÖºÒ ÒÒ Ö Ö ØÙÖÒ Ò Û Ê Ø ÓÒ Ð Ü Ýµ Ð ÔÙ Ð ÓÓÐ Ò ÕÙ Ð Ê Ø ÓÒ Ð Öµ ß Ö ØÙÖÒ Þ Ð Ö ÖºÒ ÒÒ Ö ÖºÞ Ð Ö Ò ÒÒ Öµ Ð ÔÙ Ð ËØÖ Ò ØÓËØÖ Ò µ ß Ò ÒÒ Ö ½µ Ö ØÙÖÒ Þ Ð Ö Ò ÒÒ Ö ¼µ Ö ØÙÖÒ Þ Ð Ö» Ò ÒÒ Ö Ö ØÙÖÒ ¹Þ Ð Öµ» ¹Ò ÒÒ Öµ Рл» Ò Ó Ð Ê Ø ÓÒ Ð 349
Bemerkungen: Jede Klasse sollte in einer separaten Datei des entsprechenden Namens stehen. DieSchlüsselworte ÔÖ Ú Ø bzw. ÔÙ Ð klassifizieren,fürwen die entsprechenden Members sichtbar, d.h. zugänglich sind. ÔÖ Ú Ø heißt:nurfürmembersdergleichenklassesichtbar. ÔÙ Ð heißt:innerhalbdesgesamtenprogrammssichtbar. Nicht klassifizierte Members sind nur innerhalb des aktuellen Package sichtbar. 350
Konstruktoren haben den gleichen Namen wie die Klasse. Es kann mehrere geben, sofern sie sich im Typ ihrer Argumente unterscheiden. Konstruktoren haben keine Rückgabewerte und darum auch keinen Rückgabetyp. MethodenhabendagegenstetseinenRückgabe-Typ,evt. ÚÓ. ÔÙ Ð ÚÓ Ò ÒØ µ ß Þ Ð Ö Þ Ð Ö Ò ÒÒ Ö Ð 351
DieObjekt-Methode Ò µmodifiziertdasobjekt,fürdassie aufgerufen wurde. a zaehler nenner 3 4 º Ò µ a zaehler nenner 7 4 b 1 352
DieObjekt-Methode ÕÙ Ð µistnötig,daderoperator bei Objekten die Identität der Objekte testet, d.h. die Gleichheit derreferenz!!! DieObjekt-Methode ØÓËØÖ Ò µlieferteine ËØÖ Ò -DarstellungdesObjekts. Sie wird implizit aufgerufen, wenn das Objekt als Argument für die Konkantenation + auftaucht. Innerhalb einer Objekt-Methode/eines Konstruktors kann auf die Attribute des Objekts direkt zugegriffen werden. ÔÖ Ú Ø -KlassifizierungbeziehtsichaufdieKlassenichtdas Objekt:dieAttributealler Ê Ø ÓÒ Ð-Objektesindfür sichtbar!! 353
Eine graphische Visualisierung der Klasse Rational, die nur die wesentliche Funktionalität berücksichtigt, könnte so aussehen: Rational zaehler : int nenner : int + + + add (y : Rational) : Rational equals (y : Rational) : boolean tostring () : String 354
Diskussion und Ausblick: Solche Diagramme werden von der UML, d.h. der Unified Modelling Language bereitgestellt, um Software-Systeme zu entwerfen ( Software Engineering) Für 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 für Java entwickelt. Darum werden Typen abweichend notiert. Auch lassen sich manche Ideen nicht eindeutig oder nur schlecht modellieren :-( 355
Diskussion und Ausblick: Solche Diagramme werden von der UML, d.h. der Unified Modelling Language bereitgestellt, um Software-Systeme zu entwerfen ( Software Engineering) Für 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 für Java entwickelt. Darum werden Typen abweichend notiert. Auch lassen sich manche Ideen nicht eindeutig oder nur schlecht modellieren :-( 356
10.1 Klassen-Attribute Objekt-Attribute werden für jedes Objekt neu angelegt, Klassen-Attribute einmal für die gesamte Klasse :-) Klassen-AttributeerhaltendieQualifizierung Ø Ø. ÔÙ Ð Ð ÓÙÒØ ß ÔÖ Ú Ø Ø Ø ÒØ ÓÙÒØ ¼ ÔÖ Ú Ø ÒØ Ò Ó»» ÃÓÒ ØÖÙ ØÓÖ ÔÙ Ð ÓÙÒØ µ ß Ò Ó ÓÙÒØ ÓÙÒØ Ð ººº л» Ò Ó Ð ÓÙÒØ 357
Modellierung: Count + + static count info : int : int + Count () Die Zusatzinformation, dass das Attribut ÓÙÒØ statisch ist, wird in in spitzen Klammern im Diagramm vermerkt. Solche Annotationen heißen Stereotype. 358
count 0 ÓÙÒØ Ò Û ÓÙÒØ µ 359
count 1 ÓÙÒØ Ò Û ÓÙÒØ µ a info 0 360
count 2 ÓÙÒØ Ò Û ÓÙÒØ µ a info 0 b info 1 361
count 3 a info 0 b info 1 c info 2 362
Das Klassen-Attribut ÓÙÒØ zählt hier die Anzahl der bereits erzeugten Objekte. DasObjekt-Attribut Ò ÓenthältfürjedesObjekteine eindeutige Nummer. Außerhalb 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 heißen Klassen-Methoden und werden durch das Schlüsselwort Ø Ø kenntlichgemacht. 363
Das Klassen-Attribut ÓÙÒØ zählt hier die Anzahl der bereits erzeugten Objekte. DasObjekt-Attribut Ò ÓenthältfürjedesObjekteine eindeutige Nummer. Außerhalb 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 heißen Klassen-Methoden und werden durch das Schlüsselwort Ø Ø kenntlichgemacht. 364
In Ê Ø ÓÒ Ð könntenwirdefinieren: ÔÙ Ð Ø Ø Ê Ø ÓÒ Ð ÒØÌÓÊ Ø ÓÒ Ð ÖÖ Ý ÒØ µ ß Ê Ø ÓÒ Ð Ò Û Ê Ø ÓÒ Ð ºÐ Ò Ø ÓÖ ÒØ ¼ ºÐ Ò Ø µ Ò Û Ê Ø ÓÒ Ð µ Ö ØÙÖÒ Ð DieFunktionerzeugtfüreinFeldvon ÒØ seinentsprechendes Feldvon Ê Ø ÓÒ Ð-Objekten. Außerhalb der Klasse Class kann die öffentliche Klassen-Methode meth() mithilfe von Classºmeth ºººµ aufgerufen werden. 365
In Ê Ø ÓÒ Ð könntenwirdefinieren: ÔÙ Ð Ø Ø Ê Ø ÓÒ Ð ÒØÌÓÊ Ø ÓÒ Ð ÖÖ Ý ÒØ µ ß Ê Ø ÓÒ Ð Ò Û Ê Ø ÓÒ Ð ºÐ Ò Ø ÓÖ ÒØ ¼ ºÐ Ò Ø µ Ò Û Ê Ø ÓÒ Ð µ Ö ØÙÖÒ Ð DieFunktionerzeugtfüreinFeldvon ÒØ seinentsprechendes Feldvon Ê Ø ÓÒ Ð-Objekten. Außerhalb der Klasse Class kann die öffentliche Klassen-Methode meth() mithilfe von Classºmeth ºººµ aufgerufen werden. 366
11 Ein konkreter Datentyp: Listen Nachteil von Feldern: feste Größe; Einfügen neuer Elemente nicht möglich; Streichen ebenfalls nicht :-( Idee: Listen info 7 info 0 info 3 info 13 null 367
...dasheißt: Ò Ó ==ElementderListe; Ò ÜØ ==VerweisaufdasnächsteElement; ÒÙÐÐ == leeres Objekt. Operationen: ÚÓ Ò ÖØ ÒØ Üµ ÚÓ Ð Ø µ ËØÖ Ò ØÓËØÖ Ò µ : fügtneuesxhinterdemaktuellenelementein; : entferntknotenhinterdemaktuellenelement; : lieferteinestring-darstellung. 368
Modellierung: List + info : int + + insert (x: int) : void + delete () : void + tostring() : String Die Rauten-Verbindung heißt auch Aggregation. 369
info 7 info 0 info 3 info 13 null list t.insert(4); t 370
info 7 info 0 info 3 info 13 null list t info 4 371
info 7 info 0 info 3 info 13 null list t.delete(); t 372
info 7 info 0 info 3 info 13 null list t 373
Weiterhin sollte man... eine Liste auf Leerheit testen können; Achtung: das ÒÙÐÐ-Objekt versteht keinerlei Objekt-Methoden!!!... neue Listen bauen können, d.h. etwa:... eine ein-elementige Liste anlegen können;... eine Liste um ein Element verlängern können;... Listen in Felder und Felder in Listen umwandeln können. 374
Weiterhin sollte man... eine Liste auf Leerheit testen können; Achtung: das ÒÙÐÐ-Objekt versteht keinerlei Objekt-Methoden!!!... neue Listen bauen können, d.h. etwa:... eine ein-elementige Liste anlegen können;... eine Liste um ein Element verlängern können;... Listen in Felder und Felder in Listen umwandeln können. 375
ÔÙ Ð Ð Ä Ø ß ÔÙ Ð ÒØ Ò Ó ÔÙ Ð Ä Ø Ò ÜØ»» ÃÓÒ ØÖÙ ØÓÖ Ò ÔÙ Ð Ä Ø ÒØ Ü Ä Ø Ðµ ß Ò Ó Ü Ò ÜØ Ð Ð ÔÙ Ð Ä Ø ÒØ Üµ ß Ò Ó Ü Ò ÜØ ÒÙÐÐ Ð ººº 376