16/11/2004 P. Van Roy, InfoT4, S9 1 Informatique T4 (FSAC1450) Objets, Classes, Polymorphisme et Héritage Peter Van Roy Département dIngénierie Informatique,

Slides:



Advertisements
Présentations similaires
Systèmes en temps réel Modélisation du comportement en temps réel avec UML.
Advertisements

Les Structures. Introduction : Imaginons que lon veuille afficher les notes dune classe délèves par ordre croissant avec les noms et prénoms de chaque.
Langages objet Définitions Traduction des méthodes en C++
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Chapitre III Héritage (début)
FSAB1402: Informatique 2 Techniques de Programmation Orientée Objet
La programmation Orienté Objet
18/10/2004 P. Van Roy, InfoT4, S5 1 Informatique T4 Solutions au Test du 18 octobre Peter Van Roy Département dIngénierie Informatique, UCL
Structures de données linéaires
Programmation orientée objet
9/11/2004 P. Van Roy, InfoT4, S8 1 Informatique T4 (FSAC1450) LEtat et lAbstraction de Données Peter Van Roy Département dIngénierie Informatique, UCL.
Principes de la technologie orientée objets
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Langage Oriente Objet Cours 4.
28 novembre 2012 Grégory Petit
7.1 TRANSFORMATION LINÉAIRE Cours 19. Au dernier cours nous avons vus Le déterminant dune matrice carré Les propriétés du déterminant La matrice adjointe.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Sémantique Formelle Peter Van Roy Département dIngénierie Informatique, UCL
Langage Oriente Objet Cours 2.
© 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 LEtat et lAbstraction de Données Peter Van Roy Département dIngénierie Informatique,
2/11/2004 P. Van Roy, InfoT4, S7 1 Informatique T4 (FSAC1450) Sémantique Peter Van Roy Département dIngénierie Informatique, UCL
Structures de données IFT-2000
Introduction au paradigme orienté-objet (suite)
Présentation Structures de Données et TDA
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Récursion sur les Listes Peter Van Roy Département dIngénierie Informatique, UCL
FSAB1402: Informatique 2 L’État et l’Abstraction de Données
Peter Van Roy Département d’Ingénierie Informatique, UCL
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
P. Van Roy, LINF LINF1251: Objets, Classes, Polymorphisme et Héritage Peter Van Roy Département dIngénierie Informatique, UCL
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
Langages orientés objets
Partie II Sémantique.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Le diagramme de collaboration
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Objets, Classes, Polymorphisme et Héritage Peter Van Roy Département dIngénierie Informatique,
© 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Objets, Classes, Polymorphisme et Héritage Peter Van Roy Département dIngénierie Informatique,
Héritage et composition
19/11/2004 P. Van Roy, InfoT4, S9 1 Informatique T4 (FSAC1450) Concurrence et Systèmes Multi-Agents Peter Van Roy Département d’Ingénierie Informatique,
Travaux Pratiques Représentation des connaissances
Paradigmes des Langages de Programmation
Les principes de la modélisation de systèmes
16/11/2004 P. Van Roy, InfoT4, S9 1 Informatique T4 (FSAC1450) Objets, Classes, Polymorphisme et Héritage Peter Van Roy Département d’Ingénierie Informatique,
Programmation objet La base.
Créer des packages.
Algorithmes et Programmation
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Introduction au langage C Fonctions et Procédures
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
eXtensible Markup Language. Généralités sur le XML.
6/10/2005 © 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Récursion sur les Listes Peter Van Roy Département d’Ingénierie Informatique,
La programmation par objets
Introduction à la Programmation Orientée Objet
Initiation aux bases de données et à la programmation événementielle
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
Transcription de la présentation:

16/11/2004 P. Van Roy, InfoT4, S9 1 Informatique T4 (FSAC1450) Objets, Classes, Polymorphisme et Héritage Peter Van Roy Département dIngénierie Informatique, UCL

16/11/2004P. Van Roy, InfoT4, S92 Ce quon va voir aujourdhui Résumé du dernier cours Les objets et les classes Le polymorphisme Le principe de la répartition des responsabilités Lhéritage Le principe de substitution Lien statique et lien dynamique

16/11/2004 P. Van Roy, InfoT4, S9 3 Résumé du dernier cours

16/11/2004P. Van Roy, InfoT4, S94 La sémantique Il est important de comprendre comment exécute un programme Celui qui ne comprend pas quelque chose est lesclave de cette chose Il faut pouvoir montrer lexécution dun programme selon la machine abstraite Concepts importants: environnement contextuel (le lieu de naissance), pile sémantique (ce quil reste à faire), appel de procédure Il ne faut pas sombrer dans les détails Il suffit de les donner une fois, après vous pouvez faire des raccourcis (comme par exemple, sauter des pas, ne montrer quune partie de la pile, de la mémoire et des environnements, utiliser des substitutions)

16/11/2004P. Van Roy, InfoT4, S95 Létat Létat explicite (la cellule) Lavantage pour la modularité des programmes Etendre une partie sans devoir changer le reste La sémantique des cellules Une cellule est une paire Le nom de la cellule est aussi appelé ladresse La mémoire à affectation multiple

16/11/2004P. Van Roy, InfoT4, S96 Labstraction de données Motivations Donner des garanties Réduire la complexité Faire de grands programmes en équipe Les deux formes principales Le type abstrait et lobjet Lutilité de chaque forme et la mise en oeuvre en Java Le type abstrait avec état

16/11/2004 P. Van Roy, InfoT4, S9 7 Les objets et les classes

16/11/2004P. Van Roy, InfoT4, S98 Programmation avec objets Le concept dobjet est devenu omniprésent dans linformatique aujourdhui Une abstraction de données qui contient à la fois la valeur et les opérations Originaire de Simula 67, partout via Smalltalk et C++ Avantages Labstraction de données Le polymorphisme Lhéritage Les types abstraits sont tout aussi omniprésents mais moins médiatisés! Il est important de bien distinguer objets et types abstraits et comprendre comment ils sont mélangés dans chaque langage

16/11/2004P. Van Roy, InfoT4, S99 Schéma général dun objet local A1={NewCell I1} … An={NewCell In} in proc {M1 …} … end … proc {Mm …} … end end Ce fragment créé des nouvelles cellules locales A1, …, An, qui ne sont visibles que dans les procédures globales M1, …, Mm. On appelle souvent A1, …, An des attributs et M1, …, Mm des méthodes

16/11/2004P. Van Roy, InfoT4, S910 Exemple: un objet compteur declare local A1={NewCell 0} in proc {Inc} end proc {Get X} end end

16/11/2004P. Van Roy, InfoT4, S911 Le compteur avec envoi procédural declare local A1={NewCell 0} proc {Inc} end proc {Get X} end in proc {Counter M} case M of inc then {Inc} [] get(X) then {Get X} end end Toutes les méthodes sont invoquées par lintermédiaire dun seul point dentrée: la procédure Counter: {Counter inc} {Counter get(X)} Largument de Counter est appelé un message

16/11/2004P. Van Roy, InfoT4, S912 Une usine pour créer des compteurs declare fun {NewCounter} A1={NewCell 0} proc {Inc} end proc {Get X} end in proc {$ M} case M of inc then {Inc} [] get(X) then {Get X} end end Il est souvent intéressant de faire plusieurs objets avec les mêmes opérations mais avec des états différents On peut définir une fonction qui, quand on lappelle, créé un nouvel objet à chaque fois Lappel C={NewCounter} créé lattribut A1 et rend un objet avec méthodes Inc et Get

16/11/2004P. Van Roy, InfoT4, S913 Lutilisation de la fonction NewCounter C1={NewCounter} C2={NewCounter} {C1 inc} local X in {C1 get(X)} {Browse X} end

16/11/2004P. Van Roy, InfoT4, S914 Syntaxe pour une classe class Counter attr a1 meth init a1:=0 end meth inc end meth get(X) end end C1={New Counter init} {C1 inc} local X in {C1 get(X)} {Browse X} end

16/11/2004P. Van Roy, InfoT4, S915 Cest quoi une classe? La classe Counter est passée comme argument à la fonction New: C={New Counter Init} La classe Counter est une valeur (tout comme une procédure)! La définition de la classe et la création de lobjet sont séparées Pour les futés: les classes sont un type abstrait La fonction NewCounter fait les deux choses en même temps Le résultat est le même Comment est-ce quon représente une classe comme une valeur? Une classe est un enregistrement qui regroupe les noms des attributs et les méthodes La fonction New prend lenregistrement, créé les cellules et créé lobjet (une procédure qui référencie les cellules et les méthodes) Exercice: lisez et comprenez la section 7.2, en particulier les figures 7.1, 7.2 et 7.3

16/11/2004P. Van Roy, InfoT4, S916 Schéma général dune classe class C attr a 1 … a n meth m 1 … end … meth m m … end end

16/11/2004 P. Van Roy, InfoT4, S9 17 Le polymorphisme

16/11/2004P. Van Roy, InfoT4, S918 Le polymorphisme Dans le langage de tous les jours, une entité est polymorphe si elle peut prendre des formes différentes Dans le contexte de linformatique, une opération est polymorphe si elle peut prendre des arguments de types différents Cette possibilité est importante pour que les responsabilités soient bien réparties sur les différentes parties dun programme

16/11/2004P. Van Roy, InfoT4, S919 Le principe de la répartition des responsabilités Le polymorphisme permet disoler des responsabilités dans les parties du programme qui les concernent En particulier, une responsabilité doit de préférence être concentrée dans une seule partie du programme Exemple: un patient malade va chez un médecin Le patient ne devrait pas être médecin lui-même! Le patient dit au médecin: guérissez-moi Le médecin fait ce quil faut selon sa spécialité Le programme guérir dune maladie est polymorphe: il marche avec toutes sortes de médecins Le médecin est un argument du programme Tous les médecins comprennent le message guérissez-moi

16/11/2004P. Van Roy, InfoT4, S920 Réaliser le polymorphisme Toutes les formes dabstraction de données soutiennent le polymorphisme Les objets et les types abstraits Cest particulièrement simple avec les objets Une des raisons du succès des objets Pour ne par surcharger le cours, on ne parlera que des objets Lidée est simple: si un programme marche avec une abstraction de données, il pourrait marcher avec une autre, si lautre a la même interface

16/11/2004P. Van Roy, InfoT4, S921 Exemple de polymorphisme class Figure … end class Circle attr x y r meth draw … end … end class Line attr x1 y1 x2 y2 meth draw … end … end class CompoundFigure attr figlist meth draw for F do {F draw} end … end La définition de la méthode draw de CompoundFigure marche pour toutes les figures possibles: des cercles, des lignes et aussi dautres CompoundFigures!

16/11/2004P. Van Roy, InfoT4, S922 Exécution correcte dun programme polymorphe Quand est-ce quun programme polymorphe est correct? Pour une exécution correcte, labstraction doit satisfaire à certaines propriétés Le programme marchera alors avec toute abstraction qui a ces propriétés Pour chaque abstraction, il faut donc vérifier que sa spécification satisfait à ces propriétés Pour lexemple des médecins, le programme exige que le médecin veut la guérisson du patient Le polymorphisme marche si chaque médecin veut la guérisson du patient Chaque abstraction (médecin) satisfait la même propriété (veut la guérisson du patient)

16/11/2004 P. Van Roy, InfoT4, S9 23 Lhéritage

16/11/2004P. Van Roy, InfoT4, S924 Définition incrémentale des abstractions de données Des abstractions de données sont souvent très similaires Par exemple, la notion de collection déléments a beaucoup de variations Ensemble: des éléments sans ordre défini Séquence: un ensemble déléments dans un ordre Séquence = ensemble + ordre Pile: une séquence où lon ajoute et enlève du même côté Pile = séquence + contraintes sur ajout/enlèvement File: une séquence où lon ajoute dun côté et enlève de lautre côté File = séquence + contraintes sur ajout/enlèvement

16/11/2004P. Van Roy, InfoT4, S925 Lhéritage et les classes Il peut être intéressant de définir des abstractions sans répéter les parties communes Parties communes = code dupliqué Si une partie est changée, toutes les parties doivent être changées Source derreurs! Lhéritage est une manière de définir des abstractions de façon incrémentale Une définition A peut hériter dune autre définition B La définition A prend B comme base, avec éventuellement des modifications et des extensions La définition incrémentale A est appelée une classe Attention: le résultat est une abstraction de données complète

16/11/2004P. Van Roy, InfoT4, S926 Lhéritage et la sémantique Une classe A est définie comme une transformation dune autre classe B Lhéritage peut être vu comme transformation syntaxique On prend le code source de B et on le modifie Lhéritage peut aussi être vu comme transformation sémantique La définition de A est une fonction f A avec c A =f A (c B ) f A prend une abstraction de données B comme entrée (la valeur c B ) et donne comme résultat une autre abstraction de données (la valeur c A )

16/11/2004P. Van Roy, InfoT4, S927 Dangers de lhéritage Lhéritage est parfois très utile, mais il faut lutiliser avec beaucoup de précautions La possibilité détendre A avec lhéritage peut être vue comme une autre interface à A Une autre manière dinteragir avec A Cette interface doit être maintenue pendant toute la vie de A Une source supplémentaire derreurs!

16/11/2004P. Van Roy, InfoT4, S928 Notre recommandation Nous recommandons dutiliser lhéritage le moins possible Cest dommage que lhéritage est considéré comme tellement important par les mandarins de la programmation orienté-objet Quand on définit une classe, nous recommandons de la prendre comme final (non-extensible) par défaut Nous recommandons dutiliser la composition de préférence sur lhéritage La composition = une classe peut dans son implémentation utiliser dautres classes (comme la liste de figures dans CompoundFigure)

16/11/2004P. Van Roy, InfoT4, S929 Le principe de substitution La bonne manière dutiliser lhéritage Supposons que la classe A hérite de B et quon a deux objets, O A et O B Toute procédure qui marche avec O B doit marcher avec O A Lhéritage ne doit rien casser! A est une extension conservatrice de B B A hérite de O A O B instance de

16/11/2004P. Van Roy, InfoT4, S930 Exemple: classe Account class Account attr balance:0 meth transfer(Amount) balance end meth getBal(B) end A={New Account transfer(100)}

16/11/2004P. Van Roy, InfoT4, S931 Extension conservatrice (respecte le p. de s.) class VerboseAccount from Account meth verboseTransfer(Amount) … end La classe VerboseAccount a les méthodes transfer, getBal et verboseTransfer VerboseAccount: Un compte qui affiche toutes les transactions

16/11/2004P. Van Roy, InfoT4, S932 Extension non-conservatrice (ne respecte pas le p. de s.) class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amount) … end La classe AccountWithFee a les méthodes transfer, getBal et verboseTransfer. La méthode transfer a été redéfinie. AccountWithFee: Un compte avec des frais

16/11/2004P. Van Roy, InfoT4, S933 Hiérarchie de classe de lexemple class VerboseAccount from Account meth verboseTransfer(Amount) … end class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amount) … end Account VerboseAccount AccountWithFee

16/11/2004P. Van Roy, InfoT4, S934 Lien dynamique Nous allons maintenant définir la nouvelle méthode verboseTransfer Dans la définition de verboseTransfer, nous devons appeler transfer On écrit {self transfer(A)} La méthode transfer est choisie dans la classe de lobjet lui-même O V self = lobjet lui-même, une instance de VerboseAccount Classe Account Méthode transfer Classe VerboseAccount Méthode verboseTransfer hérite de Objet O V instance de

16/11/2004P. Van Roy, InfoT4, S935 Définition de VerboseAccount class VerboseAccount from Account meth verboseTransfer(Amount) {self transfer(Amount)} end La classe VerboseAccount a les méthodes transfer, getBal et verboseTransfer

16/11/2004P. Van Roy, InfoT4, S936 Lien statique Nous allons maintenant redéfinir lancienne méthode transfer dans AccountWithFee Dans la nouvelle définition de transfer, nous devons appeler lancienne définition! On écrit VerboseAccount,transfer(A) Il faut spécifier la classe dans laquelle se trouve lancienne! La méthode transfer est choisie dans la classe VerboseAccount Classe VerboseAccount Méthode transfer (la même!) Classe AccountWithFee Méthode transfer (nouvelle!) Objet O F Classe Account Méthode transfer

16/11/2004P. Van Roy, InfoT4, S937 Définition de AccountWithFee class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amt) end La classe AccountWithFee a les méthodes transfer, getBal et verboseTransfer. La méthode transfer a été redéfinie.

16/11/2004P. Van Roy, InfoT4, S938 La magie du lien dynamique Regardez le fragment suivant: A={New AccountWithFee transfer(100)} {A verboseTransfer(200)} Question: quest-ce qui se passe? Quelle méthode transfer est appelée par verboseTransfer? Attention: au moment où on a définit VerboseAccount, on ne connaissait pas lexistence de AccountWithFee Réponse: !!

16/11/2004P. Van Roy, InfoT4, S939 Extension non-conservatrice: danger, danger, danger! class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amt) end Danger! Les invariants deviennent faux. Invariant: {A getBal(B)} {A transfer(S)} {A getBal(B1)} % B1=B+S ? % Faux!

16/11/2004P. Van Roy, InfoT4, S940 Le principe de substitution: une leçon coûteuse Dans les années 1980, une grande entreprise a initié un projet ambitieux basé sur la programmation orienté-objet Non, ce nest pas Microsoft! Malgré un budget de quelques milliards de dollars, le projet a échoué lamentablement Une des raisons principales était une utilisation fautive de lhéritage. Deux erreurs principales ont été commises: Violation du principe de substitution. Une procédure qui marchait avec des objets dune classe ne marchait plus avec des objets dune sous-classe! Création de sous-classes pour masquer des problèmes, au lieu de corriger ces problèmes à leur origine. Le résultat était une hiérarchie dune grande profondeur, complexe, lente et remplie derreurs.

16/11/2004P. Van Roy, InfoT4, S941 Liens statiques et dynamiques: recapitulatif Le but du lien dynamique et du lien statique est de sélectionner la méthode quon va exécuter Lien dynamique: {self M} On sélectionne la méthode dans la classe de lobjet lui-même Cette classe nest connue quà lexécution, cest pourquoi on lappelle un lien dynamique Cest ce quon utilise par défaut Lien statique: SuperClass,M On sélectionne la méthode dans la classe SuperClass Cette classe est connue à la compilation (cest SuperClass), cest pourquoi on lappelle un lien statique Cest utilisé uniquement pour la redéfinition (overriding) Quand une méthode est redéfinie, il faut souvent que la nouvelle méthode puisse accéder à lancienne

16/11/2004P. Van Roy, InfoT4, S942 La relation de super-classe Une classe peut hériter dune ou plusieurs autres classes, qui apparaissent après le mot-clé from Une classe B est appelée super-classe de A si: B apparaît dans la déclaration from de A, ou B est une super-classe dune classe qui apparaît dans la déclaration from de A

16/11/2004P. Van Roy, InfoT4, S943 La relation de super-classe La relation de super- classe est orienté et acyclique Une classe peut avoir plusieurs super- classes Héritage multiple

16/11/2004P. Van Roy, InfoT4, S944 Lhéritage simple et lhéritage multiple Lhéritage simple = une seule classe dans la clause from Beaucoup plus simple à implémenter et à utiliser Java ne permet que lhéritage simple des classes Lhéritage multiple = plusieurs classes dans la clause from Un outil puissant, mais à double tranchant! Voir Object-oriented Software Construction de Bertrand Meyer pour une bonne présentation de lhéritage multiple

16/11/2004 P. Van Roy, InfoT4, S9 45 Résumé

16/11/2004P. Van Roy, InfoT4, S946 Résumé Les objets et les classes Lenvoi procédural Une classe comme une fonction pour créer des objets Soutien syntaxique pour les classes Le polymorphisme Le principe de la répartition des responsabilités Lhéritage Le principe de substitution Lien dynamique et lien statique Lhéritage simple et lhéritage multiple

16/11/2004 P. Van Roy, InfoT4, S9 47 Pour la dernière séance

16/11/2004P. Van Roy, InfoT4, S948 Pour la dernière séance La dernière séance est vendredi prochain Un survol des paradigmes de programmation Une introduction aux systèmes multi-agents La conclusion du cours Les réponses à vos questions Envoyez-nous vos questions Par Tout ce qui nest pas clair Nhésitez pas!