POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke
POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke et le Collège Lionel-Groulx Page 1 Retouché par Pierre Prud’homme Table des matières Relations et structures .................................................................................................................. 7 Mise en garde .............................................................................................................................. 8 À propos de la forme .................................................................................................................. 9 Héritage ........................................................................................................................................ 10 Option 0 : rédaction indépendante des trois classes ............................................................ 11 Option 1 : conception par composition ................................................................................ 13 Enrober et déléguer ............................................................................................................... 15 Option 2 : application de l’héritage ...................................................................................... 17 Implanter l’héritage de Personne à Eleve .................................................................. 18 Syntaxe de l’héritage en C++ ............................................................................................. 19 Héritage et constructeurs .................................................................................................... 20 Quelques règles d’identité .................................................................................................. 24 Héritage et destructeurs ...................................................................................................... 25 Héritage et affectation ........................................................................................................ 26 En résumé ................................................................................................................................. 27 Empêcher la dérivation ............................................................................................................ 28 Dans d’autres langages ............................................................................................................ 29 Exercices – Série 00 ............................................................................................................... 39 Réflexions .............................................................................................................................. 40 Catégories d’héritage .................................................................................................................. 41 Spécifications d’accès et héritage ............................................................................................ 41 Héritage et consommation d’espace ...................................................................................... 42 Optimisation EBCO ........................................................................................................... 43 Héritage public ...................................................................................................................... 44 Héritage public et membres publics ................................................................................... 45 Héritage public et membres privés ..................................................................................... 46 Héritage public et membres protégés ................................................................................. 47 Notes philosophiques sur l’héritage public ........................................................................ 48 Exercices – Série 01.0 ....................................................................................................... 49 Héritage privé ........................................................................................................................ 55 Héritage privé et membres du parent ................................................................................. 57 POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke et le Collège Lionel-Groulx Page 2 Retouché par Pierre Prud’homme Héritage privé et enrobage ................................................................................................. 58 Notes philosophiques sur l’héritage privé .......................................................................... 60 Exercices – Série 01.1 ....................................................................................................... 61 Héritage protégé .................................................................................................................... 67 Résumé des spécifications de sécurité et d’héritage ............................................................. 68 Dans d’autres langages ............................................................................................................ 69 Mieux exploiter le code existant .............................................................................................. 70 Héritage, surcharge de méthodes et espaces nommés ............................................................ 72 Ajouter à un espace nommé .................................................................................................. 73 L’espace nommé anonyme ................................................................................................. 73 Surcharge et dissimulation de noms ...................................................................................... 74 Dans d’autres langages ............................................................................................................ 77 Classes partielles ................................................................................................................... 80 Méthodes d’extension ........................................................................................................... 81 Regroupements et notation UML ............................................................................................. 82 Note technique sur class et struct ............................................................................... 83 Exercices – Série 02 ............................................................................................................... 84 Réflexion ............................................................................................................................... 88 Polymorphisme ............................................................................................................................ 89 Retour sur la surcharge de méthodes ...................................................................................... 90 Introduction au polymorphisme .............................................................................................. 96 Bref aperçu ............................................................................................................................ 96 Exemple concret .................................................................................................................... 97 Polymorphisme et indirections .............................................................................................. 98 Polymorphisme et surcharge ............................................................................................... 101 Polymorphisme et contrats .................................................................................................. 103 Domaines d’application ....................................................................................................... 104 Coûts du polymorphisme ................................................................................................. 104 Classes concrètes .............................................................................................................. 104 Polymorphisme et opérateurs ........................................................................................... 106 Polymorphisme et constructeurs ...................................................................................... 107 Polymorphisme et vitesse ................................................................................................. 107 POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke et le Collège Lionel-Groulx Page 3 Retouché par Pierre Prud’homme Classes terminales ............................................................................................................ 108 Véritables cas de polymorphisme .................................................................................... 108 Exercice – Série 03 ............................................................................................................... 110 Réflexion .......................................................................................................................... 110 Le mot clé virtual ............................................................................................................. 111 Dans le cas d’un destructeur ................................................................................................ 111 Mot clé contextuel override ......................................................................................... 113 Dans d’autres langages .......................................................................................................... 114 Abstraction ................................................................................................................................. 117 Méthodes abstraites ................................................................................................................ 117 Classes abstraites .................................................................................................................... 118 Interfaces ............................................................................................................................. 119 Rôle de l’abstraction ............................................................................................................... 120 Polymorphisme en situation d’instabilité .............................................................................. 121 Méthodes abstraites implémentées ......................................................................................... 124 Destructeurs abstraits .......................................................................................................... 125 Dans d’autres langages .......................................................................................................... 126 Exercices – Série 04 ............................................................................................................. 131 Encadrer le polymorphisme et l’abstraction ......................................................................... 133 Méthodes modèles (idiome NVI) ...................................................................................... 133 Héritage et paramètres par défaut ......................................................................................... 135 Héritage et classes concrètes .................................................................................................. 136 Exposer les membres d’un parent et clauses using .......................................................... 138 Clause using et constructeurs ........................................................................................ 139 L’héritage comme politique ................................................................................................... 140 Hériter pour ajouter ............................................................................................................. 140 Hériter pour spécialiser ....................................................................................................... 140 Hériter pour contraindre ...................................................................................................... 141 Idiome de la classe Incopiable ................................................................................. 141 Fonctions supprimées ou par défaut .................................................................................... 143 Dans d’autres langages .......................................................................................................... 145 Conversions explicites de types ................................................................................................ 147 POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke et le Collège Lionel-Groulx Page 4 Retouché par Pierre Prud’homme Problèmes du repérage de la conversion ............................................................................... 149 Opérateurs de transtypage ISO ............................................................................................ 150 Conversion à la compilation : static_cast ................................................................... 151 Légalité statique et validité dynamique ............................................................................... 152 Conversion à l’exécution : dynamic_cast ...................................................................... 154 Validité dynamique et validation dynamique ...................................................................... 155 En résumé ............................................................................................................................ 156 Dans d’autres langages .......................................................................................................... 157 Exercices – Série 05 ............................................................................................................. 160 Autres opérateurs de transtypage ISO ................................................................................. 161 Fermer les yeux : reinterpret_cast ........................................................................ 161 Le type void* ............................................................................................................... 163 Tricher sur la protection : const_cast .......................................................................... 164 La qualification mutable ............................................................................................. 165 En résumé ............................................................................................................................ 167 Dans d’autres langages .......................................................................................................... 168 Héritage multiple ....................................................................................................................... 169 Arguments contre l’héritage multiple .................................................................................... 169 De la relation entre héritage multiple et vitesse .................................................................. 170 Du caractère superflu de l’héritage multiple ....................................................................... 170 De la relation entre héritage multiple et espace .................................................................. 171 De la relation entre héritage multiple et complexité ........................................................... 171 L’idée ...................................................................................................................................... 172 La syntaxe ............................................................................................................................... 174 Héritage multiple et accès aux membres des parents .......................................................... 176 Héritage virtuel ....................................................................................................................... 179 Héritage virtuel et cycle de vie ............................................................................................ 183 Dénouer le nœud Gordien ................................................................................................ 184 Ramifications de l’héritage virtuel ...................................................................................... 185 Héritage multiple et affectation par défaut .......................................................................... 185 Applications de l’héritage multiple ........................................................................................ 186 Héritage d’implémentation .................................................................................................. 187 POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke et le Collège Lionel-Groulx Page 5 Retouché par Pierre Prud’homme Héritage d’interfaces ........................................................................................................... 188 Hiérarchies planes ............................................................................................................... 189 Combiner les stratégies ....................................................................................................... 189 Parenthèse contemporaine ................................................................................................... 191 En résumé ............................................................................................................................ 192 Dans d’autres langages .......................................................................................................... 193 Simuler l’héritage multiple .................................................................................................... 197 Classes imbriquées .................................................................................................................... 198 Exemple d’utilisation de classe imbriquée ............................................................................ 199 Limites du secret ..................................................................................................................... 203 Dans d’autres langages .......................................................................................................... 204 Techniques de clonage .............................................................................................................. 205 Duplication et indirections ..................................................................................................... 205 Les clés d’un bon clonage ...................................................................................................... 208 Le choix de la racine ........................................................................................................... 208 Covariance : spécialisation des types des méthodes polymorphiques ................................ 210 Copier ou cloner? ................................................................................................................... 211 Distinguer copie et clonage ................................................................................................. 211 Stratégie de duplication et nature des objets ....................................................................... 212 Remarques supplémentaires sur la duplication d’objets ...................................................... 213 Dans d’autres langages .......................................................................................................... 214 Nécessité et habitude ........................................................................................................... 215 Exploiter l’idiome RAII .......................................................................................................... 216 Solution plus générale ............................................................................................................ 220 Dans d’autres langages .......................................................................................................... 221 Implanter un traitement d’exceptions rigoureux en C++ ..................................................... 222 Facteurs de rigueur : stabilité et neutralité ........................................................................... 222 Types standards d’exceptions .............................................................................................. 225 Manières d’attraper et stratégies connexes ........................................................................... 226 Exceptions et vie des objets .................................................................................................... 227 Mécanique de dépilage automatique (Stack Unwinding) ................................................... 228 Sous-programmes prudents ................................................................................................... 228 Les cas qui nous échappent .................................................................................................... 231 POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke et le Collège Lionel-Groulx Page 6 Retouché par Pierre Prud’homme La fonction std::uncaught_exception() ............................................................ 231 La fonction std::unexpected() ............................................................................... 231 La fonction std::exit() .............................................................................................. 232 La fonction std::abort() ........................................................................................... 232 La fonction std::terminate() .................................................................................. 232 Dans d’autres langages .......................................................................................................... 233 Exercices – Série 06 ............................................................................................................. 234 Appendice 00 – Association, agrégation et composition ...................................................... 235 Composition ............................................................................................................................ 235 Agrégation .............................................................................................................................. 236 Agrégation composition et délégation ................................................................................. 238 Association .............................................................................................................................. 239 Appendice 01 – De l'importance des constantes dans le modèle OO ................................. 240 Définition de l'encapsulation ................................................................................................. 241 Cas d’espèce ............................................................................................................................ 242 Vision C++ : constantes sur une base instance ..................................................................... 244 Réaliser la constance d’un objet .......................................................................................... 246 Vision Java et .NET : immuabilité, ou constantes sur une base classe ............................ 250 Stratégies de programmation défensive .............................................................................. 253 Immuabilité ......................................................................................................................... 254 Annexe 00 – Résumé de la notation UML abordée dans ce document .............................. 257 Annexe 01 – Discussions sur quelques réflexions choisies ................................................... 259 Réflexion 01.0 : le polymorphisme est subjectif............................................................... 259 Réflexion 01.1 : annoncer les exceptions ......................................................................... 260 Réflexion 01.2 : exceptions sans effets secondaires ........................................................ 261 Annexe 02 – Covariance et contravariance (bref) .............................................................. 262 Intension et extension ............................................................................................................ 263 Individus ..................................................................................................................................... 264 Références .................................................................................................................................. 265 POO – Volume 01 v. 1,92 Préparé par Patrice Roy pour l’Université de Sherbrooke et le Collège Lionel-Groulx Page 7 Retouché par Pierre Prud’homme Relations et structures Pourquoi ce volume? Ayant couvert dans [POOv00] ce qu’est un objet, avec les nuances entre instance et classe, et ayant travaillé à bien saisir le principe fondamental qu’est celui d’encapsulation, nous toucherons maintenant les autres grands thèmes de l’approche objet, en vue de hiérarchiser nos objets, de les organiser, de profiter des possibilités d’abstraction du modèle objet, de profiter de mécanismes de généralisation puissants, de dynamiser notre utilisation de l’approche, etc. Ce volume couvrira l’héritage, le polymorphisme et l’abstraction, de même que la mécanique associée à ces idées, principalement en C++ mais avec des incursions dans d’autres langages OO pragmatiques comme Java, C# et VB.NET. On y verra, entre autres choses : ce qu’est l’héritage, qui s’exprimera entre autres parfois sous la forme comment dériver une classe à partir d’une autre; sous la forme comment spécialiser une classe; sous la forme comment rassembler, à des fins opérationnelles et structurelles, les points en commun de plusieurs classes en un même lieu; sous la forme comment restreindre les possibilités associées à un groupe de classes (ce qui, croyez-le ou non, est aussi utile que d’étendre la gamme des possibilités qui leur sont offertes); etc. les catégories d’héritage; les relations entre uploads/Litterature/ poo-coeur-01 1 .pdf
Documents similaires
-
23
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 26, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 2.1539MB