Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Klaus Schubert Geändert vor über 8 Jahren
1
Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen zHeute: yFortsetzung: Generalisierung, Relationen zLernziele: yJava aus UML-Sicht verstehen yKurzeinführung in OOP am Beispiel Java xIn Übungen noch vertieft Ralf Möller, FH-Wedel
2
Vordefinierte Klassen zBeispiele: yjava.lang.String (Notation (“OODB.") yjava.util.Vector yjava.util.Dictionary zEntsprechende Operationen zum Erzeugen und zum Zugriff auf Elemente bzw. zum Ersetzen von Elementen definiert zVordefinierte Verknüpfungsoperationen
3
java.util.Vector zVector x = new Vector; zx.setElementAt(Integer(42), 0); zx.setElementAt(Integer(43), 1); zx.elementAt(0); zx.length(); zVector y = new Vector(27); zx.addElement(56);
4
Klassen als Attributtypen zpublic class Polyeder { java.util.Vector hülle;... } zpublic class Flaeche {... } zpublic class Kante { Punkt p1; Punkt p2;... } zpublic class Punkt {... }
5
Arrays am Beispiel zint a[] = new int[100]; za[0] = 1; zfor (int i = 1; i < b.length; i++) { a[i] = a[i-1] }
6
Arrays vs. Vektoren zBei Array muß die Maximallänge zur Erzeugungszeit (nicht Übersetzungszeit) bekannt sein zBei Vektoren (Instanzen der Klasse Vector) ist die Länge variabel zLänge kann bei beiden erfragt werden (length)
7
Programme zIn Java ist eine Klasse auch ein Programm, wenn eine sog. Main-Methode definiert ist zClass Test { y... ypublic static void main (String argv[]) {... } }
8
Generalisierung / Spezialisierung zGeneralisierungen/Spezialisierungen modellieren Beziehungen zwischen Klassen (d.h. Mengen von Instanzen) yIn Java Umsetzung durch extends-Konstrukt
9
Umsetzung in Java bietet nur Spezialisierung zVererbung in Java unterstützt (Einfachvererbung) yAttribute können nur von ein einer Oberklasse geerbt werden, Angabe beliebig vieler Interfaces möglich yNamenskollisionen definieren Einschränkungen zBetrachtung von Overlapping und Disjoint machen also nur für Interfaces Sinn (wird aber immer mit Klasse kombiniert, ist also in Java ohne Bedeutung) zUnterscheidung von Generalisierungsarten (mit Namen) auch in Java höchstens für Interfaces sinnvoll (aber nicht unterstützt) zAbstrakte Klassen können in Java markiert werden yKeine Instantiierbarkeit
10
Spezialisierung, Subtypen, Substitutionsprinzip zIn Java nur Spezialisierung, da Quellcode nicht neu übersetzt werden soll zEine Klasse, die eine andere Klasse erweitert, definiert einen Subtypen (dito für Interface) zAnnahme: Im Code steht Methodenaufruf yObjektausdruck. Methodenname ([Ausdruck {, Ausdruck}]) zZulässig nur wenn Objektausdruck ein Objekt liefert, das Instanz eines Subtyps von einer Klasse ist, die eine Methode entsprechenden Typs bereitstellt.
11
Spezialisierung und Vererbung zAttribute yVererbung „nach unten“ ySichtbarkeit steuerbar (public, protected, private) zOperationen yVererbung „nach unten“ yÜberschreiben einer Methode gleichen Typs in Unterklasse yAufruf der überschriebenen Methode m durch super[.m](...) yDynamisches Binden xMethode in der speziellsten Oberklasse (zuerst) anwenden yKontravarianzprinzip bei Behandlung der Methoden- Parametertypen durch den Compiler
12
Beispiel: zEinsatz von Objekten in Rahmenwerken (Frameworks) zSpezielles Framework: Java-Laufzeitumgebung zAnnahme: Objekt soll auf Terminal gedruckt werden zNotwendig: Objektbeschreibung als Zeichenkette zNachricht: toString() zOption: Spezielle Methoden in „eigenen“ Klassen programmieren
13
Interfaces und Typen zBeschreibung einer Menge von Nachrichten, die an ein Objekt gesandt werden können, das das Interface implementiert zKeine Beschreibung der Struktur der Objekte zInterface-Spezifikationen definieren Typen zLeast Commitment Prinzip yDeklaration von Variablen- und Attributtypen durch Verwendung von Interfaces yAuswahl der konkreten Struktur nach pragmatischen Gesichtspunkten zur Erzeugungszeit der Variablen- bzw. Attributwerte durch Instantiierung von Klassen
14
Beispiel zpublic interface... {... } zpublic class... extends... implements...,... {... }
15
Relationen in UML: Graphische Notation z Komposition
16
Beispiel: Uni-Schema
17
Relationen zAssoziationen, Aggregationen und Komposition modellieren auf Klassenebene Beziehungen zwischen Instanzen (der beteiligten Klassen, z.B. K1 und K2) yUmsetzung durch xEinführung neuer Attribute für K1 und K2, xVerwendung von „globalen“ Verzeichnissen (Dictionaries)
18
Umsetzung durch Klassenfelder (Attribute) zGeht bei funktionaler Einschränkung zVerwendung des Rollennamens als Attributname, sonst Attributname aus Relationenname generieren zGültigkeitsbereich durch Typangaben ausdrückbar
19
Umsetzung durch Klassenfelder mit Vectortyp zNotwendig bei nicht vorhandener funktionaler Einschränkung
20
Wechselseitige Referenzierung zNotwendig bei fehlender Navigierbarkeitsangabe zMultiplizitätsüberwachung durch manuell zu erstellenden Code zZugriff auf Elemente einer Relation nur über Objekte zProbleme mit nebenläufigen Kontrollflüssen und temporär nicht vollständig etablierten wechselseitigen Referenzierungen
21
Relationen: detailliertere Beschreibung zMultiplizität gibt an, wieviel Objekte an der Relation beteiligt sind zNavigierbarkeit beschränkt den bidirektionalen Charakter von Relationen zConstraints beschränken den Gültigkeitsbereich von Relationen zRollennamen beschreiben die Endpunkte der Relation
22
Umsetzung durch Verzeichnisse (Dictionaries) zAbstrakte Klassen zur Implementierung von Assoziationen zInstantiierbare Unterklasse: Hashtables
23
Dictionaries zAssoziation von „Elementen“ mit „Schlüsseln“ zvar Dictoriary d; zd=new Hashtable; zd.put(534958345, „Meyer“) zd.get(534958345) zd.remove(534958345)
24
Aggregation, Komposition zIn Java keine besonderen Sprachkonstrukte
25
Assoziationen: Constraints in Java zÜberwachung durch manuell zu erstellen Code
26
Mehrstellige Relationen zUmsetzung durch Einführung einer neuen Klasse mit entsprechenden Attributen, um auf die anderen an der Relation beteiligten Instanzen zu verweisen
27
Lineare Traversierung von Datenstrukturen zIterator yObjekt, das Traversierungszustand speichert zNext-Operation zur Fortschreibung der Traversierung zOperation zur Feststellung, ob Ende erreicht
28
Beispiel: zimport java.util.*; zvar Dictoriary d; zIterator iter = d.iterator(); zWhile (iter.hasNext()) { Object o = iterator.next();.... }
29
Zusammenfassung, Kernpunkte zObjektorientierte Modellierung auf Entwurfsebene umgesetzt in Implementierungsebene am Beispiel von Java zFazit: Umsetzung nicht ganz einfach (teilweise sogar relativ aufwendig)
30
Was kommt beim nächsten Mal? zPersistente Objekte zJava Data Objects (JDO)
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.