Dépendances et normalisation (1) Qu’est-ce que la normalisation ? • Normaliser une relation consiste à la représenter sous une forme qui respecte certains critères assurant l’intégrité des données (correspondance au réel) et évitant au concepteur de la base des erreurs graves • La théorie de la normalisation propose des méthodes systématiques visant à assurer la cohérence de cette représentation. Nécessité de la normalisation (1) • Soit la relation R (produit, client, adresse, date, quantité_commandée, montant) produit Cassettes audio CD-ROM Disquettes CD-ROM CD-ROM Disquettes client Dupuis Dupuis Dupuis Martin Dubois Dupont adresse Lille Lille Lille Marseille Paris Lyon date 10/02/01 15/02/01 30/02/01 01/03/01 02/03/01 05/03/01 Cette relation pose des problèmes... quantité_commandée 100 150 200 15 50 300 montant 1000 1500 400 150 500 600 Nécessité de la normalisation (2) produit Cassettes audio CD-ROM Disquettes CD-ROM CD-ROM Disquettes client Dupuis Dupuis Dupuis Martin Dubois Dupont adresse Lille Lille Lille Marseille Paris Lyon date 10/02/01 15/02/01 30/02/01 01/03/01 02/03/01 05/03/01 quantité_commandée 100 150 200 15 50 300 montant 1000 1500 400 150 500 600 • L’adresse du client est répétée autant de fois qu’il y a de commandes redondance des informations Nécessité de la normalisation (3) produit Cassettes audio CD-ROM Disquettes CD-ROM CD-ROM Disquettes client Dupuis Dupuis Dupuis Martin Dubois Dupont adresse Lille Lille Lille Marseille Paris Lyon date 10/02/01 15/02/01 30/02/01 01/03/01 02/03/01 05/03/01 quantité_commandée 100 150 200 15 50 300 montant 1000 1500 400 150 500 600 • Si l’adresse change, il faut modifier la base à plusieurs endroits anomalie de modification Nécessité de la normalisation (4) produit Cassettes audio CD-ROM Disquettes CD-ROM CD-ROM Disquettes client Dupuis Dupuis Dupuis Martin Dubois Dupont adresse Lille Lille Lille Marseille Paris Lyon date 10/02/01 15/02/01 30/02/01 01/03/01 02/03/01 05/03/01 quantité_commandée 100 150 200 15 50 300 • Si on insère la ligne (Disquettes, Dubois, Dijon, 10/03/01, 100, 200), Dubois aura deux adresses anomalie d’insertion montant 1000 1500 400 150 500 600 Nécessité de la normalisation (5) produit Cassettes audio CD-ROM Disquettes CD-ROM CD-ROM Disquettes client Dupuis Dupuis Dupuis Martin Dubois Dupont adresse Lille Lille Lille Marseille Paris Lyon date 10/02/01 15/02/01 30/02/01 01/03/01 02/03/01 05/03/01 quantité_commandée 100 150 200 15 50 300 montant 1000 1500 400 150 500 600 • Si Martin annule sa commande, on perd son nom et son adresse… anomalie de suppression Nécessité de la normalisation (6) • Cette relation n’est donc pas cohérente, alors que la base formée des trois relations : R1 (code_client, nom_client, adresse) R2 (code_produit, nom_produit, prix_unitaire) R3(code_commande, code_client, date, code_produit, quantité) n’aura aucun problème de cohérence. Nécessité de la normalisation (7) code_ client CL001 CL002 CL003 CL004 client Dupuis Martin Dubois Dupont code_ commande C0001 C0002 C0003 C0004 C0005 C0006 adresse code_ produit P0001 P0002 P0003 Lille Marseille Paris Lyon code_ client CL001 CL001 CL001 CL002 CL003 CL004 date 10/02/01 15/02/01 30/02/01 01/03/01 02/03/01 05/03/01 code_ produit P0001 P0002 P0003 P0001 P0003 P0001 produit prix_ unitaire Cassettes audio 10 CD-ROM 10 Disquettes 2 quantité 100 150 200 15 50 300 But de la normalisation Fixer des règles permettant de passer de la première représentation (incohérente) à la deuxième (cohérente). Dépendances fonctionnelles (1) • Une dépendance fonctionnelle (DF) traduit le fait qu’à une valeur d’une donnée, on associe dans une relation, à un instant donné, une valeur au plus d’une autre donnée. Exemple Dans la relation VOL, à une certaine date, un vol ne peut être associé qu’à un seul pilote. Il y a une DF entre (NUMVOL, JDEP) et NUMPIL. On écrit (NUMVOL, JDEP) NUMPIL (NUMVOL, JDEP) est la source de la DF, NUMPIL en est le but. Dépendances fonctionnelles (2) • Remarque Il s’agit bien d’une dépendance, car s’il existe une occurrence où NUMVOL = V0010, JDEP=15/5/2004 et NUMPIL = P0005, alors on ne peut pas introduire une nouvelle occurrence où NUMVOL = V0010, JDEP=15/5/2004 et NUMPIL = P0001 sans supprimer la première (problème de l’unicité de la clé). Clé d’une relation : définition • Lorsque, dans une relation, un attribut ou un groupe d’attributs est source de plusieurs DF ayant respectivement pour buts chacun des autres attributs de la relation, cet attribut ou ce groupe d’attributs est appelé clé de la relation. • Un attribut est appelé attribut clé s’il fait partie d’au moins une clé. • Un attribut est dit attribut non clé s’il ne participe à aucune clé. Clé d’une relation : exemples • Dans la relation PILOTE (numpilote, nom, prenom), on a deux DF de source NUMPILOTE : NUMPILOTE NOM NUMPILOTE PRENOM NUMPILOTE est donc bien la clé de la relation PILOTE et le seul attribut clé. Clé d’une relation : exemples • Dans la relation VOL (numvol, depart, arrivee, numav, numpil, jdep, hdep, jarr, harr), on a sept DF de source (NUMVOL, JDEP) : (NUMVOL, JDEP) DEPART (NUMVOL, JDEP) NUMAV (NUMVOL, JDEP) HDEP (NUMVOL, JDEP) HARR (NUMVOL, JDEP) ARRIVEE (NUMVOL, JDEP) NUMPIL (NUMVOL, JDEP) JARR • Le couple (NUMVOL, JDEP) est donc bien la clé de la relation VOL. Il y a donc deux attributs clé. Dépendance fonctionnelle élémentaire et directe • Soit X un groupe d’attributs et Y un attribut unique n’appartenant pas à X. • La DF X Y est dite élémentaire si aucun sousensemble de X ne suffit pour être source de la DF (X est donc la plus petite quantité d’information permettant de déduire Y). • Une DF de source A et de but B est dite directe s’il n’existe pas d’attribut C tel que A C et C B. Première forme normale : définition • Une relation est dite normalisée ou en première forme normale (1 FN) si un même attribut n’est pas représenté plusieurs fois et si un attribut n’est pas décomposable en d’autres attributs. nom Exemple de relation non normalisée Dupuis Dupont diplôme bac licence bac ingénieur prénom Luc André Jeanne Lucie enfants date naissance 1986 1989 1991 1995 - l’attribut enfants est décomposable en deux attributs, - Les attributs diplôme et enfant sont représentés plusieurs fois pour une même personne. Première forme normale : exemple • La relation VENTE(num_client, num_article, nom_client, nom_article) où (num_client, num_article) est la clé, est en première forme normale. Les dépendances fonctionnelles sont : (num_client, num_article) nom_client (num_client, num_article) nom_article. Deuxième forme normale : définition • Une relation est en deuxième forme normale (2 FN) si elle est en 1 FN et si toutes les DF issues de la clé sont élémentaires. Exemple de relation qui n’est pas en 2 FN VENTE(num_client, num_article, nom_client, nom_article) est en 1 FN, mais pas en 2 FN car des deux DF : (num_client, num_article) nom_client (num_client, num_article) nom_article on peut extraire les DF élémentaires : num_client nom_client num_article nom_article. Deuxième forme normale : exemple • La relation REPRESENTANT(num_client, nom_client, num_représentant, nom_représentant) où num_client est la clé, est en 2 FN car les trois DF qui en découlent : num_client nom_client num_client num_représentant num_client nom_représentant sont toutes les trois élémentaires. Troisième forme normale : définition • Une relation est en troisième forme normale (3 FN) si elle est en deuxième forme normale (2 FN) et si toutes les DF issues de la clé sont directes. • Alors - aucune DF n’est issue d’un sous-ensemble de la clé. - aucune DF n’est issue d’un attribut non clé vers un autre attribut non clé. Troisième forme normale : exemples • Les relations CLIENT(num_client, nom_client, adresse) et VENTE(num_commande, num_article, quantité) sont en 3 FN. On a les DF élémentaires et directes : num_client nom_client num_client adresse num_commande, num_article quantité. SGBDR : Points Forts – Simplicité des concepts et du schéma - Bon support théorique, la théorie de la normalisation, algèbre relationnelle - Haut degré d’indépendance - Langages de manipulation de haut niveau, SQL2 (langage déclaratif) - Amélioration de l’intégrité et de la confidentialité - Optimisation des requêtes d’accès à la BD. - Technologie très répandue (3/4 applications) – Adapté aux applications traditionnelles Pourquoi étendre le relationnel ? • Nouvelles applications – – – – – Système d’information géographique (SIG) MultiMedia Bioinformatique Web Workflow • Nouveaux besoins – Objets complexes et structurés – Nouveaux types de données (Vidéo, XML, etc.) – Volume de données important SGBDR : points faibles • Structure de données trop simple – Pas d’attribut complexe ni multivalué » Entités réelles éclatées, jointures – Un seul type de lien (clé étrangère) • Peu compatible avec les langages de programmation • Données alphanumériques uniquement – Images, sons, vidéos, … • Performances problématiques en cas de jointure SGBD : Evolution • 1960 : SGBD hiérarchique – Modèle réseau (CODASYL) – Langage navigationnel • 1970 : SGBD Relationnel – Structure physique cachée à l’utilisateur – Modèle simple – Théorie des ensembles – Langage déclaratif SGBD : Evolution • 1980 Entité Association – Représentation sémantique riche d’un domaine – Outils de modélisation • 1986 SGBDOO – Représentation riche du monde réel (Données + Traitement) – Réutilisation, évolution et gestion faciles • 1993 Standard ODMG pour les SGBD OO • 1999 Standard SQL3 pour les SGBD Relationnel-Objet SGBD : Evolution • Applications plus complexes • Couts de développement important En faire plus au SGBD APPLICATION APPLICATION SGBD SGBD BD BD ODMG • Groupe de normalisation des SGBD OO • Norme publié en 2001 • A regroupé de nombreux vendeurs de SGBD OO – Poet, Ardent, Objectivity, Versant, GemStone, O2, etc. – Constructeurs, utilisateurs, chercheurs etc. • www.odmg.org Approche Orientée Objet • 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 • Objectif : permettre aux programmeurs d’application une meilleure productivité • Maintenance facile • Réutilisation • Extensibilité • Concepts essentiels – Objets encapsulés • Interface visible : opérations (méthodes) • Implémentation cachée : structure et code – Héritage • Langages de programmation OO – Eiffel , Smalltalk, C++, java, C# SGBD OO = SGBD + LPOO LP OO SGBD SGBD OO • Représentation du réel •Persistance • Fiabilité • Sécurité • Langage de requête • Indépendance logique/physique • Partage des données • Concurrence •Développement •Structure complexe • Identité • Encapsulation • Classe • Héritage • Redéfinition • Bibliothèque de classe Intérêt d’un SGBD OO / LP OO Un SGBD est meilleur qu’un langage de programmation car : – – – – – Les données sont persistantes Les données sont intègres Le modèle logique et indépendant du modèle physique Langage de manipulation de données déclaratif et optimisé Confidentialité, fiabilité, concurrence, gestion de transactions, etc. Intérêt d’un SGBD OO / SGBDR Un SGBD OO est meilleur qu’un SGBD Relationnel : • Manipulation d’objets à structure complexe • Compatibilité avec les langages de programmation et la modélisation OO • Nouveaux types de données (image, son, XML, etc.) • Performances • Gestion des versions, des historiques, transactions longues Différences entre SGBDO • Modèles de données différents • Langage sous-jacent différent (C++, Lisp, etc.) • Interprété ou compilé (Perl, C++) • Couplage fort ou faible avec les langages de programmation • Bibliothèques de classes + ou – complète • Performances SGBD OO : caractéristiques Des SGBD : – Persistance – Concurrence – Système de requête Des langages OO : – Structure d’objet complexe – Gestion des types ou classes – Encapsulation Le modèle Objet • Les modèles à objets permettent de modéliser directement les entités du monde réel avec un état et un comportement. • Objet : abstraction informatique d’une entité du monde réel caractérisée par une identité, un état et un comportement. • Attribut : caractéristique d’un objet désignée par un nom permettant de mémoriser une ou plusieurs valeurs, un ou plusieurs identifiants d’objets. • Identifiant d’objet (Oid) : référence unique et invariante attribuée à un objet lors de sa création Le Modèle Objet • Encapsulation des objets : Les modèles à objets permettent d’encapsuler les structures des objets par des opérations, appelées méthodes ou fonctions membres. • Une opération est la modélisation d’une action applicable sur un objet, caractérisée par un en-tête appelé signature, définissant son nom, ses paramètres d’appel et ses paramètres de retour. • Classe : type associé à un ensemble d’objets, permet de spécifier un ensemble de propriétés d’objets (attributs et opérations) et de créer des objets possédant ces propriétés. Le Modèle Objet • Généralisation-Spécialisation : lien hiérarchique entre deux classes, spécifiant que les objets de la classe supérieure (inférieure) sont plus généraux (spécifiques) que ceux de la classe inférieure (supérieure). • Héritage : transmission automatique des propriétés d’une classe de base vers une sous-classe. • 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. Le Modèle Objet • Surcharge : possibilité de définir plusieurs codes pour une même opération d’une classe, le code approprié étant sélectionné selon le type des paramètres fournis lors d’un appel. • Polymorphisme : possibilité pour une opération d’avoir différentes signatures avec un code spécifique attaché à chaque signature. • Agrégation : association entre deux classes exprimant que les objets de la classe cible sont des composants de ceux de la classe source. Objets à structure Complexe • Objectif : représentation directe des entités du monde réel • Monde réel : Personne – Nom – Prénoms – Adresses (Rue, N°, Code postal, Ville) – Numéros de téléphone (N°, type) – Enfants (prénoms, sexe, date de naissance) Représentation Conceptuelle nom Personne Prénoms liste 1,n liste 0,n Adresse Rue N° CP liste 0,n N° téléphone Ville N° type Enfant Date nais sexe Liste 1,n Prénoms En relationnel 5 relations : • • • • • Personne (NP, nom,adr_ville, adr_N°, adr_ville, adr_CP) Personne_prénom(n°P, n°prenom, prénom) Personne_enfant (n°P,n°enfant,datenais, sexe) Personne_Enfant_Prenom (n°P,n°Enf,n°prénom, prénom) Telephone (n°p, n°tel, type) En objet Une seule classe Class Personne {attribute Nom : string attribute Prénoms : LIST string attribute adresse : struct adr { rue : string ; N° : string , Ville : string ; CP : int ;}, Attribute Enfants : list struct Enfant {prénoms : list string ; date_naissance : date ; sexe : ENUM {‘M’,’F’};} Attribute téléphones list struct téléphone { N° long ; type string ;} } Structure complexe • SGBD OO permettent de définir des structures complexes qui peuvent être utilisés pour : – Définir la structure des objets du monde réel – Définir de nouveaux types • Les structures sont définies en utilisant les constructeurs – Struct (attributs complexes) – Collection (attributs multi-valués) • SET, ARRAY, LIST, etc. Eléments de la structure Structure complexe Collections Set List Date Array Bag Structuré Atomique Long Float String Time User Defined Structure complexe • STRUCT • Définie une structure de donné complexe • Exemples : – Struct Adresse {string rue; long N°; long CP} – Struct N°telephone { Code_pays : Unsigned short ; Code_région : Unsigned short ; Code_Personnel : Unsigned short ;} – Attribute Telephone_domicile : N°telephone; – Attribute Telephone_bureau : N°telephone; Structure complexe • Collections • Attributs multi-valués – – – – SET : ensemble d’éléments non ordonnés LIST : ensemble d’éléments ordonnés BAG : ensemble d’éléments non ordonnés et dupliqués ARRAY : ensemble d’éléments ordonnés avec position • Exemples : Class Personne { attribute nom : string ; attribute email : set string; attribute adresses : list T-adresse; } Types définis par l’utilisateur • Constructeurs de structures complexes : – Définir la structure des objets – Définir les type de données utilisateurs (Typedef) : type T-Adresse , Image, son, polygone, ligne • Comme les classes, les types de données utilisateur ont: – Une structure complexe – Un ensemble d’opérations (méthodes) • Exemples Struct T-adresse {rue : String ; N° : String ; Ville : String ; CP : String } Typedef list T-adresses Structure complexe – Impact sur le SGBD ? – Comment accéder aux valeurs des données ? Références Navigation Initialisation, mise à jour Opérations algébriques – Taille des variables, stockage des objets complexes Identité d’objet (OID) • Identifie l’objet indépendamment de ces valeurs • Produit par le système lors de sa création • Ne change pas durant son cycle de vie – Indépendamment de son changement de valeur – Indépendamment de son adresse physique • Permet une duplication des valeurs des attributs • Intérêts : – Représentation directe du monde réel – Représenter les doubles – Moyen efficace pour référencer un objet Identité, clés, noms, … • SGBD relationnels : Clés – – • Danger lors des : • Mises à jour de la clé • Changements d’attributs clé Identité dépendante de la valeur Langages de programmation : Noms de variables – – Attention • • pas de test d’identité X ==Y? Temporaire identité dépendante des accès Identité d’objet : test d’égalité • Trois tests d’égalité – Test d’identité == • Même oid – Test d’égalité en surface = • Même valeur – Test d’égalité en profondeur =* • Feuilles composantes de de même valeur Identité d’objet : test d’égalité Identité : Impact sur le SGBD • Implémentation – Adresse disque ou MC – Un numéro logique • Exemple N° de classe + N° de séquence • LMD – Différents tests – Opérations ensemblistes selon : • Les Valeurs • Les Oids Lien de composition • Objectif : Représenter d’une relation de composition du monde réel Composé composant Lien de composition Voiture matricule modèle type moteur Moteur : attribut de référence = OID de l’objet Moteur Moteur N° type Nb Cylindre Lien de composition Contraintes de composition • Objet composant : partagé / non partagé • Objet composant : dépendant / non dépendant – Destruction composite Destruction composant • Cardinalités – Minimale, maximale – Inverses ( partagé /dépendant) – Lien inverse Liens inverses gérés par le SGBD OO • Certains SGBD OO gèrent les liens de composition inverses – Maj. Du lien inverse par le SGBD OO • Class Voiture {Modèle : string, … Moteur : Moteur INVERSE Moteur.ModèlesV} • Class Moteur {N° : string, … ModèlesV: Set Voiture INVERSE Voiture.Moteur} Intégrité référentielle • Les SGBD OO vérifient les affectations – Attribut-référence = x – UPDATE Voiture WHERE modèle = ‘207’ SET moteur = X – X doit être un (des) oid de la classe référencé • Suppression d’un objet composant – Les SGBD OO devrait mettre NULL dans les attributs référence des objets composites Impact des liens de composition sur les SGBD • Assurer l’intégrité référentielle • Stockage des objets composants par rapport à leurs objets composés • Unité de verrouillage • Transactions emboités Lien composition / Association BDOO Entité Association Composition Voiture Moteur Association générique Etudiant - Inscription - Cours Orienté Non orienté Binaire N-aire Sans attributs Avec attributs Cardinalités quelconques Cardinalités quelconques Lien composition / Association • Certains SGBD permettent les attributs référence en attributs composants • C’est un lien attribut – classe d’objet • RELATIONSHIP non-attr-ref : [SET | LIST] nom-classe [INVERSE non-classe.nom-att-ref2] Représentation des associations • Associations binaires sans attributs : Lien(s) de composition dans le sens des reqûetes • Association n-aire et/ou avec attributs : Une classe d’objets avec un lien de composition par rôle (dans le sens des reqûetes) • Exemple : inscription (avec une date) d’un étudiant à un cours Hiérarchie d’héritage • Objectif des LP OO : réutilisation (réduire le coût de développement) Héritage des propriétés Redéfinition des propriétés pour les adapter • Objectif des BD OO : représentations multiples du monde objet – Annie est : • • • • Membre du personnel de l’hôpital Médecin Chirurgien Patient • Lien « is-a » ou lien de généralisation/Spécialisation Héritage (exemple) Propriétés des liens is-a • Inclusion des populations – Tout objet d’une sous-classe est aussi objet de sa surclasse – Exemple : un objet de la classe Médecin peut aussi être un objet de la classe Personnel • Héritage des propriétés – La sous-classe hérite des : • Attributs valeur • Attributs référence • Et des méthodes – Exemple : infirmier a pour attributs AVS, nom, adresse, salaire mensuel, service et horaire Propriétés des liens is-a • Substituabilité – On peut toujours employer un objet spécifique à la place de l’objet générique – Exemple : Ajouter au service de réanimation un médecin. • Sous-typage : Une sous-classe peut avoir des : – Propriétés supplémentaires • Infirmier à l’attribut horaire – Propriétés redéfinies • Domaine d’un attribut hérité plus spécifique dans la sous-classe • Code d’une méthode hérité adaptée à la sous classe Héritage (Exemple) Classe Employé Nom Adr Age Sal Saisie Afficher AugSal(Pourcen) Code des opés - Saisie - Afficher - AugSal Lien d'héritage Saisie Afficher AugSal(Pourcen) MajEcole (Eco) NomEcole : Chaine Nom Adr Age Sal Code des opés - Saisie - Afficher - AugSal Ecole Code des opés - MajEcole - NomEcole Classe Ingénieur Redéfinition d’attribut • Exemple d’attribut complexe complété Restrictions à la hiérarchie • Dynamique? – Un objet peut-il changer de classe? • Un infirmier devient médecin – Implémentation plus complexe (instances de formats différents) Les SGBD OO offrent en général des hiérarchies statiques • Instanciations multiples ? • Un objet du monde réel peut-il être décrit par plusieurs instances de classes différentes • Exemple : Annie est rhumatologue et Chirurgien • Implémentation plus complexe Non : Sous-classe commune Héritage multiple Employé Ingénieur Commercial Ingénieur Commercial La classe Ingénieur Commercial hérite des propriétés de même nom de ses deux superclasses Comportement • Le comportement des objets est définis par des méthodes ou opérations • Méthodes sont spécifiées dans les classes • Stockées dans les SGBDOO • Elles possèdent une signature et une implémentation • Elles permettent d’accéder aux propriétés de l’objet (principe d’encapsulation) Méthodes • Signature – Nom – Type de résultat (void si pas de résultat) – Paramètres (s’ils existent) : nom et type • Implémentation – Instructions LPOO (maj. Objets) – Instructions SGBDOO (reqûetes SQL) – Appels à d’autres objets Encapsulation • Les attributs d’un objet sont privés et seules les méthodes peuvent mettre à jour leurs valeurs. • Indépendance des données – La structure des données est cachée aux utilisateurs • Avantages – Implémentation de la méthode peut changer sans affecter les utilisateurs – La structure des données peut changer sans affecter les utilisateurs – Peu de code à réécrire Encapsulation • Exemple Autorisé Saisie Afficher AugmenterSal (Pourcen) Nom Freddy Adr Poitiers Age 30 Sal 15000 Code des opérations - Saisie - Afficher - AugmenterSal Interdit Encapsulation Objet Méthode Méthode Interface Messages Méthode Données Méthode Méthode Exemple d’encapsulation CLASS Personnel • Interface visible INT salaire() signatures VOID newService (servoid : Service) VOID afficher() • Implémentation invisible ATTRIBUTE NSS : STRING ; ATTRIBUTE nom : STRING ; ATTRIBUTE adresse : STRING ; ATTRIBUTE sal_mensuel : INT ; RELATIONSHIP service : Service INVERSE Service.Personnes Exemple d’encapsulation (2) Implémentaton invisible (suite) : code des méthodes salaire () { return sal_ mensuel } newService (servoid: Service) { self.service := servoid } afficher () { PRINT(‘NSS:', self.AVS) ; PRINT('nom:', self.nom) ; PRINT('adresse:', self.adresse) ; PRINT('salaire mensuel:', self.sal_mensuel) ; } Encapsulation : seul l'objet lui-même (ie. les instructions de ses méthodes) peut accéder à ses attributs Redéfinition de méthodes spécification d’une méthode existante dans une superclasse au niveau d’une sous-classe, avec une implémentation différente Nom Personne Age (0 < Age < 120 Age Age Etudiant Enseignant 18 < Age < 60 22 < Age < 65 Salaire mensuel de tout le personnel • Sans redéfinition SELECT p.salaire() FROM p IN lespersonnes WHERE NOT (p IN lesmédecins) SELECT p.medSalaire() FROM p IN lesmédecins WHERE NOT (p IN leschirurgiens) SELECT p.chirurSalaire() FROM p IN leschirurgiens • Avec redéfinition : même nom de méthode, codes différents SELECT p.salaire() FROM p IN lespersonnes Polymorphisme • Variable polymorphe : Variable contenant des valeurs de types différents • Opération polymorphe : Opération dont les arguments peuvent avoir plus d'un type i := 3 + 2; -- i de type entier c := "Bon" + "jour"; -- c de type chaîne écrire (i); écrire (c); Polymorphisme par surcharge • Contexte : Deux classes indépendantes, au sens où elles n'ont pas de lien d'héritage • Définition : Le même nom est utilisé pour dénoter des opérations ayant des significations différentes • Exemple : Classe Employé avec opération Afficher Classe Société avec opération Afficher e et s deux instances respectives de Employé et Société L'opération Afficher est polymorphe car le comportement du message Afficher envoyé à l'objet e est différent du comportement du message Afficher envoyé à l'objet s Polymorphisme d’héritage • Contexte : Deux classes associées par un lien d'héritage • Définition : Tout objet d'une classe C est utilisable dans le contexte d'une superclasse de C • Exemple : - classe Employé avec opération Afficher - classe Ingénieur inherit Employé - l'opération Afficher de Employé est applicable à tout objet de Ingénieur Persistance • La persistance des objets : tout objet doit pouvoir persister sur disque au-delà du programme qui le créé. Un objet peut être persistant ou transient. Objet persistant : objet stocké dans la base de données et dont la durée de vie est supérieure au programme qui le créé. Objet transient : objet restant en mémoire, dont la durée de vie ne dépasse pas celle du programme qui le créé. Persistance et populations • Objectifs : – BD : gérer des ensembles d’objets permanents : populations – LP OO : permettre aux utilisateurs de manipuler de la même manière des objets permanents et temporaires • SGBD classique – Relation : record type, type d’entité • Définition de la structure des occurrences potentielles permanentes par définition • SGBDO fournit des outils aux utilisateurs pour gérer : – Les populations des classes – La persistance des objets Exemple de gestion de population • Via les collections (SET, LIST, …) • L’utilisateur crée une collection et y insère les objets • Exemple : les médecins de l’hôpital M : Médecin ; Lesmédecins : SET Médecin ; déclaration m:=Médecin(…,nom : 4meziane’,...) lesmédecins.insert_élément(m) ; insertion SELECT x.nom FROM x IN les medecins WHERE x.nom = ‘MEZIANE’ Utilisation CONCLUSION • Meilleure représentation du monde réel • Réutilisation • Efficacité pour les nouvelles applications Mais • Méthodologie de conception incomplètes • Compétition entre standards • Absence de théorie • Migration difficiles des SGBDR vers les SGBDOO • Solutions propriétaires