Vous êtes sur la page 1sur 27

Module 215

Bases de Donnes Avances

SGBD orients "Objet"

1 - La modlisation Objet 2 - Les SGBDOO

Bibliographie

Grard-Michel Cochard cochard@u-picardie.fr

La modlisation "Objet"
1. Concepts de base Contenu : 2. Caractristiques des classes et des objets 3. Modlisation Objet

Avertissement : Les considrations qui suivent sont des rappels de notions tudies antrieurement. On se reportera avec profit sur les modules B210 (Bases de donnes relationnelles) et C305 (Analyse et conception oriente objet) pour plus de prcisions.

1. Concepts de base
La sparation des traitements et des donnes a permis de fonder les bases d'une mthodologie de conception dont Merise est l'exemple et de dvelopper la thorie des bases de donnes. Toutefois cette sparation pose un problme vident : il n'est pas toujours possible de sparer compltement les donnes et les traitements car ces derniers sont les manipulateurs des premires. La conception des systmes d'information suivant Merise suppose d'ailleurs une confrontation entre le modle conceptuel des traitements et le modle conceptuel des donnes pour validation du dernier par le premier. Le modle objet suppose l'inverse que donnes et traitements soient runis, mais sous une forme "granulaire" : l'objet.

Le mot objet n'est pas choisi au hasard ; en effet, dans toute modlisation, on cherche reprsenter la ralit au plus prs et notamment les diffrents "objets" rels. On prend donc le mme mot, objet, pour dsigner la modlisation d'un objet rel. Signalons toutefois quelques dfinitions (et apprciez la varit !) :
q

Codd et Yourdon : Un objet est une abstraction de quelque chose qui reflte les capacits d'un systme de conserver de l'information sur cette chose, d'interagir avec, ou les deux ; une encapsulation de valeurs d'attributs et de leurs services exclusifs .

q q

Schlader et Mellor : Un objet est une abstraction d'un ensemble de choses relles telles que toutes les choses de l'ensemble (les instances) ont les mmes caractristiques et toutes les instances sont conformes au mme ensemble de rgles . Jacobson : Un objet est caractris par des oprations et un tat qui rpertorie les effets des oprations. James Martin : Un objet est n'importe quoi, virtuel ou rel, pour lequel nous stockons des donnes avec les mthodes qui les manipulent. Yourdon : Un objet est une chose de l'univers rel ou une abstraction de cette chose... . Il dfinit un objet comme une combinaison (?) d'une structure de donnes (?) et d'un comportement (ensemble d'oprateurs spcifiques). Rochfeld : Un objet est un un tre (?) autonome de l'univers du discours, capable d'tre identifi et caractris par... Miranda : Un objet est une capsule (E) logicielle oblative identifie (I) de complexit incrmentale(C) avec un tropisme connatif dont l'htronomie est la marque de la dure de l'phmre, et la hoirie, la marque de la richesse (R). Cette dfinition peut tre paraphrase ainsi : un objet est une bote noire logicielle (capsule logicielle) tourne vers les autres par son interface (oblative) avec une existence naturelle (tropisme connatif) dont l'essence qui ne dpend pas d'elle (htronomie) est d'une part le caractre phmre (on est pass avec la civilisation objet, de l'phmre de la dure la dure de l'phmre) et d'autre part l'hritage (hoirie) structurel et opratoire .

S. Miranda fait allusion ici aux fameuses proprits RICE que doivent possder les objets : R : Rutilisabilit. La rutilisabilit peut tre perue de deux manires diffrentes suivant que les concepts d'abstraction ou d'encapsulation sont privilgis : l'hritage et le polymorphisme. I : Identit Physique . Un objet n'a d'existence que s'il est identifiable . Cette identification (matrialise par un OID Object Identifier) doit rester un invariant dans la vie de l'objet : l'existence d'un objet est alors indpendante de sa valeur appele aussi tat. Un objet peut donc tre vu comme une paire : (OID, Etat). C : Construction d'objets complexes et typage extensible. il doit tre possible de construire des objets complexes partir d'objets plus lmentaires et dfinir des types d'objet " volont". E : Encapsulation . L'encapsulation prsente un objet comme une "bote" dont l'intrieur n'est connu que par les services et les oprateurs qu'elle offre et qui permet aussi de cacher les autres aspects. Prenons comme support explicatif l'exemple d'une bibliothque. Pour modliser la gestion d'une bibliothque, on identifie les objets rels : livres, lecteurs, auteurs, oeuvres, rayons, prts, achats,... Certains de ces objets ont une ralit matrielle (livres, lecteurs, auteurs, rayons), d'autres ont une ralit abstraite (oeuvres, prts, achats). On fera, dans un premier temps, correspondre ces objets "rels" des objets du modle que l'on pourra d'ailleurs appeler du mme nom. Ainsi l'objet "livre" peut tre dcrit par des attributs : numro d'inventaire, titre, auteurs, date de publication, nombre de pages, diteur,... et par des oprations : acheter, prter, ranger. On dfinira donc un objet comme un ensemble comportant des attributs (ou proprits), des mthodes (ou comportements ou oprations), un identifiant (OID) et correspondant un objet rel (matriel ou abstrait). Les valeurs des attributs dfinissent l'tat de l'objet. Ainsi, livre1 dfini par les attributs numinv = 1024, titre = Approche Oriente Objet , auteurs = Madjid Ayache, Andr Flory, diteur =Economica, date_dition = 1996, nbpages = 112 et les mthodes acheter (date=12/12/98, fournisseur=librairie des Oiseaux, facture=F2048),

prter (date=03/01/99, lecteur=1234), ranger(rayon=48) est un objet particulier. Comme on le voit, un objet est un tout self-consistent qui renferme des attributs et des mthodes ; on dit que l'objet est encapsul. Cette encapsulation possde une signification ; parmi les composants de l'objet, attributs et mthodes, certains sont publics (information "visible") et certains sont privs (information "cache"). Il faut en effet considrer que les objets vont interagir les uns sur les autres ; cette interaction s'effectue par envoi de messages. Ce qu'un autre objet peut effectuer sur un objet donn est appel la partie publique ; par contre il y a des proprits et des oprations qui sont inhrentes l'objet et qui ne peuvent tre accdes de l'extrieur, il s'agit de la partie prive. On peut considrer un objet comme l'indique le schma ci-dessous bas sur un exemple ; l'objet reprsente une personne dont les attributs sont le nom, le prnom, l'ge et le salaire mensuel et dont les mthodes sont les oprations suivantes : saisie d'information, affichage de donnes, augmentation ou diminution du salaire. Vu de l'extrieur, l'objet ne prsente que trois possibilits : saisir des informations (via un formulaire par exemple), afficher des donnes (suivant un modle de prsentation), augmenter le salaire (par exemple en indiquant le pourcentage d'augmentation) ; ces trois oprations constituent l'interface entre le monde extrieur et l'objet considr comme une bote noire.

L'intrt de l'encapsulation peut tre considr comme double :


q q

communiquer entre les objets par les interfaces cacher les dtails internes aux utilisateurs externes

Reprenant un exemple donn plus haut, Il existe beaucoup d'autres livres dans une bibliothque, qui possdent les mmes attributs et les mmes mthodes ; on dit qu'ils appartiennent une classe, en l'occurrence ici, la classe "livre" dont l'objet livre1 est une instanciation. La classe se dfinira par les attributs et les mthodes (communs tous les objets de la classe); elle dfinit une structure d'objet . la classe LIVRE se dfinit donc comme suit :

classe : LIVRE attributs :

numinv titre auteurs diteur date_dition nbpages mthodes : acheter( date, fournisseur, facture) prter( date, lecteur) ranger( rayon) En fait le concept de classe correspond trois significations
q

q q

ensemble d'objets ayant la mme structures (les mmes attributs) et les mmes comportements (mthodes). Cet ensemble constitue l'extension de la classe (au sens de la thorie des ensembles). modle d'objet. Un objet cr suivant le modle dfini par la classe est une instanciation de la classe. dfinition d'un type d'objet. on peut alors parler de type ou d'intention.

La cration d'un nouvel objet appartenant une classe donne s'effectue par une opration (reprsente souvent par "new") qui associe automatiquement le nouvel objet la classe. Une classe peut elle-mme se rfrer une classe "mre" ; elle est alors une sous-classe (classe fille) de cette classe mre. Ainsi, dans l'exemple de la bibliothque, on peut considrer que le lecteur peut consulter des livres, mais aussi des disques audios, des cdroms, des vidos, ..., entits que l'on dsignera gnriquement par mdias. On peut donc imaginer la classe MEDIA et des sous-classes LIVRE, DISQUE_AUDIO, CEDEROM, VIDEO,... On dira que la classe LIVRE est une spcialisation de la classe MEDIA

La classe MEDIA possdera par exemple les attributs numinv, titre, auteurs, diteur, date_dition et les mthodes acheter, prter, ranger. Les classes filles possderont aussi ces attributs et ces mthodes et c'est dans ce sens qu'elles sont des sous-classes de la classe MEDIA. Toutefois les sous-classes peuvent possder des attributs et des mthodes spcifiques, comme nbpages pour la classe LIVRE, ou dure pour la classe VIDEO. La transmission d'attributs et de mthodes de la classe mre aux classes filles s'appelle l'hritage. On emploie aussi quelquefois la notion de classe abstraite. Il s'agit d'une classe non instanciable, c'est dire ne correspondant aucun objet. Les classes de ce type sont utilises pour dfinir des classes trs gnrales (on pourrait dire gnriques). Par exemple on peut dfinir une classe abstraite figure_convexe correspondant aux sousclasses polygone et cercle. La classe abstraite figure2D n'aura que deux mthodes : primtre() et aire() et pas d'attributs. Les sous-classes polygone et cercle hriteront de ces mthodes mais avec des redfinitions (car le primtre et l'aire correspondent des algorithmes diffrents pour un polygone et pour un cercle).

2 - Caractristiques des classes et des objets


Dans ce paragraphe, nous donnons quelques approfondissements des notions introduites plus haut, notamment en vue de l'utilisation des objets dans des bases de donnes Identifiant Un objet possde un identifiant unique qui est son numro matricule. Cet identifiant permet de distinguer un objet d'un autre objet. En effet, deux objets distincts peuvent trs bien avoir le mme tat (mmes valeurs des attributs) et mmes mthodes : ils n'ont toutefois pas le mme identifiant. L'identifiant est souvent reprsenter par l'acronyme oid (Object IDentifier). Un oid est permanent, fixe et unique. Deux notions sont distinguer : l'galit et l'identit. Deux objets sont identiques s'ils ont le mme identifiant o1==o2 (il n'y a donc qu'un seul objet) ; deux objets sont gaux en valeur si leurs attributs ont mme valeur o1=o2. Cette distinction entre galit et identit est fondamentale comme le montre l'exemple suivant. Arthur possde un chien nomm Nabuchodonosor ; Josphine possde un chien nomm Nabuchodonosor. Deux situations sont possibles :
q

Arthur et Josphine possdent conjointement un chien nomm Nabuchodonosor

Arthur possde un chien appel Nabuchodonosor et Josphine possde galement un chien (qui n'a rien voir avec le premier) appel Nabuchodonosor.

On peut s'apercevoir sur ce simple exemple que l'on ne peut distinguer deux objets par leur valeur (ici le nom du chien). On peut constater une similitude fonctionnelle de l'oid avec une cl du modle relationnel. Il y a cependant une diffrence importante du point de vue des bases de donnes : c'est le systme qui cre l'oid alors que la cl est cre par l'utilisateur (la cl est un attribut). Hritage simple, hritage multiple Nous avons vu qu'une classe peut donner lieu plusieurs sous-classes, hritant des proprits de la classe mre. Cette situation est appele hritage simple. Il existe toutefois d'autres situations o une classe peut tre sousclasse de plusieurs classes mres ; il s'agit alors d'hritage multiple

Un exemple simple permet de comprendre l'hritage multiple. Prenons le domaine de la gomtrie et les figures gomtriques dfinies comme trapzes. Un trapze est un quadrilatre dont deux cts opposs sont parallles. On peut dire que tous les trapzes appartiennent la classe TRAPEZE. Un cas particulier de trapze est celui o les deux autres cts sont aussi parallles ; il s'agit d'un paralllogramme et on peut dfinir la classe PARALLELOGRAMME comme sousclasse de la classe TRAPEZE. Cette nouvelle classe peut sont tour donner naissance deux classes drives: la classe RECTANGLE (un angle droit) et la classe LOSANGE (deux cts conscutifs gaux). Un objet qui a ses quatre angles droits et ses quatre cts gaux est la fois un objet de RECTANGLE et de LOSANGE. Il appartient la classe CARRE qui est la fois une sousclasse de RECTANGLE et de LOSANGE. La classe CARRE hrite la fois des attributs et mthodes de la classe RECTANGLE et de la classe LOSANGE ; il s'agit d'un hritage multiple.

exemple : on peut dfinir une classe PERSONNE sous la forme PERSONNE : nom, adresse, date_naissance, age o nom, adresse, date_naissance sont des attributs et age une mthode et dfinir deux sous-classes EMPLOYE et ETUDIANT : EMPLOYE : nom, adresse, date_naissance, age, matricule, salaire ETUDIANT : nom, adresse, date_naissance, universit, diplme Si on dfinit explicitement EMPLOYE et ETUDIANT comme des sous-classes de PERSONNE, il n'est pas ncessaire de rpter les attributs ou mthodes hrites : EMPLOYE subtype-of PERSONNE : matricule, salaire ETUDIANT subtype-of PERSONNE : universit, diplme exemple : Soit une classe abstraite GEOMETRIE dfinie par GEOMETRIE : forme, aire, point_ref et trois sous-classes de GEOMETRIE : RECTANGLE, TRIANGLE, CERCLE : RECTANGLE subtype-of GEOMETRIE : largeur, hauteur TRIANGLE subtype-of GEOMETRIE : cot1, ct2, angle12 CERCLE subtype-of GEOMETRIE : rayon

On notera que aire est une mthode qui doit tre implmente diffremment pour un rectangle, un triangle et un cercle (polymorphisme - voir plus loin).

Objets simples et objets complexes En simplifiant, on peut reprsenter, du point de vue structurel, un objet par un triplet (n, c, v) o n est l'identifiant (oid) de l'objet, c est le type et v est l'tat de l'objet (que nous restreignons ici aux attributs). Il y a une relation vidente entre c et v comme on va le voir. Les types de base sont atome, tuple, set. Les types plus labors sont list, bag, array. Le type atome correspond aux types lmentaires usuels : entiers, rels, chanes, boolens. Si c = atome, v = valeur entire ou relle ou chane ou oui/non. Si c = set, v est de la forme {n1, n2,...np} o les ni sont des oid d'objets distincts de mme type. Si c = tuple, v=<a1:n1, a2:n2,...., ap:np> o ai est un nom d'attribut et ni un oid ; le tuple est quivalent au "struct" de certains langages de

programmation (C, C++). Si c = list, v = [n1, n2, ..., np] qui est une liste ordonne de oid ; la taille d'une liste est indfinie. Si c = array, v est un vecteur d'oid avec une taille maximum dfinie. Si c = bag, v est une collection d'oid reprsentants des objets pas ncessairement distincts. Les types set, list, array, bag sont quelquefois regroups en un type collection. exemple (tir de Elmasri et Navathe) : prenons le cas d'un entreprise structure en services. Chaque service est caractris par un nom de service nomS, un numro de service numS, un chef de service chefS, une localisation locS, des employs. Un employ est caractris par un nom nomE, un prnom pnomE, un matricule matE, un salaire salE, un service d'affectation service. Un chef de service est un employ qui a pris ses fonctions "es qualit" une date donne debut. Les objets suivants reprsentent un chantillon de ce que l'on pourrait trouver dans une base de donnes :: O1 = (n1, atome, "Paris") O2 = (n2, atome, "Marseille") O3 = (n3, atome, "Lyon") O4 = (n4, atome, 3) O5 = (n5, atome, "Ventes") O6 = (n6, atome, "15/09/2006") O7 = (n7, set, {n1, n2, n3}) O8 = (n8, tuple, <nomS:n5, numS:n4, chefS:n9, locS:n2, employs:n10>) O9 = (n9, tuple, <employe:n11, debut:n6>) O10 = (n10, set, {n11, n12, n13}) O11 = (n11, tuple, <nomE:n18, pnomE:n19, matE:n21>) ce qui peut se traduire par un graphe

Polymorphisme et Surcharge

Comme on a vu prcdemment, un objet hrite des proprits et oprations de la classe laquelle il appartient. Il en est de mme d'une sous-classe d'une classe et il est clair que la sous-classe doit tre diffrencie par rapport sa classe mre sinon il n'y aurait pas de raison de faire une distinction entre elles : la sous-classe possde des caractristiques supplmentaires. Prenons l'exemple simple d'une base de donnes "clientle" dans laquelle on distingue deux types de clients : les clients rguliers et les clients occasionnels. On peut dfinir une classe CLIENT avec des proprits gnriques et deux sous-classes : CLIENT_REG et CLIENT_OCC. Parmi les mthodes de la classe CLIENT, on peut dfinir celle qui consiste effectuer une ristourne sur le prix de vente, par exemple 5% : mthode Ristourne(PV) = 0,05*PV Pour les clients occasionnels, un simple hritage de la classe CLIENT permet de calculer la ristourne. Par contre, pour les clients rguliers, la ristourne est de 10% pour fidliser cette clientle. La mthode est alors mthode Ristourne(PV) = 0,1*PV On a donc la situation suivante :

Cette diffrenciation entre classe et sous-classes peut s'effectuer par ajout d'attributs ou de mthodes. Elle peut aussi se dfinir par modification d'attributs ou de mthodes issues de la classe mre. Cette opration s'appelle une surcharge. Le fait de pouvoir utiliser une mthode sous le mme nom mais qui s'applique de manire diffrente suivant la classe s'appelle le polymorphisme. Ces considrations s'tendent aussi aux attributs qui peuvent changer de type suivant la classe. Toutefois le mot polymorphisme s'applique aussi des situations diverses :
q

une variable polymorphe est une variable qui, suivant les cas, peuvent contenir des valeurs de types diffrents. une opration polymorphe est une opration qui, suivant les cas, peut correspondre des algorithmes diffrents.

Messages Les objets interagissent les uns sur les autres par mission et rception de messages. Un message comporte une

adresse (l'identification de l'objet qui doit recevoir le message), un slecteur (le nom de la mthode invoque), des paramtres ( utiliser dans la mthode). L'excution de la mthode invoque dans le message et encapsule dans l'objet rcepteur peut donner lieu l'envoi d'autres messages vers des objets.

Il convient de noter qu'un objet garde la matrise de son tat : il peut refuser de rpondre une sollicitation extrieure.

Association Des objets peuvent tre relis par une association. Par exemple l'objet "lecteur 4" peut tre reli l'objet "livre 7" par l'association emprunter . Comme un livre peut tre emprunt par des lecteurs d'une manire gnrale, l'association porte sur les classes plutt que sur des objets particuliers :

L'association se reprsente graphiquement par un trait entre les deux classes concernes et comporte
q q

un nom : gnralement un verbe indiquant une action ; une direction matrialise par une flche pour indiquer clairement qui est le sujet du verbe et qui en est le complment ; cette flche est cependant facultative car la direction est trs souvent vidente ; des cardinalits indiques sous la forme x..y (de x y) ou * (indfini) ; dans l'exemple ci-dessus, la cardinalit 0..2 indique qu'un lecteur peut emprunter de 0 2 livres et la cardinalit 0..1 qu'un livre peut soit n'tre pas emprunt, soit tre emprunt par un lecteur.

On notera que, par rapport Merise, il y a beaucoup de similitudes. Cependant, il faut prendre en considration les diffrences suivantes :
q

un objet n'est pas une entit : il possde des mthodes propres ce qui n'est pas le cas de l'entit qui ne possde que des attributs. les cardinalits sont crites dans l'autre sens : dans Merise, pour l'exemple ci-dessus, on aurait gauche 0,1 et droite 0,2.

Les associations entre classes peuvent ncessiter des informations complmentaires que l'on ne peut mettre ni dans une classe ni dans l'autre puisque ces informations sont relatives l'association elle-mme. On est alors conduit crer, pour ce type d'association, une nouvelle classe. Ainsi dans l'exemple ci-dessus, l'emprunt d'un livre implique des informations sur le prt : des attributs comme la date de prt et des mthodes comme facturer(). Le schma ci-dessus devient alors :

3 - Modlisation Objet
L'utilisation des objets s'applique de nombreux domaines ; on dsigne souvent cette utilisation par "approche oriente objet". Les domaines concerns sont principalement
q q q q

la programmation oriente objet (POO) les systmes (concurrence, paralllisme) l'intelligence artificielle (reprsentation des connaissances) les bases de donnes orientes objet (BDOO)

La modlisation objet ne consiste pas seulement dfinir les classes et leurs associations. Elle doit aussi tenir compte de la dynamique (tats, vnements) et des aspects fonctionnels. La plus connue des mthodes objet est OMT (Object Modeling Technique). Nous en donnons ici une description rapide, puis nous ferons la liste des principales mthodes objet. OMT considre que la ralisation d'un systme d'information ncessite trois tapes : l'analyse, la conception globale, la conception dtaille. Trois axes donnent l'tendue de la mthode :
q

l'axe structure correspond au modle objet stricto sensu (MO) ; le long de cet axe sont dcrits les objets concerns et les associations entre ces objets. l'axe dynamique correspond au modle du mme nom (MD) ; il prend en compte les diffrents tats d'un objet et les vnements dclencheurs ou rsultats ; l'axe de la connaissance correspond aux aspects fonctionnels(MF): mthodes, rgles de gestion, fonctions.

tape d'analyse description initiale du problme ; construction du modle objet MO ; construction du modle dynamique MD ; construction du modle fonctionnel MF ; vrification et raffinement des trois modles prcdents.

tape de conception globale dcomposition du systme en sous-systmes ; dtermination des ressources et des mcanismes d'accs ; choix d'une stratgie de pilotage de l'application

conception dtaille elle porte principalement sur le modle objet, notamment sur la dfinition des oprations (pour chaque fonction du modle fonctionnel, pour chaque vnement du modle dynamique)

modle objet Trs important dans la mthode du fait de sa position centrale, le modle objet (quelquefois appel modle statique par opposition au modle dynamique) consiste identifier les diffrents objets concerns par le problme et les dcrire en terme de classes et d'associations. Une classe OMT est une famille d'objets ayant les mmes proprits et les mmes mthodes. Les instances de classe peuvent tre associes par des associations qui sont bidirectionnelles et peuvent tre binaires ou plus gnralement n-aires (ces associations relient n instances de classes). Les cardinalits sont indiques sur les "pattes" des associations et tout un formalisme graphique peut tre utilis (que nous n'indiquons pas ici). modle dynamique Il est cens dcrire les cycles de vie des objets. Un objet volue sous l'effet d'vnements et change ainsi d'tat ( un instant donn, un objet est dans l'un des tats possibles pour cet objet). Un changement d'tat d'un objet est appel une transition caractrise par l'vnement qui provoque la transition les attributs de cet vnement la condition vrifier pour que la transition ait lieu sous l'vnement l'action effectuer

Dans un tat donn, un objet peut raliser une activit (qui ne change pas l'tat) ; elle est indique sur la figure cidessus par le mot cl do. Un autre concept du modle dynamique est celui de scnario qui reprsente une succession d'vnements :

modle fonctionnel Le modle fonctionnel dcrit les traitements en termes de flux d'information ; de ce fait, le modle fonctionnel est assez proche du graphe des flux, initial l'application de Merise. Il fait appel aux concepts d'acteurs, de processus, de flots de donnes, et galement d'units de stockage.

Les mthodes de conception oriente objet sont assez nombreuses et il n'est pas question ici de les dcrire toutes. Le lecteur est renvoy aux ouvrages spcialiss indiqus dans la bibliographie en fin de chapitre. Le tableau suivant indique les principales mthodes et leurs caractristiques : OOD Object Oriented Design HOOD Hierarchical Object Oriented Design OOA Object Oriented Analysis OOA/OOD OMT Object Modeling Technique OOSE Object Oriented Software Engineering OOM Object Oriented Merise

signification

concepteurs

G.Booch

B.Delatte, M.Heitz, JF. Muller

S.Shlaer, T.Coad, S.Mellor E.Yourdon

J.Rumbaugh, M.Blaha, W.Premerlani, F.Eddy, W.Lorensen 1991 oui oui oui

I.Jacobson, M.Christerson, P.Jonson, G.Overgaard 1992 oui oui oui

M.Bouzeghoub, A.Rochfeld

date de naissance modle statique modle dynamique modle fonctionnel

1991 oui oui

1993 oui

19881992 oui oui oui

1991 oui

1993 oui oui oui

Les SGBDO
1. Introduction Contenu : 2. Concepts gnraux pour les SGBDO 3. Modle ODMG et ODL 4- OQL

1. Introduction
Les bases de donnes "Objet" sont effectivement conues pour stocker et manipuler des objets. La premire base de donnes de cette catgorie semble tre Gemstone (1983) labore partir du langage de programmation Smalltalk. Il existe actuellement une assez grande varit de bases de donnes "orientes objet" dans le domaine exprimental et dans le commerce. Parmi les plus connues, on peut citer les prototypes exprimentaux :
q q q q q

ORION (Microelectronics and Computer Technology Corporation) ONTOS (Ontos) OPENOODB (Texas Instruments) ENCORE/Observer (Brown University) ODE (AT&T Bell Labs, puis Lucent Technologies)

et les produits commerciaux


q q q q q q q q q q q q

O2 (O2 Technology), puis ARDENT (ARDENT Software), puis n'est plus commercialis Gemstone/OPAL ( Servio Logic) Ontos (Ontologic) Statice (Symbolics) Gbase (Object Databases) Vision (Innovative Systems) Objectstore (Object Design) Objectivity/DB (Objectivity) Versant (Versant Object Technology) Orion (Itasca Systems) Illustra (Illustra Inc.) SQLX (UniSQL)

Cette liste, non exhaustive, laisse dj penser la question du standard et, en particulier, de la compatibilit de ces bases et de leur langage de manipulation de donnes. Leur dfaut majeur est l : il n'y a pas de standard reconnu actuellement. Normalement une base de donnes oriente objet devrait satisfaire 13 rgles (Manifesto de 1989) : des rgles relatives aux bases de donnes et des rgles relatives aux objets : rgles OO :
q q q q q q q

objets composites identits d'objet encapsulation classes, types, mthodes hritage surcharge et liaison dynamique extensibilit

langage de programmation OO

rgles BD :
q q q q q

donnes persistantes gestion d'une grande quantit de donnes partage des donnes et gestion de la concurrence fiabilit des donnes et reprise aprs incident langage de requte

Bien entendu aucune des bases orientes objet existantes ne possde compltement les 13 qualits requises. Ces bases sont nes de la conjonction de deux domaines : les bases de donnes (et plus spcialement relationnelles) et les langages de programmation orients objet (Simula, Smalltalk, Eiffel, C++, ...). Signalons les travaux de l'ODMG ( Object Database Management Group), fond en 1991 par 5 diteurs (O2 Technology, Objectivity, Object Design, Ontos, Versant) qui s'tait donn comme tche la spcification des bases de donnes orientes objet (il s'est dissout en 2001). Les travaux ont port sur :
q q q q

le modle de donnes "objet" bas sur OMG les langages de spcification d'objets : ODL (Object Definition Language), OIF (Object Interchange Format), le langage de requte : OQL (Object Query Language) inspir par SQL2 le lien avec des langages de programmation : Smalltalk et Java

Les deux principales productions sont ODMG v1.0, puis ODMG v2.0.

2 - Concepts gnraux pour les SGBDO


Dans ce qui suit, on donnera des ides gnrales sur le modle de donnes objet pour une base de donnes. En fait il faudrait prciser le SGBDO correspondant car en principe, il y a autant de modles que de systmes. On essaiera donc ici de donner des caractristiques les plus communes. Les considrations qui suivent dans cette section ne concernent que les extensions du chapitre prcdent au cas des bases de donnes. Identit d'objet Le concept central est celui d'objet qui a t dvelopp prcdemment. Un objet possde une identit propre qui permet de le distinguer des autres. L'identit est reprsente par un identifiant oid (object identifier) qui est permanent, fixe et unique (cette unicit est valable aussi dans le temps : quelle que soit la priode considre deux objets distincts ne peuvent avoir le mme identifiant ; autrement dit si un objet est supprim, son oid n'est pas rutilisable). L'identifiant d'un objet est gr par le SGBDO : il n'apparat pas dans les attributs de l'objet correspondant contrairement au modle relationnel o la cl (en quelque sorte un identifiant) apparat comme attribut obligatoire. Cependant un attribut peut contenir un identifiant (c'est un attribut "rfrence" c'est dire rfrenant un autre objet). Un objet est stock sur un disque comme tout lment d'une base de donnes. Connaissant son oid, le systme doit pouvoir retrouver l'objet. On peut envisager une solution simple comme oid = adresse physique mais on peut toujours changer de place l'objet ce qui rend la maintenance un peu lourde. Une autre solution est de maintenir une table de correspondance oid --> objet. Il faut noter que dans les bases de donnes objet actuelles, tout n'est pas objet : on peut avoir des objets et des valeurs ;

ces dernires ne possdent pas d'oid. Persistance Dans une application dveloppe avec un langage de programmation objet, les objets manipuls par le programme ont une dure de vie limite l'excution du programme. Dans une base de donnes, l'objet doit tre conserv ; on dit qu'il doit tre persistant. Deux mcanismes sont ncessits pour cela : le mcanisme de nommage et le mcanisme d'accessibilit.
q

mcanisme de nommage : il consiste associer un objet persistant un nom unique : objet persistant <---> nom. Cela doit se faire explicitement ; c'est une grande diffrence avec les SGBD traditionnels pour lesquels tous les lments de la base sont automatiquement, ds leur cration, persistants. exemple : nommage d'un objet (dans un langage hypothtique) : define class Ecoliers : type set(Ecolier); operations ajout_ecolier(e:Ecolier) : boolean; ote_ecolier(e:Ecolier) : boolean; creation_groupe_ecoliers : Ecoliers; suppression_groupe_ecoliers : boolen; end Ecoliers; ---------------------------------------------------------------------persistent name TousEcoliers : Ecoliers; ---------------------------------------------------------------------d := creation_ecolier; ---------------------------------------------------------------------b := TousEcoliers.ajout_ecolier(d); Les notions prcdentes sont thoriques. On verra plus loin comment on peut dfinir des objets persistants par nommage avec la dclaration "extent".

mcanisme d'accessibilit : Sur l'exemple prcdent, l'objet TousEcoliers est une collection qui a t nomme ; l'colier d est ajout cette collection : il peut donc tre atteint partir de l'objet TousEcoliers qui est un point d'entre de la base. En effet, il n'est pas pratique de donner des noms tous les objets de la base. Ainsi, en reprenant un exemple de la session prcdente,

on peut voir que l'objet O8, s'il est nomm, permet d'accder aux objets O5, O4, O2, O10, O9, O6, O11, O12, O13, .... Objets complexes Dans une base de donnes objet, on peut considrer deux types d'objets complexes : les objets complexes structurs (ou composites) et les objets complexes non structurs. Les objets complexes structurs sont obtenus par application rcursive de constructeurs de types. Un service d'entreprise peut tre considr comme un objet complexe structur : il possde des attributs simples : nom, numro, effectif et des objets comme employs qui reprsente une collection d'employs (eux-mmes des objets). On peut d'ailleurs distinguer dans le cas d'un objet complexe structur deux types de smantique : la smantique propritaire o les objets composants sont encapsuls dans l'objet complexe(is-part) et la smantique rfrentielle o l'objet complexe contient des rfrences des objets indpendants (is-associated-with). Les objets complexes non structurs sont appels ainsi car le SGBD n'en connat pas directement la structure qui est traite par une application distincte du SGBD. C'est le cas des images ou des documents de type texte (le SGBD ne connat pas la couleur de chaque pixel d'une image, ni le nombre de paragraphes d'un texte). Ces objets ncessitent gnralement un large espace de stockage ; on les appelle des BLOB (Binary Large Object). La manire de stocker un objet complexe n'est pas sans influer sur les performances des requtes. Pour cela, des mthodes de stockage des objets complexes doivent tre prvues (clustering).

3 - Modle ODMG et ODL

L'apparition des premiers SGBDO a montr la ncessit d'une standardisation pour les points suivants :
q q q q

portabilit : une application doit pouvoir travailler sur un systme ou sur un autre sans rencontrer de difficults interoprabilit : une application doit pouvoir travailler sur des systmes distincts simultanment pour le consommateur, possibilit de comparer les produits commerciaux facilits pour les dveloppeurs : pas de standard : peu de dveloppements

ODMG 2.0 est un essai de standardisation pour les SGBDO. qui considre, pour le modle de donnes, deux "briques de base" : les objets et les littraux. Les objets sont dfinis comme prcdemment, chacun d'eux possdant un oid unique, un nom unique optionnel (permettant d'accder l'objet), une dure de vie : objet transitoire ou objet persistant et une structure. Les littraux sont des valeurs qui ne possdent pas d'oid. Les types de littraux peuvent tre de 3 catgories :
q q q

atomique : types de base prdfinis comme entier, rel, boolen, caractre, chane, numration ; structur comme les tuples qui peuvent tre dfinis par l'utilisateur collection d'objets ou de valeurs comme set (ensemble d'lments distincts), bag (ensemble d'lments pas ncessairement distincts), list (liste ordonne d'lments), array (vecteur une dimension possdant un nombre maximal d'lements), Dictionary (couples du type <cl, valeur>).

Dans le modle ODMG, on distingue les interfaces qui sont des types du genre classes abstraites prdfinies et qui ne sont pas instanciables (ne possdent pas d'objets) et les classes qui sont gnralement dfinies par l'utilisateur et sont instanciables (attention, dans ODMG le vocabulaire est assez prcis !). Le schma ci-dessous indique les interfaces de base du modle ODMG

Donnons quelques indications sommaires sur ces interfaces. L'interface Object est une interface de base car elle est la mre de tous les objets. interface Object { boolean same_as(in Object other_objetc); Object copy(); void delete(); }; Comme on le voit tous les objets hritent des mthodes same_as() (comparaison d'objets), copy() (copie d'un objet), delete() (suppression d'un objet). Par exemple pour copier un objet a dans un objet b, on crira b = a.copy(). Les interfaces Date, Timestamp, Time, Interval sont des interfaces prdfinies portant sur des aspects temporels. Elles hritent de l'interface Object. Donnons titre d'exemple (les exemples qui suivent sont volontairement simplifis), l'interface Date : interface Date : Object { enum Weekday{Sunday, Monday, Tuseday, Wednesday, Thursday, Friday, Saturday}; enum Month{January, February, March, April, May, June, July, September, October, November, December};

};

unsigned short unsigned shirt unsigned short boolean boolean

year(); month(); day(); is-equal(in Date other-Date); is-greater(in Date other_Date);

La notation Date : Object indique un lien d'hritage Date --> Object (notation valable seulement pour les interfaces). Le sous-type Collection hrite du type Object et les sous-types Set, List, Bag, Array, Dictionary hritent du type Collection : interface Collection : Object{ exception ElementNotFound(any element); unsigned long cardinality(); boolean is-empty(); boolean contains_elements(in any element); void insert_elements(in any elements); void remove_elements(in any elements) raises(ElementNotFound); iterator create_iterator(in boolena stable); }; interface Set : Collection{ Set create_union(in Set other_set); boolean is_subset_of(in Set other_set); }; interface Bag : Collection{ unsigned long occurrences_of(in any element); Bag create_union(in Bag other_bag); }; interface List : Collection{ exception InvalidIndex{unsigned_long index;}; void remove_element_at(unsigned long position) raises(InvalidIndex); any retrieve_element_at(unsigned long position) raises(InvalidIndex); void replace_element_at(in any element, in unsigned long position) raises(InvalidIndex); void insert_element_after(in any element, unsigned long position) raises(InvalidIndex); void insert_element_first(in any element); void remove_first_element() rasies(InvalidIndex); any retrieve-first_element() rasies(InvalidIndex); List concat(in List other_list); void append(in List other_list); }; interface Array : Collection{ exception InvalidIndex{unsigned long index;}; void remove-element_at(in unsigned long index) raises(InvalidIndex); any retrieve_element_at(in unsigned long index) raises(InvalidIndex); void replace_element_at(in unsigned long index, in any element) raises(InvalidIndex); void resize(in unsigned long new_size); }; struct Association {any key ; any value ;}; interface Dictionary : Collection{ exception KeyNotFound{any key;}; void bind(in any key, in any value); void unbind(in any key) raises(KeyNotFound); any lookup(in any key) raises(KeyNotFound); boolean contains_key(in any key); };

Nous ne commenterons pas en dtail les spcifications prcdentes (simplifies, rappelons-le). On notera cependant le cas des exceptions qui anticipent les erreurs prvisibles avec la dclaration exception et les clauses raises(). L'interface iterator est dfinie ci-dessus : interface Iterator { exception NoMoreElements(); boolean is_stable(); boolean at_end(); void reset(); any get_element() raises(NoMoreElements); void next_position() raises(NoMoreElements); }; Cette interface permet d'itrer un objet d'une collection (linterface Collection possde la mthode create_iterator()) : i = o.create_iterator() est un objet d'itration qui permet un certain nombre d'oprations : i.reset() place i comme premier lment d'une collection, i.next_position() place i la position suivante. On notera que jusqu' prsent, il n'est pas prvu de mthode pour crer un objet (l'opration de cration ne figure pas dans l'interface Object). La mthode new() qui permet de crer un objet figure dans l'interface ObjectFactory : interface ObjectFactory{ Object new(); }. L'utilisateur peut crer des sous-types de ObjectFactory pour crer ses propres objets. Par exemple, l'interface DateFactory permet de crer une date calendaire : interface DateFactory : ObjectFactory{ exception InvalidDate{}; Date calendar_date(in unsigned short year, in unsigned short month, in unsigned short day) raises(InvalidDate); }; Concernant les bases de donnes, deux interfaces sont utilises pour crer une base de donnes et pour effectuer des oprations sur une base de donnes : interface DatabaseFactory{ Database new(); }; interface Database{ exception ElementNotFound{any some_object;}; void open(in string database_name); void close(); void bind(in any some_object, in string object_name); Object unbind(in string name); Object lookup(in string object_name) raises(ElementNotFound); };

Les objets crs par l'utilisateurs utilisent le type class. On prendra pour illustrer ce type (donc appel classe) l'exemple d'un institut universitaire compos d'enseignants et d'tudiants rpartis dans des dpartements. Chaque tudiant est suivi par un enseignant rfrent. Un enseignant peut suivre plusieurs tudiants. La figure ci-dessous exprime cet exemple en utilisant la notation d'ODL :

class Personne { extent personnes key num_SS } { attribute struct Personom {string Pnom, string Pprenom} nom; attribute string num_SS; attribute date date_naisance; attribute enum Genre {M,F} sexe; short age(); }; class Enseignant extends Personne { extent enseignants } { attribute string categorie ; attribute string discipline ; attribute string bureau; attribute string telephone; relationship Departement travaille_dans inverse Departement :: contient; relationship set<Etudiant> supervise inverse Etudiant :: a-pour-rfrent; }; class Etudiant extends Personne {extent etudiants} { attribute integer relationship Enseignant }; class Departement {extent departements } { attribute string relationship set<Enseignant> relationship set<Cours> }; class Cours {extent lescours } { attribute unsigned short attribute string relationship Departement };

classement; a_pour_rfrent inverse Enseignant :: supervise;

nomdep; contient offre

inverse inverse

Enseignant :: travaille_dans; Cours :: est_assur_par;

numero; titre; est_assur_par

inverse Departement :: offre;

class Diplm extends Etudiant {extent diplms} { attribute set<string> };

diplmes;

Plusieurs commentaires sont ncessaires propos de cet exemple :


q

la dclaration relationship exprime les associations entre objets qui peuvent tre de nature quelconque (1:1, 1:N, M:N). Dans la classe, les associations sont mentionnes ainsi que leur inverse (ce qui permet une navigation interobjet) ; ODL ne permet que la reprsentation des associations binaires (entre deux objets). Le fait de notifier l'association inverse permet de respecter l'intgrit rfrentielle. par exemple si un enseignant e est affect un dpartement d : e travaille_dans d, il faut que l'on puisse avoir aussi d contient <......e.......>. le mot cl "extent " permet de dfinir une extension d'une classe c'est dire un ensemble d'objets de cette classe portant un nom (departements, enseignants, lescours,....). De ce fait les objets de cette extension deviennent persistants. Ceci signifie que "enseignants", par exemple, contiendra tous les objets persistants de la classe Enseignant (car cette classe peut aussi possder des objets transitoires). on notera que l'hritage est not ":" pour les interfaces et "extends" pour les classes.

4 - OQL
OQL est le langage de requte propos par ODMG. On se bornera ici donner quelques notions sur ce langage. On prendra comme exemple principal celui de l'institut universitaire donn plus haut. Tout d'abord, on peut considrer que OQL reprend la syntaxe de SQL et notamment la clause SELECT ..... FROM ...... WHERE : Q0 : select e.nom from e in enseignants where e.categorie = "Professeur"; Pour effectuer une requte il faut un point d'entre de la base, c'est dire une collection d'objets persistants. C'est le cas de la collection enseignants. On peut utiliser des formes de requtes plus simples et ne comportant pas de SELECT partir d'un objet nomm; Ainsi si e est un enseignant : Q1 : e; retournera les caractristiques de l'enseignant e. On peut prciser la requte en utilisant le dot "." : Q2 : e.travaille_dans; On obtiendra alors le dpartement dans lequel travaille l'enseignant e. OQL permet d'obtenir des rsultats complexes. Q3 : e.supervise; retournera un set, l'ensemble des tudiants suivi par l'enseignant e.

Si l'on veut tre plus prcis, il faut prciser la structure du rsultat : Q4 : select struct (s.nom, s.date_naissance) from s in e.supervise; donnera le nom et la date de naissance des tudiants suivis par l'enseignant e. OQL permet de dfinir des vues partir de requtes. Pour avoir une vue des majors (classement instantan) de promotion, on pourra dfinir V1 : define majors as select s from s in etudiants where s.classement = 1; Comme dans SQL, OQL propose des fonctions d'agrgations : min, max, count, avg, sum. Q5 : count(s in etudiants); donnera le nombre d'tudiants. On trouvera dans la bibliographie des rfrences pour avoir une vue plus complte de SQL.

Bibliographie
Madjid AYACHE et Andr FLORY M. BOUZEGHOUB, G. GARDARIN, P.VALDURIEZ G. GARDARIN Ph. DESFRAY ELMASRI, NAVATHE

Approche Objet, Concepts et Utilisation Du C++ Merise Objet : Objets Bases de Donnes, Objet et Relationnel Modlisation par objets ; la fin de la programmation Fundamentals of Database Systems

Economica Eyrolles Eyrolles InterEditions Addison Wesley Techniques de l'Ingnieur

C. CHRISMENT, G. PUJOLLE, H3840 - Bases de donnes orientes objet G. ZURFLUH

Webographie
q

ODMG http://www.odmg.org/

ODMG http://www.objs.com/x3h7/odmg.htm

Universit libre de Bruxelles ; ODMG http://cs.ulb.ac.be/cours/elec378/odmgnotes.pdf#search=%22ODMGnotes%22

La proposition de l'ODMG http://www.prism.uvsq.fr/~gardarin/odmg/tsld001.htm

Gamache ; Elments de la norme ODMG-2 BDOO http://www.ift.ulaval.ca/~agamache/IFT19023/H2006/ecrans/ODMG/6_ODMG2.pdf#search=%22ODMG2%22

EPFL : Bases de donnes avances : Objet-Oriented Databases http://lbdwww.epfl.ch/e/teaching/SlidesBDA/support/index.html

EPFL : Un langage de manipulation de donnes orientes objets : OQL http://lbdwww.epfl.ch/f/teaching/courses/poly3/OQL.pdf#search=%22OQL%22

Universita Autonoma de Madrid : Object Oriented Programming Concepts

http://www.ii.uam.es/~castells/docencia/poo/eng/1-concepts.pdf#search=%221.Concepts.ppt%22
q

HEC Suisse : Le langage de requte d'ODMG : OQL http://www.hec.unil.ch/gcampono/Teaching/BDA/Slides/BDA09_OQL.pdf#search=%22OQL%22

ODMG : OQL User Manual http://www.cis.upenn.edu/~cis550/oql.pdf#search=%22OQL%22

Cisco : The OQL Language http://www.cisco.com/univercd/cc/td/doc/product/rtrmgmt/cw2k4mw/mwfm/mwfm201/mwfmtop/33oql.htm

OQL tutorial http://www.cse.buffalo.edu/~mpetropo/notes/O2/OQLTutorial.htm