objektorientierte datenbanken zbeim vorigen mal: yumsetzung in objektorientierte modellierung auf...
TRANSCRIPT
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
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
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);
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
Arrays am Beispiel
int a[] = new int[100];a[0] = 1;for (int i = 1; i < b.length; i++) {
a[i] = a[i-1]}
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)
Programme
In Java ist eine Klasse auch ein Programm, wenn eine sog. Main-Methode definiert ist
Class Test { ... public static void main (String argv[]) {
...}
}
Generalisierung / Spezialisierung
Generalisierungen/Spezialisierungen modellieren Beziehungen zwischen Klassen (d.h. Mengen von Instanzen) In Java Umsetzung durch extends-Konstrukt
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
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.
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
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
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
Beispiel
public interface ... { ... }public class ... extends ... implements ... , ...
{ ... }
Relationen in UML: Graphische Notation
Komposition
+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
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)
Umsetzung durch Klassenfelder (Attribute)
Geht bei funktionaler EinschränkungVerwendung des Rollennamens als
Attributname, sonst Attributname aus Relationenname generieren
Gültigkeitsbereich durch Typangaben ausdrückbar
Umsetzung durch Klassenfelder mit Vectortyp
Notwendig bei nicht vorhandener funktionaler Einschränkung
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
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
Umsetzung durch Verzeichnisse (Dictionaries)
Abstrakte Klassen zur Implementierung von Assoziationen
Instantiierbare Unterklasse: Hashtables
Dictionaries
Assoziation von „Elementen“ mit „Schlüsseln“var Dictoriary d;d=new Hashtable;d.put(534958345, „Meyer“)d.get(534958345) d.remove(534958345)
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
Assoziationen: Constraints in Java
Überwachung durch manuell zu erstellen Code
Mehrstellige Relationen
Umsetzung durch Einführung einer neuen Klasse mit entsprechenden Attributen, um auf die anderen an der Relation beteiligten Instanzen zu verweisen
Lineare Traversierung von Datenstrukturen
Iterator Objekt, das Traversierungszustand speichert
Next-Operation zur Fortschreibung der Traversierung
Operation zur Feststellung, ob Ende erreicht
Beispiel:
import java.util.*;var Dictoriary d;Iterator iter = d.iterator();While (iter.hasNext()) {
Object o = iterator.next(); ....}
Zusammenfassung, Kernpunkte
Objektorientierte Modellierung auf Entwurfsebene umgesetzt in Implementierungsebene am Beispiel von Java
Fazit: Umsetzung nicht ganz einfach (teilweise sogar relativ aufwendig)
Was kommt beim nächsten Mal?
Persistente ObjekteJava Data Objects (JDO)