Introduction à la POO 1. Histoire de la POO 2. Historique du C# 11 14 La conception orientée objet 1. Approche procédurale et décomposition fonctionnelle 2. La transition vers l'approche objet 3. Les caractéristiques de la POO 3.1 L'objet, la classe et la référence 3.1.1 L'objet 3.1.2 La classe 3.1.3 La référence 3.2 L'encapsulation 3.3 L'héritage 3.4 Le polymorphisme 3.5 L'abstraction 15 16 17 17 17 18 19 20 20 22 23 4. Le développement objet 1/14
4.1 Cahier des charges du logiciel 4.2 Modélisation et représentation UML 4.2.1 Diagrammes de cas d'utilisation 4.2.2 Diagrammes de classes 4.2.3 Énumérations 4.2.4 Diagrammes de séquences 4.3 Rédaction du code et tests unitaires 24 24 24 27 28 34 35 37 Introduction au framework.net et à VS 1. Introduction 2. Environnement d'exécution 3. Le choix des langages 4. Utiliser plusieurs langages 5. Une librairie très complète 6. Des installations simplifiées 7. Un outil de développement complet 39 39 40 40 41 42 44 2/14
Les types du C# 1. "En C#, tout est typé!" 2. "Tout le monde hérite de System.Object" 2.1 Les types Valeurs 2.2 Les types Référence 2.3 Boxing - Unboxing 2.4 Utilisation des méthodes de System.Object 2.4.1 Equals 2.4.2 GetHashCode 2.4.3 ToString 2.4.4 Finalize 2.4.5 Object.GetType et les opérateurs typeof et is 2.4.6 Object.ReferenceEquals 2.4.7 Object.MemberwiseClone 2.5 Le type System.String et son alias string 3. Exercice corrigé 3.1 Énoncé 3.2 Correction 51 56 56 60 61 62 63 66 68 69 70 71 72 75 79 79 79 3/14
Création de classes 1. Introduction 2. Les espaces de noms 3. Déclaration d'une classe 3.1 Accessibilité des membres 3.2 Attributs 3.2.1 Attributs constants 3.2.2 Attributs en lecture seule 3.3 Propriétés 3.4 Constructeur 3.4.1 Étapes de la construction d'un objet 3.4.2 Surcharge de constructeurs 3.4.3 Constructeurs avec valeurs de paramètres par défaut 3.4.4 Chaînage de constructeurs 3.4.5 Les constructeurs de type static 3.4.6 Les constructeurs de type private 3.4.7 Les initialiseurs d'objets 3.5 Destructeur 83 83 90 91 92 93 94 95 103 103 105 105 106 107 108 110 111 4/14
3.6 Autre utilisation de using 3.7 Le mot-clé this 3.8 Méthodes 3.8.1 Déclaration 3.8.2 Passage par valeur et passage par référence 3.9 Mécanisme des exceptions 3.9.1 Présentation 3.9.2 Principe de fonctionnement des exceptions 3.9.3 Prise en charge de plusieurs exceptions 3.9.4 try... catch... finally et using 3.10 Surcharge des méthodes 3.11 Exercice 3.11.1 Énoncé 3.11.2 Conseils 3.11.3 Correction 4. Les interfaces 4.1 Introduction 4.2 Le contrat 4.3 Déclaration d'une interface 4.4 Implémentation 113 114 117 117 121 136 136 137 147 148 152 154 154 155 155 158 158 159 160 161 5/14
4.5 Visual Studio et les interfaces 4.6 Représentation UML d'une interface 4.7 Interfaces et polymorphisme 4.8 Exercice 4.8.1 Énoncé 4.8.2 Conseils 4.8.3 Correction 4.9 Les interfaces du.net 5. Association, composition et agrégation 5.1 Les tableaux 5.2 Les collections 5.2.1 List<> et LinkedList<> 5.2.2 Queue<T> et Stack<T> 5.2.3 Dictionary<TKey, TValue> 5.2.4 Les énumérateurs 5.2.5 La magie du yield 5.3 Exercice 5.3.1 Énoncé 5.3.2 Correction 163 165 165 166 166 167 169 173 175 182 189 190 193 193 194 195 197 197 198 6. Les classes imbriquées 6/14
200 7. Les structures 7.1 Déclaration d'une structure 7.2 Instanciation d'une structure 8. Les classes partielles 9. Les méthodes partielles 10. Les indexeurs 11. Surcharge d'opérateurs 203 203 205 208 209 210 214 Héritage et polymorphisme 1. Comprendre l'héritage 2. Codage de la classe de base et de son héritière 2.1 Interdire l'héritage 2.2 Définir les membres héritables 2.3 Codage de l'héritage 2.4 Exploitation d'une classe héritée 219 220 220 221 221 222 3. Communication entre classe de base et classe héritière 7/14
3.1 Les constructeurs 3.2 Accès aux membres de base depuis l'héritier 3.3 Masquage ou substitution de membres hérités 3.3.1 Codage du masquage 3.3.2 Codage de la substitution 4. Exercice 4.1 Énoncé 4.2 Corrigé 5. Les classes abstraites 6. Les méthodes d'extension 7. Le polymorphisme 7.1 Comprendre le polymorphisme 7.2 Exploitation du polymorphisme 7.3 Les opérateurs is et as 223 223 227 229 231 232 234 234 235 237 238 241 241 242 242 Communication entre objets 1. L'événementiel : être à l'écoute 243 8/14
2. Le pattern Observateur 3. La solution C# : delegate et event 3.1 Utilisation du delegate dans le design pattern Observateur 3.2 Utilisation d'un event 3.3 Comment accompagner l'event de données 3.4 Les génériques en renfort pour encore simplifier 3.5 Les expressions lambda 3.6 Exemple d'utilisation d'event 4. Appels synchrones, appels asynchrones 4.1 Approche 1 4.2 Approche 2 4.3 Approche 3 4.4 Approche 3 avec une expression lambda 5. Exercice 5.1 Énoncé 5.2 Conseils pour la réalisation 5.3 Correction 244 248 251 254 257 258 259 265 272 275 276 276 279 281 281 282 282 9/14
Le multithreading 1. Introduction 2. Comprendre le multithreading 3. Multithreading et.net 4. Implémentation en C# 4.1 Utilisation d'un BackgroundWorker 4.1.1 Communication du thread principal vers le thread secondaire 4.1.2 Abandon depuis le thread primaire 4.1.3 Communication du thread secondaire vers le thread principal 4.1.4 Communication en fin de traitement du thread secondaire 4.1.5 Exemple de code 4.2 Utilisation du pool de threads créé par.net 4.3 Gestion «manuelle» avec Thread/ParameterizedThreadStart 5. Synchronisation entre threads 5.1 Nécessité de la synchronisation 5.2 La décoration Synchronization 5.3 Le mot-clé lock 5.4 La classe Monitor 287 287 290 292 292 295 296 296 296 297 299 302 307 307 309 311 312 10/14
5.5 La classe Mutex 5.6 La classe Semaphore 6. Communication entre threads 6.1 Join 6.2 Les synchronization events 6.3 Communication entre threads secondaires et IHM 6.4 Exercice 6.4.1 Énoncé 6.4.2 Correction 7. La programmation asynchrone 7.1 Le mot-clé async 7.2 Contenu d une méthode async 7.3 Preuve à l appui 7.4 Retours possibles d une méthode async 313 315 315 315 317 324 328 328 328 333 333 333 334 335 P-Invoke 1. Introduction 1.1 Rappel sur les DLL non managées 1.2 P-Invoke et son Marshal 339 340 11/14
340 2. Le cas simple 2.1 Déclaration et appel 2.2 Réglage de Visual Studio pour la mise au point 3. Appel avec paramètres et retour de fonction 4. Traitement avec des chaînes de caractères 4.1 Encodage des caractères 4.2 Encodage des chaînes 4.3 Transmission des chaînes 5. Échange de tableaux 5.1 Du C# au C/C++ 5.2 Du C# au C/C++ puis retour au C# 6. Partage de structures 6.1 Déclaration des structures 6.2 Utilisation des structures 7. Les directives [In] et [Out] 8. Réalisation d un "wrapper" 341 342 345 345 348 348 349 349 352 352 354 356 356 359 362 366 12/14
8.1 Une région "NativeMethods" 8.2 Stockage des informations de la DLL native 8.3 Instanciation de DLL native 8.4 Méthodes d utilisation de la DLL managée depuis le wrapper 8.5 Utilisation du wrapper 9. Exercice 9.1 Énoncé 9.2 Correction 367 368 369 372 373 374 374 375 Les tests 1. Introduction 2. Environnement d exécution des tests unitaires 3. Le projet de tests unitaires 4. La classe de tests 5. Contenu d une méthode de test 6. Traitements de préparation et de nettoyage 377 379 382 383 384 387 13/14
7. TestContext et source de données 8. Automatisation des tests à la compilation 9. Automatisation des tests en dehors de Visual Studio 10. CodedUI 11. Exercice 11.1 Énoncé 11.2 Correction 390 394 395 396 397 397 398 Index 401 14/14