BASES DE DONNÉES Objet - Cedric
Transcription
BASES DE DONNÉES Objet - Cedric
Vertigo/CNAM, Paris 1 Valeur C, 19 722, BD avancées, Paris BASES DE DONNÉES Orienté-objet Slide 1 M. Scholl [email protected] 2002/2003 Vertigo/CNAM, Paris 2 Plan 1. Introduction (a) Les besoins actuels en gestion de données avancée (b) Les limites de la technologie relationnelle 2. Les Bases de Données Objet (a) Modèles Valeur Slide 2 Modèle Relationnel étendu aux types abstraits Modèle N1NF (b) Un modèle objet identité d’objet Structure d’objet composition méthodes héritage Introduction Problématique A) Applications classiques (Gestion) Les données sont simples : Slide 3 1. type alphanumérique, 2. tables relationnelles Si les traitements sont 1. simples et peu intégrés : interfaces conviviales 2. complexes : immersion SQL dans un Langage de Programmation Vertigo/CNAM, Paris B) Besoins actuels 1. information multi-media Slide 4 2. de structure très riche 3. traitements complexes et très évolutifs B) Autres besoins actuels 1. données hétérogènes Slide 5 2. de nombreuses sources de données 3. intégration souple et rapide d’une nouvelle source 4. données semi-structurées 3 Vertigo/CNAM, Paris 4 Les SGBD relationnels face à ces besoins 1. simples, langage déclaratif, standard SQL Slide 6 2. MAIS mauvaises performances, parce que pauvreté de représentation, mauvaise intégration SQL/L.P. : 2 paradigmes Pauvreté de représentation relationnelle Illustration sur un exemple PARENTS Slide 7 ( NOM, EPOUX, toto toto toto toto toto jean jean lulu lulu lulu noemie pussy marie marie ENFANT) jules eve jeremie julien medor lucien valentin Vertigo/CNAM, Paris 5 PROBLEMES 1. Duplication (1e forme normale): pour chaque enfant du même couple, un nuplet 2. problèmes de type Slide 8 (a) comment vérifier que les chaines de caractère sont des noms de personne? medor et pussy ne sont pas des personnes (b) il faut savoir qu’une personne est représentée par son nom (clé étrangère) (c) en fait un époux n’est pas n’importe quelle personne, c’est un parent Les modèles objet sont une solution à ces problèmes Bases de Données Objet Vertigo/CNAM, Paris 6 Quelques systèmes commerciaux Objecstore (Object Design) Slide 9 Versant Poet etc. Modèles par valeurs/objet MODELES par VALEUR : relationnel, N1NF, relationnel étendu aux Types abstraits (SQL2) Slide 10 Un objet est représenté par sa valeur identifié par une partie de sa valeur (clé) Vertigo/CNAM, Paris 7 MODELES OBJET 1. un objet Slide 11 a une valeur est identifié par un oid indépendant de sa valeur 2. puissance de structuration supérieure à celle des modèles valeur Historique 1. 1973 Modèle relationnel 2. 1981 Modèle N1NF (non sous 1e forme normale, Nested, NF2) Langages de requêtes (Algèbres + calculs) Slide 12 3. Extension des SGBD relationnels (Types abstraits) POSTGRES (Ingres) 1989, etc. normes SQL2-SQL3 en cours autres extensions spécialisées (e.g. Oracle Text, Oracle spatial data option, Informix spatial datablade) sont à comparer à cette approche Vertigo/CNAM, Paris subsectionModèle relationnel étendu aux TAD Pourquoi l’abstraction des données? 1. Méthodologie de spécification de logiciels de bonne qualité Slide 13 2. Regrouper dans un même module données et traitements 3. séparer spec de implantation 4. permettre plusieurs implem pour une même spec Dans la suite, un TA est défini par 1. une structure 2. un ensemble de fonctions Slide 14 Une fonction est définie par sa signature : F : T1, T2, ..., Tn T F : nom de la fonction, Ti : type des arguments, T : type du résultat Un type est soit atomique, soit abstrait. On peut ne pas "voir" la structure à l’extérieur; On ne connait pas formellement la sémantique des fonctions en particulier pas d’axiomes 8 Vertigo/CNAM, Paris 9 Relationnel étendu aux TAD Slide 15 1. On rajoute aux types atomiques (entier, char, etc...): des TAD (biblio de fct disponibles avec le SGBD) 2. les fct des TAD sont utilisées dans les clauses SELECT et WHERE Relationnel étendu aux TAD: un exemple TYPE Slide 16 ZONE Creer Liste(POINT) -> ZONE Surface ZONE -> Reel Adjacent ZONE, ZONE -> Bool Extent ZONE, Reel -> ZONE Distance ZONE,POINT -> Reel Intersect ZONE,ZONE -> Bool Intersection ZONE,ZONE -> ZONE TYPE LIGNE .... TYPE POINT .... Vertigo/CNAM, Paris Schéma de la base COMMUNES (Nom, nbhab, solde-pop,aire,geo) AIRES (Id, Type, nbcommunes,nbhab,geo) Slide 17 Type a pour domaine {periurbain,route, echangeur,autoroute} Les attributs geo ont pour domaine (type) : ZONE 1) Afficher les communes peri-urbaines et donner leur surface Select COMMUNES.geo, surface (COMMUNES.geo) From COMMUNES,AIRES Where COMMUNES.aire= AIRES.Id And type = ‘‘periurbain’’ Slide 18 2)Solde de population des communes adjacentes a Cap d’Agde Select C1.solde-pop From COMMUNES C1, COMMUNES C2 Where C2.nom=’’Cap d’Agde’’ And C1.geo adjacent C2.geo 10 Vertigo/CNAM, Paris 11 3) Evolution de la population dans les communes situées à moins de 15km d’1 commune dont le nb d’habitants > 100 000 Slide 19 Select C1.solde-pop From COMMUNES C1, COMMUNES C2 Where C2.nbhab > 100 000 And C1.geo Intersect Extent(C2.geo) Modèle N1NF Une autre notation Les relations N1NF sont aussi appelées relations imbriquées (nested relations) Slide 20 Le schéma R(A1: D1,..., An: Dn) peut être noté : R= [A1:D1,..., An:Dn ] , [ ] est le constructeur "nuplet" est le constructeur ensemble (également noté : *). Vertigo/CNAM, Paris 12 Génération de valeurs complexes On part de valeurs atomiques (de type ou domaine entier, chaine de caractères, etc...) Slide 21 en utilisant les constructeurs (nuplet, ensemble, liste, tableau, bag, etc.), on génère de nouvelles valeurs de structure de plus en plus riche La structure peut être représentée par un arbre dont les noeuds internes correspondent aux constructeurs et les feuilles aux attributs atomiques Dans le modèle relationnel, on ne peut que 1. appliquer le constructeur nuplet à des valeurs atomiques (on obtient un nuplet) 2. appliquer le constructeur ensemble : une relation est un ensemble de nuplets Slide 22 Arbre de profondeur 2 : La racine est le constructeur ensemble, Elle a pour fils le constructeur nuplet, les feuilles sont les attributs (voir exemple) Vertigo/CNAM, Paris 13 Relation non sous 1e forme normale Un attribut peut avoir pour valeur : 1. une valeur atomique Slide 23 2. un ensemble de valeurs atomiques 3. un ensemble de tuples (une relation N1NF)) La richesse (représentation hiérarchisée) vient de l’alternance des constructeurs nuplet et ensemble, sans limite de profondeur L’exemple des Parents PARENTS Slide 24 (NOM, EPOUX, ENFANTS) toto lulu jules eve jeremie toto noemie julien toto pussy medor jean marie lucien valentin Vertigo/CNAM, Paris 14 Le NEST R Slide 25 (A, a a b b B b c a c ) {[A:char, B: char]} S = NestA (R) S {[A:char, C: {char}]} (A, C) a, {b,c} b, {a,c} L’exemple des acteurs R(FILM P.Rose Manhattan Slide 26 ACTEURS Allen Farrow MET-EN-SC Allen Keaton Allen Allen Broadway Police Terminator Schwar Pialat Vertigo/CNAM, Paris S(FILM P.Rose Manhattan Slide 27 15 ACTEURS) Allen Farrow Keaton Allen Broadway Police Terminator Schwarz UNNEST de S(FILM, ACTEURS) T (FILM, P.Rose P.Rose Manhattan Manhattan Terminator Slide 28 ACTEUR) Allen Farrow Keaton Allen Schwar NEST de T par acteurs : U = Nest (T) U (ACTEUR, Allen Farrow Keaton Schwarz FILMS) P.Rose Manhattan P.Rose Manhattan Terminator Vertigo/CNAM, Paris 16 Bases de Données objet Bibliographie sommaire Anne Doucet, Veronique Benzaken : Les SGBD Objets Slide 29 Claude Delobel, C. Lécluse, P. Richard, Bases de Données: des systèmes relationnels aux systèmes à objets, Interéditions, IIA, 1991 Michel Adiba, C. Collet, Le SGBD O2, Hermes Vertigo/CNAM, Paris 17 Objectifs des SGBD Objet 1. manipuler des données de structure riche Slide 30 2. améliorer le cycle de production de logiciels et les applications 3. être ouverts à d’autres outils: BD relationnelles, Web, Java, Outils d’interface, etc. Principes des SGBD Objet 1. un modèle riche de données utilisant des valeurs complexes, l’identité d’objet et l’héritage Slide 31 2. une bonne intégration grâce à la programmation orienté-objet Un SGBD objet (SGBDO) a deux langages, un langage de requêtes et un langage de programmation. Vertigo/CNAM, Paris 18 ODMG Objectif: développer des standards et renforcer la portabilité des applications grâce aux SGBDO. Les interfaces/architectures standardisées sont les suivantes: 1. un langage de définition des objets ODL Slide 32 2. un langage de requêtes : OQL 3. une possibilité d’import/export (langage binding) avec des langages comme C++, Java 4. des liens institutionnels avec OMG (IDL, CORBA) et ANSI SQL3 O2 est compatible ODMG Objet Un objet a un identificateur et une valeur ou état . La valeur peut être complexe et est indépendante de l’identificateur. On peut faire des opérations sur les objets. Définition: Slide 33 On définit un ensemble d’attributs , un ensemble de valeurs atomiques: , où les sont des domaines de valeurs atomiques (entiers, chaine de caractères) et un ensemble d’identificateurs d’objets . Un objet est une paire ( ), où appartient à et la valeur est définie comme suit: 1) Les éléments de sont des valeurs. des attributs, alors le n-uplet 3) Si des valeurs et sont ainsi que sont des valeurs. 4) l’ensemble 2) Les éléments de sont des valeurs. Vertigo/CNAM, Paris 19 Exemples d’Objets Slide 34 (i0, [époux: i1, ss_nom: [ss:2234,nom:‘pascal’], enfants: {i4}]) (i1, [époux: i0, ss_nom: [ss:4567,nom:‘yasmine’], enfants: {i4,i5}]) (i6, [nom: ‘turbulence’, employés: {i1,i2}] Les valeurs des objets sont construites à partir de valeurs atomiques et d’identificateurs d’autres objets en utilisant les constructeurs ensemble et tuple (n-uplet) dans n’importe quel ordre. Identité et Égalité Slide 35 Identité: deux objets avec le même identificateur sont identiques: , . La variable désigne le même objet que la variable . Égalité: deux objets avec la même valeur sont égaux (mais pas identiques): égal à et est égal à . est Vertigo/CNAM, Paris 20 est égal à l’objet ? Est-ce que l’objet Égalité en Profondeur Deux objets égaux sont égaux en profondeur. Deux objets qui ont les mêmes attributs sont égaux en profondeur si les valeurs d’attributs sont: soit égales, Slide 36 soit des identificateurs d’objets égaux en profondeur. o1: o2: o3: o4: L’objet o1 n’est pas égal à o2, mais o1 est égal en profondeur à o2. Retour sur l’objet et son identité Dans le monde réel les entités ont une identité indépendante de leur valeur (état, propriétés): Toto avait des cheveux noirs, maintenant il est chauve. Slide 37 Importantes conséquences possibilité de référencer les objets. permet une représentation élégante du partage permet des cycles dans les données Vertigo/CNAM, Paris 21 Référence Slide 38 (i0, [époux: i1, ss_nom: [ss:2234,nom:‘pascal’], enfants:{i4}]) L’objet i0 réfère l’objet i1 l’ensemble d’objets {i4} Partage d’objets Jean a une fille Marie, Suzanne a une fille Marie. Deux cas sont possibles 1) O1: (i1, [nom: jean, fille : i3]} O2: (i2, [nom: suzanne, fille : i3]) O3: (i3, [nom: marie, fille : nil]) Slide 39 O1 et O2 partagent O3 (Marie est la fille de Jean et Suzanne). 1) O1: O2: O3: O4: (i1, (i2, (i3, (i4, [nom: [nom: [nom: [nom: jean, fille : i3]} suzanne, fille : i4]) marie, fille : nil]) marie, fille : nil]) O1 et O2 ont deux filles différentes mais qui ont même nom: O3 et O4 sont deux objets différents de même valeur. Vertigo/CNAM, Paris 22 Identité - Partage Identité d’objets - Avantages: l’identité d’objets est un outil logique puissant pour exprimer (objet) ou non (valeur) le partage gestion des identificateurs invisibles (faite par le système) pas de redondance et mises à jour plus simples Slide 40 Simulation en relationnel: clé = identificateur gestion des id à la charge du programmeur contraintes d’intégrité et formes normales EMPLOYE (No, Nom, NOss,Departement) DEPARTEMENT (No, Patron, nbemployes) Définition d’un Objet Un objet est défini par sa valeur et son identificateur Slide 41 son type: – sa structure – les opérations (méthodes) qu’on peut faire sur des objets de même structure On regarde pour l’instant la partie structure du type. Vertigo/CNAM, Paris 23 Types Complexes On se donne un ensemble de types atomiques (entier, réel, chaîne,...), un ensemble noms de types et un ensemble de noms d’attributs. de Un type atomique (INT, STRING) est un type Slide 42 Un élément de est un type sont des types, et Si est un type Si est un type, alors sont des attributs, alors est un type. Schéma de la base Slide 43 Ensemble des types des objets. A chaque type construit à partir d’autres types, on donne un nouveau nom, i.e. un élément de . Vertigo/CNAM, Paris 24 Exemple de schéma Parent : [époux: Parent, nom: Personne, enfants: Enfants] Slide 44 Enfants : {[nom : string, age: integer]} Personne : [ss: [sexe: bit, année : integer, mois: integer, ...] nom: string]] Types: Exemple La valeur (n-uplet) [époux: i1, ss_nom: [ss: 09234111, nom: ‘‘toto’’], enfants: {i2,i3}] Slide 45 est de type tuple (époux: PERSONNE, ss_nom: tuple (ss:INT,nom:STRING) enfants: set(PERSONNE)) tuple (set) est une autre notation pour le constructeur nuplet(ensemble). i1,i2 et i3 sont des identificateurs d’objets de type PERSONNE. Vertigo/CNAM, Paris 25 Types et Classes Les deux notions sont très proches. La notion de classe dépend du SGBDO. Les objets sont regroupés ensemble par structure et comportement (méthodes) Une classe – permet de regrouper des objets de même type Slide 46 – est une usine à objets: elle permet de créer des objets d’un type (new) – un objet est une instance d’un type, est membre d’une classe – l’extension de la classe est l’esnemble des objets de type dans certains SGBD, tout objet créé dans une classe est stocké: la classe confondue avec son extension. est dans d’autres SGBD, les objets créés dans une classe ne sont pas forcément stockés. Traitements sur les Données: Relationnel et OO Slide 47 On a une Base d’étudiants: On veut inscrire Julien en BD Relationnel: appels SQL à la base dans le programme d’applications Orienté-Objet: Méthode “inscription” dans la classe Etudiants Vertigo/CNAM, Paris 26 Traitements sur les Données: Relationnel et OO Relationnel: données dans la base, programmes dans une bibliothèque Slide 48 conception et spécification indépendantes des programmes et des données: toute donnée est accessible à tout programme Orienté-Objet: données et programmes dans la base données accessibles seulement par méthodes de la même classe Méthodes Type objet = structure + méthodes: Les méthodes d’un type sont l’ensemble de fonctions (procédures) applicables aux objets ayant ce type. La signature d’une méthode est composée du nom de la méthode: inscription type des arguments: Cours Slide 49 type du résultat: Boolean Exemple: classe ETUDIANT avec méthode inscription(cours: Cours): Boolean qui inscrit un étudiant à un cours et retourne true si l’inscription est possible (false sinon). Une autre notation: inscription: ETUDIANT x COURS -> Bool Vertigo/CNAM, Paris 27 Message L’envoi d’un message à un objet permet d’exécuter un traitement: Slide 50 Message: objet méthode(a1,...,an) “objet” est l’oid de l’objet à qui on envoie le message, “méthode” est le nom de la méthode à exécuter sur l’objet, “a1,...,an” les arguments éventuels Exemples: autre exemple: si toto est un objet de type PERSONNE, l’envoi du message à l’objet toto donne son âge. Schéma d’une Base de Données Un schéma d’une base est l’ensemble des types (structures et méthodes) décrivant les objets stockés dans la base. Exemple: Slide 51 class PERSONNE type tuple (époux: PERSONNE, ss_nom: tuple (ss:INT,nom:STRING) enfants: set(PERSONNE)) method âge: INT class ENTREPRISE type tuple (nom: STRING, employés: set(PERSONNE)) Vertigo/CNAM, Paris 28 Encapsulation Slide 52 L’interface d’une classe C est un ensemble de méthodes visible à l’extérieur: par les objets des autres classes (qui envoient des messages aux objets de la classe C). Un objet ne peut être manipulé que via son interface (encapsulation). À l’extérieur de la classe C, on voit la signature des méthodes de C on ne voit ni la structure des objets de C ni le corps des méthodes de C. Intérêts de l’encapsulation: Programmation Modulaire Méthodologie de spec de logiciels Slide 53 Séparation entre l’implantation et la spécification Regroupement dans un même module des données et de leurs traitements Plusieurs implantations pour une même spécification Vertigo/CNAM, Paris 29 Modèle hybride Objet-Valeur Compromis impératif/objet On a des objets et des valeurs: Une valeur est universelle (ne dépend pas de l’appli) est un élément interprété par le système (built-in) Slide 54 n’a pas de comportement (n’est pas dans une classe), mais on peut lui appliquer des fonctions ne peut pas changer n’a pas d’identificateur (n’est pas partageable) peut être complexe, et référencer des objets préexiste (n’ont pas à être créées ni détruites) peut être en nombre infini (e.g. les entiers) Objets vs Valeurs Un objet (abstrait) est une abstraction spécifique d’une appli appartient à une classe Slide 55 a un identificateur qui ne peut pas changer a un état (une valeur, des propriétés, des attributs) qui peut changer a un comportement complexe (méthodes, héritage) doit être créé (éventuellement détruit) existe seulement en nombre fini Vertigo/CNAM, Paris 30 ODMG Slide 56 interface Personne (extent personnes keys nom) { attribute String nom; attribute Short âge; relationship Set(Parent) parents inverse Parent::enfants; }; interface Parent: Personne (extent parents) { relationship Set(Personne) enfants inverse Personne::parents; relationship Parent époux inverse Parent::époux; } Bases de Données Objet: Héritage Vertigo/CNAM, Paris 31 Héritage: Exemple Slide 57 class PERSONNE type tuple(nom:STRING, naiss: DATE, sexe: method âge: INT impots(declaration : DECLARATION): class EMPLOYÉ type tuple(nom:STRING, naiss: DATE, sexe: embauche: DATE) method âge: INT, impots(declaration : DECLARATION): salaire: INT STRING) INT STRING, INT EMPLOYÉ hérite de (est une sous-classe de, spécialise) PERSONNE Pourquoi l’Héritage type PERSONNE, sous-type EMPLOYÉ; spécialisaton et généralisation: chaque employé est une personne avec une date d’embauche (raffinement de la structure) et un salaire (rajout de code) Slide 58 réutilisation de code: l’age de l’employé est calculé de la même façon que celui de la personne; age a le même nom et le même code. Les méthodes d’une classe sont réutilisées dans ses sous-classes. surcharge: les impots d’un employé ne sont pas calculés comme ceux d’une personne; impot a même nom, mais pas même code. spécification incrémentale: on peut ajouter d’autres sous-classes à la classe PERSONNE (et à la classe EMPLOYÉ) Vertigo/CNAM, Paris 32 Un modèle d’héritage: structure On définit un ordre partiel sur les types (classes), , de la façon suivante: Slide 59 n-uplet: Si et sont des n-uplets tels que est un “raffinement” de (mêmes noms d’attributs plus éventuellement d’autres) et pour tout attribut en commun, le type de dans est un sous-type de dans , alors est un sous-type de . ensemble: Si et sont deux types ensemble ( est un sous-type de . , ), et , alors Un modèle d’héritage: Méthodes Slide 60 Afin de vérifier si un schéma est bien-formé (toutes les méthodes définies dans une classe peuvent être appliquées aux objets des sous-classes), on définit un ordre partiel sur les (signatures de) méthodes de la façon suivante (condition de covariance): Quelle que soit une méthode d’une classe de signature existe une méthode dans chaque sous-classe de signature et . que (1) pour tout , il telle Vertigo/CNAM, Paris 33 Polymorphisme d’inclusion L’héritage définit un polymorphisme d’inclusion: Slide 61 polymorphisme: une fonction avec le même code s’applique à des types différents: ici à des types d’une hiérarchie d’héritage: la methode age calcule l’age. sémantique par inclusion (interprétation du sytème de types) : un employé est une personne. remarque: cela ne veut pas dire que tout objet créé (et stocké) dans la classe EMPLOYÉ est automatiquement créé (et stocké) dans la classe PERSONNE Spécification de l’Héritage Inférence de type: par inspection à la compilation, le système découvre qu’une classe est une sous-classe d’une autre. Slide 62 Déclaration explicite: on indique le raffinement et tous les attributs (et méthodes) de PERSONNE sont automatiquement hérités class PERSONNE type tuple(nom:STRING, date: DATE, sexe: BOOL) class EMPLOYÉ inherits PERSONNE type tuple(diplômes: set(STRING)) Vertigo/CNAM, Paris 34 Héritage Multiple Slide 63 class PERSONNE type tuple(nom: STRING, ss: INT, naissance: INT) method âge: INT class PROFESSEUR inherits PERSONNE type tuple(cours:set(COURS), salaire:INT) method nbheures (declaration: DECLARATION): INT class ÉTUDIANT inherits PERSONNE type tuple (cours:set(COURS), numero-carte:INT) method nbheures (declaration: DECLARATION): INT class ASSISTANT inherits PROFESSEUR, ÉTUDIANT rename cours in PROFESSEUR donne_cours nbheures in ÉTUDIANT nbheures-suivies type tuple (durée_contrat: INT) method temps-recherche: INT ASSISTANT hérite des attributs et méthodes de PERSONNE ainsi que de ses deux superclasses ÉTUDIANT et PROFESSEUR Slide 64 héritage multiple. S’il y a conflit de nom (héritage répété), il faut renommer: ASSISTANT hérite deux attributs de même nom cours, et deux méthodes de même nom heures. Vertigo/CNAM, Paris 35 Typage Système de types : Compromis entre puissance et souplesse (typage faible) et sécurité (typage fort) Typage Fort: vérification des types classement et représentation des données suivant leur structure meilleure spécification et détection des erreurs Slide 65 Typage dynamique ou statique dynamique (vérification à l’exécution): on ne connait le type d’une fonction polymorphe qu’à l’execution; la surcharge demande une vérification de type pendant l’exécution. Cela impose que les données conservent une information sur leur type et ralentit l’exécution. statique (vérification à la compilation): moins de souplesse et de puissance, mais efficacité d’exécution: on ne garde pas d’info sur les types apres la compil. Puissance de la surcharge On veut calculer la surface de différents objets géométriques: Slide 66 sans objets ----------for all g in geo_set do case of type(g): cercle: surface_cercle(g) triangle: surface_triangle(g) rectangle: surface_rectangle(g) avec objets ----------for all g in geo_set g->surface le programmeur n’a pas besoin de connaître le type de l’objet qu’il veut afficher l’adjonction d’un nouveau type d’objet, la modification d’une méthode de calcul de la surface se fait sans modification ni recompilation du programme appelant la méthode d’affichage. Vertigo/CNAM, Paris Fonctionnement de la surcharge (résolution tardive) On veut calculer la surface de différents objets géométriques: On définit la hiérarchie Objet-geo avec pour sous-classes : cercle, triangle, rectangle. On écrit une méthode de nom surface dans la classe objet-geo qui ne fait rien Slide 67 Pour chacune des sous-classes, on redéfinit une méthode de même nom dans le programme qui appelle la méthode surface, le type de g n’est pas connu à la compilation au moment de l’appel de la méthode surface, i.e. à l’exécution, le système détermine le type, i.e. la sous-classe (résolution tardive) et fait la correspondance entre le nom (surface) et le corps de la méthode (lien dynamique). 36