Standard ODMG

publicité
Standard ODMG
Plan
„
„
„
„
„
„
Introduction
Architecture des BDOO (ODMG)
Le modèle de données
Le langage de définition des objets
Le langage de manipulation des objets
Liaison avec les langages de programmation
Architecture SGBD ODMG
Composants de l'architecture
Source de l'application dans un
langage de programmation
Déclaration en ODL
Compilateur du langage de
programmation
Processeur
Des déclarations
Execution du
méta-données
SGBDOO
Binaire de l'application
Editeur de lien
BD
Accés aux données
Execution de l'application
Le Modèle Objet (ODMG)
Propriétés du modèle
„
„
„
„
„
„
Modèle basé sur des objets (avec des identifiants)
Objets organisés dans des types (ayant même comportement)
Comportement d'un type défini par un ensemble d'opérations
exécutables sur un objet du type
Etat d'un objet défini par les valeurs de l'objet pour un ensemble de
propriétés (attributs)
Des noms significatifs peuvent être associés aux objets. Le même objet
(avec un identifiant) peut avoir plusieurs noms significatifs
Signatures d'opérations
„
„
„
„
„
Nom de l'opération
Nom et type de chaque argument
Nom et type des valeurs retournées
Noms des exceptions (conditions d'erreur)
Signatures d'attributs
„
„
Nom de l'attribut
Type de ces valeurs
Le Modèle Objet (ODMG)
Propriétés du modèle (…)
„
Les objets d'un type participent à des relations spécifiées par des signatures
„
Une signature définit
„
„
„
„
„
„
Type des autres objets participant à la relation
Nom d'une fonction de traverse (fonction inverse)
Relations sont binaires
Les types d'objets sont reliés dans un graphe de sous-type/surtype
Un ensemble "extent" peut être défini pour contenir les instances d'un type
Les instance individuelles d'un type peuvent être identifiables de manière
unique par les valeurs d'un ensemble d'attributs (e.g. clés du modèle
relationnel)
Le Modèle Objet (ODMG)
Propriétés du modèle (…)
„
Structures
„
„
„
„
Eqivalent à Record et Struct des langages de programmation
Emplacements nommés (correspondant à objets ou valeurs de type donné)
Collections (contient un nombre arbitraire d'instances de même type)
Deux sous-arbres distincts
„
Objet
„
„
„
a un identifiant
peut être partagé ou référencé par d'autres objets
Littéral
„
„
Identité définie par la valeur du littéral
Immuable (Immutable) et ne peuvent changer de valeur
Le Langage de définition d'objet ODL
Propriétés du langage
„
ODL suit la syntaxe de OMG
„
„
„
Est basé sur le langage IDL (Interface definition langage)
Permet à une base de données d'être partagée par plusieurs langages de
programmation
SA syntaxe est influencée par le langage C++
Le Modèle Objet (ODMG)
Hiérarchie des types de ODMG
Objet_dénotable
Littéral
Objet
Objetatomique
Objetstructuré
Type
Structure
<e1:T ….en:Tn>
Exception
Collection<T>
Itérateur
Set<T>
Bag<T>
List <T>
String
Bitstring
Array <T>
Littéralatomique
Littéralstructuré
Le Modèle Objet (ODMG)
Hiérarchie des types de ODMG
Objet_dénotable
Littéral
Objet
Littéralatomique
Littéralstructuré
Integer
Collection immuable <T>
Character
Boolean
Immutable Structure
<e1:T1 … en:Tn>
Float
Immutable
Set<T>
Date
Enumeration
Immutable
Bag<T>
Immutable List
<T>
String
Bitstring
Time
Date Time
Immutable
Array <T>
Interval
Le Langage de définition d'objet ODL
Exemple de schéma
a_pour_requis
préreq
Employé
Cours
nom
Id
salaire
nom
numéro
créer
supprimer
embaucher
licencier
Etudiant
nom
Id
résidence
est_requis_pour
Professeur
Assistant
inscrire
abandon
sections
est_section_de
suit
Section
inscrit
a_pour_sections
est_suivi_par
ISA
numéro
grade
distinctions
encadre
a_pour-PA
enseigne
pa
est_enseigné_par
Lien multi-valué
prof
Le Langage de définition d'objet ODL
Exemple de schéma ODL
Cours
interface Cours {
extent cours;
keys nom, numéro;
attribut string nom;
attribut string numéro;
relationship List<Section> a_pour_sections
inverse Section:: est_section_de;
relationship Set<Cours> est_pré_requis_pour
inverse Cours:: a_pour-pré_requis;
créer (in semestre) raises (déja_crée);
supprimer(in semestre) raises (pas_crée);
}
Le Langage de définition d'objet ODL
Exemple de schéma ODL
Section
interface Section {
extent sections;
keys (est_section_de, numéro);
attribut string numéro;
relationship Professeur est_enseigné_par
inverse Professeur:: enseigne;
relationship PA a_pour_PA
inverse PA:: encadre;
relationship Cours est_section_de
inverse Cours :: a_pour_section;
relationship Set<Etudiants> est_suivi_par
inverse étudiant :: suit;
…..
}
Employé
interface Employé {
extent employés;
keys (nom, Id);
attribut string nom;
attribut integer Id;
attribut integer salaire_mensuel;
embaucher(in Personne);
licencier(in Employé)
raises(employé_inconnu)
}
Le Langage de définition d'objet ODL
Exemple de schéma ODL
Professeur
ISA
Enumération
interface Professeur : Employé{
extent professeurs;
attribut enum grade {titulaire,associé,assistant};
attribut string nom;
attribut string numéro;
relationship Set<Section> enseigne
inverse Section:: est_enseigné_par
distinctions () raises (inéligible);
}
PA
interface PA : Employé, Etudiant{
extent assistants;
relationship Section encadre
inverse Section a_pour_PA;
……
}
Le Langage de définition d'objet ODL
Exemple de schéma ODL
Etudiantr
interface Etudiant {
extent Etudiants;
key nom, Id
attribut string nom;
attribut string Id;
attribut struct<string Université, string numéro_pièce, string adresse>;
relationship Set<Section> suit
inverse Section:: est_suivi_par;
inscrit_au_cours(in Cours, in Section) raises
(pré_req insatisfait, section_pleine, cours_plein)
supprimer_cours(in Cours) raises
(pas_inscrit_dans-cours)
…..
}
Le Langage de requêtes objets : OQL
Propriétés du langage
OQL
„
est fondé sur le modèle objet ODMG qui définit sa sémantique
„
est un langage déclaratif
„
„
„
„
„
„
N'assure pas la complétude de programmation
Est optimisable
a une syntaxe basée sur SQL
permet d'autres syntaxes qui ont pour objectif la fusion avec les
langages de programmation (exemple C++)
fournit des primitives de haut niveau qui manipulent les collections et
les types structurés
ne fournit pas d'opérations de mise à jour, mais s'appuie sur les
méthodes définies sur les objets.
Le Langage de requêtes objets : OQL
Exemples de requêtes
„
Prédicat appliqué à une collection
Ensemble des âges de toutes personnes appelées Pat
Select distinct x.âge
from x in Personnes
where x;nom = "Pat"
Résultats : un littéral de type set<integer>
„
Construction d'un structure:
Select distinct struct (a: x.âge, s: x.sexe)
from x in Personnes
where x;nom = "Pat"
Résultats : un littéral de type set<struct>
Le Langage de requêtes objets : OQL
Exemples de requêtes
„
Application d'une fonction sur une collection
(Pour chaque employé on construit une structure constituée de son nom
et de l'ensemble de ses subordonnées à haut salaire)
Select distinct struct (
nom: x.nom
shs : (select y from y in x.subordonnés where y.salaire > 500.000)
from x in Employés
Résultats : set<struct>
: set <struct (nom : string, shs : bag<employé>)
Le Langage de requêtes objets : OQL
Exemples de requêtes
„
Requête à partir d'un point d'entrée (un nom d'objet) dans la base de
données
„
„
„
„
Requête de mise à jour (création d'un objet à identité)
„
„
Président (fournit les employés qui sont présidents d'entreprise)
Président.subordonnée
(l'ensemble des subordonnés du président)
Personnes
(l'ensemble de toutes les personnes)
Personne( nom:"Pat"; date_naissance: "28/3/56", salire : 100.000)
Requête de mise à jour (création d'un objet sans identité)
Struct (a:10, b: "Pat")
Téléchargement