le modèle de l'odmg

42
1 J.PHILIPP d'après G. Gardarin 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

Upload: albina

Post on 14-Jan-2016

79 views

Category:

Documents


2 download

DESCRIPTION

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. 1. Contexte. Object Database Management Group Fondé en septembre 1991 par 5 constructeurs: O2 Technology - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Le modèle de l'ODMG

1J.PHILIPP d'après G. Gardarin

Le modèle de l'ODMGLe 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

Page 2: Le modèle de l'ODMG

2J.PHILIPP d'après G. Gardarin

1. Contexte1. 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.

Page 3: Le modèle de l'ODMG

3J.PHILIPP d'après G. Gardarin

2. Le modèle de l'ODMG2. 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.

Page 4: Le modèle de l'ODMG

4J.PHILIPP d'après G. Gardarin

Quelques définitions de l'ODMGQuelques 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.

Page 5: Le modèle de l'ODMG

5J.PHILIPP d'après G. Gardarin

Interfaces d'accès à un SGBDO (ODMG)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++.

SGBDO

ODL OQL OML C++ OML SmalltalkOML Java

Page 6: Le modèle de l'ODMG

6J.PHILIPP d'après G. Gardarin

Gérant d'objets

LOO

Persist.

OQL

OQL = Object Query Language

ODL = Object Defintion Language

LOO = Langage Orienté Objet

• Persistance • Concurrence

• Identification • Fiabilité• Accès • Sécurité

ODL

Outils Interactifs

• Editeur de classes• Manipulateur d’objets• Bibliothèques graphiques• Débogueur, éditeur

Architecture conforme de l'ODMGArchitecture conforme de l'ODMG

Processus de génération d'un fichier exécutable

Page 7: Le modèle de l'ODMG

7J.PHILIPP d'après G. Gardarin

Lien avec les langages de programmationLien avec les langages de programmation

Déclaration en ODL ou PL ODL

ApplicationSource en PL

pré-compilateur

de déclarations

compilateurde PL

ODBMSRuntime

ApplicationBinaire

Editeur de liens

Exécutable

PL : programminglangage

Page 8: Le modèle de l'ODMG

8J.PHILIPP d'après G. Gardarin

Interface, classe, littéralInterface, 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.)

Page 9: Le modèle de l'ODMG

9J.PHILIPP d'après G. Gardarin

Hiérarchie des typesHiérarchie des types

Type

Interface

Classe

Littéral

Un modèle objet-valeur. Valeurs = littéraux

entier, réel, chaînes de caractères, ... structure<>, enum<>

Les objets implémentent des interfaces

(comportement) peuplent des extensions de classes

(comportement + état)

Deux type d'héritage comportement (interface) de structure abstraite ou d'état d'objet,

notés EXTENDS (ne pas confondre avec EXTENT).

Page 10: Le modèle de l'ODMG

10J.PHILIPP d'après G. Gardarin

L'Objet, instance d'une classeL'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.

Page 11: Le modèle de l'ODMG

11J.PHILIPP d'après G. Gardarin

Propriétés de tout type d'objetProprié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

Page 12: Le modèle de l'ODMG

12J.PHILIPP d'après G. Gardarin

Objets structurésObjets 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 ...

Page 13: Le modèle de l'ODMG

13J.PHILIPP d'après G. Gardarin

Objets collections (1/2)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() ; };

Page 14: Le modèle de l'ODMG

14J.PHILIPP d'après G. Gardarin

Objets collections 2/2)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); // Gestion des exceptions void bind(in any key, in any value); // insertion void unbind (in any key)raise(KeyNotFound); // suppression void lookup (in any key)raise(KeyNotFound); // recherche boolean contains_key(in any key) ; } // test d'appartenance

Page 15: Le modèle de l'ODMG

15J.PHILIPP d'après G. Gardarin

Type

Object Literal

Atomic Object Structured ObjectCollection Object Atomic Lit.

LongShortUlongUshortFloatDoubleCharacterBooleanstringoctetenum<>

DateTimeTimestampInterval

Set <>Bag <>List <>Array <>Dictionary<>

Structured Lit.Collection Lit.

Structure<>DateTimeTimestampInterval

Set <>Bag <>List <>Array <>Dictionary<>

Hiérarchie des types ODMGHiérarchie des types ODMG

Page 16: Le modèle de l'ODMG

16J.PHILIPP d'après G. Gardarin

AttributsAttributs

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.

Page 17: Le modèle de l'ODMG

17J.PHILIPP d'après G. Gardarin

Buveurs Vins

Boire

Est_bu_par

Fonction de traversée

Les Associations (Relationships)Les Associations (Relationships)

Associations binaires, bi-directionnelles de cardinalité (1:1), (1:N), (N:M).

Opérations Add_member, Remove_member Traverse, Create_iterator_for

Page 18: Le modèle de l'ODMG

18J.PHILIPP d'après G. Gardarin

ExemplesExemples

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.

Page 19: Le modèle de l'ODMG

19J.PHILIPP d'après G. Gardarin

OpérationsOpé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

Page 20: Le modèle de l'ODMG

20J.PHILIPP d'après G. Gardarin

Instantiate

has

Property

support

2 define

extends

*

* *

1

1

Relationship

add_memberremove_member

ObjectOIDhas_name?namesclasscreatedeleteexitssame_has?

key_listextent_namesuper_class

Attributeattr_nameattr_typeset_valueget_value

Traversal pathpath_nameto_cardinalityto_typetraversecreator_iterator

Operation

signatureinvokereturnreturn_abnormally

Class

*

+ Type, littéraux, interface, ....

1

Méta-modèle du modèle ODMGMéta-modèle du modèle ODMG

Page 21: Le modèle de l'ODMG

21J.PHILIPP d'après G. Gardarin

Personnenssnom

prenomdatenaisvieillir()dormir()

Employéfonctionsalaireprimes

travailler()

Buveurtypeétat

boire()

Vincru

millésimedegré

qualité

Appart.étage

norue

codeville

Supérieur

Inférieur Boire

Bu_par

Habite

Loge

Voiturenveh

couleurmarque

kmrouler()

Possède

Appartient

EmployéBuveur

Exemple de base de donnéesExemple de base de données

Page 22: Le modèle de l'ODMG

22J.PHILIPP d'après G. Gardarin

Définitions associéesDé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();

};

Page 23: Le modèle de l'ODMG

23J.PHILIPP d'après G. Gardarin

Définitions associées (suite)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, analyste, 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();

};

Page 24: Le modèle de l'ODMG

24J.PHILIPP d'après G. Gardarin

3. Le langage OQL3. 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.

Page 25: Le modèle de l'ODMG

25J.PHILIPP d'après G. Gardarin

Concepts additionnelsConcepts 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.

Page 26: Le modèle de l'ODMG

26J.PHILIPP d'après G. Gardarin

Forme des RequêtesForme 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.

Page 27: Le modèle de l'ODMG

27J.PHILIPP d'après G. Gardarin

Requête SimpleRequê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

Page 28: Le modèle de l'ODMG

28J.PHILIPP d'après G. Gardarin

Parcours d'association monovaluéeParcours 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)>

Page 29: Le modèle de l'ODMG

29J.PHILIPP d'après G. Gardarin

Parcours d'association multivaluéeParcours 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>

Page 30: Le modèle de l'ODMG

30J.PHILIPP d'après G. Gardarin

Imbrication de Select en résultatImbrication 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>)>

Page 31: Le modèle de l'ODMG

31J.PHILIPP d'après G. Gardarin

Invocation de méthodesInvocation 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>

Page 32: Le modèle de l'ODMG

32J.PHILIPP d'après G. Gardarin

Création d'ObjetsCré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 )

Page 33: Le modèle de l'ODMG

33J.PHILIPP d'après G. Gardarin

Définition d'objets via RequêtesDé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"

Page 34: Le modèle de l'ODMG

34J.PHILIPP d'après G. Gardarin

QuantificationQuantification

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"

Page 35: Le modèle de l'ODMG

35J.PHILIPP d'après G. Gardarin

Calcul d'Agrégats, opérateur Group ByCalcul 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.)>

Page 36: Le modèle de l'ODMG

36J.PHILIPP d'après G. Gardarin

Expressions de CollectionsExpressions 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)

Page 37: Le modèle de l'ODMG

37J.PHILIPP d'après G. Gardarin

4. Intégration aux langages C++, Java, Smalltalk4. 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

Page 38: Le modèle de l'ODMG

38J.PHILIPP d'après G. Gardarin

Gestion de transactionsGestion 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

Page 39: Le modèle de l'ODMG

39J.PHILIPP d'après G. Gardarin

OML JavaOML 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

Page 40: Le modèle de l'ODMG

40J.PHILIPP d'après G. Gardarin

OML Java ... 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.

Page 41: Le modèle de l'ODMG

41J.PHILIPP d'après G. Gardarin

Intégration de OQLIntégration de OQL Interrogation directe des collections

possibilité d'appliquer un prédicat à une collection

ajout d'une fonction query à chaque collection

Exemple set<object> lesbonsvins; lesBonsVins = Vins.query("qualité = "Bons"")

Fourniture de la classe OQLQuery avec opérations OQLQuery(String question) bind(Object parameter) execute()

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();

Page 42: Le modèle de l'ODMG

42J.PHILIPP d'après G. Gardarin

5. Conclusion5. 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 ...