Le modèle de l`ODMG

Download Report

Transcript Le modèle de l`ODMG

Le modèle de l'ODMG


1. Contexte
2. Le modèle de l'ODMG et ODL
 Un exemple de base



3. Le langage OQL
4. OML : intégration aux langages C++, Java et Smalltalk
5. Conclusion
‹#›
J.PHILIPP d'après G. Gardarin
1. Contexte
Object Database Management Group

 Fondé en septembre 1991 par 5 constructeurs:





O2 Technology
Objectivity
Object Design
Ontos
Versant
 Version 2.0 96 avec 10 auteurs

POET Soft, Barry & Ass., American Man. Syst., Windward Sol., Lucent
 De nombreux observateurs externes participent à l'élaboration.

Le groupe propose de définir des concepts standards pour
la conception des SGBDO.
‹#›
J.PHILIPP d'après G. Gardarin
2. Le modèle de l'ODMG

C'est une extension du modèle de l'OMG.
 L'OMG a proposé un modèle standard pour les objets, supporté par
le langage IDL (Interface Definition Langage), également de l'OMG.
 Les BD objets nécessitent des adaptations/extensions :







instances de classes,
collections,
associations,
persistance,
transactions.
Ce modèle est un candidat pour un profil BD de l'OMG.
Mis en oeuvre à l'aide du langage ODL, langage de niveau
conceptuel, supportant un modèle abstrait implémenté dans
les langage C++, Smalltalk, Java.
‹#›
J.PHILIPP d'après G. Gardarin
Quelques définitions de l'ODMG

ODL (Object Definition Langage)
 Langage de définition de schéma des bases de données objet

OQL (Object Query Langage)
 Langage d'interrogation de bases de données objet basé sur des
requêtes SELECT proches de celles du langage SQL

OML (Object Manipulation Langage)
 Langage de manipulation intégré à un langage de programmation
objet permettant la navigation, l'interrogation, la mise à jour
d'objets persistants.
 L'OMG en propose trois variantes : OML C++, OML Smalltalk,
OML Java.
‹#›
J.PHILIPP d'après G. Gardarin
Interfaces d'accès à un SGBDO (ODMG)


C'est une adaptation du modèle objet de l'OMG.
Elle est possible à partir des langages de propgrammation
orientés objet tel le langage C++.
ODL OQL OML C++ OML Java OML Smalltalk
SGBDO
‹#›
J.PHILIPP d'après G. Gardarin
Architecture conforme de l'ODMG

Processus de génération d'un fichier exécutable
• Editeur de classes
• Manipulateur d’objets
• Bibliothèques graphiques
• Débogueur, éditeur
Outils Interactifs
OQL = Object Query Language
LOO
OQL
Persist.
Gérant d'objets
‹#›
ODL
ODL = Object Defintion Language
LOO = Langage Orienté Objet
• Persistance
• Concurrence
• Identification • Fiabilité
• Accès
• Sécurité
J.PHILIPP d'après G. Gardarin
Lien avec les langages de programmation
Déclaration en
ODL ou PL ODL
Application
Source en PL
pré-compilateur
de déclarations
compilateur
de PL
ODBMS
Runtime
PL : programming
langage
Application
Binaire
Editeur
de liens
Exécutable
‹#›
J.PHILIPP d'après G. Gardarin
Interface, classe, littéral

Définition d'Interface (Interface Definition)
 Spécification du comportement (ou d'une de ses parties) observable par les utilisateurs
pour un type d'objet.

Définition de classe (Class Definition)
 Spécification du comportement et d'un état observable par les utilisateurs pour un type
d'objet.

Extension de Classe (Class extension)
 Collection caractérisée par un nom contenant les objets de la classe.

Définition de Littéral (Literal Definition)
 Spécification d'un type de valeur correspondant à un état abstrait, sans comportement.

‹#›
Exemple : déclaration de type en langage C++ (entier, flottant, structure, classe, etc.)
J.PHILIPP d'après G. Gardarin
Hiérarchie des types

Un modèle objet-valeur.
 Valeurs = littéraux


Type
entier, réel, chaînes de caractères, ...
structure<>, enum<>
 Les objets



implémentent des interfaces
(comportement)
peuplent des extensions de classes
(comportement + état)
Littéral
Interface
Deux type d'héritage
 comportement (interface)
 de structure abstraite ou d'état d'objet,
notés EXTENDS (ne pas confondre
avec EXTENT).
‹#›
Classe
J.PHILIPP d'après G. Gardarin
L'Objet, instance d'une classe

Identifié par un OID (chaîne binaire spécifique)
 OIDs gérés par le SGBDOO pour distinguer les objets,
 OID permet de retrouver l'objet, reste invariant durant sa vie,
 OIDs peuvent être choisis par les utilisateurs.

Persistant ou transient
 Les objets de la BD sont des objets persistants, peuvent être
nommés par les utilisateurs et sont uniques dans la base.
 Les objets transients restent en mémoire pendant l'exécution de la
requête.

Peut être simple ou composé
 atomique (spécifié par l'utilisateur par des définitions de classes),
 collection d'objets ou de littéraux, structurés.
‹#›
J.PHILIPP d'après G. Gardarin
Propriétés de tout type d'objet

Gestion à partir d'un ensemble d'opérations héritées
 création, verrouillage, comparaison, copie, suppression

Instanciation à partir d'une interface "usine"


interface ObjectFactory { Object new(); };
L'héritage des opérations est implémenté dans le SGBDOO





‹#›
interface Object {
void lock(in Lock_Type mode) raises (LockNotGranted); // verrou bloquant
boolean try_lock(in Lock_Type mode);
// verrou non bloquant
boolean same_as(in Object anObject);
// comparaison d'identifiant
Object copy(); void delete() ; };
//constructeur copie et destructeur
J.PHILIPP d'après G. Gardarin
Objets structurés


Les objets structurés s'inspirent des objets SQL2.
Ils permettent la gestion du temps.





DATE
// objet date avec les méthodes associés
INTERVAL
// objet durée pour une structure
TIME
// heure avec les fuseaux horaires associés
TIMESTAMP// encapsulation d'une date et d'une durée
Il sont la version objet des littéraux correspondants.
 Ils sont fournis avec des méthodes



‹#›
ajout d'intervalles
extraction de mois, jour, année
...
J.PHILIPP d'après G. Gardarin
Objets collections (1/2)

Instances de collections homogènes
 Exemples : Set<t>, Bag<t>, List <t>, Array<t>, Dictionary<t,v>

Héritent d'une interface commune Collection
 Interface Collection : Object {
 unsigned long cardinality();
 boolean is_empty(), is_ordered(), allows_duplicates(),
contains_element(in any element);
 void insert_element(in any element);
 void remove_element(in any element) raises(ElementNotFound);
 Iterator create_iterator() ;
 Bidirectionalterator create_bidirectional_iterator() ; };
‹#›
J.PHILIPP d'après G. Gardarin
Objets collections 2/2)

Un itérateur permet d'itérer sur les éléments :





Interface Iterator {void reset() ; any get_element() raises (NoMoreElements);
void next_position raises (NoMoreElements);
replace_element (in any element) raises(InvalidCollectionType) ; ...};
Chaque collection est dotée d'une interface spécifique.
Exemple : Collection Dictionnaire
 Collection de doublets <clé-valeur>, la clé est unique.






‹#›
Interface Dictionary : Collection {
exception keyNotFound(any key);
void bind(in any key, in any value);
void unbind (in any key)raise(KeyNotFound);
void lookup (in any key)raise(KeyNotFound);
boolean contains_key(in any key) ; }
// Gestion des exceptions
// insertion
// suppression
// recherche
// test d'appartenance
J.PHILIPP d'après G. Gardarin
Hiérarchie des types ODMG
Type
Object
Literal
Atomic Object Collection Object Structured Object
Set <>
Bag <>
List <>
Array <>
Dictionary<>
‹#›
Date
Time
Timestamp
Interval
Atomic Lit.
Long
Short
Ulong
Ushort
Float
Double
Character
Boolean
string
octet
enum<>
Collection Lit.
Structured Lit.
Set <>
Bag <>
List <>
Array <>
Dictionary<>
Structure<>
Date
Time
Timestamp
Interval
J.PHILIPP d'après G. Gardarin
Attributs


Propriété permettant de mémoriser un littéral ou un objet.
Peut être interprété comme la définition des deux méthodes
 Set_value
 Get_value

Caractéristique d'un attribut
 son identificateur,
 le type de ses valeurs légales.

‹#›
L'implémentation d'un attribut n'est pas obligatoire.
J.PHILIPP d'après G. Gardarin
Les Associations (Relationships)
Boire
Vins
Buveurs
Est_bu_par
Fonction de traversée


Associations binaires, bi-directionnelles de cardinalité
(1:1), (1:N), (N:M).
Opérations
 Add_member, Remove_member
 Traverse, Create_iterator_for
‹#›
J.PHILIPP d'après G. Gardarin
Exemples

Exemple :
 Interface buveurs { ... Relationship list<vins> boire inverse
vins::est_bu_par; };
 Interface vins { ... Relationship set<buveurs> est_bu_par inverse
buveurs::boire;};

Le SGBDO garantit le maintient de l'intégrité
 Références dans les deux sens si inverse déclaré.
 Ce n'est pas le cas pour un attribut valué par un objet

attribut boire list<vins>
 En l'absence de chemin inverse, il n'y a pas d'intégrité
référentielle.
‹#›
J.PHILIPP d'après G. Gardarin
Opérations
Représentent le comportement du type de l'objet
Propriétés:







nom de l'opération
nom et type des arguments (in)
nom et type des paramètres retournés (out)
nom des conditions d'erreurs (raises)
Exemple:




‹#›
Interface buveurs
{ ...
int boire(in vins v, in int qte) raises(novins);
};
//signature
J.PHILIPP d'après G. Gardarin
Méta-modèle du modèle ODMG
Class
Instantiate
1
support
key_list
extent_name *
super_class 1
*
extends
Operation
signature
invoke
return
return_abnormally
has
*
*
Property
Object
OID
has_name?
names
class
create
delete
exits
same_has?
Attribute
attr_name
attr_type
set_value
get_value
+ Type, littéraux, interface, ....
‹#›
Traversal path
path_name
to_cardinality
to_type
traverse
creator_iterator
2
Relationship
define
1
add_member
remove_member
J.PHILIPP d'après G. Gardarin
Exemple de base de données
Habite
Appartient
Voiture
nveh
couleur
marque
km
rouler()
Possède
Personne
nss
nom
prenom
datenais
vieillir()
dormir()
Loge
Boire
Inférieur
Supérieur
Appart.
étage
no
rue
code
ville
Buveur
type
état
boire()
Employé
fonction
salaire
primes
travailler()
Bu_par
Vin
cru
millésime
degré
qualité
EmployéBuveur
‹#›
J.PHILIPP d'après G. Gardarin
Définitions associées
Interface Personne { // interface abstraite pour implémentation 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; // relationship
short vieillir();
void dormir()
short age();
};
‹#›
J.PHILIPP d'après G. Gardarin
Définitions associées (suite)
class Employé : Personne(extent Employés key nss)
//classe avec extension de personne + {
attribute
enum
fonct{ingénieur,
secrétaire,
programmeur} fonction;
attribute float salaire ;
attribute list<float> primes ; //attribut multi-valué
relationship Employé inferieur inverse supérieur;
relationship Employé supérieur inverse inférieur;
void travailler();
};
‹#›
analyste,
J.PHILIPP d'après G. Gardarin
3. Le langage OQL

Permet un accès facile à une base objet
 via un langage interactif autonome,
 par intégration dans C++ ou Smalltalk ou Java.

Offre un accès non procédural
 pour permettre des optimisations automatique (ordonnancement,
index,…),
 pour garder une syntaxe proche de SQL 92.

Reste conforme au modèle de l'ODMG
 application d'opérateurs aux collections extensions ou imbriquées,
 création de résultats littéraux, d'objets, de collections, …

‹#›
Support de mises à jour limitées via les méthodes.
J.PHILIPP d'après G. Gardarin
Concepts additionnels

Expression de chemin mono-valuée
 Séquence d'attributs ou associations mono-valuées de la forme
X1.X2…Xn telle que chaque Xi à l'exception du dernier contient
une référence à un objet ou un littéral unique sur lequel le suivant
s'applique.
 Utilisable en remplacement d'un attribut SQL.

Collection dépendante
 Collection obtenue à partir d'un objet car imbriquée dans l'objet
ou pointée par ce dernier.
 Utilisable dans la clause FROM.
‹#›
J.PHILIPP d'après G. Gardarin
Forme des Requêtes

Forme générale d'une requête
 Expressions fonctionnelles à mixer avec
 Bloc select étendu




Select [<type résultat>] (<expression> [, <expression>] ...)
From x in <collection> [, y in <collection>]...
Where <formule>
Type du résultat
 Automatiquement inféré par le SGBD
 Toute Collection est autorisée (Bag par défaut)
 Il est possible de créer des objets en résultats.

‹#›
La syntaxe est très libre avec un contrôle de type fort.
J.PHILIPP d'après G. Gardarin
Requête Simple

Calcul d'une expression
 ((string) 10*5/2) || "toto"

===> string

Accès à un attribut d'un objet nommé
 mavoiture.couleur

===> littéral string
‹#›
J.PHILIPP d'après G. Gardarin
Parcours d'association monovaluée

sélection de structure en résultat (défaut)





‹#›
select struct (name: b.nom,
city: b.habite.adresse.ville)
from b in buveurs
where b.type = 'gros'
===> littéral bag <struct(Name,City)>
J.PHILIPP d'après G. Gardarin
Parcours d'association multivaluée
Utilisation de collections dépendantes.

 Les collections dépendantes sont parcourues par des variables
imbriquées derrière la clause From ce qui permet de traverser des
chemin multivalués correspondant à des associations [1:N] ou
[M:N].

Exemple : recherche du nom et prénom des buveurs de
Volnay.
 select b.nom, b.prenom
 from b in buveurs, v in b.boire
 where v.cru = "volnay"

==> littéral bag<struct<nom:string,prenom:string>
‹#›
J.PHILIPP d'après G. Gardarin
Imbrication de Select en résultat

Calcul pour chaque employé d'une structure constitué de
son nom et de ses inférieurs mieux payés.
 select distinct struct (nom : e.nom, inf_mieux_payes :

list (select i

from i in e.inferieur

where i.salaire > e.salaire))

from e in employes
 ===> littéral de type
 set <struct (nom: string, inf_mieux_payes : list <employes>)>
‹#›
J.PHILIPP d'après G. Gardarin
Invocation de méthodes

Possible en résultat ou dans le critère de sélection





‹#›
select distinct e.nom,
e.habite.adresse.ville, e.age()
from e in employes
where e.salaire > 10000 and e.age() < 30
===> littéral de type set <struct>
J.PHILIPP d'après G. Gardarin
Création d'Objets

Définition : expressions de constructions
 Soit C une classe, p1, ..., pn des propriétés de la classe et e1, ..., en
des expressions. Alors C(p1 : e1, ..., pn : en) est une expression de
construction.

Exemples de création d'objet






‹#›
E1 : création d'objet par appel de constructeur ayant une requête pour argument.
employe (nss:15603300036029, nom:"jean", salaire: 100000)
E2 : recherche de tous les buveurs sans emploi
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 )
J.PHILIPP d'après G. Gardarin
Définition d'objets via Requêtes


Le résultat d'une requête peut être nommé (littéral ou objet
nommé).
Syntaxe de définition de macros
 Define <nom> as <question>
 Permet de définir un objet nommé <nom> calculé par la question

Exemple
 Define Cesar as
 Select b
 From b in Buveurs
 Where b.prenom = "Jules"
‹#›
J.PHILIPP d'après G. Gardarin
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 Employés.posséde : v.marque = "Renault"
‹#›
J.PHILIPP d'après G. Gardarin
Calcul d'Agrégats, opérateur Group By



Similaire à SQL.
Possibilité d'utiliser des prédicats
Exemple






‹#›
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.)>
J.PHILIPP d'après G. Gardarin
Expressions de Collections

Conversion de collections
 element (select v.marque

from v in voitures

where v.numero = "120 abc 75") ===> string

Mise à plat (applatissage) des collections
 flatten (select b.nom, select v.millesime

from v in b.boire

where v.cru = "volnay"

from b in buveurs)
‹#›
J.PHILIPP d'après G. Gardarin
4. Intégration aux langages C++, Java, Smalltalk

Implémentation du modèle abstrait
 adaptation des concepts, types, collections.

Nécessité d'adapter le modèle
 certains concepts n’existent pas dans le langage




interface en C++ ==> classe
association en C++ et Java ==> attributs rôles de type Ref <T>
clés ==> pas de clés !
Nécessité d’intégrer OQL
‹#›
J.PHILIPP d'après G. Gardarin
Gestion de transactions

Objet Transaction créé par Factory









begin() pour ouvrir une transaction ;
commit() pour valider les mises à jour de la transaction ;
abort() pour défaire les mises à jour de la transaction ;
checkpoint() = commit() + begin(), sans relâcher verrous ;
join() pour récupèrer l'objet transaction dans la thread ;
leave() pour dissocier un objet transaction de la thread ;
Possibilités d'imbriquer des transactions;
Contrôle de concurrence niveau objet (explicite ou défaut) ;
Ouverture et fermeture des bases
‹#›
J.PHILIPP d'après G. Gardarin
OML Java

Persistance par atteignabilité
 classes connues du SGBDO
 objets capables de persister
 nommage par objets "database"


opérations bind, unbind, lookup
tout objet nommé est racine de persistance
 tout objet référencé par un objet persistant est persistant.


Adaptation des types.
Package collections ODMG
 set, bag, list, varray : collection
‹#›
J.PHILIPP d'après G. Gardarin
OML Java ...

Transparence des opérations
 opérations identiques sur un objet transient ou persistant.

Gestion des accès BD
 lecture objet en cas de référence absente
 écriture en mise à jour ou commit,
 les choix du développeur restent libres.
‹#›
J.PHILIPP d'après G. Gardarin
Intégration de OQL

Interrogation directe des collections

 possibilité d'appliquer un prédicat à une
collection
 ajout d'une fonction query à chaque collection

 OQLQuery(String question)
 bind(Object parameter)
 execute()
Exemple
 set<object> lesbonsvins;
 lesBonsVins = Vins.query("qualité = "Bons"")
‹#›
Fourniture de la classe
OQLQuery avec opérations

Exemple
 set BuveursCru;
 query = OQLQuery( "select distinct b
from b in buveurs, v in b.boire where
v.cru = $1" );
 query.bind("volnay");
 BuveursCru = query.execute();
J.PHILIPP d'après G. Gardarin
5. Conclusion

Tentative de création d'un standard pour SGBDO
 vise à la portabilité des applications
 langage de requêtes très complet (et complexe)
 modèle abstrait et adaptation C++, Smalltalk, Java.
Extension de SQL pour collections imbriquées





‹#›
des différences avec SQL2 (sémantique, typage fort, …)
des déficiences (contrôle, vues,…)
des spécificités (nomination des objets, des requêtes, …)
difficile à implémenter ...
J.PHILIPP d'après G. Gardarin