© 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,

Slides:



Advertisements
Présentations similaires
Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder.
Advertisements

ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
Licence pro MPCQ : Cours
Distance inter-locuteur
Portée des variables VBA & Excel
Fonctions & procédures
Les numéros
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
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
User management pour les entreprises et les organisations Auteur / section: Gestion des accès.
ORTH 1 CE2 Je sais écrire sans erreur les pluriels des noms se terminant par s, x, z.
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
FSAB1402: Informatique 2 Techniques de Programmation Orientée Objet
Développement d’applications web
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
Programmation orientée objet
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.
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 La Concurrence Déclarative Peter Van Roy Département dIngénierie Informatique, UCL
1 Choisir une catégorie. Vous recevrez la réponse, vous devez donner la question. Cliquez pour commencer.
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
1.2 COMPOSANTES DES VECTEURS
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,
Titre : Implémentation des éléments finis sous Matlab
IFT1025, Programmation 2 Jian-Yun Nie
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
Tableaux de distributions
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.
Tableaux de distributions
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Sémantique Formelle Peter Van Roy Département dIngénierie Informatique, UCL
Académie de Créteil - B.C Quest-ce quune Inscription 1)1 action + 1 stagiaire + 1 client 2)Parcours individuel (avec son Prix de Vente) 3)Un financement.
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
VOC 1 CE2 Je sais utiliser des mots de la vie quotidienne.
© 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,
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Introduction au paradigme orienté-objet (suite)
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
© 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
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Programmer avec des Types Abstraits Peter Van Roy Département dIngénierie Informatique,
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
1.1 LES VECTEURS GÉOMÉTRIQUES
Chapitre 9 Les sous-programmes.
Langages orientés objets
Titre : Implémentation des éléments finis en Matlab
COURS DE PROGRAMMATION ORIENTEE OBJET :
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.
Équipe 2626 Octobre 2011 Jean Lavoie ing. M.Sc.A.
© 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,
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
LES PILES ET FILES.
Paradigmes des Langages de Programmation
Exercice de vérification 1 p
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,
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
La programmation par objets Principes et concepts Etude de Smalltalk.
Transcription de la présentation:

© 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, UCL

© 2007 P. Van Roy. All rights reserved.2 Ce quon va voir aujourdhui Résumé du dernier cours Les objets et les classes Le polymorphisme Le principe de la concentration des responsabilités Lhéritage Le principe de substitution Lien statique et lien dynamique Lhéritage simple et lhéritage multiple

© 2007 P. Van Roy. All rights reserved.3 Lecture pour cette séance Chapitre 1 (sections ): objets et classes Chapitre 5 (section 5.5): le polymorphisme Chapitre 6 (section 6.1): lhéritage, idées de base et motivation Chapitre 6 (sections 6.2): la classe Chapitre 6 (sections ): la classe et lhéritage Chapitre 6 (section 6.4.1): le principe de substitution Chapitre 6 (sections ): lhéritage multiple

© 2007 P. Van Roy. All rights reserved.4 Annonce Léchéance pour le mini-projet Le 30 novembre à 18h00 Chaque groupe envoie les deux fichiers à lassistant correspondant (pas à staff1402.fsa!) et sinscrit pour un entretien sur le bureau de lassistant

© 2007 P. Van Roy. All rights reserved. 5 Résumé du dernier cours

© 2007 P. Van Roy. All rights reserved.6 Les collections indexées Les tuples et les enregistrements sont utiles quand il faut garantir que la valeur ne change pas On peut les utiliser dans le modèle déclaratif mais aussi dans le modèle avec état Les tableaux et les dictionnaires sont utiles pour calculer une collection incrémentalement: en petits bouts Le dictionnaire est particulièrement intéressant, à cause de sa souplesse et son efficacité Le dictionnaire est une abstraction qui mérite un regard particulier: il a une interface simple et une implémentation sophistiquée

© 2007 P. Van Roy. All rights reserved.7 Comparer le déclaratif avec létat (pour petits programmes) Nous avons comparé les deux modèles en implémentant des algorithmes sur les matrices Attention: cest une comparaison in the small (pour petits programmes, cest-à-dire, le codage des algorithmes) La complexité des programmes est comparable La complexité dépend surtout de la représentation des données quon choisit, pas du modèle (par exemple, liste de listes est nettement plus compliquée que tuple de tuples ou tableau de tableaux) Le choix du modèle dépend de ce quon veut faire Le modèle avec état est bien quand on construit une collection en petits bouts (incrémentalement) Le modèle déclaratif est bien quand on fait un système multi- agent (à voir plus tard dans le cours)

© 2007 P. Van Roy. All rights reserved.8 Comparer le déclaratif avec létat (pour grands programmes) Nous pouvons aussi comparer les deux modèles in the large (pour grands programmes) Un grand programme est construit comme un ensemble dabstractions de données, souvent écrit par une équipe Chaque abstraction peut être déclaratif ou avec état Une abstraction déclarative ne change jamais son comportement bon pour lexactitude Une abstraction avec état peut apprendre ou mémoriser le passé bon pour la modularité Il est souhaitable de combiner les deux pour avoir le meilleur des deux modèles (comme pour la mémoisation)

© 2007 P. Van Roy. All rights reserved. 9 Les objets et les classes

© 2007 P. Van Roy. All rights reserved.10 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 Introduit en Simula 67, disséminé partout via Smalltalk et C++ Avantages Labstraction de données Le polymorphisme Lhéritage Les types abstraits sont tout aussi omniprésents! Il est important de bien comprendre les objets et types abstraits purs et de voir comment ils sont mélangés dans chaque langage. Par exemple, un objet Java est un mélange dun objet pur et dun type abstrait pur comme nous allons voir la prochaine fois.

© 2007 P. Van Roy. All rights reserved.11 Schéma général dun objet declare 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 Remarquez que A1,..., An sont cachés de lextérieur et M1,..., Mm sont visibles de lextérieur (souvenez-vous de la définition dune abstraction de données!)

© 2007 P. Van Roy. All rights reserved.12 Exemple: un objet compteur declare local A1={NewCell 0} in proc {Inc} end proc {Get X} end end

© 2007 P. Van Roy. All rights reserved.13 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

© 2007 P. Van Roy. All rights reserved.14 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 créer 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

© 2007 P. Van Roy. All rights reserved.15 Lutilisation de la fonction NewCounter C1={NewCounter} C2={NewCounter} {C1 inc} local X in {C1 get(X)} {Browse X} end local X in {C2 get(X)} {Browse X} end

© 2007 P. Van Roy. All rights reserved.16 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

© 2007 P. Van Roy. All rights reserved.17 Cest quoi une classe? (1) La classe Counter est passée comme argument à la fonction New: C={New Counter Init} La classe Counter est une valeur (analogue à 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 forment un type abstrait!) La fonction NewCounter fait les deux choses en même temps Le résultat est le même

© 2007 P. Van Roy. All rights reserved.18 Cest quoi une classe? (2) 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: Counter=c(attrs:[a1] methods:m(init:Init inc:Inc get:Get)) La fonction New prend lenregistrement, crée les cellules et crée lobjet (une procédure qui référence les cellules et les méthodes): fun {New Class Init}.... end Exercice: lisez et comprenez la section du livre, en particulier les figures 6.1, 6.2, 6.3

© 2007 P. Van Roy. All rights reserved.19 Schéma général dune classe class C attr a 1 … a n meth m 1 … end … meth m m … end end

© 2007 P. Van Roy. All rights reserved. 20 Le polymorphisme

© 2007 P. Van Roy. All rights reserved.21 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

© 2007 P. Van Roy. All rights reserved.22 Le principe de la concentration 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

© 2007 P. Van Roy. All rights reserved.23 Réaliser le polymorphisme Toutes les abstractions de données que nous avons vues 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

© 2007 P. Van Roy. All rights reserved.24 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! (Voir aussi lexemple dans section 6.4.2)

© 2007 P. Van Roy. All rights reserved.25 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 guérirait le patient Le polymorphisme marche si chaque médecin guérirait le patient Chaque abstraction (médecin) satisfait la même propriété (guérira le patient)

© 2007 P. Van Roy. All rights reserved. 26 Lhéritage

© 2007 P. Van Roy. All rights reserved.27 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

© 2007 P. Van Roy. All rights reserved.28 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

© 2007 P. Van Roy. All rights reserved.29 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 classe B comme entrée (la valeur c B ) et donne comme résultat une autre classe (la valeur c A )

© 2007 P. Van Roy. All rights reserved.30 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!

© 2007 P. Van Roy. All rights reserved.31 Notre recommandation Nous recommandons dutiliser lhéritage le moins possible Cest dommage que lhéritage soit considéré comme tellement important par les mandarins de la programmation orientée objet Quand on définit une classe, nous recommandons de la prendre comme final (non-extensible par lhéritage) 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 des objets dautres classes (comme la liste de figures dans CompoundFigure)

© 2007 P. Van Roy. All rights reserved.32 Lhéritage versus la composition B A OAOA instance de B A OAOA OBOB attr b: O B hérite de HéritageComposition

© 2007 P. Van Roy. All rights reserved.33 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 OAOA OBOB instance de

© 2007 P. Van Roy. All rights reserved.34 Exemple: classe Account class Account attr balance:0 meth transfer(Amount) balance end meth getBal(B) end A={New Account transfer(100)}

© 2007 P. Van Roy. All rights reserved.35 Extension conservatrice (respecte le princ. de subst.) 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

© 2007 P. Van Roy. All rights reserved.36 Extension non-conservatrice (ne respecte pas le pr. de sub.) 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

© 2007 P. Van Roy. All rights reserved.37 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

© 2007 P. Van Roy. All rights reserved.38 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

© 2007 P. Van Roy. All rights reserved.39 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

© 2007 P. Van Roy. All rights reserved.40 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 choisir 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

© 2007 P. Van Roy. All rights reserved.41 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.

© 2007 P. Van Roy. All rights reserved.42 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? Lancienne ou la nouvelle? Attention: au moment où on a défini VerboseAccount, on ne connaissait pas encore lexistence de AccountWithFee Réponse: !!

© 2007 P. Van Roy. All rights reserved.43 Exemple du lien dynamique Account VerboseAccount AccountWithFee meth verboseTransfer(Amount) {self transfer(Amount)} end getBal(B) transfer(Amt) verboseTransfer(Amt) getBal(B) transfer(Amt) verboseTransfer(Amt) getBal(B) transfer(Amt) O AWF O VA Appel 1: { O VA verboseTransfer(200)} Quel transfer? Appel 2: { O AWF verboseTransfer(200)} Quel transfer?

© 2007 P. Van Roy. All rights reserved.44 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!

© 2007 P. Van Roy. All rights reserved.45 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 avaient été commises: Violation du principe de substitution. Une procédure qui marchait avec les objets dune classe ne marchait plus avec les objets dune sous-classe! Résultat: prolifération de procédures! 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.

© 2007 P. Van Roy. All rights reserved.46 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

© 2007 P. Van Roy. All rights reserved.47 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

© 2007 P. Van Roy. All rights reserved.48 La relation de super-classe La relation de super- classe est orienté et acyclique Une classe peut avoir plusieurs super- classes Héritage multiple

© 2007 P. Van Roy. All rights reserved.49 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 sections et pour un bon exemple (Voir aussi le livre Object-Oriented Software Construction de Bertrand Meyer)

© 2007 P. Van Roy. All rights reserved. 50 Résumé

© 2007 P. Van Roy. All rights reserved.51 Résumé Les objets et les classes Attributs (cachés) et méthodes (visibles) Lenvoi procédural Une classe comme une fonction pour créer des objets Soutien syntaxique pour les classes Le polymorphisme Le principe de la concentration des responsabilités Lhéritage Le principe de substitution Lien dynamique et lien statique Lhéritage simple et lhéritage multiple