• Aucun résultat trouvé

Base de données Objet:

N/A
N/A
Protected

Academic year: 2022

Partager "Base de données Objet:"

Copied!
10
0
0

Texte intégral

(1)

Base de données Objet:

1- Application traditionnelle:

- Quatre générations de SGBD: SGF , Hiérarchique , codasyl et relationnel. Tous sont conçus pour les application de business :, banque , université , réservation air –line.

2- Nouvelles applications

a- Une conception assistée par ordinateur :

b- production assistée par ordinateur : inclue le code source, dépendance entre modules, définition et utilisation de variables et l’historique de développement de system logiciel.

c- systèmes d'informations géographiques d- systèmes multi-média :

e- recherche et intégration de données de la toile Faiblesses du modèle relationnel

- Absence de pointeurs visibles : pour lier des données qui se correspondent, on a besoin de faire des jointures (opérations coûteuses)

- Non support des domaines composés : on ne peut pas avoir pas exemple un attribut qui correspond à une adresse avec le numéro de la rue, le nom de la rue, la ville,

…Impossible à cause de la première forme normale, qui impose l’atomicité des attributs

- Pas d’opérations définies sur les données - On veut donc un SGBD capable de traiter - • des éléments de structure complexe - • des opérations sur les éléments

- • des pointeurs reliant les éléments (pour de l’héritage par exemple) Ces notions correspondent à la philosophie objet : il nous faut des SGBD objet.

3- Evolution des SGBD 1960

- SGBD hiérarchique (IMS) - SGBD réseau (CODASYL) 1970

- SGBD relationnel 1980

- Modèles sémantiques (EA) 1986 : premiers SGBD OO

- meilleure représentation du réel au niveau logique - réutilisation

1993 première norme ODMG pour SGBD OO - ( Object Database Management Group ) 1998me UML pour conception d'applications OO 1999 norme SQL3 pour SGBD relationnel-objet

4- Approche OO

Ensemble de méthodologies et d’outils pour concevoir et réaliser des logiciels structurés et réutilisables, par composition d’éléments indépendants.

Deux manières d’utiliser l’objet dans les SGBD

On part des langages objet dans lesquels on intègre les notions des SGBD (persistance des données, aspect multi-utilisateurs, …). Ce sont les SGBD orientés objet : O2 (basé sur C++) On part des SGBD relationnels dans lesquels on insère des notions objet. Ce sont les SGBD relationnels objet : ORACLE 8 (SQL 3)

On peut constater que

(2)

• les SGBDOO sont plus “propres” du point de vue objet et les mieux adaptés pour traiter les objets mais ils sont complètement absents du monde professionnel

• les SGBDRO sont basés sur des SGBD robustes et éprouvés répandus dans le monde professionnel mais qui ne sont pas prévus pour gérer l’objet

Jusqu’à présent, les améliorations qui ont été développées pour les SGBD se sont fondus dans les SGBD existants. Dans le monde professionnel, les concepteurs et les utilisateurs de bases de données ne sont pas prêts à remettre en cause leurs savoirs et à redévelopper toutes leurs applications sur de nouveaux systèmes.

On va privilégier les SGBDRO.

ODMG

- C’est un groupe de normalisation des SGBD OO - Norme finale publiée en 2001

- A regroupé de nombreux vendeurs de SGBO OO :Poet ,Ardent, Objectivity,Versant et des constructeurs, des utilisateurs, des chercheurs

SGBD OO = LPOO + BD

5- Intérêt d’un SGBD OO / LP OO C’est un SGBD (mieux qu’un LP):

- persistance des données - indépendance modèles logique et physique - LMD déclaratif - optimisation par le SGBD

- intégrité des données - confidentialité, fiabilité, concurrence, gestion de transactions,

C’est mieux qu’un SGBD relationnel :

- permet la manipulation d’objets à structure complexe - interface compatible avec les LP-OO

- nouveaux types de données (image, son…) - versions, historiques, nouvelles transactions - performances

6- Modélisation : Diversité des modèles

-Norme ODMG mais de nombreux SGBDO ne la suivent pas.

-Ce cours emploie une syntaxe tirée de celle d'ODMG 6-1 - Structure d’un objet :

La structure de données des modèles orientés objets est caractérisée par le fait qu'il n'y a qu'un seul concept principal: l'objet. Les objets sont décrits par des attributs, et sont regroupés en classes.

Chaque objet a une identité qui lui est propre et qui le distingue de tous les autres. Cette identité est permanente et immuable. On l'appelle l’oid de l'objet (de l’anglais "object identity").

Il existe deux types de liens entre les objets :

les liens de composition: "tel objet est composé de tel(s) objet(s)". Ces liens sont décrits par des attributs particuliers, appelés attributs référence, qui ont pour domaine une classe d'objets;

les liens de généralisation / spécialisation:

Ce sont les liens IS-A des modèles sémantiques auxquels sont associés un mécanisme d'héritage des propriétés de la classe d'objets génériques par la classe d'objets spécialisés.

6-2 Structures complexe : Les attributs peuvent être, complexes et multivalués. La

terminologie, Ces structures sont utilisées par les concepteurs de bases de données dans deux cas:

pour définir la structure des objets, c'est-à-dire celle de leur classe;

(3)

pour étendre l'ensemble des domaines (appelés aussi types) prédéfinis existants dans le SGBDO

(tels que STRING, INT, DATE, MONEY…) en définissant des domaines spécifiques à leur application. Les structures sont définies en employant des constructeurs:

le constructeur de structure complexe (l’équivalent d’un attribut complexe), "STRUCT", qui crée une structure composée d'une suite d'attributs:

STRUCT {nomatt1: dom1; nomatt2: dom2; ...}

où "domi" est le domaine de l'attribut de nom "nomatti", c'est :

soit un domaine prédéfini (STRING, FLOAT, INT, DATE...);

soit un type défini par un constructeur;

soit le nom d'une classe (voir paragraphe 2.3).

les constructeurs de collection (l’équivalent des attributs multivalués). Par exemple,  "SET", crée un type ensemble d’éléments: SET domaine où "domaine" a la même définition que ci-dessus.

liste : LIST

l multi-ensemble : BAG

l tableau à une dimension : ARRAY

Exemple: Classe contenant des attributs complexes et multivalués:

CLASS Personne

{ ATTRIBUTE nom : STRING ,

ATTRIBUTE prénoms : LIST STRING ,

ATTRIBUTE adresse : STRUCT adr { rue : STRING , n° : STRING ,ville : STRING , codeNPA : INT}

ATTRIBUTE enfants : LIST STRUCT enfant

{ prénoms : LIST STRING , sexe : ENUM {'M', 'F'} , date : DATE } } Types définis par l'application

- Les constructeurs de structure complexe servent à:

Définir des classes d'objets à structure complexe Définir des types de données adaptés à l'application type T-Adresse

TYPEDEF T-Adresse STRUCT { ATTRIBUTE rue : STRING , ATTRIBUTE n° : STRING , ATTRIBUTE ville : STRING , ATTRIBUTE codeNPA : INT } CLASS Personne {

ATTRIBUTE nom : STRING ,

ATTRIBUTE prénom : LIST STRING ,

ATTRIBUTE adresse : T-Adresse , ATTRIBUTE

enfants : LIST STRUCT enfant { prénoms : LIST STRING ,sexe : ENUM {'M', 'F'} , date : DATE } }

- Comme les classes d'objets, les types de données définis par l'application ont : -une structure complexe

-des opérations (méthodes) 6-3 Identité d'objet

L'identité des objets est implémentée par un identifiant système géré par le SGBDO. Dès la création d'un objet, un identifiant système lui est attaché. La valeur de cet identifiant n'est ni affichable, ni imprimable, ni modifiable. On appelle cet identifiant, la référence de l'objet, ou son oid.

(4)

L'égalité de deux objets, o1 et o2, peut se mesurer à plusieurs niveaux:

l'identité d'objets, notée:

o1 = = o2 qui signifie: "est-ce le même objet (le même oid)?"

l'égalité de valeur, notée:

o1 = o2 qui signifie: "les objets o1 et o2 ont-ils la même valeur ? C'est-à-dire tous leurs attributs ont la même valeur, que ce soient des attributs-valeur ou des attributs-référence.

Implémentation :

-adresse disque ou MC -un numéro logique - Exemple : n° de classe + n° de séquence 6-4 Liens de composition

Un lien de composition relie une classe C1 à une classe C2 si les objets de C1 (appelés "objets composés") sont composés d'objets C2 (appelés "objets composants"). C'est un lien orienté de cardinalité quelconque (0:1 ou 1:1 ou 1:N ou N:M ou 0:N…).

Ces liens de composition sont implantés par des attributs-référence qui pointent sur les objets composants. Leur valeur est l'oid de l'objet référencé. On peut avoir des objets partagés qui sont

composants de plusieurs objets composés.

CLASS Voiture

{Attribute modèle : STRING , Attribute marque : STRING , Attribute type : STRING , Attribute moteur : Moteur }

CLASS Moteur

{ Attribute N° : STRING , Attribute puissance : FLOAT , Attribute nbCyl : INT } Liens inverses gérés par le SGBD OO

- Certains SGBD OO gèrent les liens de composition inverses CLASS Voiture

{ modèle : STRING ,

….. ,

moteur : Moteur INVERSE Moteur.modèlesV } CLASS Moteur

{ N° : STRING ,

….. ,

modèlesV: SET Voiture INVERSE Voiture.moteur }

(5)

ODMG n'autorise les attributs référence qu'au premier niveau :

Pour décrire cette situation en ODMG, il faudrait introduire une classe intermédiaire (qui représente une association du schéma entité association équivalent) de la façon suivante:

CLASS Etudiant2

{ num : INT ; nom : STRING ; prénoms : LIST STRING ; cours-suivis : SET CoursSuivi } CLASS CoursSuivi

{cours : Cours ; étudiant : Etudiant2 INVERSE Etudiant2.cours ; note : FLOAT } Ce qui serait représenté graphiquement de la façon suivante en ODMG:

6-5 . Graphe de généralisation/spécialisation des classes

Certains ensembles d'objets du monde réel ayant des caractéristiques communes peuvent être perçus comme comprenant un ou plusieurs sous-ensembles d'objets, chaque sous-ensemble ayant des propriétés particulières. Les modèles de données orientés objets permettent de décrire ce type de situation à l'aide du concept de généralisation/spécialisation (ou lien IS-A des modèles sémantiques) auquel ils ont ajouté un mécanisme d’héritage.

Un lien de généralisation/spécialisation, CS –>CG, est un lien binaire orienté entre deux classes,

CS appelée sous-classe (ou classe spécifique) et CG appelée sur-classe (ou classe générique).

Il est noté graphiquement sur les diagrammes par une flèche épaisse ; et il défini par les trois règles

suivantes :

l’inclusion des populations : CS représente un sous-ensemble des entités du monde réel décrites par CG. Du point de vue conceptuel, la population de CS est incluse dans celle de CG.

(En pratique, au niveau interne, la solution retenue est souvent différente.)

et l’héritage : CS hérite des attributs et méthodes de CG. C'est ce concept d'héritage de la structure et des méthodes qui permet la réutilisation des classes.

Exemple : graphe de généralisation des classes décrivant les personnes dans une université

(6)

Déclaration partielle de ce graphe de généralisation (en ODMG, le lien de

généralisation/spécialisation se déclare dans le schéma textuel par le caractère ":"):

Class Personne

{ nom : String ; prénoms : List String; adresse : String ; afficher() } ;

Class Etudiant : Personne

{ n°E : Int ; dateN : Date ; études : Set Struct { année : Int ; diplôme : String } ; cours-obtenus : Set Struct { cours : Cours ; année : Int ; notes : Set Float } ; cours-suivis : Set Cours ;

afficher() ; /* nouvelle définition de la méthode, particulière aux objets de type Etudiant */

inscrire( cours : Cours ) ;

aobtenu( cours : Cours ; notes : Set Int ) } ; Class Enseignant : Personne

{ tél : Int ; statut : Enum: ("prof"; "assistant") ; rens.banc : Struct { banque : String ; agence : String ; compte : Int } ;

coursdonnés : Set Cours ;

afficher() ; /* nouvelle définition de la méthode, particulière aux objets de type Enseignant*/

assure (cours : Cours ) ; nassureplus (cours : Cours ) } ;

Degrés d'encapsulation :

Les SGBDO n'appliquent pas tous strictement l'encapsulation. L'encapsulation stricte est lourde à

appliquer, notamment elle rend difficile la définition d'un LMD déclaratif de type SQL. On peut

définir différents degrés d'encapsulation:

encapsulation stricte: tout accès depuis un objet o aux données d'un autre objet o' se fait par appel d'une méthode de l'objet o';

encapsulation partielle: les classes d'objets ont deux types de données, les données publiques

accessibles directement, et les données privées accessibles uniquement par l'appel de méthodes.

encapsulation des écritures: tout accès en écriture se fait par appel d'une méthode, les accès en

lecture peuvent être faits directement (sans passer par l'appel d'une méthode);

encapsulation selon le type d'accès: les accès faits à partir d'un langage de manipulation de données déclaratif type SQL étendu aux objets peuvent ne pas respecter l'encapsulation, les

(7)

accès faits depuis une méthode et un langage de programmation doivent respecter l'encapsulation.

Par exemple, le SGBDO O2 propose trois niveaux d'encapsulation pour les attributs et méthodes:

Private: (option par défaut) qui signifie l'encapsulation stricte;

Read: (option possible pour un attribut uniquement) qui signifie l'encapsulation des écritures;

Public: aucune encapsulation, accès possible par tous en lecture et écriture.

Appel d'une méthode:

Lorsqu'un programme d'application (ou une méthode) demande à un objet d'exécuter une de ses

méthodes, on dit qu'il envoie un message d'appel de méthode à l'objet. Par exemple, si p est un objet de type Personne:

p.afficher()

est un message d'appel qui déclenche l'exécution de la méthode afficher() de l'objet p;

p.delete()

est un message d'appel qui déclenche l'exécution de la méthode delete() (méthode générique héritée) et dont le résultat est la destruction de l'objet p.

Polymorphisme et liaison dynamique

Un concept important de la programmation orientée objet est le polymorphisme des méthodes.

Il consiste à permettre de donner le même nom à plusieurs opérations différentes. Par exemple le signe + est utilisé pour l'addition de deux entiers et pour celle de deux réels, parfois aussi pour deux booléens ou pour concaténer deux chaînes.

Lemême nom, +, appellera l'exécution de codes différents selon le type des arguments. En orienté objets le choix de la bonne méthode est fait en fonction de la classe de l'objet appelé.

pour résoudre le polymorphisme dû à la redéfinition des méthodes, ces SGBDO choisissent la méthode de la classe la plus spécialisée contenant l’oid.

Populations et persistance Approche type BD classique

un type (une relation en relationnel) comporte deux aspects:

la définition de la structure des occurrences potentielles du type. C'est par exemple pour une table relationnelle, la liste des attributs avec leur domaine;

(8)

la déclaration d'un récipient contenant toutes les occurrences existantes du type, appelé population du type. Par exemple en relationnel, dans les LMD le nom de la relation représente l'ensemble de ses tuples. De plus, toutes les occurrences sont, par définition, permanentes.

Langage de programmation :

Dans les langages de programmation au contraire, un type ne décrit que la structure (et les opérations associées) des occurrences potentielles.

Par exemple, le type INTEGER n'a pas de population associée.

SGBD DE BDD :

Les SGBDO issus du monde des bases de données, associent généralement à chaque classe sa

population qui est permanente. Tout objet créé est automatiquement stocké par le système dans le

récipient associé à la classe et qui a pour nom celui de la classe. C'est le cas du SGBDO Orion.

ODMG a choisi une solution similaire : le concepteur, lors de la déclaration de la classe, a le choix entre définir ou pas un récipient pour la population de la classe grâce à la clause facultative

"Extent nom-population".

SGBDO DE LPOO:

Les SGBDO issus du monde des langages de programmation orientée objets, séparent nettement les deux fonctions : d'un côté la définition de la structure, de l'autre le récipient de stockage. Les classes définissent la structure uniquement. Le SGBDO ne leur associe aucune population. C'est aux utilisateurs de créer des récipients dans lesquels stocker les objets.

En effet, ce type de SGBDO gère deux sortes d'objets:

Les objets temporaires qui sont détruits automatiquement à la fin du programme utilisateur qui les a créés, et les objets permanents qui sont conservés jusqu'à ce que l'utilisateur veuille les détruire. Les SGBDO offrent là aussi plusieurs solutions telles que les suivantes.

ODMG - persistance et population Approche type BD classique

Les objets sont tous toujours permanents Chaque classe a 1 (ou 0) population

Si la population existe, les objets sont automatiquement stockés dedans CLASS nom-classe

[ EXTENT nom-population ] Méthode

Signature de la méthode -nom de la méthode -type du résultat (si existe)

-paramètres (si existent) : nom et type pour chacun - Code de la méthode

- instructions d'un LP OO - instructions du SGBD OO

- l requêtes SELECT ... FROM … WHERE … - l mises à jour d'objets

-appels de méthodes sur d'autres objets

(9)

Extrait de la syntaxe du langage de définition des données d'ODMG 1. Définition d'une classe :

Class nom-classe1 [: nom-classe2 , ... ] Extent nom-population

Key[s] < clé> , ...

{ Attribute < def-attribut> ;

Relationship nom-relation : [ List / Set / Bag / Array ] nom-classe3 [ Inverse nom-classe3.nom-relation2 ] ;

<domaine-résultat> nom-méthode ( [nom-paramètre : <domaine-paramètre> , ...] ) ; }

2. Définition d'un domaine : Typedef nom-domaine

[ List / Set / Bag / Array ] <domaine-s/c>

<domaine-résultat> nom-méthode ( [nom-paramètre : <domaine-paramètre> , ...] ) ; avec:

<clé> :: <clé-simple> / <clé-composée>

<clé-simple> :: <chemin>

<chemin> :: [ <attr/rel>. ... .] nom-attribut

<attr/rel> :: nom-attribut / nom-relation

<clé-composée> :: ( <chemin> ... )

<def-attribut> :: nom-attribut : [ List / Set / Bag / Array ] <domaine-s/c>

<domaine-s/c> :: <domaine-simple> / <domaine-complexe>

<domaine-simple> :: String ½ Int ½ Float ½ Date½ Boolean ½ Enum (valeur, ...)

<domaine-complexe> :: Struct nom-domaine {<def-attribut>; ...}

<domaine-paramètre> :: <domaine-simple> ½ nom-classe

<domaine-résultat> :: <domaine-simple> ½ nom-classe½ Void Les clauses Extent et Keys peuvent apparaître zéro ou une fois.

Les clauses Attribute, Relationship et définition de méthode peuvent apparaître zéro, une ou plusieurs fois.

Les signes "[ "et "]" délimitent un terme qui peut être omis.

Le signe "..." après un terme indique que le terme peut apparaître une ou plusieurs fois.

Exemple : Class Personne

{ Attribute nom : String ; Attribute prénoms : List String ; Attribute adresse : Tadresse ; Void afficher() ;

Void nouvelle_adresse(nvadr : Tadresse)}

Class Etudiant : Personne Extent LesEtudiants Key n°E

{ Attribute n°E : Int ; Attribute dateN : Date ; Attribute études : List Struct Etude { année : Int ; diplôme : String } ;

Relationship cours-obtenus : List CoursObtenu Inverse CoursObtenu.étudiant ; Relationship cours-suivis : Set Cours Inverse Cours.étudiants ;

Void afficher() ;

Void inscrire ( nvcours : Cours ) ;

Void aobtenu ( nvcours : Cours , note : Float , année : Int ) ; Int age()}

(10)

Traduire ce schéma en classes selon la norme ODMG.

Références

Documents relatifs

Dans notre contexte, l’aspect affectation englobe toute r´ epartition des services sur un ensem- ble de ressources, comme des v´ ehicules, types de v´ ehicules, d´ epˆ ots ou

Une m´ ethode statique n’a pas acc` es ` a l’´ etat de la classe, il s’agit d’une fonction utilitaire rattach´ ee ` a la classe (attention aux faux amis avec d’autres

Question 1-2 Donnez la grammaire d’une fonction affine, la grammaire d’un domaine, la grammaire d’une expression A LPHA que l’on supposera toujours sous la

[r]

Pour trouver plusieurs blocs de mémoire libre, plusieurs accès de disque pourraient être demandés. Pour augmenter l’efficacité, nous pouvons garder en mémoire centrale

◦ Écrire le code qui permet de cloner un point : ajouter la méthode cloner(). ◦ Écrire le code qui permet de créer un point à partir d’un autre : constructeur ayant comme

En reprenant la méthode de puissance rapide de matrice déjà vue en TP ainsi que les générations de déclarations de tableaux ci- dessus, écrivez un programme de calcul et

Pour modifier les attributs d'un objet, comme sa couleur ou la largeur de sa bordure par exemple, vous pouvez utiliser la barre d'outils Ligne et remplissage, la barre