Title: LA PROPOSITION DE L'ODMG
1LA PROPOSITION DE L'ODMG
- 1. Contexte
- 2. Le modèle de l'ODMG et ODL
- 3. Un exemple de base
- 3. Le langage OQL
- 4. OML C, Java et Smalltalk
- 5. Conclusion
21. CONTEXTE
- Object Database Management Group
- Fondé en septembre 91 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 - Nombreux observateurs externes
- Propose un "standard" pour les SGBDO
3Contenu de la Proposition
- Adaptation du modèle objet de l'OMG
- Interfaces d'accès à un SGBDO
ODL
OQL
OML C
OML Java
OML Smalltalk
SGBDO
4Architecture
Application Source en PL
Déclaration en ODL ou PL ODL
compilateur de PL
pré-compilateur de déclarations
ODBMS Runtime
Application Binaire
Editeur de liens
Exécutable
52. LE MODELE
- Extension du modèle de l'OMG
- l'OMG a proposé un modèle standard pour les
objets - le modèle est supporté par le langage IDL (def.
interface) - les BD objets nécessitent des adaptations/extensio
ns - instances de classes
- collections
- associations
- persistance
- transactions
- Un candidat pour un profil BD de l'OMG
6Type, Interface et classe
- Un modèle objet-valeur
- Valeurs littéraux
- entier, réel, string, ...
- strctureltgt, enumltgt
- Les objets
- implémentent des interfaces (comportement)
- peuplent des extensions de classes (comportement
état) - Deux type d'héritage
- comportement (interface)
- d'état (classe)
Type
Interface
Littéral
Classe
7Les Objets Instances
- Identifiés par des OIDs
- gérés par le SGBD OO pour distinguer les objets
- permet de retrouver les objets, reste invariant
- Peuvent être nommés par les utilisateurs
- Persistants ou transiants
- les objets persistants sont les objets BD, les
autres restant en mémoire - Peuvent être simple ou composés
- atomiques, collections, structurés
8Propriétés communes
- un ensemble d'opération héritées pour
- création, verrouillage, comparaison, copie,
suppression - création des objets par des "usines"
- interface ObjectFactory Object new()
- héritage d'un type racine
- interface Object
- void lock(in Lock_Type mode) raises
(LockNotGranted) - boolean try_lock(in Lock_Type mode)
- boolean same_as(in Object anObject)
- Object copy() void delete()
9Les objets collections
- Support de collections homogènes
- Setlttgt, Baglttgt, List lttgt, Arraylttgt,
Dictionaryltt,vgt - 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
()
10Objets collections ...
- 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 à une interface spécifique
- Exemple Dictionnaire
- une collection de doublets ltclé-valeurgt
- Interface Dictionary Collection
- exception keyNotFound(any key)
- 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
11Objets structurés
- Des objets structurés permettent de gérer le
temps - DATE
- INTERVAL
- TIME
- TIMESTAMP
- Il sont la version objets des litéraux
correspondants - fournissent en plus des opérations
- ajout d'intervalles
- extraction de mois, jour, an
- ...
12Hiérarchie de Types
Type
Object
Literal
Collection Obj
Atomic Obj.
Structured Obj.
Atomic Lit.
Collection Lit.
Structured Lit.
Date Time Timestamp Interval
Set ltgt Bag ltgt List ltgt Array ltgt Dictionaryltgt
Structureltgt Date Time Timestamp Interval
Set ltgt Bag ltgt List ltgt Array ltgt Dictionaryltgt
Long Short Ulong Ushort Float Double Character Boo
lean string octet enumltgt
13Les Attributs
- Une propriété permettant de mémoriser un
litéral ou un objet - Peut être vu comme deux fonctions
- Set_value
- Get_value
- Propriétés
- son nom
- type de ses valeurs légales
- Un attribut n'est pas forcément implémenté.
14Les Associations (Relationships)
- Associations binaires, bi-directionnelles de
cardinalité (11), (1N), (NM). - Opérations
- Add_member, Remove_member
- Traverse, Create_iterator_for
Boire
Vins
Buveurs
Est_bu_par
Fonction de traversée
15Exemples
- Exemple
- Interface buveurs ... Relationship listltvinsgt
boire inverse vinsest_bu_par - Interface vins ... Relationship setltbuveursgt
est_bu_par inverse buveurs boire - Le SGBDO est responsable du maintient de
l'intégrité - Référence dans les deux sens si inverse déclaré
- Ce n'est pas le cas pour un attribut valué par un
objet - attribut boire listltvinsgt
- pas de chemin inverse, pas d'intégrité
référentiel
16Les Opérations
- Représentent le comportement du type
- 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
17Méta-modèle du modèle ODMG
support
Class
Instantiate
1
key_list extent_name super_class
extends
1
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
Relationship
define
2
add_member remove_member
Type, littéraux, interface, ....
1
18Exemple de base
Habite
Appartient
Appart. étage no rue code ville
Personne nss nom prenom datenais vieillir() dormir
()
Loge
Possède
Boire
Inférieur
Vin cru millésime degré qualité
Buveur type état boire()
Employé fonction salaire primes travailler()
Bu_par
Supérieur
EmployéBuveur
19Exemple de définition
- 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 Appartloge
// relationship - relationship Voiture Possede inverse
VoitureAppartient - short vieillir()
- void dormir()
- short age()
-
20Exemple (suite)
- class Employé Personne(extent Employés key nss)
- //classe avec extension de personne
- attribute enum fonctingénieur, secrétaire,
analyste, programmeur fonction - attribute float salaire
- attribute listltfloatgt primes //attribut
multi-valué - relationship Employé inferieur inverse
supérieur - relationship Employé supérieur inverse
inférieur - void travailler()
-
213. LE LANGAGE OQL
- Permettre un accès facile à une base objet
- via un langage interactif autonome
- par intégration dans C ou Smalltalk ou Java
- Offrir un accès non procédural
- permetttre des optimisations automatique
(ordonnancement, index,) - garder une syntaxe proche de SQL 92
- Rester conforme au modèle de l'ODMG
- application d'opérateurs aux collections
extensions ou imbriquées - permettre de créer des résultats littéraux,
objets, collections, - Supporter des mises à jour limitées via les
méthodes
22Concepts nouveaux
- Expression de chemin mono-valuée
- Séquence d'attributs ou associations mono-valués
de la forme X1.X2Xn telle que chaque Xi Ã
l'exception du dernier contient une référence Ã
un objet ou un litéral unique sur lequel le
suivant s'applique. - Utilisable en place d'un attribut SQL
- Collection dépendante
- Collection obtenu à partir d'un objet, soit
pacequ'elle est imbriquée dans l'objet ou pointée
par l'objet. - Utilisable dans le FROM
23Forme des Requêtes
- Forme générale d'une requête
- Expressions fonctionnelles mixer avec
- Bloc select étendu
- Select lttype résultatgt (ltexpressiongt ,
ltexpressiongt ...) - From x in ltcollectiongt , y in ltcollectiongt...
- Where ltformulegt
- Type résultat
- automatiquement inféré par le SGBD
- tout collection est possible (bag par défaut)
- il est possible de créer des objets en résultats
- Syntaxe très libre, fort contrôle de type
24Requête Simple
- Calcul d'une expression
- ((string) 105/2) "toto"
- gt string
- Accéder un attribut d'un objet nommé
- mavoiture.couleur
- gt litteral string
25Parcours d'association monovaluées
- avec sélection de structure (défaut)
- select struct (name b.nom,
- city b.habite.adresse.ville)
- from b in buveurs
- where b.type 'gros'
- gt littéral bag ltstruct(Name,City)gt
26Parcours d'association multivaluées
- Utilisation de collections dépendantes
- select b.nom, b.prenom
- from b in buveurs, v in b.boire
- where v.cru "volnay"
- gt litteral bagltstructltnomstring,prenomstring
gt
27Résultats Imbriqués
- 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 gt e.salaire))
- from e in employes
- gt litteral de type set ltstruct (nom
string, - inf_mieux_payes bag ltemployesgt)gt
- et aussi au niveau du FROM (requête collection)
28Invocation de méthodes
- En résultat ou dans le critère
- select distinct e.nom,
- e.habite.adresse.ville, e.age()
- from e in employes
- where e.salaire gt 10000 and e.age() lt 30
- gt litteral de type set ltstructgt
29Création d'Objets
- Expressions de constructions
- Si C est le nom d'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 - Création d'objet
- employe (nss15603300036029, nom"jean", salaire
100000) - employe (select struct(nssb.nss, nomb.nom,
salaire 4000) - from b in buveurs
- where not exist e in employes e.nssb.nss )
30Définition d'objets via Requêtes
- Définition de macros
- Define ltnomgt as ltquestiongt
- permet de définir un objet de nom ltnomgt calculé
par la question - Exemple
- Define Cesars as
- Select b
- From b in Buveurs
- Where b.prenom "Jules"
31Quantification
- Quantificateur universel
- for all x in collection predicat(x)
- Exemple
- for all b in Buveurs b.age lt 18
- Quantificateur existentiel
- exists x in collection predicat(x)
- Exemple
- exists v in Employés.posséde v.marque
"Renault"
32Calculs d'Agrégats
- Similaire à SQL
- avec possibilité de prédicats
- select e
- from e in employes
- group by (bas e.salaire lt 7000,
- moyen e.salaire gt 7000 and
e.salaire lt 21000, - haut e.salaire gt 21000)
- gtstructltbas set(emp.),moyenset(emp.),hautset
(emp.)gt
33Expressions de Collections
- Conversion de collections
- element (select v.marque
- from v in voitures
- where v.numero "120 abc 75") gt string
- Applatissage des collections
- flatten (select b.nom, select v.millesime
- from v in b.boire
- where v.cru "volnay"
- from b in buveurs)
344. INTEGRATION A C, Java, Smal.
- Implémentation du modèle abstrait
- mapping des concepts
- mapping des types
- mapping des collections
- Nécessité d'adapter le modèle
- certains concepts nexistent pas dans le langage
- interface en C gt classe
- association en C et Java gt attributs roles de
type Ref ltTgt - clés gt pas de clés !
- Nécessité dintégrer OQL
35Gestion 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
36OML 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 - Mapping des types
- Package collections ODMG
- set, bag, list, varray collection
37OML Java ...
- Transparence des opérations
- même opérations sur objet transiant ou persistant
- Gestion des accès BD
- lecture objet en cas de référence absente
- écriture en maj ou au commit
- choix libres à limplémenteur
38Intégration de OQL
- Interrogation directe des collections
- possibilité d'appliquer un prédicat à une
collection - ajout d'une fonction query à chaque collection
- Exemple
- setltobjectgt 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()
395. 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 mapping C, Smal., 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 ...