Cours et exercices corrigés SCIENCES SUP PROGRAMMATION ENC++ ETGÉNIE LOGICIEL V
Cours et exercices corrigés SCIENCES SUP PROGRAMMATION ENC++ ETGÉNIE LOGICIEL Vincent T’kindt IUT • BTS • Licence • Écoles d’ingénieurs • Formation continue PROGRAMMATION EN C++ ET GÉNIE LOGICIEL Génie logiciel David Gustafson 208 pages Schaum’s, EdiScience, 2003 Structures de données avancées avec la STL Programmation orientée objet en C++ Philippe Gabrini 432 pages Dunod, 2005 PROGRAMMATION EN C++ ET GÉNIE LOGICIEL Cours et exercices corrigés Vincent T’kindt Maître de conférences au département Informatique de l’École Polytechnique de l’université François Rabelais de Tours © Dunod, Paris, 2007 ISBN 978-2-10-050634-7 Table des matières Avant-propos XI CHAPITRE 1 • NOTIONS DE BASE SUR LE GÉNIE LOGICIEL 1 1.1 Qu’est-ce que le génie logiciel? 1 1.2 Le cycle de vie d’un logiciel 2 1.3 Spécification et conception d’un logiciel 4 1.3.1. Les commentaires 5 1.3.2. Les exceptions 5 1.3.3. La spécification logique d’une fonction 8 1.3.4. Une première vision des classes 11 1.4 Quelques règles de bonne programmation 11 1.4.1. Règles liées à la spécification du programme 12 1.4.2. Règles liées à la conception du programme 18 CHAPITRE 2 • GÉNÉRALITÉS SUR LE LANGAGE C++ 23 2.1 Mots-clefs, instructions et commentaires 23 2.2 La gestion des variables en langage C++ 24 2.2.1. Déclaration et initialisation des variables 25 2.2.2. Portée et visibilité des variables 26 2.3 Notion de référence 28 2.3.1. Passage d’arguments par référence à une fonction 28 2.3.2. Les variables références 30 2.4 L ’en-tête d’une fonction 31 2.5 Éviter les problèmes d’inclusions multiples d’interfaces 31 CHAPITRE 3 • LES OBJETS 35 3.1 Le retour des structures 35 3.1.1. Déclarer et définir des structures 35 3.1.2. Utiliser des structures 37 VI Programmation en C++ et Génie Logiciel 3.2 Les classes 38 3.2.1. Déclarer et définir des classes 38 3.2.2. Utiliser des classes 41 3.2.3. Affecter un objet d’une classe dans un autre objet de la même classe : enjeux et dangers 42 3.3 Variables et attributs statiques 46 3.3.1. Variables statiques n’appartenant pas à une classe 46 3.3.2. Attributs statiques 47 3.4 Constructeurs et destructeur 49 3.4.1. Les constructeurs 49 3.4.2. Le destructeur 56 3.5 Gestion d’objets dynamiques : les opérateurs new et delete 57 3.5.1. Allocation d’un élément unique ou d’un tableau d’éléments 57 3.5.2. Désallocation d’un élément unique ou d’un tableau d’éléments 60 3.6 Tout sur la vie des objets : synthèse 60 3.6.1. Initialisation d’un objet dès sa déclaration 61 3.6.2. Différentes catégories d’objets 61 3.7 Comment bien écrire une classe ? 63 CHAPITRE 4 • LES TRAITEMENTS 65 4.1 Passage d’arguments par défaut 65 4.2 Échange d’objets entre fonctions 66 4.3 Propriétés des fonctions membres 67 4.3.1. Spécification inline 67 4.3.2. Méthodes statiques 70 4.3.3. Auto-référence d’une classe 71 4.3.4. Fonctions membres constantes 71 4.3.5. Pointeurs sur les membres d’une classe 73 CHAPITRE 5 • LES FONCTIONS ET LES CLASSES AMIES 75 5.1 Amis et faux amis : le point de vue du génie logiciel 75 5.2 Le cas d’une fonction amie d’une classe 76 5.3 Le cas d’une méthode d’une classe amie d’une autre classe 77 5.4 Toutes les fonctions membres d’une classe amies d’une autre classe 77 Table des matières VII CHAPITRE 6 • LES EXCEPTIONS 79 6.1 Gestion des exceptions en langage C++ 79 6.1.1. Lever une exception 80 6.1.2. Attraper une exception 81 6.1.3. Quel gestionnaire d’exceptions choisir ? 83 6.1.4. Gestion hiérarchisée des exceptions 85 6.1.5. Liste d’exceptions valides 87 6.2 Fonctions liées au traitement des exceptions 88 6.2.1. Différentes façons d’arrêter un programme 88 6.2.2. Remplacement de fonctions pour le traitement des erreurs 89 6.3 Utilisation des exceptions dans le développement de programme 90 CHAPITRE 7 • L’HÉRITAGE 91 7.1 L ’héritage simple 91 7.1.1. Mise en œuvre 92 7.1.2. Contrôles d’accès 93 7.1.3. Accès aux membres de la classe de base 95 7.1.4. Compatibilité avec la classe de base 96 7.1.5. Appels des constructeurs et des destructeurs 98 7.1.6. Cas du constructeur de recopie 100 7.2 L ’héritage multiple 101 7.2.1. Mise en œuvre 101 7.2.2. Membres homonymes dans les classes mères 101 7.2.3. Constructeurs et destructeur 105 CHAPITRE 8 • LA SURCHARGE 107 8.1 La surcharge de fonctions et de méthodes 107 8.1.1. Cas des fonctions/méthodes à un argument 108 8.1.2. Différenciation des prototypes 110 8.1.3. Cas des fonctions/méthodes à plusieurs arguments 111 8.1.4. Surcharge de fonctions membres 114 8.2 La surcharge d’opérateurs 114 8.2.1. Mécanisme 115 8.2.2. Portée et limites 116 8.2.3. Opérateurs ++ et - - 117 8.2.4. Opérateur d’affectation = 118 8.2.5. Opérateur d’indexation [] 120 VIII Programmation en C++ et Génie Logiciel 8.2.6. Opérateur d’accès aux membres d’une classe (->) 121 8.2.7. Opérateur de déréférencement (*) 123 8.2.8. Opérateurs new et delete 124 8.3 La surcharge de types 126 8.3.1. Rappels sur les conversions 126 8.3.2. Conversion d’une classe vers un type de base 128 8.3.3. Conversion d’un type de base vers une classe 129 8.3.4. Conversion d’une classe vers une autre classe 131 8.3.5. Exemples de conversions 132 CHAPITRE 9 • LES PATRONS DE FONCTIONS ET DE CLASSES 135 9.1 De la généricité avec les patrons ! 135 9.2 Les patrons de fonctions/méthodes 136 9.2.1. Création d’un patron de fonctions/méthodes 136 9.2.2. Instanciation et utilisation 136 9.2.3. Spécialisation d’un patron de fonctions/méthodes 139 9.2.4. Sucharger un patron de fonctions/méthodes 139 9.3 Les patrons de classes 140 9.3.1. Création d’un patron de classes 141 9.3.2. Les membres statiques au sein d’un patron 142 9.3.3. Instanciation et utilisation 143 9.3.4. Préciser des types par défaut pour les types génériques 144 9.3.5. L’amitié et les patrons 145 9.3.6. Spécialisation du patron 146 9.3.7. Aller encore plus loin avec les patrons 147 CHAPITRE 10 • INTRODUCTION AU POLYMORPHISME ET AUX MÉ- THODES VIRTUELLES 149 10.1 Qu’est-ce que le polymorphisme ? 149 10.2 Les méthodes virtuelles 151 10.2.1. Définition et déclaration 151 10.2.2. Méthodes virtuelles et héritages complexes 153 10.2.3. Influence des contrôles d’accès 154 10.2.4. Le cas des valeurs par défaut 155 10.2.5. Les méthodes virtuelles pures et les classes abstraites 156 Table des matières IX CHAPITRE 11 • LES FLOTS 159 11.1 Gérer vos entrées/sorties avec les flots 159 11.2 Classes d’entrées/sorties 161 11.2.1. Écrire à l’écran : le flot cout 162 11.2.2. Lire à l’écran : le flot cin 164 11.2.3. Manipuler des fichiers 165 11.3 Statuts d’erreur sur un flot 169 11.4 Formater vos flots 171 EXERCICES CORRIGÉS 175 ANNEXES 209 CHAPITRE A • LES MOTS-CLEFS DU LANGAGE C++ ET LA CONSTRUC- TION D’IDENTIFIANTS 211 CHAPITRE B • TYPES DE BASE DU LANGAGE C++ 213 CHAPITRE C • PASSAGE D’ARGUMENTS À UNE FONCTION 215 C.1 Le passage par valeur 215 C.2 Le passage par adresse 216 CHAPITRE D • LISTE DES OPÉRATEURS SURCHARGEABLES 219 CHAPITRE E • LA CLASSE CEXCEPTION 221 CHAPITRE F • LA CLASSE CLISTE 227 BIBLIOGRAPHIE 238 INDEX 239 Avant-propos Le langage C++ est un langage de programmation, c’est-à-dire qu’il vous permet de créer des logiciels, ou programmes, exécutés par votre ordinateur. Il s’agit d’un langage très répandu et réputé pour sa puissance et sa flexibilité : on trouve des compilateurs C++ sur tous les types d’ordinateur, du micro-ordinateur de type PC ou Macintosh, à la station de travail professionnelle. Du système d’exploitation Unix en passant par le système d’exploitation Windows. Maîtriser le langage C++ est un atout indispensable dans le monde de l’informatique. Cet ouvrage est dédié à l’apprentissage de la programmation en langage C++, ce qui recouvre à mon avis deux éléments essentiels. Le premier est l’apprentissage du langage en lui-même, c’est-à-dire les instructions et les règles qui correctement utilisées permettent de faire faire quelque chose à votre ordinateur. Le second élé- ment important pour apprendre à programmer en langage C++ est lié à la façon d’écrire ces instructions pour limiter le nombre de bugs, pour permettre une lecture plus facile de votre programme, pour l’optimiser et vous permettre de le faire évoluer plus facilement ultérieurement... Dans le langage des informaticiens cela s’appelle faire du génie logiciel. Dans cet ouvrage vous trouverez non seulement, comme dans tout ouvrage sur le langage C++, tous les éléments du langage mais également un ensemble de recommandations recueillies dans le domaine du génie logiciel et qui vous guideront dans l’écriture de vos programmes. En langage C++ on vous ex- plique comment créer des fonctions, ici vous verrez également des recommandations XII Programmation en C++ et Génie Logiciel sur le bon nombre de paramètres, sur ceux qui ne sont pas nécessaires, sur la fa- çon de nommer vos fonctions, sur la façon de découper votre programme en classes... Mais tout d’abord faisons un peu d’histoire pour bien appréhender la philoso- phie du ++. Le langage C++ fait partie des langages orientés objets, c’est-à-dire dont toute la programmation est centrée sur la notion d’objet. Il existe de nom- breux langages orientés objets, plus ou moins récents, comme Smalltalk, Java... Par ailleurs, de nombreux ateliers de développement intègrent maintenant leur propre langage orienté objet. C’est le cas notamment de l’atelier WinDev et du W-langage. Tous ces langages reposent sur les mêmes principes généraux tels que l’héritage, l’encapsulation ..., mais tous ne sont pas conçus à l’identique : uploads/Science et Technologie/ dunod-programmation-en-c-et-genie-logiciel-2007.pdf
Documents similaires










-
42
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mar 02, 2022
- Catégorie Science & technolo...
- Langue French
- Taille du fichier 2.2586MB