Tp5 - Oracle Objet

Télécharger au format ppt, pdf ou txt
Télécharger au format ppt, pdf ou txt
Vous êtes sur la page 1sur 22

Université de Lausanne

Ecole des Hautes Etudes Commerciales (HEC)


Cours de Bases de Données Avancées

TP5 – Oracle Objet

BFSH1 - 1015 Lausanne - Switzerland - Tel. +41 21 692.3420 - [email protected] - http://www.hec.unil.ch/cparent


Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Introduction – La notion d’objet


 Un objet est une abstraction informatique d'une entité du
monde réel
– Le but est d’avoir un haut niveau d’abstraction afin de pouvoir modéliser
directement les entités du monde réel sans les déformer ou décomposer

 Un objet est caractérisée par


– Une identité propre  défini par son identifiant
– Un état  défini par ses attributs qui forment sa structure de données
– Un comportement  défini par ses méthodes

Oracle – Objet 2
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Introduction – Encapsulation
 Principe de l’encapsulation
– Le fonctionnement interne de l’objet est caché au monde exterieur
 Les attributs ne devraient pas être directement manipulés par l’exterieur
 L'interface, qui définit les méthodes accessibles par l’utilisateur (publiques) est
le seul moyen d'accéder à l'objet par l'envoi de messages.
 Facilite la modularisation, la réutilisation et l’indépendance code - données

Interface Méthode Objet


Messages Méthode
Méthode
Données
Méthode
Méthode

– Souvent pas entièrement respecté dans les BD relationnel-objet


 La structure de données formée par les attributs est souvent publique
 Oracle donne la possibilité de définir les attributs comme étant public ou private

Oracle – Objet 3
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Introduction – Le modèle objet-relationnel

OBJET

Polymorphisme

Types
utilisateurs RELATIONNEL Collections
Domaine
Table
Attribut
Clé
Référence
Opérations Identifiant

Héritage

Oracle – Objet 4
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Introduction – Classes et Instances


 Classe d’objets
– Définit une type d'objets similaires en spécifiant ses attributs et méthodes
 Oracle  TYPE OBJET
– CREATE TYPE <nom> AS OBJECT <spécification>
– CREATE TYPE BODY AS <implémentation>

 Instance d’objet (ou Objet)


– Réprésentation d’un objet individuel d’un certain type ayant son existence
propre, son propre identifiant et ses propres valeurs (état). Stockées dans
une table d’objets
 Oracle  TABLES OBJET
– CREATE TABLES <nom> AS <type>

Oracle – Objet 5
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET


 Crée un type d’objet défini par l'utilisateur qui encapsule
– une spécification qui détermine l’interface publique du type, qui contient
 une structure de données (déclaration d’attributs)  état
 la spécification des méthodes permettant leur manipulation  comportement
– CREATE TYPE <nom> AS OBJECT <spécification>
– une implementation (corps), qui contient
 l’implémentation des méthodes et défini par la spécification
– CREATE TYPE BODY AS <implémentation>

Spécification
Déclaration des attributs
Interface publique
Spécification des méthodes

Corps Implémentation privée


Corps des méthodes

Oracle – Objet 6
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET – Attributs


 Syntaxe (spécification):
– CREATE [ OR REPLACE ] TYPE <nom_type> AS OBJECT (
<nom_attribut> <type_attribut>,*
[ MEMBER <declaration_methode> ],*
); ); [ [NOT] FINAL] [ [NOT] INSTANTIABLE ]

 Notes:
– Un attribut est déclaré avec un nom qui doit être unique dans un type
donné, mais qui peut être réutilisé par d’autres types
– Type peut être un des types de données Oracle (exceptions) ou un type
défini par l’utilisateur (formant ainsi une structure de données imbriquée)
– Les clauses DEFAULT et NOT NULL ne peuvent pas être imposées
– Un type peut être utilisé à l’intérieur d’un autre ou comme type de table
– L'accès à un attribut peut se faire avec la notation pointée (type.attribut).
Les types peuvent être enchaînés pour accéder aux attributs imbriqués.

Oracle – Objet 7
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET – Attributs


 Exemples:
– Créer un type d’objet T_Point défini par ses coordonnées x et y définis comme
nombre entiers
 CREATE TYPE T_Point AS OBJECT (
x number,
y number
);
– Créer un type d’objet T_Ligne caractérisée par deux points définis précédemment
 CREATE TYPE T_Ligne AS OBJECT (
point1 T_Point,
point2 T_Point
);
 Pour tester:
– CREATE TABLE Lignes OF T_Ligne;
– INSERT INTO Lignes VALUES (T_Point(5,5),T_Point(10,10));
– SELECT L.point1.x, L.point1.y, L.point2.x, L.point2.y FROM Lignes L;

 Exercice:
– Créer un type d’objet T_Cercle caractérisée un centre (point) et un rayon

Oracle – Objet 8
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET – Attributs multivalués


 Un type d’objet permet la déclaration d’attributs multivalués qui
sont organisés selon un des type de collection suivants:

– NESTED TABLE
 Définit un ensemble non ordonné
 De taille variable et non limité
 Les éléments peuvent être accédé singulièrement

– VARRAY
 Définit un ensemble ordonné
 De taille variable mais limité (à définir au début)
 Les éléments ne peuvent pas être accédé singulièrement

Oracle – Objet 9
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET – Attributs multivalués


 Example NESTED TABLE:
– Créer une table d’objets Groupes qui contient le nom du groupe et ses components
(un ensemble d’artistes ayant un nom, prénom et instrument ).
 CREATE TYPE T_Artiste AS OBJECT (
Nom varchar(32), Prenom varchar(32), Instrument varchar(32)
);
 CREATE TYPE T_Components AS TABLE OF T_Artiste;
 CREATE TABLE Groupes (
NomGroupe varchar(32),
Components T_Components
)
NESTED TABLE Components STORE AS GroupeComponents;
 Pour tester:
– INSERT INTO Groupes VALUES (
'Metallica',
T_Components(T_Artiste('James','Hetfield','Vocals'), T_Artiste('Kirk','Hammet','Guitar'),
T_Artiste('Jason','Newsted','Bass'), T_Artiste('Lars','Ulrich','Drums') )
);
– SELECT G.NomGroupe, C.* FROM Groupes G, TABLE(G.Components) C

 Exercice
– Créer un type Polygone avec comme attribut un ensemble de points

Oracle – Objet 10
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET – Attributs multivalués


 Example VARRAY:
– Créer un table de courses qui contient un nom et une liste de participants définis
comme un VARRAY de participants (définis par un rang et un nom)

– CREATE TYPE T_Participant AS OBJECT (Rang Number(4), Nom varchar(32) );

– CREATE TYPE T_ ParticipantList AS VARRAY(50) OF T_Participant

– CREATE TABLE Course (


Course varchar(32),
ParticipantList T_ParticipantList
);

– Pour tester:
 INSERT INTO Course VALUES (
'Athletissima 100m',
T_ParticipantList( T_Participant(1,'Maurice Green'), T_Participant(2,'Linford Christie'),
T_Participant(3,'Ato Bolton') )
);
 SELECT C.Course, CL.* FROM Course C, TABLE(C.Participantlist) CL ;

Oracle – Objet 11
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET – Méthodes


 Syntaxe (spécification):
– CREATE [ OR REPLACE ] TYPE <nom_type> AS OBJECT (
<nom_attribut> <type_attribut>,*
[ MEMBER <declaration_methode> ],*
); [ [NOT] FINAL] [ [NOT] INSTANTIABLE ]
 Syntaxe (implémentation):
– CREATE [OR REPLACE] TYPE BODY <nom_type> AS
MEMBER <declaration_methode> AS BEGIN <code> END ;*
END;

 Notes:
– La déclaration des signatures des méthodes se trouve dans la spécification
du TYPE, qui définit l’interface de l’objet (méthodes accessibles).
 Déclarée par le mot-clé MEMBER (méthode d’instance) ou STATIC (méthode de classe)
 Une méthodes peut être une fonction (FUNCTION) ou une procédure (PROCEDURE)
– L’implémentations des méthodes se trouve dans le TYPE BODY
 Contient le code (e.g. PL/SQL) à exécuter pour chaque méthode définie par l’interface
 Accès possible aux valeurs de l’objet appelée grâce au mot clé SELF

Oracle – Objet 12
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TYPE OBJET – Méthodes


 Examples:
– Créer un type T_Rectangle charactérisée par deux points et ayant une méthode
permettant d’avoir la surface du rectangle

 CREATE TYPE T_Rectangle AS OBJECT (


point1 T_Point,
point2 T_Point,
MEMBER FUNCTION surface RETURN NUMBER
);

 CREATE OR REPLACE TYPE BODY T_Rectangle AS


MEMBER FUNCTION surface RETURN NUMBER AS
BEGIN
RETURN ABS((point1.x-point2.x)*(point1.y-point2.y));
END surface;
END;

 Pour tester:
– CREATE TABLE Rectangles OF T_Rectangle;
– INSERT INTO Rectangles VALUES (T_Point(0,0),T_Point(100,100));
– SELECT R.point1.x, R.point1.x, R.point2.x, R.point2.y, R.surface() FROM rectangles R
 Exercice:
– Modifier la définition du type T_Rectangle pour y ajouter une méthode qui calcule et
renvoie le perimètre du rectangle et modifier son implémentation en conséquence

Oracle – Objet 13
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TABLE OBJET


 Crée une table stockant des instances d’objet (table objet)
– Chaque ligne correspond à une instance d’objet
– Chaque colonne correspond à un attribut du type objet
– Chaque enregistrement dans une table objet a un identifiant objet (OID), qui
identifie l'objet de façon unique et sert comme référence à l'objet.

 Syntaxe:
– CREATE TABLE <nom_table> OF <nom_type>;

 Example:
– CREATE TABLE Rectangles OF T_Rectangle;

 Exercice:
– Créer une table de Lignes de type T_Ligne

Oracle – Objet 14
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – TABLE OBJET (2)


 Les types objets peuvent aussi être utilisés simplement dans les instructions
CREATE TABLE classiques pour spécifier un type de données d'une colonne.

 Syntaxe:
– CREATE TABLE <nom_table> (
<nom-col> <type-col> [ [CONSTRAINT] <contrainte-col>]*
[ [CONSTRAINT] <contrainte-table>]*
);

 Example:
– CREATE TABLE Rectangles2 (
point1 T_Point,
point2 T_Point,
surface number(),
constraint CkSurf CHECK surface = ABS((point1.x-point2.x)*(point1.y-point2.y))
);

 Exercice:
– Créer une table de Cercles avec un centre (T_Point) et un rayon (number)

Oracle – Objet 15
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – Manipulation d’objets


 Instructions INSERT, UPDATE et DELETE
– Equivalentes aux l’instruction SQL correspondantes, sauf qu’il faut modifier les
requêtes en consequence de la presence de colonnes de type objet tel que utiliser
les notations pointées (alias nécessaire) et les constructeurs

 Syntaxe:
– INSERTO INTO <nom_table> VALUES (<valeurs>)
– UPDATE <nom-table> SET <nom-colonne> = <expression> [WHERE <condition>]
– DELETE FROM <nom-table> [WHERE <condition>]

 Examples:
– INSERT INTO Rectangles VALUES ( T_Point(0,0), T_Point(10,10) );
– UPDATE Rectangles SET Point1 = T_Point(5,5) where Point1=T_Point(0,0);
– DELETE FROM Rectangles WHERE Point1=T_Point(5,5);

 Exercice:
– Effectuez des opérations d’insertion, mise à jour et effacement sur la table Groupes
définie dans un des transparents précédants

Oracle – Objet 16
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – Requêtes


 Instruction SELECT
– Permet de formuler des requêtes SQL classiques, sauf qu’il faut modifier les
requêtes en consequence de la presence de colonnes de type objet.
– Note: pour les collections, il est possible d’employer la fonction TABLE(type) alias
pour désimbriquer leur éléments

 Syntaxe:
– SELECT [DISTINCT] nom-cols [AS nom-cols] FROM nom-tables
[WHERE ... ] [GROUP BY ...] [ HAVING ... ] [ORDER BY ...]

 Examples:
– SELECT R.point1.x, R.point1.y, R.point2.x, R.point2.y, R.surface()
FROM Rectangles R
WHERE R.Surface()>10;
– SELECT C.Course, CL.*
FROM Course C, TABLE(C.Participantlist) CL ;

 Exercice
– Selectionner les rectangles ayant un des cotés > 10, ordonnés par surface
– Selectionner toutes les couples de rectangles ayant un point en commun

Oracle – Objet 17
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – References


 Identifiant objet (OID)
– Identifie de façon unique et invariante un objet indépendamment du valeur de ses
attributs (deux objets aux valeurs identiques peuvent être différents)
– Générés et indexés automatiquement par Oracle
– Invisibles et pas manipulables directement par l’utilisateur
– Est utilisé pour référencer un objet à partir d’autres objets ou tables (REF)
 Attributs Reference (REF)
– Un type de données particulier contentant une référence vers une autre objet (i.e.
l’identifiant OID de l’autre objet)
– C’est un pointeur logique sur un autre objet. Si une REF pointe sur un objet
nonexistant elle est dite (DANGLING). Tester grâce à IS [NOT] DANGLING
– Utilisé pour modéliser des associations entre objet. Permet de chaîner les objets
entre eux sans passer par des jointures, permettaint ainsi une navigation directe
entre objets (notation pointée)
– Dans une instruction SQL il faut passer par l'opérateur DEREF, qui prend comme
paramètre une référence à un objet, pour en avoir la valeur
– Les références peuvent porter à un partage d’objets: les données ne sont pas
répliqués et les modifications sont effectués une seule fois et tout référant y a accès

Oracle – Objet 18
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – References


 Syntaxe:
– <nom_attribut> REF <type_attribut>

 Exemple:
– CREATE TABLE Points OF T_Point;
– CREATE TABLE Segments (
point1 REF T_Point,
point2 REF T_Point
);
– Pour tester
 INSERT INTO Points VALUES(0,5);
 INSERT INTO Points VALUES(10,1);
 INSERT INTO Segments SELECT REF(p1), REF(p2)
FROM Points p1, Points p2
WHERE p1.x=0 and p1.y=5 AND p2.x=10 and p2.y=1
 SELECT S.point1.x, S.point1.y, S.point2.x, S.point2.y FROM Segments S
 Exercice:
– Effectuez des opérations d’insertion, mise à jour et effacement des points et des
segments. Afficher à chaque fois les segments

Oracle – Objet 19
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – Heritage


 Heritage de type
– Permet de définir un sous-type d'un type existant. Le sous-type hérite alors
de la structure et des opérations du type de base (qu’il peut rédéfinir).

 Syntaxe (spécification):
– CREATE [ OR REPLACE ] TYPE <nom_type> [ UNDER
<nom_supertype> ] (
<nom_attribut> <type_attribut>,*
[ MEMBER <declaration_methode> ],*
); [ [NOT] FINAL] [ [NOT] INSTANTIABLE ]

 Notes:
– [NOT] FINAL permet de déterminer si un type peut être spécialisé (ou pas).
Il n’est donc pas possible d’heriter d’un type défini comme FINAL. Par
défaut un type est défini comme FINAL

Oracle – Objet 20
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

Oracle Objet – Heritage


 Syntaxe (spécification):
– CREATE [ OR REPLACE ] TYPE <nom_type> [ UNDER
<nom_supertype> ] (
<nom_attribut> <type_attribut>,*
[ MEMBER <declaration_methode> ],*
); [ [NOT] FINAL] [ [NOT] INSTANTIABLE ]

 Exemple:
– CREATE TYPE T_Carre UNDER T_Rectangle () NOT FINAL;
– CREATE OR REPLACE TYPE BODY T_Carre AS
MEMBER FUNCTION surface RETURN NUMBER AS
BEGIN
RETURN POWER(point1.x-point2.x,2);
END surface;
END;

Oracle – Objet 21
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5

TOAD – OBJECT BROWSER


 Toad contient un navigateur d’objets (Database > Object Browser)
– Utile pour avoir une vue d’ensemble des objets, leur propriétés et méthodes
– Utile surtout pour avoir une vue des dépendances entre objets
Mettre à jour les champs
(pas automatique)
Basculer entre propriétés,
spécification et
implémentation

Afficher les tables objets


crées avec le type choisi
(dépendants de lui)

Afficher les autres objets


dépendants du type
choisi

Liste d’objets (selectionner un objet pour avoir ses propriétés)

Oracle – Objet 22

Vous aimerez peut-être aussi