Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems.

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Objektorientierte Datenbanken
Kritische Betrachtung
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Objektrelationales Mapping mit JPA Working with Persistent Objects Jonas Bandi Simon Martinelli.
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Konstruktoren.
Objekte und Arbeitsspeicher
XINDICE The Apache XML Project Name: Jacqueline Langhorst
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Einführung in die Programmierung Datensammlung
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
Kollektionstypen (1) Es sind polymorphe Typkonstruktoren, jeweils als Sorten- und als Klassenkonstruktor (t,v beliebige Typen): –set, Set :Ungeordnete.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Dynamische Datentypen
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Einfache OQL-Ausdrücke (1) Literale und Objekte können direkt konstruiert werden; gültige Ausdrücke und ihre Typen sind z.B.: "Quader77": string struct(x:1.0,
Objectives Verstehen was unterDelegate verstanden wird
EPROG Tutorium #5 Philipp Effenberger
EPROG Tutorium #3 Philipp Effenberger
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
OQL-Anbindung an Java (1) Java als Beispiel für die Einbettung von OQL in eine Programmiersprache Die OQL-Einbettung in Java ist teilweise mit dynamischem.
Persistenz: Objekt-Lebensdauer In RDBMS wird Lebensdauer von Werten durch ihren Typ festgelegt: Instanzen von Relationstypen sind persistent, alle anderen.
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
Objekte und Literale ODMG-Objektmodell kennt zwei Arten von Datenelementen: Literale: Identität ist ausschließlich durch Wert gegeben. Nur maximal eine.
Motivation Motivation für objektorientierte DBMS (ODBMS): –„Impedance Mismatch“ zwischen relationalem Datenmodell und Programmiersprachen-Datenmodell erfordert.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
 Präsentation transkript:

Hauptseminar Datenbanksysteme - Datenbanken und XML - Thema: Type-Checking OQL Queries In The ODMG Type Systems

Angesprochene Punkte Allgemeines zum Type Checking in Datenbanksystemen Allgemeines zum Type Checking in Datenbanksystemen Kurze Einführung in den ODMG Standard Kurze Einführung in den ODMG Standard Formale Definitionen und Regeln Formale Definitionen und Regeln Betrachtung von auftretenden Problemen und skizzieren von Lösungsvorschlägen Betrachtung von auftretenden Problemen und skizzieren von Lösungsvorschlägen Referenzen Referenzen

Type Checking (1/2) Es gibt zwei Möglichkeiten von Type-Checking Es gibt zwei Möglichkeiten von Type-Checking Dynamisches type-checking während der Programmausführung Dynamisches type-checking während der Programmausführung Statisches type-checking, zur Kompilierzeit Statisches type-checking, zur Kompilierzeit

Type Checking (2/2) Aus folgenden Gründen wird statisches type- checking bei Datenbanken bevorzugt: Aus folgenden Gründen wird statisches type- checking bei Datenbanken bevorzugt: Die Effizienz der Datenbank sollte nicht unnötig belastet werden Die Effizienz der Datenbank sollte nicht unnötig belastet werden Laufzeitfehler sind bei Datenbanken besonders kritisch Laufzeitfehler sind bei Datenbanken besonders kritisch Message not understood-Fehler werden durch statisches type-checking ausgeschlossen Message not understood-Fehler werden durch statisches type-checking ausgeschlossen

ODMG Standard (1/5) ODMG steht für Object Data Management Group ( ODMG steht für Object Data Management Group ( wurde der ODMG 1.0 Standard veröffentlicht; der aktuelle Stand ist Release wurde der ODMG 1.0 Standard veröffentlicht; der aktuelle Stand ist Release 3.0 Dieser Vortrag geht noch auf den ODMG 2.0 Standard ein Dieser Vortrag geht noch auf den ODMG 2.0 Standard ein

ODMG Standard (2/5) Interface: Definiert das abstrakte Verhalten eines Objektes Class: Ist ein erweitertes Interface mit einem Status Literal: Definiert nur einen abstrakten Status Class

ODMG Standard (3/5) Was ist ein Interface? Was ist ein Interface? Ein Interface definiert das abstrakte Verhalten von Objekt-Typen. Ein Interface definiert das abstrakte Verhalten von Objekt-Typen. Ein Interface beinhaltet nur Methoden, keine Attribute. Ein Interface beinhaltet nur Methoden, keine Attribute. Beispiel (The top interface) interface Object { boolean same_as(in Object anObject); Object copy(); void delete(); };

ODMG Standard (4/5) Was ist eine Klasse? Was ist eine Klasse? Eine Klasse ist ein erweitertes Interface. Eine Klasse ist ein erweitertes Interface. Eine Klasse definiert das abstrakte Verhalten und den abstrakten Zustand von Objekt-Typen. Eine Klasse definiert das abstrakte Verhalten und den abstrakten Zustand von Objekt-Typen. Beispiel (Class with extent) class Employee (extent employees) { attribute string name; attribute short id; attribute Department dept; float salary(); void hire(in Department d); void fire(); }; class Department (extent departments) { attribute string name; attribute short id; short NoOfEmployees(); };

ODMG Standard (5/5) Was ist ein Literal? Was ist ein Literal? Ein Literal definiert nur den abstrakten Zustand eines primitiven Literal- Typen. Ein Literal definiert nur den abstrakten Zustand eines primitiven Literal- Typen. Es gibt keine Objektidentitäten für Literale Es gibt keine Objektidentitäten für Literale Literal-Typen: -boolean -char -short -long -float -double -octet -string -user-defined collection, union and enumeration literale

OQL- Queries Das Resultat ist eine Menge vom Typ well_paid Der Typ well_paid ist vorher definiert und hat die Komponenten emp und sal Durch order by wird eine Liste von Objekten erzeugt Beispiel select well_paid(emp: x.name, sal: x.salary()) from employees as x where x.salary() > and x.dept.NoOfEmployees()>100 order by emp

Collection Objects (1/2) Es gibt verschiedene Typen von Mengen Es gibt verschiedene Typen von Mengen Set : Eine Menge ohne Duplikate Set : Eine Menge ohne Duplikate Bag : Eine Menge mit Duplikaten Bag : Eine Menge mit Duplikaten List : Geordnete Menge List : Geordnete Menge Array : Geordnete Menge mit Indizes Array : Geordnete Menge mit Indizes Dictionary : Menge aus Schlüsseln denen ein Wert zugeordnet wird Dictionary : Menge aus Schlüsseln denen ein Wert zugeordnet wird

Collection Objects (2/2) Parametric polymorphism im ODMG Objektmodell any steht für jeden Objekttypen, dadurch ergeben sich auch weitere Probleme beim type-checking Die anderen Collection Types werden von diesem Interface abgeleitet Interface Collection: Object { unsigned long cardinality(); boolean is_empty(); void insert_element(in any element); void remove_element(in any element); boolean contains_element(in any element); Iterator create_iterator(); };

Java vs. C++ Java unterstützt keinen parametrisierten Polymorphismus Java unterstützt keinen parametrisierten Polymorphismus C++ bietet zu diesem Zweck Templates an C++ bietet zu diesem Zweck Templates an interface Collection { int size(); boolean isEmpty(); void add(in Object element); boolean remove(in Object element); Iterator iterator();... }; interface Collection { unsigned long cardinality(); boolean is_empty(); void insert_element(T element); void remove_element(T element); boolean contains_element(T element); Iterator create_iterator(); };

Formale Spezifikation (1/2) Ein Schema ist eine Menge von Verknüpfungen Ein Schema ist eine Menge von Verknüpfungen Es beinhaltet Schlüsselwörter, die mit interfaces, classes, class extents und objects assoziiert sind Es beinhaltet Schlüsselwörter, die mit interfaces, classes, class extents und objects assoziiert sind Ein Schema ist wohlgeformt, wenn: Ein Schema ist wohlgeformt, wenn: jedes Schlüsselwort nur genau einer Zuordnung entspricht. jedes Schlüsselwort nur genau einer Zuordnung entspricht. der Typ zu jedem Objekt ebenfalls im Schema enthalten ist. der Typ zu jedem Objekt ebenfalls im Schema enthalten ist. bei interfaces und classes die Regeln für die Vererbung berücksichtigt wurden. bei interfaces und classes die Regeln für die Vererbung berücksichtigt wurden.

Formale Spezifikation (2/2) Das Hinzufügen einer class extent zu einem Schema stellt ebenfalls den Namen des extent im Schema zur Verfügung. Das Hinzufügen einer class extent zu einem Schema stellt ebenfalls den Namen des extent im Schema zur Verfügung. Ein Schema beinhaltet vordefinierte Zuordnungen Ein Schema beinhaltet vordefinierte Zuordnungen String, int, boolean… String, int, boolean… Collection, Bag, Set, List, Array… Collection, Bag, Set, List, Array… die Datenbank-/Transaktionsklasse die Datenbank-/Transaktionsklasse

Vererbung (1/5) Das top interface ist Object, alle weiteren Interfaces werden von diesem abgeleitet Das top interface ist Object, alle weiteren Interfaces werden von diesem abgeleitet

Vererbung (2/5) Reflexivität Reflexivität Transitivität

Vererbung (3/5) Substitution Substitution Ein Objekt vom Typ C 2 kann ein Objekt vom Typ C 1 ersetzen, falls C 2 von C 1 abgeleitet wird Ein Objekt vom Typ C 2 kann ein Objekt vom Typ C 1 ersetzen, falls C 2 von C 1 abgeleitet wird Die Regel beschreibt, daß im Ausdruck e ein vorkommendes y durch ein x ersetzt werden kann.

Vererbung (4/5) Type casts Type casts Ist ein Ausdruck e vom Typ C 1 und es gilt außerdem noch, dass C 2 von C 1 abgeleitet ist, ist ein type-cast möglich Ist ein Ausdruck e vom Typ C 1 und es gilt außerdem noch, dass C 2 von C 1 abgeleitet ist, ist ein type-cast möglich Es wird ein dynamisches type-checking benötigt Es wird ein dynamisches type-checking benötigt

Vererbung (5/5) Beispiel type casts Beispiel type casts class Person { (extent persons)... } class Employee: Person { (extent employees) long salary();... } select well_paid(emp: x.name, sal:((Employee)x).salary()) from persons as x where ((Employee)x).salary() > 50000

Weitere Regeln zusammengefaßt Auf ähnliche Weise können nun auch Auf ähnliche Weise können nun auch Structures Structures Interfaces Interfaces Classes Classes Objects and Messages Objects and Messages in das Schema mit aufgenommen werden.

OQL Queries and the ODMG object model (1/3) Nun kommen wir zu dem ersten negativen Beispiel für das type-checking: Nun kommen wir zu dem ersten negativen Beispiel für das type-checking: select well_paid(emp: x.name, sal: x.salary()) from employees as x where x.salary() > Employees ist vom Typ Collection Employees ist vom Typ Collection x ist ein Objekt vom Typ any x ist ein Objekt vom Typ any

OQL Queries and the ODMG object model (2/3) Methoden für den Type any sind im ODMG Standard nicht definiert Methoden für den Type any sind im ODMG Standard nicht definiert Es ist nicht möglich auf die Typkorrektheit von x.name und x.salary() zu schließen Es ist nicht möglich auf die Typkorrektheit von x.name und x.salary() zu schließen Theorem: OQL-Queries können nicht auf Typkorrektheit überprüft werden. Theorem: OQL-Queries können nicht auf Typkorrektheit überprüft werden.

OQL Queries and the ODMG object model (3/3) Beweis: Beweis: select projection from e 1 as x 1, e 2 as x 2, …,e n as x n where e Die Variabel-Typen der x i müssen bestimmt werden Die Variabel-Typen der x i müssen bestimmt werden Die Variabel-Typen der e i müssen bestimmt werden Die Variabel-Typen der e i müssen bestimmt werden Im besten Fall nehmen wir an, daß die e i vom Typ Collection sind Im besten Fall nehmen wir an, daß die e i vom Typ Collection sind Folglich sind die x i vom Typ any Folglich sind die x i vom Typ any

OQL Queries and Java (1/5) Die bisherigen Probleme beruhen auf dem Type any im ODMG Type-System Die bisherigen Probleme beruhen auf dem Type any im ODMG Type-System In der Java-Anbindung ist der Type Object das Wurzel-Objekt In der Java-Anbindung ist der Type Object das Wurzel-Objekt Alle Objekte im Java-Typ-System erben die Eigenschaften des Wurzel-Objektes Alle Objekte im Java-Typ-System erben die Eigenschaften des Wurzel-Objektes

OQL Queries and Java (2/5) Theorem: Statisches Type-checking ist im Java- Type-System nicht möglich Theorem: Statisches Type-checking ist im Java- Type-System nicht möglich Beweis Beweis Der Typ der Variable x wird nun als Objekt identifiziert Der Typ der Variable x wird nun als Objekt identifiziert Nur Methoden aus dem Interface Object können benutzt werden Nur Methoden aus dem Interface Object können benutzt werden Das type-checking schlägt fehl sobald unbekannte Methoden aufgerufen werden Das type-checking schlägt fehl sobald unbekannte Methoden aufgerufen werden

OQL Queries and Java (2/5) Beispiel Beispiel class Professor { public float salary() { }... } class Course { public int enrollment() { }... } Collection professors; Collection courses; select x from professors as x, x.courses() as y where x.salary() > and y.enrollment() > 50

OQL Queries and Java (3/5) x.salary(), x.courses() und y.enrollment() werden stets als nicht typkorrekt klassifiziert x.salary(), x.courses() und y.enrollment() werden stets als nicht typkorrekt klassifiziert Hier stellt sich die Frage ob sich Java für die Datenbankprogrammierung eignet? Hier stellt sich die Frage ob sich Java für die Datenbankprogrammierung eignet? Betrachten wir zunächst eine Lösung für dieses Problem – dynamisches type-checking… Betrachten wir zunächst eine Lösung für dieses Problem – dynamisches type-checking…

OQL Queries and Java (4/5) OQL Query with type casts OQL Query with type casts Theorem: Bei ausdrücklicher Typangabe für jede Variabel innerhalb der Anfrag im Java-Typ- System ist ein type-checking möglich, allerdings nur auf Kosten des teuren Checks zur Laufzeit (ohne Beweis) Theorem: Bei ausdrücklicher Typangabe für jede Variabel innerhalb der Anfrag im Java-Typ- System ist ein type-checking möglich, allerdings nur auf Kosten des teuren Checks zur Laufzeit (ohne Beweis)

OQL Queries and Java (5/5) Beispiel Beispiel Collection professors; Collection courses; select x from professors as (Professor)x, x.courses() as (Course)y where x.salary() > and y.enrollment() > 50 Diese Anfrage ist aufgrund des type-casts möglich Diese Anfrage ist aufgrund des type-casts möglich Es wird ein Check zur Laufzeit ausgeführt Es wird ein Check zur Laufzeit ausgeführt

OQL Queries and C++ (1/2) Theorem: Ein Type-System, das parametrisierten Polymorphismus unterstützt erlaubt statisches type- checking von OQL Queries Theorem: Ein Type-System, das parametrisierten Polymorphismus unterstützt erlaubt statisches type- checking von OQL Queries Beweis: Dieses Resultat wird erziehlt, da zur Kompilierzeit jedem Collection-Type ein bestimmter Type zugeordnet wird. Dadurch wird jeder Element- Type eindeutig einer Menge zugeordnet. Beweis: Dieses Resultat wird erziehlt, da zur Kompilierzeit jedem Collection-Type ein bestimmter Type zugeordnet wird. Dadurch wird jeder Element- Type eindeutig einer Menge zugeordnet. Die Variablen einer Anfrage gehören einem spezifischen Types an Die Variablen einer Anfrage gehören einem spezifischen Types an

OQL Queries and C++ (2/2) Beispiel in C++ Beispiel in C++ Collection professors; Collection courses; select x from professors as x, x.courses() as y where x.salary() > and y.enrollment > 50 Korrolar: Das Type-System von C++ erlaubt statisches type-checking von OQL Queries Korrolar: Das Type-System von C++ erlaubt statisches type-checking von OQL Queries

OQL Queries with Order by (1/2) Eine Anfrage in allgemeiner Form: Eine Anfrage in allgemeiner Form: select projection from e 1 as x 1, e 2 as x 2, …,e n as x n where e order by e´ 1, e´ 2, …, e´ m Auch hier treten die schon bekannten Probleme auf Auch hier treten die schon bekannten Probleme auf Ein Vergleich von zwei Objekten kommt hinzu Ein Vergleich von zwei Objekten kommt hinzu

OQL Queries with Order by (2/2) Theorem: Bei expliziter Typangabe für jede Variabel innerhalb der Anfrage mit Order by Klausel im Java-Typ-System ist ein type- checking möglich, allerdings wiederum nur zur Laufzeit Theorem: Bei expliziter Typangabe für jede Variabel innerhalb der Anfrage mit Order by Klausel im Java-Typ-System ist ein type- checking möglich, allerdings wiederum nur zur Laufzeit Theorem: Ein Type-System, das parametrisierten Polymorphismus unterstützt erlaubt statisches type-checking von OQL Queries mit Order by Klausel Theorem: Ein Type-System, das parametrisierten Polymorphismus unterstützt erlaubt statisches type-checking von OQL Queries mit Order by Klausel

Java OQL (1/6) Java OQL ist eine Untersprach von Java und ermöglicht eine leichtere Anbindung an die Datenbank Java OQL ist eine Untersprach von Java und ermöglicht eine leichtere Anbindung an die Datenbank Es gibt zwei Formen dieser Vereinfachung Es gibt zwei Formen dieser Vereinfachung durch Methoden durch Methoden durch Klassen durch Klassen

Java OQL (2/6) Zunächst die Möglichkeit durch Methoden Zunächst die Möglichkeit durch Methoden interface DCollection extends java.util.Collection { Object selectElement(String predicate) java.util.Iterator select(String predicate) DCollection query(String predicate) boolean existsElement(String predicate) } Die anderen Interfaces aus dem ODMG Standard (DSet, DBag, DList …) werden von diesem Interface abgeleitet Die anderen Interfaces aus dem ODMG Standard (DSet, DBag, DList …) werden von diesem Interface abgeleitet

Java OQL (3/6) Ein Java OQL Query Ein Java OQL Query DCollection bestPaid; bestPaid = employees.query( for all x in employees: this.salary() >= x.salary() ); Das obige Beispiel findet die Menge der bestbezahltesden Mitarbeiter Das obige Beispiel findet die Menge der bestbezahltesden Mitarbeiter

Java OQL (4/6) Die Anfrage wird mittels eines Strings gestellt Die Anfrage wird mittels eines Strings gestellt Type-checking im Java-Type-System ist stets möglich, unabhängig vom Stringinhalt Type-checking im Java-Type-System ist stets möglich, unabhängig vom Stringinhalt Der String muß während der Laufzeit ausgewertet werden Der String muß während der Laufzeit ausgewertet werden Theorem: Das type-system von Java kann mit Java-OQL-Queries nicht umgehen, so daß ein type-checking nicht möglich ist Theorem: Das type-system von Java kann mit Java-OQL-Queries nicht umgehen, so daß ein type-checking nicht möglich ist

Java OQL (5/6) Java OQL Queries als Klassen Java OQL Queries als Klassen class OQLQuery { // Java constructors OQLQuery create(String query); void bind(Object parameter); Object execute(); } DBag selectedEmployee; OQLQuery query = new OQLQuery(); query.create(select well_paid(emp: x.name, sal: x.salary()) from employees as x where x.salary() > $1 and x.dept.NoOfEmployees() > $2); query.bind(50000); query.bind(100); selectedEmployees = (DBag) query.execute();

Java OQL (6/6) Es werden gut bezahlte Mitarbeiter in großen Abteilungen gesucht Es werden gut bezahlte Mitarbeiter in großen Abteilungen gesucht Bei diesem Beispiel treten mehrere Probleme auf: Bei diesem Beispiel treten mehrere Probleme auf: Es kann nur ein Laufzeitcheck ausgeführt werden Es kann nur ein Laufzeitcheck ausgeführt werden Die Übergabeparameter (mittels query.bind()) müssen zu dem Query passen Die Übergabeparameter (mittels query.bind()) müssen zu dem Query passen Der Rückgabewert von query.execute() ist Object, die Select-Anweisung liefert eine Menge von Objekten Der Rückgabewert von query.execute() ist Object, die Select-Anweisung liefert eine Menge von Objekten

C++ und OQL-Erweiterung Auch für C++ gibt es eine Erweiterung für die vereinfachte Anbindung an die Datenbank Auch für C++ gibt es eine Erweiterung für die vereinfachte Anbindung an die Datenbank Die in C++ zur Verfügung stehenden Templates helfen hier auch nicht Die in C++ zur Verfügung stehenden Templates helfen hier auch nicht Die Queries werden als String gegeben… Die Queries werden als String gegeben… Beim type-checking sind Strings stets typkorrekt Beim type-checking sind Strings stets typkorrekt C++ unterliegt den selben Problemen, die eben im Java-Typ-System diskutiert wurden C++ unterliegt den selben Problemen, die eben im Java-Typ-System diskutiert wurden

Geordnete Mengen (1/2) Weder im ODMG-Standard noch im Java oder C++ Type-System können geordnete Menge auf Typkorrektheit geprüft werden Weder im ODMG-Standard noch im Java oder C++ Type-System können geordnete Menge auf Typkorrektheit geprüft werden Ein Beispiel im ODMG Object Model Ein Beispiel im ODMG Object Model interface Ordered_Collection: Collection { unsigned long cardinality(); boolean is_empty(); void insert_element(in Ordered element); void remove_element(in Ordered element); boolean contains_element(in Ordered element); Iterator create_iterator(); }

Geordnete Mengen (2/2) Das Interface Ordered_Collection erbt von Collection Das Interface Ordered_Collection erbt von Collection Die Vererbungsregeln wurden bei den folgenden Funktionen nicht befolgt Die Vererbungsregeln wurden bei den folgenden Funktionen nicht befolgt insert_element insert_element remove_element remove_element contains_element contains_element Die Funktionsköpfe (die Aufrufparameter) dieser Funktionen wurden geändert Die Funktionsköpfe (die Aufrufparameter) dieser Funktionen wurden geändert

Bounded Type Quantification Theorem: Ein Type-System, das bounded type quantificatien unterstützt und das top-Object beinhaltet kann geordnete Mengen auf Typkorrektheit überprüfen Theorem: Ein Type-System, das bounded type quantificatien unterstützt und das top-Object beinhaltet kann geordnete Mengen auf Typkorrektheit überprüfen interface Ordered_Collection : Collection {... } Eiffel unterstützt diese Methode, doch C++ benötigt eine klare Vererbungsstruktur Eiffel unterstützt diese Methode, doch C++ benötigt eine klare Vererbungsstruktur

F-Bounded polymorphism (1/3) Theorem: Wenn die C++-Anbindung an die Datenbank F-bounded polymorphism unterstützt ist ein statisches type-checking von Queries möglich Theorem: Wenn die C++-Anbindung an die Datenbank F-bounded polymorphism unterstützt ist ein statisches type-checking von Queries möglich interface Ordered_Collection > :Collection {... }

F-Bounded polymorphism (2/3) Beispiel Beispiel interface Employee { String name; short id: //boolean leq(Employee e); } Dieses Interface entspricht nicht den Vererbungsregeln, da Employee nicht von Ord_element abgeleitet wird Dieses Interface entspricht nicht den Vererbungsregeln, da Employee nicht von Ord_element abgeleitet wird

F-Bounded polymorphism (3/3) Durch das obige Interface werden die Vererbungsstrukturen wiederhergestellt Durch das obige Interface werden die Vererbungsstrukturen wiederhergestellt Es wird garantiert, daß die Methoden die richtige Signatur haben Es wird garantiert, daß die Methoden die richtige Signatur haben Statisches Type-checking ist möglich Statisches Type-checking ist möglich interface Ord_element { boolean leq(Employee e); }

Zusammenfassung OQL Queries können im ODMG-Standard nicht auf Korrektheit geprüft werden OQL Queries können im ODMG-Standard nicht auf Korrektheit geprüft werden OQL Queries können in der Java-Anbindung nicht auf Korrektheit überprüft werden OQL Queries können in der Java-Anbindung nicht auf Korrektheit überprüft werden Parameter Polymorphismus sollte von einer Sprache für die Datenbank unterstüzt werden Parameter Polymorphismus sollte von einer Sprache für die Datenbank unterstüzt werden Um geordnete Menge korrekt zu überprüfen wird F-bounded polymorphism benötigt Um geordnete Menge korrekt zu überprüfen wird F-bounded polymorphism benötigt

Referenzen Type-Checking OQL Queries In The ODMG Type System Type-Checking OQL Queries In The ODMG Type System Suad Alagic – Wichita State University ACM Transaction on Database Systems, Vol.24, No. 3 September 1999, Page The Object Data Standard ODMG 3.0 The Object Data Standard ODMG 3.0 R.G.G. Cattell, Douglas Barry, Mark Berler, Jeff Eastman, David Jordan, Craig Russell, Olaf Schadow, Torsten Stanieda Fernando Velez Verlag: Morgan Kaufmann Publishers ISBN: