
|
O-/R-Mapping Object-Relational-Mapping. O-/R-Mapping bezeichnet die Abbildung von objektorientierten Daten auf relationale Daten und umgekehrt. |
|
OVERLOADING Speicherung von gleich benannten Funktionen oder Prozeduren innerhalb der Datenbank, die sich nur in Anzahl, Reihenfolge und/oder Datentyp unterscheiden. |
|
Package Stellt eine Sammlung logisch zusammengehöriger Funktionalitäten (Prozeduren, Funktionen, Typdeklarationen, ...) dar. |
|
PL/SQL Procedural Language/Structured Query Language. Erweiterung der Abfragesprache SQL um prozedurale Programmierelemente. |
|
STATIC Mit dem Schlüsselwort STATIC kann eine Methode in der Programmiersprache Java als eine Klassenmethode deklariert werden. Das Besondere an einer Klassenmethode ist, dass diese zu einer Klasse und nicht zu einem Objekt gehört. Außerdem ist im Speicher immer nur eine Kopie einer Klassenmethode vorhanden. |
Weiterführende Links
|
Mit der objektorientierten Softwareentwicklung lassen sich komplexe Problemstellungen übersichtlich abbilden. Diese Vorgehensweise bietet gegenüber der konventionellen, prozeduralen Programmierung wesentliche Vorteile:
Mit der Version 8 hat Oracle einige objektorientierte Konzepte eingeführt, die mit den folgenden Versionen immer weiter ausgebaut und vervollständigt wurden. Diese objektorientierten Konzepte werden in den folgenden Abschnitten kurz vorgestellt.
Objektorientierung unter Oracle orientiert sich einerseits an dem Package-Konzept (siehe Abbildung 1) aus PL/SQL und andererseits an objektorientierten Programmiersprachen wie Java.
Die Basis bilden die Objekttypen unter Oracle. Ein Objekttyp ist ein benutzerdefinierter Datentyp und besteht aus einem Namen, mehreren Attributen und den dazugehörigen Methoden.
Eine Methode kann entweder eine Prozedur oder eine Funktion sein. Sie kann auf die Attribute des zugehörigen Objekttyps zugreifen und diese verändern.
Die Attribute und Methoden eines Objekttyps werden, ähnlich einem PL/SQL-Paket, in einer Spezifikation (Objekttypspezifikation) deklariert. Die Spezifikation ist eine öffentliche Schnittstelle und kann von anderen Programmen aufgerufen werden.
Die Implementierungen der in der Spezifikation deklarierten Prozeduren bzw. Funktionen befinden sich im Body (Objekttyprumpf). Dabei muss jede im Body implementierte Prozedur bzw. Funktion auch in der Spezifikation deklariert werden.
Diese Einschränkung stellt einen Unterschied zu PL/SQL-Paketen dar. Denn hier können Prozeduren und Funktionen in einem Paket- Body implementiert werden, ohne diese in der Paket-Spezifikation deklarieren und somit nach außen sichtbar machen zu müssen.
Darüber hinaus können in einem Objekttyp-Body keine zusätzlichen Variablen deklariert werden. Auch diese Einschränkung stellt einen Unterschied zum PL/SQL Paket-Paradigma dar (siehe Abbildung 2).
Bei den Methoden wird grundsätzlich zwischen der STATIC- und der MEMBER-Methode unterschieden. Ähnlich der anderen objektorientierten Programmiersprachen wird die STATIC-Methode unabhängig von Objekten aufgerufen.
Eine MEMBER-Methode wird dagegen nur im Zusammenhang mit einem Objekt aufgerufen. Sie verfügt über einen impliziten SELF-Parameter. Ein SELF-Parameter ist eine Referenz auf das Objekt selbst und kann innerhalb von MEMBER-Methoden verwendet werden.
Eine Besonderheit der Objektorientierung in Oracle gegenüber anderen objektorientierten Programmiersprachen ist die Tatsache, dass in Oracle keine Unterscheidung von privaten (PRIVATE) und öffentlichen (PUBLIC) Attributen und Methoden vorhanden ist.
In PL/SQL kann also direkt, d. h. ohne öffentliche Methoden, auf die Attribute eines Objekts zugegriffen werden.
In einer Oracle Datenbank können Objekte sowohl als Spalten innerhalb einer relationalen Tabelle, als auch in einer so genannten Objekttabelle (object tables) gespeichert werden. Eine Objekttabelle beinhaltet in einer Zeile ein Objekt eines vorgegebenen Objekttyps. Eine Spalte entspricht dabei einem Attribut eines Objekts (siehe Abbildung 3). Ein wesentlicher Vorteil von Objekttabellen gegenüber der Speicherung von Objekten als Spalte (relationale Tabelle) ist, dass auf Objekte in einer Objekttabelle referenziert werden kann (siehe REF-Spalten).
Der Zugriff und die Änderung der Daten einer Objekttabelle erfolgt wie bei einer herkömmlichen relationalen Tabelle. Wird allerdings statt der einzelnen Attribute ein Objekt benötigt, so kann mit der Funktion VALUE ein gesamtes Objekt ausgelesen werden (siehe Abbildung 4).
Sollen bereits vorhandene Objekttypen geändert werden, so kann dies mit Hilfe der so genannten Type-Evolution vorgenommen werden. Mit der Type-Evolution stellt Oracle eine Funktionalität zur Verfügung, mit der Objekttypen trotz abhängiger Datenbankobjekte, wie z. B. andere Objekttypen oder sogar Objekttabellen mit Objekten basierend auf dem Objekttyp selbst, modifiziert werden können.
Dabei können die Änderungen wie z. B. das Hinzufügen von neuen Attributen, das Löschen von bereits vorhandenen Attributen oder das Vergrößern der Länge einzelner Datentypen der Attribute, entweder unmittelbar oder zeitverzögert propagiert werden (siehe Abbildung 5).
Eine weitere Besonderheit der Objektorientierung in Oracle stellen die REF-Spalten dar. In einer REF-Spalte kann eine Referenz auf ein Objekt aus einer Objekttabelle gespeichert werden. Eine Objektreferenz ist dabei ein in der gesamten Datenbank eindeutiger Objektidentifizierer (Object identifier, OID).
Der Vorteil der REF-Spalte kommt immer dann zum Tragen, wenn statt des gesamten Objektes lediglich nur eine Objektreferenz gespeichert werden soll (siehe Abbildung 6).
Des Weiteren werden in Oracle ähnlich wie bei den verbreiteten objektorientierten Programmiersprachen alle herkömmlichen objektorientierten Konzepte unterstützt. Dazu gehören unter anderem:
Soll auf Objekte, die in der Datenbank gespeichert sind, eine Sortierung in einem SELECT Statement oder eine Überprüfung auf Gleichheit von Objekten vorgenommen werden, so muss entweder eine MAP- oder eine ORDER-Methode implementiert werden.
Durch die Verwendung der MAP-Methode werden alle Objekte eines Objekttyps in skalare Datentypen umgewandelt und anschließend sortiert (siehe Abbildung 7).
Eine ORDER-Methode wird dagegen mehrfach aufgerufen, da mit der ORDER-Methode immer nur zwei Objekte verglichen werden können (siehe Abbildung 8).
Wird eine große Anzahl von Objekten sortiert, so ist die MAP-Methode zu empfehlen.
Mit Hilfe der so genannten Object Views ist eine objektorientierte Sicht auf relationale Daten möglich. Dabei können Object Views entweder auf relationalen Tabellen oder auch auf Objekttabellen basieren (siehe Abbildung 9).
Object Views können z. B. dann verwendet werden, wenn eine objektorientierte Softwareentwicklung auf bereits vorhandenen relationalen Daten realisiert werden soll.
Zum Thema Performance ist grundsätzlich zu sagen, dass die Objekttabellen die gleichen Möglichkeiten der Performance-Steigerung bieten, wie die relationale Tabelle auch.
Es ist allerdings zu beobachten, dass der Zugriff auf eine Objekttabelle mit dem standardmäßig, systemgenerierten OID langsamer ist, als ein Zugriff auf eine Objekttabelle mit einem auf dem Primärschlüssel basierenden OID.
Der Grund hierfür liegt darin, dass die Objekttabellen mit dem systemgenerierten OID zusätzlich zu den Attributspalten noch über eine OID-Spalte (16 Byte) verfügen und somit mehr Speicherplatz belegen, als Objekttabellen mit einem auf dem Primärschlüssel basierenden OID.
Die Objektorientierung in Oracle kann als eine Alternative zu der herkömmlichen prozeduralen Programmierweise verstanden werden. Da die wesentlichen Vorteile der Objektorientierung in der Wiederverwendbarkeit und Verbesserung der Wartbarkeit liegen, können hier langfristige Kosteneinsparungen erzielt werden. Zudem kann der Arbeitsaufwand signifikant minimiert werden.
Kritisch sind hier allerdings die fehlende Unterstützung der Zugriffsmodifikatoren und damit auch die fehlende Unterstützung von Information Hiding. Da in Oracle zwischen privaten und öffentlichen Attributen nicht unterschieden werden kann, können alle Objektattribute ohne Verwendung der Objektmethoden verändert werden.
Die direkte Möglichkeit der Speicherung der Objekte in einer Objekttabelle stellt auf der anderen Seite aber einen deutlichen Performance-Vorteil gegenüber anderen objektorientierten Programmiersprachen dar, bei denen ein explizites Mapping zwischen Objekten und Tabellen notwendig ist.
Eine Vertiefung zu diesem Thema bietet Ihnen unser 5-tägiges Seminar "Objektorientierung in Oracle“.
Markus Fiegler (info@ordix.de).