25
Andrew Stellman & Jennifer Greene C# Andrew Stellman & Jennifer Greene Traduction de Sophie Govaere Un guide d’apprentissage Tête la première Un guide de programmation à C# et .Net qui garde les pieds sur terre Dominez vos données avec LINQ Construisez un jeu d’arcane rétro et complet Apprenez comment Suzanne a tordu les lois en vigueur à Objectville grâce aux méthodes d’extension Découvrez les secrets de l’abstraction et de l’héritage Voyez comment Paul a manipulé ses données à l’aide des collections génériques Couvre C# 3.0 et Visual Studio 2008

Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

  • Upload
    ledang

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

Andrew Stellman & Jennifer Greene

Andrew Stellman & Jennifer Greene

C#

Andrew Stellman & Jennifer Greene

Traduction de Sophie Govaere

Un guide d’apprentissage

Tête la premièreUn guide de programmation

à C# et .Net qui garde les pieds sur terre

Dominez vos données avec LINQ

Construisez un jeu d’arcane rétro

et complet

Apprenez comment Suzanne a tordu les lois en vigueur à Objectville grâce aux méthodes d’extension

Découvrez les secrets de

l’abstraction et de l’héritage

Voyez comment Paul a manipulé ses données à l’aide des collections

génériques

Un guide d’apprentissage

Tête la première

Couvre C# 3.0 et

Visual Studio 2008

Page 2: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

Beijing • Cambridge • K�ln • Paris • Sebastopol • Taipei • Tokyo

Andrew StellmanJennifer Greene

Traduction de Sophie Govaere

C# Tête la première

Ne serait-ce pas merveilleux s’il existait un livre sur C#

qui serait plus excitant que de déboguer un code sans fin ? Mais ce

n’est probablement qu’un rêve…

Page 3: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

C# — Tête la première

de Andrew Stellman et Jennifer Greene

© 2008 O’Reilly Media, Inc. Tous droits réservés.

© 2008 O’Reilly Tous droits réservés.

ISBN 10 : 2-35402-094-5 ISBN 13 : 978-2-35402-094-1

Conception : Kathy Sierra, Bert Bates

Responsable éditorial VO : Brett D. McLaughlin

Éditrice VF : Dominique Buraud

Design : Louise Barr

Couverture conçue par : Louise Barr, Steve Fehler

Production : Sanders Kleinfeld

Relecture VO : Colleen Gorman

Relecture VF : Guillaume Barthe & Aurélien Houee

Index : Julie Hawks

Les programmes fi gurant dans ce livre ont pour but d’illustrer les sujets traités. Il n’est donné aucune garantie quant à leur fonctionnement une fois compilés, assemblés ou in terprétés dans le cadre d’une utilisation professionnelle ou commerciale.

Toute représentation ou reproduction, intégrale ou partielle, faite sans le consentement de l’auteur, de ses ayants droit, ou ayants cause, est illicite (loi du 11 mars 1957, alinéa 1er de l’article 40). Cette représen tation ou reproduction, par quelque procédé que ce soit, constituerait une contrefaçon sanctionnée par les articles 425 et suivants du Code pénal. La loi du 11 mars 1957 autorise uniquement, aux termes des alinéas 2 et 3 de l’article 41, les copies ou reproductions strictement réservées à l’usage privé du copiste et non destinées à une utilisation collective d’une part et, d’autre part, les analyses et les courtes citations dans un but d’exemple et d’illustration.

Microsoft, Windows, Visual Studio, MSDN, le logo .NET, Visual Basic et Visual C# sont des marques déposées de Microsoft Corporation.

Aucune abeille, extra-terrestre ou héros de bande dessinées n’ont été maltraités pendant la réalisation de ce livre.

Page 4: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

En mémoire de Sludgie la baleine, qui a nagé jusqu’à Brooklyn le 17 avril 2007.

Tu n’étais dans nos canaux que pour un jour, mais tu restes dans nos cœurs pour toujours.

Page 5: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

viii

Jennifer Greene a étudié la philosophie à l’université mais, comme tout le monde dans cette branche, elle n’a pas pu trouver de travail dans son domaine. Heureusement, elle est douée pour tester des logiciels, elle a donc commencé à le faire pour un service en ligne, ce qui lui a donné un premier bon aperçu de ce qu’est la gestion de projets.

Elle a déménagé à New-York en 1998 pour tester des logiciels dans une entreprise de logiciels de fi nance. Elle dirigeait une équipe de testeurs dans une start-up très sympa qui s’occupait d’intelligence artifi cielle et du traitement des langages naturels.

Depuis, elle a parcouru le monde pour travailler avec différentes équipes et créer toutes sortes de projets logiciels intéressants.

Elle aime voyager, regarder des fi lms de Bollywood, lire une BD à l’occasion, attendre que sa Xbox soit réparée, boire des tonnes de sodas et possède un lévrier whippet.

Andrew Stellman, bien que New-Yorkais, a vécu deux fois à Pittsburgh. La première fois pour passer le diplôme de l’école de science informatique Carnegie Mellon, puis lorsque lui et Jenny ont lancé leur entreprise de consultants et écrit leur premier livre pour O’Reilly.

À son retour dans sa ville natale, son premier travail après l’université fut programmeur à EMI-Capitol Records ; ce qui était en fait logique, puisqu’il a fréquenté le lycée LaGuardia de musique, arts et théâtre pour étudier le violoncelle et la guitare basse. Lui et Jenny ont commencé à travailler ensemble dans une entreprise de logiciels de fi nance, où il dirigeait une équipe de programmeurs. Au fi l des années, il a eu le privilège de travailler avec plusieurs programmeurs incroyablement talentueux et aime à penser qu’il en a retiré un certain savoir.

Quand il n’écrit pas de livres, Andrew s’occupe à créer des logiciels inutiles (mais amusants), à jouer de la musique (et, bien plus, aux jeux vidéo), à étudier le taiji et l’aïkido, à avoir une petite amie prénommée Lisa et à posséder un poméranien.

les auteurs

Jenny et Andrew créent des logiciels et écrivent sur l’ingénierie logicielle ensemble depuis leur première rencontre

en 1998. Leur premier livre, Applied Software Project Management, est paru chez O’Reilly Media en 2005,

puis ce fut, Head First PMP, en 2007.

Ils ont fondé Stellman & Greene Consulting en 2003 pour créer un projet de logiciel très intéressant pour des

scientifiques étudiant l’exposition aux herbicides des vétérans du Vietnam. Quand ils n’écrivent pas de logiciel ou

de livres, ils interviennent à de nombreuses conférences et réunions d’ingénieurs informatiques, d’architectes et de

directeurs de projets.

Consultez leur blog : Building Better Software, à http://www.stellman-greene.com

Jenny

Andrew

Merci d’avoir acheté notre livre ! Nous aimons beaucoup écrire sur ce sujet et nous espérons que vous allez adorer nous lire… … parce que nous savons

que vous allez vous amuser en apprenant C#.

Cette photo (et celle du canal Gowanus) sont de Nisha Sondhe

Page 6: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

ix

Table des matières (version courte)

Table des matières (version longue)

Votre cerveau et C#. Voilà que vous essayez d’apprendre quelque

chose et que votre cerveau fait tout ce qu’il peut pour vous empêcher de

mémoriser. Votre cerveau pense : « Mieux vaut laisser de la place pour les

choses vraiment importantes, comme savoir quels sont les animaux sauvages

qu’il vaut mieux éviter ». Mais comment procéder pour lui faire croire que votre

vie dépend de vos connaissances en C# ?

Intro

À qui s’adresse ce livre ? xxx

Nous savons ce que vous pensez xxxi

La métacognition : apprendre à apprendre xxxiii

Voici ce que vous pouvez faire pour dompter votre cerveau xxxv

Ce dont vous avez besoin pour ce livre xxxvi

Lisez-moi xxxii

L’équipe des relecteurs techniques xxxiv

Remerciements xxxv

Intro xxix

1 Améliorez votre productivité avec C# : des applications en moins de 10 minutes 1

2 Ce n’est rien que du code : sous le capot 43

3 Objets : orientez-vous : donner du sens au code 85

4 Types et références : il est 10h00. Savez-vous où sont vos données ? 123

C# Labo 1 : au champ de courses 163

5 Encapsulation : préservez votre intimité 173

6 Héritage : l’arbre généalogique de votre objet 205

7 Interfaces et classes abstraites : faites tenir leurs promesses à vos classes 251

8 Enums et collections : stocker de grandes quantités de données 309

C# Labo 2 : la quête 363

9 Lire et écrire des fichiers : sauvez le tableau d’octets, sauvez le monde 385

10 Gestion des exceptions : éteindre les incendies, c’est dépassé 439

11 Événements et délégués : ce que fait votre code quand vous regardez ailleurs 483

12 Révision et avant-goût de la suite : savoir, pouvoir et construction de supers trucs 515

13 Contrôles et graphismes : que ça brille 563

14 Capitaine Formidable : la mort de l’objet 621

15 LINQ : aux commandes de vos données 653

C# Labo 3 : les envahisseurs 681

Les restes : les 5 dernières choses dont nous voulions vous parler 703

Page 7: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

x

Des applications en moins de 10 minutes1 Vous voulez construire rapidement de bons programmes ? Avec C#, vous avez un langage de programmation puissant et un outil précieux

à portée de main. Avec l’IDE de Visual Studio, vous n’aurez plus besoin d’écrire

du code compliqué durant des heures pour qu’un bouton fonctionne. Mieux encore,

vous pourrez vous concentrer sur votre travail, plutôt que d’essayer de vous

rappeler le paramètre de méthode qu’il faut pour nommer un bouton ou son libellé.

Intéressé ? Tournez la page et commençons à programmer.

améliorez votre productivité avec C#

Pourquoi devriez-vous apprendre C# ? 2

C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3

Aidez le PDG à supprimer le papier 4

Découvrez les besoins de vos utilisateurs avant de commencer à construire votre programme 5

Voici ce que vous allez construire 6

Ce que vous faites dans Visual Studio… 8

Ce que Visual Studio fait pour vous… 8

Développer l’interface utilisateur 12

Visual Studio, en coulisses 14

Complétez le code auto-généré 15

Vous pouvez déjà lancer votre application 16

Il faut une base de données pour stocker nos informations 18

Créer la table pour la liste des contacts 20

Les champs d’une carte d’un contact sont des colonnes de notre table Gens 22

Finir de construire la table 25

Schématisez vos données pour que votre application puisse y accéder 26

Insérer les données de vos fi ches dans la base de données 28

Relier votre formulaire aux objets de votre base de données avec une source de données 30

Ajouter des contrôles liés à la base de données sur votre formulaire 32

Les bons programmes sont intuitifs 34

Comment transformer VOTRE application en une application pour TOUT LE MONDE 37

Distribuez l’application à vos utilisateurs 38

Vous n’avez PAS fi ni : vous devez tester votre installation 39

Vous avez construit une application complète 40

Nom :

Entreprise :

Téléphone :

E-mail :

Client : Dernier appel :

Hervé Petit

Les industries XYZ

05 01 02 03 99

[email protected]

Oui 26/05/07

Accès aux

données

Solutions du framework .NET

Objets de ty

pe F

orm

Page 8: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xi

Sous le capot

Vous êtes un programmeur, pas un simple utilisateur d’IDE. Vous pouvez accomplir un travail conséquent avec l’IDE. Mais il a des limites. Bien

sûr, on mène beaucoup de tâches répétitives lorsque l’on développe une application

et l’IDE est doué pour vous y aider. Mais travailler avec l’IDE n’est pas une fi n en soi.

Vous pouvez pousser vos programmes à faire bien plus en écrivant du code C#. Une

fois le coup de main pris, il n’y aura rien d’impossible pour vos programmes.

ce n’est rien que du code

2Quand vous faites ceci… 44

…l’IDE fait cela 45

D’où viennent les programmes 46

L’IDE vous aide à coder 48

Quand vous changez quelque chose dans l’IDE, vous modifi ez aussi votre code 50

Anatomie d’un programme 52

Votre programme sait par où commencer 54

Vous pouvez modifi er le point d’entrée du programme 56

Deux classes peuvent se trouver dans le même espace de noms 61

Vos programmes utilisent des variables pour travailleravec des données 62

C# utilise des symboles mathématiques familiers 64

Les boucles réalisent une action en boucle 65

Il est temps de commencer à coder 66

Les instructions if/else prennent des décisions 67

Défi nir des conditions et voir si elles sont vraies 68

Construisez ce formulaire

Espace de nomsClasseMéthode 1instructioninstruction

Méthode 2instructioninstruction

À chaque fois que vous faites un nouveau programme, vous lui définissez un espace de noms pour que son code soit séparé des classes du framework .NET.

Une classe contient une ou plusieurs méthodes. Vos méthodes doivent toujours vivre dans une classe. Et les méthodes sont faites d’instructions, comme celles que vous avez déjà vues.

Une classe contient un morceau de votre programme (même si de très petits programmes peuvent n’avoir qu’une classe).

Page 9: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xii

3 Donner du sens au code

Tous les programmes que vous écrivez résolvent un problème. Quand vous construisez un programme, il vaut mieux commencer par réfl échir au problème

que votre programme est censé résoudre. C’est pourquoi les objets sont vraiment utiles.

Ils vous permettent de structurer votre code à partir du problème à résoudre, pour que vous

puissiez passer votre temps à réfl échir au problème sur lequel vous essayez de travailler

plutôt que de vous enliser dans les mécanismes de l’écriture du code. Si vous utilisez bien

les objets, vous obtenez du code intuitif à écrire, facile à lire et à modifi er.

objets : orientez-vous

Max réfl échit à ses problèmes 86

Le système de navigation de Max réfl échit à ses problèmes 87

La classe Navigateur de Max a des méthodes pour défi nir et modifi er des itinéraires 88

Utilisez ce que vous avez appris pour créer une application simple 89

Max a une idée 90

Max peut utiliser des objets pour résoudre son problème 91

On utilise une classe pour construire un objet 92

Quand on crée un nouvel objet à partir d’une classe,on crée une instance de cette classe 93

Une meilleure solution… avec les objets ! 94

Une instance utilise des champs pour mémoriser les choses 98

Créons des instances ! 99

Merci la mémoire 100

Dans l’esprit de votre programme 101

Vous pouvez utiliser les noms des classes et des méthodes pour rendre votre code intuitif 102

Donnez une structure naturelle à vos classes 104

Les diagrammes de classe vous aident à organiser vos classes logiquement 106

Construire une classe pour des amis 110

Créer un projet pour vos amis 111

Créer un formulaire pour interagir avec vos amis 112

Il existe un moyen plus simple d’initialiser des objets 115

Quelques idées pour concevoir des classes intuitives 116

new Navigateur()

new Navigateur()

Objet Navigat

eurnavigateur3

Objet Navigat

eurnavigateur1

Objet Navigat

eurnavigateur2

new Navigateur()

new

ne

n

Navigateur

DefinitDestination()ModifiePourEviter()ModifiePourInclure()TrouveItineraire()TrouveDureeItineraire()DistanceTotale()

Quand vous définissez une classe, vous définissez ses méthodes, tout comme un plan définit l’ossature d’une maison.

Vous pouvez utiliser un plan pour construire x maisons et vous pouvez utiliser une seule classe pour créer x objets.

Page 10: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xiii

4 Il est 10h00. Savez-vous où sont vos données ?

Types de données, bases de données, une donnée pour une achetée… un sujet incontournable. Sans données, vos programmes sont

inutiles. Vous avez besoin des informations de vos utilisateurs et vous les utiliserez pour

chercher ou produire de nouvelles informations à leur renvoyer. En fait, presque tout ce

que vous faites en programmation implique, d’une manière ou d’une autre, de travailler

avec des données. Dans ce chapitre, vous allez découvrir tous les détails des types de

données en C#, comment travailler avec des données dans votre programme et même

découvrir quelques secrets embarrassants sur les objets (psstt… les objets sont des

données, eux aussi).

types et références

Le type de variable détermine le genre de données qu’elle peut stocker 124

Une variable est comme un gobelet de données à emporter 126

10 kilos de données dans un sac de 5 kilos 127

Même quand un nombre fait la bonne taille, on ne peut pas simplement l’affecter à n’importe quelle variable 128

Si vous convertissez une valeur trop grande, C# l’ajuste automatiquement 129

C# effectue certaines conversions automatiquement 130

Quand vous appelez une méthode, les variables doivent correspondre aux types des paramètres 131

Combiner = avec un opérateur 136

Les objets sont des variables, eux aussi 137

Faites référence à vos objets avec des variables de référence 138

Les références sont comme des étiquettes pour votre objet 139

S’il n’a plus de références, votre objet passe au ramasse-miettes 140

Les références multiples et leurs effets secondaires 142

Deux références impliquent DEUX moyens de modifier les données d’un objet 147

Un cas particulier : les tableaux 148

Les tableaux peuvent aussi avoir beaucoup de variables de référence 149

Bienvenue au stand de sandwichs pas chers de la belle Hélène ! 150

Les objets utilisent des références pour se parler 152

Là où nul objet n’est encore allé 153

Objet Chien 2

fidopouf!

Objet Chien 1Lubie

Chien fido;

Chien lubie = new Chien();

fido = new Chien();

lubie = null;

Objet Chien 2

fido

Objet Chien 1Lubie

Page 11: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xiv

table destable des matièrestable des

Riri, Fifi et Loulou adorent aller voir les courses, mais ils sont las de perdre tout leur argent. Ils ont besoin de vous pour construire un simulateur qui devinera qui va gagner avant qu’ils ne misent leur argent. Si vous faites du bon travail, ils vous offriront un pourcentage de leurs gains.

C# Labo 1Au champ de

courses

Projet : créer un simulateur de circuit de courses 164

Le produit fi ni 172

xiv

Page 12: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xv

5 Préservez votre intimité

Vous avez déjà eu envie d’un peu plus d’intimité ? Vos objets aussi. Tout comme vous n’acceptez pas que quelqu’un en qui vous n’avez

pas confi ance lise votre journal intime ou feuillette vos relevés de banque, de bons objets

ne laissent pas d’autres objets fouiner dans leurs champs. Dans ce chapitre, vous allez

découvrir la puissance de l’encapsulation. Vous allez rendre privées les données de

votre objet et ajouter des méthodes pour protéger l’accès à ces données.

encapsulation

Catherine est organisatrice d’événements 174

Que fait le programme de devis ? 175

Le test de Catherine 180

Chaque option doit être calculée individuellement 182

Il est vite arrivé de mal utiliser vos objets par accident 184

Encapsuler signifi e garder certaines données d’une classe privées 185

Utilisez l’encapsulation pour contrôler l’accès aux champs et aux méthodes de votre classe 186

Mais le champ VraiNom est-il VRAIMENT protégé ? 187

Les champs et méthodes privés ne sont accessibles que de l’intérieur de la classe 188

Quelques idées pour encapsuler des classes 191

L’encapsulation garde vos données impeccables 192

Les propriétés facilitent l’encapsulation 193

Créer une application de test pour la classe Agriculteur 194

Utilisez des propriétés automatiques pour terminer la classe 195

Et si l’on veut modifi er le multiplicateur ? 196

Utilisez un constructeur pour initialiser des champs privés 197

Nombre de personnes.Repas 25 € par per-sonne)

Option santé ?

Alcool(20 € par personne)

Option fantaisie ?

Jus et sodas(5 € par

personne +5% de réduction sur le coût total)

Décorations fantaisie(15 € par personne + 50 € de frais)

Décorationsnormales(7,50 € par personne + 30 € de frais)

Oui

Non

Oui

Non

agentKgb

agentCia

agentMi5

Page 13: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xvi

6 L’arbre généalogique de votre objet

Parfois, on veut VRAIMENT être comme ses parents.Avez-vous déjà vu un objet faire presque exactement ce que vous attendez d’un autre

objet ? Vous êtes-vous laissé aller à penser qu’en changeant juste quelques éléments,

cet objet serait parfait ? Hé bien c’est exactement la raison pour laquelle l’héritage compte

parmi les concepts et techniques les plus puissants de C#. Avant la fi n du chapitre, vous

aurez appris comment sous-classer un objet pour obtenir son comportement, tout en

gardant la souplesse de modifi er ce comportement. Vous éviterez le code dupliqué,

modéliserez le monde réel et obtiendrez du code plus facile à maintenir.

héritage

Catherine organise aussi les anniversaires 206

Il vous faut une classe Anniversaire 207

Encore une chose... pouvez-vous ajouter des frais de 100 € pour les fêtes de plus de 12 personnes ? 213

Si vos classes utilisent l’héritage,vous n’écrirez votre code qu’une seule fois 214

Construisez la maquette de votre classe en allant du généralau plus spécifi que 215

Comment concevriez-vous un simulateur de zoo ? 216

Utilisez l’héritage pour éviter le code dupliqué dans les sous-classes 217

Des animaux différents ont des cris différents 218

Comment regrouper les animaux ? 219

Créer la hiérarchie de classes 220

Une sous-classe étend sa classe de base 221

Utilisez les deux points pour hériter d’une classe de base 222

Nous savons que l’héritage ajoute les champs, propriétéset méthodes de la classe de base à la sous-classe... 225

Une sous-classe peut redéfi nir des méthodes pour modifi er ou remplacer les méthodes dont elle a hérité 226

Partout où vous pouvez utiliser une classe de base,remplacez-la par une de ses sous-classes 227

Une sous-classe peut accéder à sa classe de base avec le mot-clé base 232

Si la classe de base a un constructeur, votre sous-classe doit en avoir un aussi 233

Vous êtes prêt à boucler le travail pour Catherine ! 234

Construire un système de gestion de ruche 239

D’abord, on construit le système de base 240

Utilisez l’héritage pour étendre le système de gestion de ruche 245

Page 14: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xvii

7 Faire tenir leurs promesses aux classes

Des actions valent mieux que des mots. Vous aurez par moment besoin de regrouper vos objets en fonction de ce qu’ils savent

faire plutôt que selon les classes dont ils héritent. C’est là que les interfaces entrent en

jeu : elles vous permettent de travailler avec n’importe quelle classe capable de faire le

travail. Mais un grand pouvoir entraîne une lourde responsabilité et une classe qui

implémente une interface doit promettre de remplir toutes ses obligations... sinon le

compilateur lui brisera les rotules, voyez-vous ?

interfaces et classes abstraites

Retour à la ruche 252

On peut utiliser l’héritage pour créer des classes pour les différents types d’abeilles 253

Une interface indique à une classe qu’elle doit implémentercertaines méthodes et propriétés 254

Utiliser le mot-clé interface pour défi nir une interface 255

Créez maintenant une instance de NectarPiqueur qui fait les deux travaux 256

Les classes qui implémentent une interface doivent inclure TOUTES les méthodes de l’interface 257

Entraînez-vous à utiliser les interfaces 258

On ne peut pas instancier une interface, mais on peut référencer une interface 260

Les références d’interface fonctionnent comme celles des objets 261

Vous pouvez savoir si une classe implémente telle ou telle interface avec « is » 262

Les interfaces peuvent hériter d’autres interfaces 263

Le RoboBzz 4000 peut faire le travail d’une ouvrièresans dépenser un miel précieux 264

is vous dit ce qu’implémente un objet,as dit au compilateur comment traiter votre objet 265

Une Cafetiere est aussi un Appareil 266

On peut surclasser des objets et des interfaces 267

Sous-classer vous permet de retransformer votre appareil en cafetière 268

Surclasser ou sous-classer fonctionne aussi avec les interfaces 269

Au-delà de public et private 273

Les modifi cateurs d’accès changent la portée 274

Certaines classes ne devraient jamais être instanciées 277

Une classe abstraite est comme un croisement entre une classe et une interface 278

Certaines classes ne devraient jamais être instanciées 280

Une méthode abstraite n’a pas de corps 281

Le polymorphisme signifi e qu’un objet peut prendre plusieurs formes 289

Héritage

Abstraction

Encapsulation

Polymorphisme

LieuNomSorties

Description()

PieceDecoration

ExterieurChaud

SéjourSalle à manger

CuisineAvant

Arrière

Jardin

Page 15: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xviii

8 Stocker de grandes quantités de données

Un malheur n’arrive jamais seul. Dans le monde réel, vous n’avez pas la chance de gérer vos données petit bout par petit

bout. Non, vos données vous arrivent par tas, par brassées, par charretées. Il vous faut

des outils très puissants pour tout organiser et c’est là que les collections entrent en jeu.

Elles vous permettent de stocker, trier et gérer toutes les données dans lesquelles vos

programmes doivent s’immerger. Ainsi vous pouvez vous concentrer sur les programmes

qui travaillent avec vos données et laisser les collections s’occuper du suivi.

enums et collections

Les chaînes ne fonctionnent pas toujours pour stocker des catégories de données 310

Les enums vous permettent d’énumérer un ensemble de valeurs valides 311

Les enums permettent de représenter des nombres par des noms 312

On pourrait utiliser un tableau pour créer un jeu de cartes... 315

Il est difficile de travailler avec des tableaux 316

Les listes permettent de conserver facilement des collections de... ce que l’on veut 317

Les listes sont plus souples que les tableaux 318

Les listes rétrécissent et grandissent de façon dynamique 321

Les objets List peuvent stocker n’importe quel type 322

Les initialiseurs de collections fonctionnent comme les initialiseurs d’objets 326

Créons une liste de Canards 327

Les listes sont faciles, mais les TRIER peut être difficile 328

Deux façons de trier vos canards 329

Utilisez IComparer pour indiquer comment trier à votre List 330

Créez une instance de votre objet comparateur 331

IComparer peut faire des comparaisons complexes 332

Utilisez un dictionnaire pour stocker des clés et des valeurs 335

Résumé des fonctionnalités de Dictionary 336

Votre clé et votre valeur peuvent avoir des types différents 337

Vous pouvez construire vos propres méthodes surchargées 343

Et encore d’AUTRES types de collections... 355

Queue applique la règle du premier entré, premier sorti 356

Stack applique la règle du dernier entré, premier sorti 357

pouf!

Page 16: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xix

matières matières matières

C# Labo 2La quête

Votre mission est de construire un jeu d’aventure où un vaillant aventurier s’est lancé dans une quête pour vaincre, niveau après niveau, des ennemis mortels. Vous allez construire un système de tours, ce qui signifi e que le joueur se déplace une fois puis les ennemis se déplacent. Le joueur peut se déplacer ou attaquer, puis chaque ennemi a une chance de se déplacer et attaquer. Le jeu continue jusqu’à ce que le joueur ait vaincu tous les ennemis des sept niveaux ou jusqu’à ce qu’il meure.

Les spécifi cations : construire un jeu d’aventure 364

Le jeu ne fait ne commencer ! 384

xix

Page 17: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xx

9 Sauvez le tableau d’octets, sauvez le monde

Parfois, l’obstination, ça paye. Jusqu’ici, tous vos programmes ont eu une

vie assez courte. Ils se lancent, s’exécutent un moment et se ferment. Mais ce n’est

pas toujours suffisant, surtout si vous gérez des informations importantes. Vous devez

pouvoir enregistrer votre travail. Dans ce chapitre, nous allons voir comment écrire des

données dans un fichier, puis comment lire ces informations dans un fichier. Vous allez

découvrir les classes Stream .NET et vous aurez également un aperçu des mystères de

l’hexadécimal et du binaire.

lire et écrire des fichiers

69 117 114 101 107 97 33

C# utilise des flux pour lire et écrire des données 386

Des flux différents lisent et écrivent des choses différentes 387

Un FileStream écrit des octets dans un fichier 388

Il faut deux objets pour lire et écrire 393

Les données peuvent passer par plusieurs flux 394

Utilisez des objets intégrés pour afficher des boîtes de dialogue 397

Une boîte de dialogue est aussi un objet 399

Utilisez les classes intégrées File et Directory pour travailler avec des fichiers et des répertoires 400

Utilisez les dialogues de fichiers pour ouvrir et enregistrer des fichiers 403

IDisposable s’assure que vos objets sont libérés correctement 405

Éviter les erreurs système de fichiers avec les instructions using 406

Écrire des fichiers implique souvent de prendre beaucoup de décisions 412

Utilisez une instruction switch pour faire le bon choix 413

Ajouter un constructeur JeuCartes() surchargé qui lit un jeu de cartes depuis un fichier 415

Qu’arrive-t-il à un objet quand il est sérialisé ? 417

Mais qu’EST-ce que l’état d’un objet au juste ? Que doit-on enregistrer ? 418

Quand un objet est sérialisé, tous les objets qu’il référence sont aussi sérialisés... 419

La sérialisation vous permet de lire ou écrire un objet entier en une fois 420

Si vous voulez que votre classe soit sérialisable, marquez-la avec l’attribut [Serializable] 421

.NET convertit automatiquement du texte en Unicode 425

C# peut utiliser des tableaux d’octets pour déplacer des données 426

Utilisez BinaryWriter pour écrire des données binaires 427

On peut aussi lire et écrire manuellement des fichiers sérialisés 429

StreamReader et StreamWriter iront très bien 433

objet FileStream

objet FileStream

objet FileStream

objet FileStream

Page 18: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxi

10 Éteindre les incendies, c’est dépassé

Les programmeurs ne sont pas censés être des pompiers. Vous avez travaillé d’arrache-pied, parcouru des manuels techniques, quelques

sympathiques livres Tête la première et vous avez atteint le sommet de votre profession :

maître programmeur. Mais vous avez toujours des appels du boulot parce que votre

programme bogue ou ne se comporte pas comme il le devrait. Rien ne vous gâche

autant le plaisir de programmer que de devoir réparer un bogue bizarre… Mais grâce

à la gestion d’exceptions, vous pouvez écrire du code pour gérer les problèmes qui

se présentent. Mieux encore, vous pouvez même réagir face à ces problèmes et faire

fonctionner le programme malgré eux.

gestion des exceptions

Léo a besoin d’excuses à emporter 440

Quand votre programme lève une exception, .NET génère un objet Exception 444

Le code de Léo a fait quelque chose d’inattendu 446

Tous les objets exception héritent d’Exception 448

Le débogueur vous aide à repérer et éviter les exceptions dans votre code 449

Utilisez le débogueur de l’IDE pour découvrir exactement ce qui a mal tourné dans le gestionnaires d’excuses 450

Oh oh, le code a encore des problèmes... 453

Gérer les exceptions avec try et catch 455

Que se passe-t-il quand vous voulez appeler une méthode à risques ? 456

Utilisez le débogueur pour suivre l’exécution de try/catch 458

Si vous avez du code qui doit TOUJOURS tourner, utilisez un bloc finally 460

Utilisez l’objet Exception pour obtenir des informations sur le problème 465

Utilisez plusieurs blocs catch pour gérer plusieurs types d’exceptions 466

Une classe lève une exception, une autre classe intercepte l’exception 467

Les Abeilles ont besoin d’une exception PlusDeMiel 468

Évitez facilement beaucoup de problèmes : using vous offre gratuitement try et finally 471

Évitez les exceptions : implémentez IDisposable pour nettoyer 472

Le pire bloc catch JAMAIS vu : des commentaires 474

Les solutions temporaires conviennent (temporairement) 475

Quelques idées simples pour la gestion des exceptions 476

Finalement, Léo prend ses vacances... 481

Je m’ennuie au travail aujourd’hui. Je veux aller faire de la plongée. C’est le moment de faire appel au Gestionnaire d’excuses.

Page 19: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxii

11 Ce que fait votre code quand vous regardez ailleurs

événements et délégués

Vos objets commencent à penser par eux-mêmes. Vous ne pouvez pas toujours contrôler ce que font vos objets. Parfois des choses...

arrivent. Vous avez alors besoin que vos objets soient assez intelligents pour anticiper.

C’est le rôle des événements. Un objet publie un événement, d’autres objets s’abonnent

et tout le monde travaille ensemble pour maintenir le mouvement. C’est super, jusqu’à ce

que vous ayez trop d’objets réagissant au même événement. C’est là que les fonctions

de rappel (callback) se révèlent utiles.

Avez-vous déjà souhaité que vos objets puissent penser par eux-mêmes ? 484

Comment un objet SAIT-il quand réagir ? 484

Quand un ÉVÉNEMENT se produit... les objets écoutent 485

Un objet lève son événement, les autres l’écoutent... 486

Puis les autres objets gèrent l’événement 487

Relier les points 488

L’IDE crée automatiquement des gestionnaires d’événement 492

Vos formulaires utilisent tous des événements 498

Relier les transmetteurs de l’événement aux receveurs 500

Un délégué REPRÉSENTE une vraie méthode 501

Les délégués à l’œuvre 502

Tout objet peut s’abonner à un événement public... 505

Utilisez une fonction de rappel plutôt qu’un événement pour raccorder un seul objet à un délégué 507

Une fonction de rappel utilise un délégué, mais PAS d’événement 508

Nous voulons que le Lanceur

intercepte cette balle.Balle.OnBalleEnJeu(70, 24.5)

Lanceur.IntercepteBalle(70, 28)

Quand la balle est

frappée, BalleFrappee()

est appelée.

La balle a été frappé avec une trajectoire à 70 degrés de la plaque qui sert de point de départ et elle va voyager 24,5 mètres.

Le lanceur peut gérer l’angle avec lequel la balle a été frappée et la distance (28 est supérieur à 24,5).

objet Balle

objet Lanceur

Page 20: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxiii

12 Savoir, pouvoir et constructions de supers trucs

révision et avant-goût de la suite

La connaissance ne sert à rien jusqu’à ce qu’on en FASSE quelque chose. Tant que vous n’aurez pas vraiment écrit du code fonctionnel, il est

diffi cile de savoir si vous comprenez vraiment certains des concepts les plus diffi ciles de

C#. Dans ce chapitre, nous allons découvrir quelques nouveautés, entre autres, les timers

et la gestion des collections avec LINQ. Nous allons aussi réaliser la première phase d’une

application très complexe pour vérifi er que vous avez bien compris ce que vous avez

appris dans les chapitres précédents. Attachez vos ceintures… nous allons construire un

super logiciel.

Vous avez fait de gros progrès mon vieux 516

Nous sommes aussi devenu apiculteurs 517

L’architecture du simulateur de ruche 518

Construire le simulateur de ruche 519

Vie et mort d’une fl eur 523

Nous avons maintenant besoin d’une classe Abeille 524

Compléter la classe Ruche 532

La méthode Evolue() de la ruche 533

Nous sommes prêt pour le Monde 534

Nous construisons un système à tours 535

Donner des comportements aux abeilles 542

Le formulaire principal dit au monde d’évoluer 544

Nous pouvons utiliser le Monde pour obtenir des statistiques 545

Les Timers déclenchent des événements à répétition 546

Le minuteur utilise un délégué en coulisses 547

Travaillons avec des groupes d’abeilles 554

Une collection collectionne... des DONNÉES 555

LINQ facilite le travail avec les données dans les collections et les bases de données 557

objet Fle

ur

Age = 0Nectar = 1.5

objet Fle

ur

Age = 17809

Nectar = 3.2

objet Fle

ur

Age = 30291Age = 30291Nectar = .83Nectar = .83Nectar = .83Nectar = .83

MORTE

eueuerMORTEMORTEMORTEMORTEMORTEMORTEMORTEMORTEMORTEMORTEVivante = false

Vie e t mort d’une f leur

Page 21: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxiv

13 Que ça brille

contrôles et graphismes

Il faut parfois prendre les graphismes en main. Nous avons passé beaucoup de temps à nous reposer sur les contrôles pour gérer tout

l’aspect de nos applications. Mais cela n’est pas toujours suffi sant, comme pour animer

une image. Une fois que l’on entre dans l’animation, on en vient à créer ses propres

contrôles pour des programmes .NET, y ajouter peut-être un peu de double buffering et

même dessiner directement sur des formulaires. Tout commence avec l’objet Graphics,

les Bitmaps et une détermination à ne pas accepter le statu quo au niveau du graphisme.

Vous utilisez des contrôles depuis le début pour interagir avec vos programmes 564

Les contrôles du formulaire sont de simples objets 565

Ajoutez un agentDeRendu à votre architecture 568

Les contrôles conviennent bien aux éléments d’affi chage visuel 570

Créer votre premier contrôle animé 573

Vos contrôles doivent aussi libérer leurs contrôles ! 577

Un contrôle utilisateur permet de construire un contrôle 578

Ajoutez au projet les Forms de la ruche et du champ 582

Créer l’AgentDeRendu 583

Examinons ces problèmes de performance de plus près 590

Vous avez redimenionné vos Bitmaps grâce à un objet Graphics 592

Les ressources de votre image sont stockées dans des objets Bitmap 593

Utilisez System.Drawing pour CONTRÔLER les graphismes 594

Découverte des graphismes GDI+ en 30 secondes 595

Utilisez des Graphics pour dessiner une image sur un formulaire 596

Graphics peut régler notre problème de transparence... 601

Utilisez Paint pour fi xer vos graphismes 602

Gros plan sur la façon dont les formulaires et les contrôles se repeignent 605

Le double buffering lisse l’apparence de l’animation 608

Le double buffering est intégré aux Forms et aux contrôles 609

Imprimer avec un objet Graphics et un gestionnaire d’événement 614

PrintDocument fonctionne avec le dialogue d’impressionet imprime des objets fenêtre d’aperçu 615

Page 22: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxv

14CAPITAINE FORMIDABLELA MORT

DE L’OBJET

Capitaine Formidable, l’objet le plus extraordinaire d’Objectville, poursuit son pire ennemi... 622

Votre dernière chance de FAIRE quelque chose... le finaliseur de votre objet 628

Quand un finaliseur s’exécute-t-il, EXACTEMENT ? 629

Dispose() fonctionne avec using, les finaliseurs fonctionnent avec le ramasse-miettes 630

Les finaliseurs ne peuvent pas compter sur la stabilité 632

Sérialiser un objet dans sa méthode Dispose() 633

Pendant ce temps, dans les rues d’Objectville... 636

Une struct ressemble à un objet... 637

..mais ne vit pas sur le tas 637

Les valeurs sont copiées, les références sont affectées 638

Les structs sont des types de valeur ; les objets des types de référence 639

La pile vs. le tas : plus d’infos sur la mémoire 641

Capitaine Formidable... pas tant que ça 645

Les méthodes d’extension ajoutent des nouveaux comportements à des classes EXISTANTES 646

Étendre un type fondamental : string 648

Page 23: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxvi

15 Aux commandes de vos données

LINQ

Ce monde est gouverné par les données... il vaut mieux savoir comment vivre avec. Fini le temps où l’on pouvait programmer pendant des jours,

voire des semaines, sans gérer des masses de données. Aujourd’hui, tout est centré

sur les données. D’ailleurs, vous devrez souvent travailler avec des données provenant

de plusieurs sources... et dans différents formats. Bases de données, XML, collections

d’autres programmes... tout cela fait partie du travail d’un bon programmeur en C#. C’est

là que LINQ entre en jeu. LINQ vous permet non seulement de lancer des requêtes de

façon simple et intuitive, mais aussi de regrouper des données et de fusionner des

données de différentes sources.

Un projet facile... 654

...mais c’est la pagaille dans les données 655

LINQ peut récupérer des données de différentes sources 656

Les collections .NET sont déjà prêtes pour LINQ 657

LINQ rend les requêtes faciles 658

LINQ est simple... pas vos requêtes 659

LINQ est versatile 662

LINQ peut combiner vos résultats dans des groupes 667

Combiner les valeurs de Romain dans des groupes 668

Combiner deux collections en une requête avec join 671

Romain a économisé un paquet de blé 672

Connecter LINQ à une base de données SQL 674

Utilisez une requête avec join pour relier Starbuzz et Papier d’Objectville 678

Page 24: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxvii

C# Labo 3Les envahisseurs

matières matières matières

Dans ce labo, vous allez rendre hommage à l’un des jeux les plus populaires, vénérés et répliqués de l’histoire des jeux vidéo, un jeu qui n’a pas besoin d’être présenté plus longuement. Il est temps de créer les Envahisseurs.

Le grand-père des jeux vidéo 682

Pourtant il reste des choses à faire... 701

xxviixxviixxvii

Page 25: Un guide d’apprentissage C# - O'Reilly France · Pourquoi devriez-vous apprendre C# ? 2 C# et l’IDE de Visual Studio simplifi ent beaucoup de tâches 3 Aidez le PDG à supprimer

table des matières

xxviii

A Les 5 dernières choses dont nous voulions vous parler

les restes

La fête ne fait que commencer ! Nous vous avons présenté de nombreux outils effi caces pour créer des logiciels

puissants avec C#. Mais il n’était pas possible d’aborder ici tous les outils,

technologies ou techniques ; nous aurions manqué de pages. Nous avons dû prendre

des décisions très diffi ciles quand aux sujets à développer. Ainsi, voici ceux qui ont été

omis ; même si nous n’avons pas pu les aborder, ils restent importants et utiles à nos

yeux et nous voulions vous en faire une courte présentation.

n°1 LINQ to XML 704

n°2 Refactorisation 706

n°3 Quelques-uns de nos composants préférés de la Boîte à outils 708

n°4 Applications console 710

n°5 Windows Presentation Framework 712

Saviez-vous que C# et le framework .NET peuvent... 714