Вы находитесь на странице: 1из 18

Bases de donnes Orientes-Objet

Talel.Abdessalem@enst.fr

Concepts objet
?

Notion dobjet

Identit

Classes, attributs et mthodes

Hritage et polymorphisme

Modles de persistance
2

Notion dObjet
?
?

Vu de lextrieur : une boite avec des boutons


Vu de l intrieur : des donnes + la
mcanique lie aux boutons
modifier_resa

demander_resa

Tarif : 2000
places_dispo : 13
Inscrits : {Dupont, Durand, }
demander_resa { }
modifier_resa{ }
3

Identit dobjet
?

Chaque objet a un Oid indpendant de sa


valeur : Objet (Oid, valeur)

Egalit et identit deux concepts diffrents

Partage dobjet et objet cyclique

Les Oids sont grs par le systme et ne sont


pas accessibles lutilisateur

Classes
?
?

Un objet est associ une classe


Une classe dfinit la structure (type) et le
comportement (mthodes) des objets qui lui sont
associs
Exemple de dfinition de classe :
Class Ligne
?

numro : integer;

trajet: List (Station)

method
?

extremes():set (Station) ;

Class Station
nom : string;
lignes : set(Ligne);
method
suivante(Ligne): Station;
prcedente (Ligne): Station;

Hritage
?

La sous-classe hrite des


attributs et des mthodes de la
super-classe

La mthode afficher_coef nest


applicable quaux instances de
Trajet_rduit

Le corps de la mthode
claculer_tarif peut tre redfinie
dans Trajet_rduit pour tenir
compte de la rduction

Liaison dynamique : le SGBD


appelle la bonne mthode
claculer_tarif en fonction de
lobjet manipul

Hritage multiple possible

Super-classe
Trajet_train
numro : integer,
dpart : date,
arrive : date
method
reserver,
calculer_tarif : real;

Sous-classe
Trajet_rduit inherit Trajet_train
coef : real
method
afficher_coef;

Avantages :
modlisation plus compacte et mieux structure. Minimise les modifications du code.

Persistance ?
?

Quels objets persistent dans la BD la suite


de lapplication qui les a fait natre ?

Persistance explicite/implicite
Persistance implicite :

Support de stockage
Classes dobjets persistants
Racines de persistance

Langages
?
?

La force des SGBD relationnels vient de la


normalisation des SQL, ESQL et SQL/CLI
Quels langages pour les SGBD OO ?
diversit des modles et des langages
Effort de normalisation
?

OQL de lODMG ou SQL3 de lANSI ?

liens avec les langages de programmation OO


?

impact sur le dveloppement dapplications

Mta-modle du modle ODMG


support

Class
Instantiate

key_list
extent_name
super_class

extends

Operation

signature
has

invoke
return
return_abnormally

Property

Object
OID
has_name?
names
class
create
delete
exits
same_has?

Attribute

Traversal path

attr_name
attr_type

path_name
to_cardinality
to_type

set_value
get_value

traverse
creator_iterator
2

+ Type, littraux, interface, ....

Relationship
define
1

add_member
remove_member

Exemple de base
Habite

Appartient
Voiture
nveh
couleur
marque
km
rouler()

Possde

Personne
nss
nom
prenom
datenais
vieillir()
dormir()

Loge

Appart.
tage
no
rue
code
ville

Boire

Infrieur
Buveur
type
tat
boire()

Employ
fonction
salaire
primes
Suprieur travailler()

Vin
cru
Bu_par millsime
degr
qualit

EmployBuveur

10

Exemple de dfinition
Interface Personne { // interface abstraite pour implmentation dans
classe
attribute string nss ;
attribute string nom ;
attribute string prenom ;
attribute date datenaissance;
relationship Appart habite inverse Appart::loge; // relationship
relationship Voiture Possede inverse Voiture::Appartient;
short vieillir();
void dormir()
short age();
};
11

Exemple (suite)
class Employ : Personne(extent Employ key nss)
//classe avec extension de personne +
{
attribute enum fonct{ingnieur, secrtaire, analyste,
programmeur} fonction;
attribute float salaire ;
attribute list<float> primes ; //attribut multi-valu
relationship Employ inferieur inverse suprieur;
relationship Employ suprieur inverse infrieur;
void travailler();
};
12

LE LANGAGE OQL
?

Permettre un accs facile une base objet


via un langage interactif autonome
par intgration dans C++ ou Smalltalk ou Java

Offrir un accs non procdural


permettre des optimisations automatiques
(ordonnancement, index, )
garder une syntaxe proche de SQL 92

Rester conforme au modle de l'ODMG


application d'oprateurs aux collections extensions ou
imbriques
permettre de crer des rsultats littraux, objets, collections,

Supporter des mises jour limites via les mthodes


13

Concepts nouveaux
?

Expression de chemin mono-value


Squence d'attributs ou associations mono-valus de la
forme X1.X2 Xn telle que chaque Xi l'exception du
dernier contient une rfrence un objet ou un littral
unique sur lequel le suivant s'applique.
Utilisable en place d'un attribut SQL

Collection dpendante
Collection obtenu partir d'un objet, soit par ce qu'elle est
imbrique dans l'objet ou pointe par l'objet.
Utilisable dans le FROM

14

Forme des Requtes


?

Forme gnrale d'une requte


Expressions fonctionnelles mixer avec
Bloc select tendu
?
?
?

Select [<type rsultat>] (<expression> [, <expression>] ...)


From x in <collection> [, y in <collection>]...
Where <formule>

Type rsultat
automatiquement infr par le SGBD
tout collection est possible (bag par dfaut)
il est possible de crer des objets en rsultats

Syntaxe trs libre, fort contrle de type

15

Requte Simple
?

Calcul d'une expression


((string) 10*5/2) || "toto"

===> string

Accder un attribut d'un objet nomm


Ma_voiture.couleur

===> litteral string

16

Parcours d'association monovalues


?

avec slection de structure (dfaut)

select struct (name: b.nom,


city: b.habite.adresse.ville)
from b in buveurs
where b.type = 'gros'
===> littral bag <struct(Name,City)>

17

Parcours d'association multivalues


?

Utilisation de collections dpendantes


select b.nom, b.prenom
from b in buveurs, v in b.boire
where v.cru = "volnay"

==> litteral
bag<struct<nom:string,prenom:string>

18

Rsultats Imbriqus
?

Imbrication des select au niveau select

select distinct struct (nom : e.nom,


inf_mieux_payes :
select i
from i in e.inferieur
where i.salaire > e.salaire))
from e in employes
===> litteral de type set <struct (nom: string,
inf_mieux_payes : bag
<employes>)>

et aussi au niveau du FROM (requte collection)

19

Invocation de mthodes
?

En rsultat ou dans le critre

select distinct e.nom,


e.habite.adresse.ville, e.age()
from e in employes
where e.salaire > 10000 and e.age() < 30
===> litteral de type set <struct>

20

Cration d'Objets
?

Expressions de constructions
Si C est le nom d'une classe, p1, ..., pn des proprits de la
classe et e1, ..., en des expressions
alors C(p1 : e1, ..., pn : en) est une expression de construction

Cration d'objet
employe (nss:15603300036029, nom:"jean", salaire: 100000)
employe (select struct(nss:b.nss, nom:b.nom, salaire: 4000)

from b in buveurs

where not exist e in employes : e.nss=b.nss )

21

Dfinition d'objets via Requtes


?

Dfinition de macros
Define <nom> as <question>
permet de dfinir un objet de nom <nom> calcul
par la question

Exemple:

Define Cesars as
Select b
From b in Buveurs
Where b.prenom = "Jules"
22

Quantification
?

Quantificateur universel
for all x in collection : predicat(x)
Exemple:
for all b in Buveurs : b.age < 18

Quantificateur existentiel
exists x in collection: Predicat(x)
Exemple:
exists v in Employs.Possde : v.marque = "Renault"

23

Calculs d'Agrgats
?
?

Similaire SQL
avec possibilit de prdicats
select e
from e in employes
group by (bas : e.salaire < 7000,

moyen : e.salaire >= 7000 and e.salaire <


21000,

haut : e.salaire >= 21000)


===>struct<bas:
set(emp.),moyen:set(emp.),haut:set(emp.)>
24

Expressions de Collections
?

Conversion de collections

element (select v.marque


from v in voitures
where v.numero = "120 abc 75") ===> string

Applatissage des collections

flatten (select b.nom, select v.millesime


from v in b.boire
where v.cru = "volnay"
from b in buveurs)

25

Dveloppement d'applications,
lexemple O2
?

O2C
mthodes et applications - langage propritaire

O2 et C
Assurer manuellement le mapping entre classes
O2 et types C.

O2 et C++
Mapping transparent des classes entre C++ et O2
26

Fonction O2Query et O2C


?

o2query ( <resultat> , <requete> [, <liste d'expressions>])

o2 Station nouvelle_station;

o2 set(Station) les_stations;

o2query ( les_stations ,
"SELECT s FROM s in les_stations WHERE s->nom = $1",

?
?

nouvelle_station->nom);

if (count (les_stations))
display ("Il existe dj une station avec ce nom");
27

SQL3
?
?

Nouvelle norme SQL de lANSI


Multiples facettes :

Un langage de dfinition de types


Un langage de programmation
Un langage de requtes
Un langage temporel
...

Donnes complexes, objet-relationnel


Adeptes :
?
?

OO : Illustra, UniSQL, Versant


Relationnel : Ingres, Oracle, DB2, Informix
28

SQL3 : concepts objet


?

Extensibilit des types de donnes


Dfinition de types abstraits
Possibilit de types avec ou sans OID

Support dobjets complexes


Constructeurs de types (tuples, set, list, )
Identit dobjet et partage dobjet

Hritage
Dfinition de sous-types
Dfinition de sous-tables
29

SQL3 : dfinition de types


?

Un type avec rfrence


CREATE TYPE WITH OID TELEPHONE
(pays VARCHAR, zone VARCHAR, num number(10),
description CHAR(20))

Un type sans rfrence


CREATE TYPE PERSONNE
(nss NUMBER, nom VARCHAR, prnoms LIST(VARCHAR), tel
SET(TELEPHONE))

Un sous-type
CREATE TYPE EMPLOYE UNDER PERSONNE
(salaire NUMBER(10,2), anciennet DATE)

30

SQL 3 : relations imbriques


?

Une table peut possder des attributs d'un type abstrait

Un tuple peut contenir des rfrences ou des valeurs


complexes

Possibilit d'utiliser un type prdfini


CREATE TABLE Films OF Film ;

Possibilit de dfinir un nouveau type


CREATE TABLE Acteurs OF NEW TYPE Acteur (nom VARCHAR,
age NUMBER) ;

Possibilit de dfinir des sous-tables


CREATE TABLE Films_Franais UNDER Films (realisateurs
VARCHAR)
31

SQL3 : utilisation des fonctions


?

Fonctions
SELECT
FROM
WHERE
and

a.nom
Bateau a, Bateau b
b.nom = Grand Bleu'
distance(a.position,b.position) < 1

Oprateurs
SELECT
FROM
WHERE
and

a.nom
Bateau a, Bateau b
b.nom = Grand Bleu'
contenu(a.position, zone(b.position, 1))

32

SQL 3 : exemple de relations imbriques


Films
N

Budget Ralisateur

Acteurs
Nom

4MF

Besson

Jean
Julie

Nom

5MF Chouraki

Dpenses
Num

Montant

55

2600

Bande

40

8700

Htel

Age

Age

Sylvie

45

Pierre

29

Motif

15400

Camra

Num

Montant

Motif

3000

Bande

4000

Htel

33

SQL 3 : accs navigationnel


?

Accs en relationnel
SELECT Films.n, Films.budget
FROM Acteurs, Films, Joue
WHERE Acteurs.nom = Joue.acteur
AND Joue.film = Films.n
AND Acteurs.nom = Besson

Accs en objet-relationnel
SELECT Films.n, Films.budget
FROM Films f
WHERE f.acteurs.nom = Besson
34

Rsum
?

Concepts OO plus riches (Objet, identit,


hritage, etc.)

Langages navigationnels et une syntaxe la SQL

Deux candidats la normalisation


ODMG, OQL : pure objet, manque une norme pour le
procdural OQL et pas de OQL CLI
SQL3 : rfrence de lobjet-relationnel, un pas vers
lobjet
35

Вам также может понравиться