Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf...

30
Objektorientierte Datenbanken Beim vorigen Mal: Umsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java Klassen und Instanzen Heute: Fortsetzung: Generalisierung, Relationen Lernziele: Java aus UML-Sicht verstehen Kurzeinführung in OOP am Beispiel Java In Übungen noch vertieft Ralf Möller, FH-Wedel

Transcript of Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf...

Page 1: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Objektorientierte Datenbanken

Beim vorigen Mal: Umsetzung in objektorientierte Modellierung auf

Implementierungsebene am Beispiel Java Klassen und Instanzen

Heute: Fortsetzung: Generalisierung, Relationen

Lernziele: Java aus UML-Sicht verstehen Kurzeinführung in OOP am Beispiel Java

In Übungen noch vertieft

Ralf Möller, FH-Wedel

Page 2: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Vordefinierte Klassen

Beispiele: java.lang.String (Notation (“OODB.") java.util.Vector java.util.Dictionary

Entsprechende Operationen zum Erzeugen und zum Zugriff auf Elemente bzw. zum Ersetzen von Elementen definiert

Vordefinierte Verknüpfungsoperationen

Page 3: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

java.util.Vector

Vector x = new Vector;x.setElementAt(Integer(42), 0);x.setElementAt(Integer(43), 1);x.elementAt(0);x.length();Vector y = new Vector(27);x.addElement(56);

Page 4: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Klassen als Attributtypen public class Polyeder {

java.util.Vector hülle; ... }

public class Flaeche { ... } public class Kante {

Punkt p1; Punkt p2; ... }

public class Punkt { ... }

+Gewicht() : float+Volumen() : float

+skalieren()+verschieben()

+rotieren()

+PolyID : int+...

Polyeder

+Umfang() : float+Volumen() : float

+FlächenID : int+...

Flächen

+Länge() : float

+KantenID : int+...

Kanten

+rotieren()+verschieben()

+skalieren()

+X : float+Y : float+Z : float

Punkte

1 1..* * * * *

Hülle Begrenzung StartEnde

4..* 2 3..* 3..* 21

Page 5: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Arrays am Beispiel

int a[] = new int[100];a[0] = 1;for (int i = 1; i < b.length; i++) {

a[i] = a[i-1]}

Page 6: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Arrays vs. Vektoren

Bei Array muß die Maximallänge zur Erzeugungszeit (nicht Übersetzungszeit) bekannt sein

Bei Vektoren (Instanzen der Klasse Vector) ist die Länge variabel

Länge kann bei beiden erfragt werden (length)

Page 7: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Programme

In Java ist eine Klasse auch ein Programm, wenn eine sog. Main-Methode definiert ist

Class Test { ... public static void main (String argv[]) {

...}

}

Page 8: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Generalisierung / Spezialisierung

Generalisierungen/Spezialisierungen modellieren Beziehungen zwischen Klassen (d.h. Mengen von Instanzen) In Java Umsetzung durch extends-Konstrukt

Page 9: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Umsetzung in Java bietet nur Spezialisierung

Vererbung in Java unterstützt (Einfachvererbung) Attribute können nur von ein einer Oberklasse geerbt

werden, Angabe beliebig vieler Interfaces möglich Namenskollisionen definieren Einschränkungen

Betrachtung von Overlapping und Disjoint machen also nur für Interfaces Sinn (wird aber immer mit Klasse kombiniert, ist also in Java ohne Bedeutung)

Unterscheidung von Generalisierungsarten (mit Namen) auch in Java höchstens für Interfaces sinnvoll (aber nicht unterstützt)

Abstrakte Klassen können in Java markiert werden Keine Instantiierbarkeit

Page 10: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Spezialisierung, Subtypen, Substitutionsprinzip

In Java nur Spezialisierung, da Quellcode nicht neu übersetzt werden soll

Eine Klasse, die eine andere Klasse erweitert, definiert einen Subtypen (dito für Interface)

Annahme: Im Code steht Methodenaufruf Objektausdruck . Methodenname ([Ausdruck {, Ausdruck}])

Zulässig nur wenn Objektausdruck ein Objekt liefert, das Instanz eines Subtyps von einer Klasse ist, die eine Methode entsprechenden Typs bereitstellt.

Page 11: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Spezialisierung und Vererbung

Attribute Vererbung „nach unten“ Sichtbarkeit steuerbar (public, protected, private)

Operationen Vererbung „nach unten“ Überschreiben einer Methode gleichen Typs in Unterklasse Aufruf der überschriebenen Methode m durch super[.m](...) Dynamisches Binden

Methode in der speziellsten Oberklasse (zuerst) anwenden Kontravarianzprinzip bei Behandlung der Methoden-

Parametertypen durch den Compiler

Page 12: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Beispiel:

Einsatz von Objekten in Rahmenwerken (Frameworks)

Spezielles Framework: Java-LaufzeitumgebungAnnahme: Objekt soll auf Terminal gedruckt

werdenNotwendig: Objektbeschreibung als

ZeichenketteNachricht: toString()Option: Spezielle Methoden in „eigenen“

Klassen programmieren

Page 13: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Interfaces und Typen

Beschreibung einer Menge von Nachrichten, die an ein Objekt gesandt werden können, das das Interface implementiert

Keine Beschreibung der Struktur der ObjekteInterface-Spezifikationen definieren TypenLeast Commitment Prinzip

Deklaration von Variablen- und Attributtypen durch Verwendung von Interfaces

Auswahl der konkreten Struktur nach pragmatischen Gesichtspunkten zur Erzeugungszeit der Variablen- bzw. Attributwerte durch Instantiierung von Klassen

Page 14: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Beispiel

public interface ... { ... }public class ... extends ... implements ... , ...

{ ... }

Page 15: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Relationen in UML: Graphische Notation

Komposition

Page 16: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

+Notenschnitt() : float+SummeWochenstunden() : short

+MatrNr : int+Name : String+Semester : int

Studenten

+AnzHörer() : int+DurchfallQuote() : float

+VorlNr : int+Titel : String+SWS : int

Vorlesungen

+Hörer

1..*

*

+verschieben()

+Note : Decimal+Datum : Date

Prüfungen

+Prüfling1

*

+Prüfungsstoff1*

+Notenschnitt() : float+Gehalt() : short

+Lehrstundenzahl() : short

+Rang : StringProfessoren

* +Prüfer1

*

+Dozent

1

+Gehalt() : short+Fachgebiet : String

Assistenten

*

+Boss

1

+Gehalt() : short

+PersNr : int+Name : String

Angestellte

+Nachfolger *

*hören

voraussetzen

gelesenVon

arbeitenFür

Beispiel: Uni-Schema

Page 17: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Relationen

Assoziationen, Aggregationen und Komposition modellieren auf Klassenebene Beziehungen zwischen Instanzen (der beteiligten Klassen, z.B. K1 und K2) Umsetzung durch

Einführung neuer Attribute für K1 und K2, Verwendung von „globalen“ Verzeichnissen (Dictionaries)

Page 18: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Umsetzung durch Klassenfelder (Attribute)

Geht bei funktionaler EinschränkungVerwendung des Rollennamens als

Attributname, sonst Attributname aus Relationenname generieren

Gültigkeitsbereich durch Typangaben ausdrückbar

Page 19: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Umsetzung durch Klassenfelder mit Vectortyp

Notwendig bei nicht vorhandener funktionaler Einschränkung

Page 20: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Wechselseitige Referenzierung

Notwendig bei fehlender Navigierbarkeitsangabe

Multiplizitätsüberwachung durch manuell zu erstellenden Code

Zugriff auf Elemente einer Relation nur über Objekte

Probleme mit nebenläufigen Kontrollflüssen und temporär nicht vollständig etablierten wechselseitigen Referenzierungen

Page 21: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Relationen: detailliertere Beschreibung

Multiplizität gibt an, wieviel Objekte an der Relation beteiligt sind

Navigierbarkeit beschränkt den bidirektionalen Charakter von Relationen

Constraints beschränken den Gültigkeitsbereich von Relationen

Rollennamen beschreiben die Endpunkte der Relation

Page 22: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Umsetzung durch Verzeichnisse (Dictionaries)

Abstrakte Klassen zur Implementierung von Assoziationen

Instantiierbare Unterklasse: Hashtables

Page 23: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Dictionaries

Assoziation von „Elementen“ mit „Schlüsseln“var Dictoriary d;d=new Hashtable;d.put(534958345, „Meyer“)d.get(534958345) d.remove(534958345)

Page 24: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Aggregation, Komposition

In Java keine besonderen Sprachkonstrukte

+Gewicht() : float+Volumen() : float

+skalieren()+verschieben()

+rotieren()

+PolyID : int+...

Polyeder

+Umfang() : float+Volumen() : float

+FlächenID : int+...

Flächen

+Länge() : float

+KantenID : int+...

Kanten

+rotieren()+verschieben()

+skalieren()

+X : float+Y : float+Z : float

Punkte

1 1..* * * * *

Hülle Begrenzung StartEnde

4..* 2 3..* 3..* 21

Page 25: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Assoziationen: Constraints in Java

Überwachung durch manuell zu erstellen Code

Page 26: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Mehrstellige Relationen

Umsetzung durch Einführung einer neuen Klasse mit entsprechenden Attributen, um auf die anderen an der Relation beteiligten Instanzen zu verweisen

Page 27: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Lineare Traversierung von Datenstrukturen

Iterator Objekt, das Traversierungszustand speichert

Next-Operation zur Fortschreibung der Traversierung

Operation zur Feststellung, ob Ende erreicht

Page 28: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Beispiel:

import java.util.*;var Dictoriary d;Iterator iter = d.iterator();While (iter.hasNext()) {

Object o = iterator.next(); ....}

Page 29: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Zusammenfassung, Kernpunkte

Objektorientierte Modellierung auf Entwurfsebene umgesetzt in Implementierungsebene am Beispiel von Java

Fazit: Umsetzung nicht ganz einfach (teilweise sogar relativ aufwendig)

Page 30: Objektorientierte Datenbanken zBeim vorigen Mal: yUmsetzung in objektorientierte Modellierung auf Implementierungsebene am Beispiel Java yKlassen und Instanzen.

Was kommt beim nächsten Mal?

Persistente ObjekteJava Data Objects (JDO)