Historique de développement des bases de données (Sgbd)
Première génération : 1960, modèle réseau ou hiérarchique (Total, IDMS, IDS 2, IMS 2)
Deuxième génération : 1970, modèle relationnel (PostgreSql, Mysql, Oracle, Informix, Sybase, DB2, Ingres)
Troisième génération : 1980, modèle relationnel objet et le modèle objet
Quatrième génération : support d’Internet,
Pourquoi une troisième génération
Apparution de nouvelles applications : CAO, PAO, GL, SIG
Ce qui induit de nouveaux besoins
Coût des mémoires secondaires en baisse
Le modèle relationnel est incapable de répondre aux nouvelles exigences
Limites du modèle relationnel
Le modèle de données est trop simplifié
Difficulté de représenter les entités complexes du monde réel
Ensemble limité de types de base
Limitation de la première forme normale
Incompatibilité de SQL avec les LGP
D’où besoin de développer un nouveau
Besoins des nouvelles applications
Puissance de structuration
Définition de nouveaux types
Intégration d'un LPG dans un SGBD
Méthodes de stockage, d'accès (spatiaux)
Gestion des transactions (longue)
Le modèle orienté objet
Cherche à répondre à ces nouveaux besoins
Né de la convergence de deux domaines :
Les bases de données
Les langages de programmation OO
La programmation procédurale
Style de la programmation à la Pascal
Dichotomie données et traitements
Conception dirigée par les traitements
Données = variables typées
Opérations = procédures paramétrées
Problèmes liés à la
programmation procédurale
Comment partager (réutiliser) les structures de données et les opérations entre les
applications ?
La cohérence globale des données entre les applications est-elle assurée ?
Le sous-programme est-il un élément suffisant de modularité?
Peut-on facilement maintenir et/ou étendre de
La programmation par objets
Regrouper les données et les traitements
Dirigée par les données
SGBD OO
SGBD
Persistance
Méthodes de stockage
Concurrence et fiabilité
Langages de requêtes
Contraintes d’intégrité
LOO
Identité d’objet
Encapsulation
Classe/Type
Polymorphisme
Héritage
Notion d’objet
Un objet est une abstraction d’une entité du monde réel
Un objet est défini par :
Une structure = ensemble d’attributs valués
Un comportement = ensemble d’opérations (méthodes)
Exemple d’objet
Un objet E définissant l’entité employé peut être représenté ainsi :
E (nom=ali, prénom=hassan,
salaire=10000, afficher(), saisir(), augmenterSalaire())
Identité d’objet
Tout objet possède un identifiant unique et invariant (OID) qui est indépendant de sa valeur
Opérateur d'identité d'objets : ==
deux objets o1 et o2 sont identiques
s'ils ont le même OID
Opérateur d’égalité d’objets
Soient o1 et o2 deux objets
o1= o2 ssi tous les attributs de o1 et o2 ont la même valeur, que ce soient des attributs valeur ou des attributs
référence
OID : Modélisation
Situation 1 : Ali a un fils qui s’appelle Hassan, Zineb a un fils qui s’appelle Hassan (le même fils)
Situation 2 : Ali a un fils qui s’appelle Hassan, Zineb a un fils qui s’appelle Hassan (un fils différent)
Encapsulation des objets
Les modèles à objets permettent
d’encapsuler les structures des objets par des opérations (méthodes)
Le principe d’encapsulation cache les structures de données et le code des méthodes en ne laissant visible que les opérations publiques
Intérêt de la notion d’objet
Bonne abstraction des entités du monde réel
Structure + comportement
Sécurité des manipulations
mécanisme d’encapsulation
Partage des informations
Concept d’OID
Modélisation des données complexes
Graphe de composition des objets
Interface d’objet
Ensemble des signatures des
opérations qui sont applicables depuis l’extérieur sur un objet
Les opérations invisibles à l’extérieur de l’objet sont appelés opérations privées
Le concept de CLASSE
Définition « usuelle »
Ensemble des objets possédant même structure et même comportement
Exemple : classe Employé
Les trois aspects d'une classe :
Description de la structure et du comportement des objets
==> Intention de la classe c-à-d un Type
Modèle à partir duquel les objets sont créés ==> mécanisme d'Instanciation
Ensemble des objets créés ==> Extension de la classe
Mécanisme d’instanciation
Un objet est une instance de classe
Un objet est créé à l'aide d'un opérateur new automatiquement associé à la classe
Exemple :
e : Employé;
e := new Employé;
Lien d’instanciation entre e et Employé
Mécanisme d’instanciation
Chaque objet de la classe Employé possède une copie de la structure décrite dans la classe
Tous les objets de la classe Employé se partagent les opérations décrites dans la classe
Exemple de classe
classe Employé publique
Saisie;
Afficher;
AugmenterSalaire (Pourcen : Entier);
privée attributs
Nom : Chaine;
Adr : Chaine;
Age : Entier;
Sal : Reel;
méthodes
methode AugmenterSalaire (Pourcen : Entier)
Organisation des classes
Liens de spécialisation/généralisation
Employé est une généralisation de Ingénieur et Commercial
Ingénieur et Commercial sont des spécialisations de Employé
un Ingénieur Commercial est à la fois Ingénieur et Commercial
Graphe des classes
Le mécanisme d’héritage
Terminologie
Employé est la super-classe de Ingénieur
Commercial est une sous-classe de Employé
Héritage simple par spécialisation
Une sous-classe hérite des propriétés de sa super-classe (attributs + opérations)
Une sous-classe peut avoir des propriétés supplémentaires qui lui sont propres
Autres formes d'héritage
Héritage multiple
Héritage par généralisation
Redéfinition, Surcharge et Polymorphisme
Redéfinition
Spécification d’une méthode existante dans une super-classe au niveau d’une sous-classe, avec une implémentation différente
Surcharge
Possibilité de définir plusieurs codes pour une même opération d’une classe
Polymorphisme
Intérêt des notions de classe et d’héritage
Modularité
une classe = un module
Réutilisation
Attributs et opérations d'une classe héritées dans ses sous classes
Eviter la redondance de code
Construction d'une nouvelle classe de manière incrémentale
Modélisation
Organisation des classes via les liens d’héritage
Les Collections d’objets
Container typé désigné par un nom, contenant des éléments multiples
organisés selon une structure
particulière, auxquels on accède par des opérations spécifiques au type du container
Principales collections
L’ensemble (Set) : définit des
collections non ordonnées sans doubles
Le sac (Bag) : définit des collections non ordonnées avec doubles
La liste (List) : définit des collections ordonnées avec doubles
Le tableau (Array) : définit des
collections ordonnées et indexées
Collection
Collections imbriquées
class Phrase {
List <Array <char>> Sequence; };
class Paragraphe {
Phrase Theme;
List <Phrase> Details;
Phrase Conclusion; };
class Texte {
List <Paragraphe*> Contenu; };
Communication par envoi de messages
Les objets communiquent entre eux par des envois de messages
Message :
le nom de l'objet récepteur
le nom d'une opération connue par l'objet
les arguments (éventuels) de l'opération
Schéma de bases de données à objets
C’est une description d’une base de données à objets particulière incluant les définitions de classes, d’attributs et d’opérations ainsi que les liens entre classes
Exemple de schéma de BOO
Illustration C++ du schéma
Class Etudiant {
Class caricature {
Cercle* tete, oeild, oeilg;
Figure* nez, bouche;
Void sourire();
Void pleurer();
Graphic Dessiner (int echelle); }
Class Cercle {
Point Centre;
Le Manifesto de 1989 (13 règles d’or)
OO (1-8), BD (9-13) : 1. objets complexes 2. identité d'objets
3. encapsulation des objets 4. types ou classes
5. héritage via la hiérarchie de classes ou de types 6. surcharge, redéfinition et liaison dynamique
7. langage de programmation 8. extensibilité
9. persistance
10. gestion de la MS
Le Manifesto (suite)
Aspects Optionnels
héritage multiple
contrôle de types et inférence de types
Répartition
transactions longues et/ou imbriquées
gestion des versions
Aspects ouverts
interfaces avec les LPG
structures de données
types génériques
"tout objet" ou pas
Aspects non traités
vues et données dérivées
Administration de la BD
Définition de la persistance
Un objet est persistant ssi :
Stocké dans la base, sa durée de vie est supérieure au programme qui le crée
Un objet est transient ssi :
Restant en mémoire, sa durée de vie ne dépasse pas celle du programme qui le crée
Gestion de la persistance
En environnement de programmation : constructeur et destructeur
En BDOO, nécessité d’assurer la
persistance des objets sur disque pour pouvoir les retrouver ultérieurement
Gestion de la persistance
Solution :
Donner un nom à chaque objet persistant
Fournir une fonction permettant de faire persister un objet préalablement construit en mémoire
Signature de la fonction peut être : Oid=Persist (<nom>,<ref>)
Ref est la référence en mémoire de l’objet
Oid est l’identifiant attribué à l’objet dans la base
Persistance par héritage
Cache au programmeur les mouvements d’objets entre la base et la mémoire
Profiter de l’héritage pour assurer la persistance automatiquement
Le système offre une classe racine des objets persistants, nommée Pobject
Persistance par héritage
Persistance par héritage
La classe Pobjet intègre des appels aux fonctions persist et unpersist
Tout objet d’une classe qui hérite de Pobjet est persistant
Persistance par référence
Tout objet peut être une racine de
persistance à condition d’être déclaré comme tel
Tout objet pointé par un objet persistant est persistant
Exemple de déclaration
employe * emp=new persistant employe(“toto”)
Persistant int x; //permet de rendre x persistant
Persistance par référence
(catalogue)
Algèbre pour objets complexes
Les algèbres pour objets complexes résultent d’extensions de l’algèbre relationnelle aux objets complexes
Expressions de chemins et de méthodes
Besoin d’appliquer des opérations sur les objets
Besoin de référencer les identifiants
Deux types d’expressions valuables
Expression de chemin
Expression de méthodes
Expression de chemin
C’est une séquence d’attributs de la forme A1.A2…An tel que :
Chaque attribut Ai de la classe Ci référence un objet de la classe Ci+1 dont le suivant est membre, à l’exception du dernier
Exemple : Represente.Tete.centre.x est une expression de chemins
Expression de méthodes
C’est une séquence d’appels de
méthodes de la forme M1.M2…Mn avec d’éventuels paramètres pour certaines méthodes Mi de la forme Mi(P1,P2,
…,Pj)
Groupage et Dégroupage des
Relations
Groupage
Opération qui consiste à transformer une relation en créant pour chaque
valeur des attributs de groupement un ensemble de valeurs des attributs
groupés
Groupage : exemple
A 1
A 7
B 3
B 8
C 2
Pièce Type Numéro
Groupage : exemple
A {1,7}
B {3,8}
C 2
Pièce Type {Numéro}
Dégroupage
Opération qui consiste à transformer une relation à attributs groupés en relation plate, en créant pour cela un tuple pour chaque valeur du groupe en dupliquant les valeurs des autres
attributs
Algèbre d’Encore
Proche de l’algèbre relationnelle
Supporte les types abstraits et les identifiants d’objets
Les opérations accèdent des collections typées d’objets en invoquant l’interface publique du type
Opérations de l’algèbre d’Encore
Sélection d’objets
Image d’une collection
Projetion d’une collection
Groupage et dégroupage d’une collection
Aplatissage d’une collection
Jointure de collections
Algèbre Lora
Opérations de recherche
Opérations ensemblistes
Opérations de mise à jour
Opérations de groupe
Arbres d’opérations algébriques