4

Click here to load reader

Débuter La Programmation Avec C#

  • Upload
    niko

  • View
    7.981

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Débuter La Programmation Avec C#

A border la programmation Windows n'est pas une minceaffaire. Windows est un système d'exploitation multi

tâches complexe, qui ne se laisse pas aisément dompter. Ensuitese pose le problème des outils. Windows est écrit en C. Alors dé-buter avec ce langage est un choix qui se tient. Il existe un com-pilateur libre, lcc-win32, doté d'une documentation suffisante,même pour entreprendre l'écriture de gros programmes. Nousavons d'ailleurs consacré une série d'articles à ce thème il y aquelques temps dans Programmez! Toutefois, cette approche com-porte des difficultés. Il est nécessaire de bien maîtriser C pouravoir une chance de s'en sortir. Ensuite, il faut comprendre lastructure complexe d'une application C asynchrone, c'est à direpilotée par les événements. Enfin, le comportement des appelssystème n'est pas toujours simple à appréhender. Loin de làmême !Apprendre la programmation Windows à travers le langage C# estune autre possibilité, très intéressante. C# est le dernier langagesorti des têtes pensantes de Microsoft. Certes, concevoir C#comme un outil d'apprentissage ou pédagogique, n'a pas été lamotivation première de Microsoft ;-) Mais le fait est, que C# est unlangage robuste, sûr à l'exécution et facile à apprendre. Orientéobjet, sa bibliothèque d'exécution est un ensemble de classes ,quiconstituent une sur-couche aux APIs en C du système, ce qui ensimplifie considérablement la programmation, tout en apportantune meilleure concision du code. Enfin, considération non négli-geable, il est possible de programmer en C# uniquement avec desoutils gratuits. C'est d'ailleurs cet aspect de la question qui nousintéresse aujourd'hui. Nous ne nous adressons pas aux profes-sionnels, qui ont les moyens de s'offrir l'environnement VisualStudio .NET et qui n'ont que faire de nos conseils. Nous nousadressons aux débutants fauchés, mais pleins de bonne volonté :)Nous considérons toutefois que le lecteur à quelques notions deprogrammation objet.

Le matériel et les outils

Microsoft permet de télécharger l'environnement appelé "Micro-soft .NET Framework Software Development Kit," qui contientabsolument tout ce qu'il faut pour écrire des programmes Win-dows en C#, y compris une documentation exhaustive. Seulementil y a une ombre au tableau : il vous faut un système d'exploita-tion costaud. Autrement dit, vous devez programmer sur :• Microsoft Windows NT 4.0• Microsoft Windows 2000• Microsoft Windows XPNotons que Windows XP Pro est requis pour une utilisation com-plète du SDK. Cependant, avec un 'petit' XP, seules les classesasp.net sont inopérantes, ce qui ne fera pas défaut au débutant.La bonne nouvelle est, qu'une application C# peut être déployée

C#, langage solide et

relativement facile à

apprendre, est un

bon choix pour se

lancer dans la

programmation

Windows.

PRAT

IQUE

C#NIVEAU : DÉBUTANT

Programmez N°49 • JANVIER 2003

68

Par Frédéric Mazué

Débuter la programmationWindows avec C#

Page 2: Débuter La Programmation Avec C#

et tourner sur un Windows 98 ou Millénium, pourvu que les librai-ries d'exécution .NET soient installées sur ces systèmes. Etantaverti de tout cela, vous pouvez vous rendre à : http://msdn.micro-soft.com/downloads/ pour tenter l'aventure et télécharger ce pan-tagruélique bébé de 137 Mo. Si vous avez une connexionpoussive, l'achat du Cd-Rom pour moins de 10 dollars est uneoption à considérer sérieusement. Enfin, puisqu'on en est auxdépenses, l'achat d'un petit livre de poche sur C# peut être unebonne idée. Il en existe d'excellents pour des prix ridicules. Parexemple 'Formation à C# -- Microsoft Press', vous apprendra toutce dont vous avez besoin pour 10 Euros. Une fois en possession de la SDK, vous devez bien sûr l'installer,ce qui ne pose pas de problème. L'opération terminée, ouvrez unefenêtre console et lancez le compilateur C# comme ceci :

csc

Si vous voyez un message du genre :

Microsoft (R) Visual C# .NET Compiler version 7.00.9466for Microsoft (R) .NET Framework version 1.0.3705Copyright (C) Microsoft Corporation 2001. All rights reserved.

Tout est en ordre.

Les éditeurs

Un programme en C# doit être écrit dans un ou plusieurs fichiers,contenant uniquement du texte, pour pouvoir être traités par lecompilateur. Pour cette raison, l'emploi d'un programme de traite-ment de texte, qui insère des caractères spéciaux dans le docu-ment est à proscrire. Vous pouvez employer le rudimentairebloc-note (Notepad) ou le un peu moins fruste Wordpad, pourvuque vous sauvegardiez vos documents au format texte. Cela dit, ilest pertinent de vous équiper d'un éditeur dédié à la programma-tion. Il en existe de nombreux, disponibles sur le net. Je vous sug-gère de considérer Eclipse (http://www.eclipse.org/). Cet éditeurencore jeune, mais très prometteur (figure 1) dispose d'un pluginC# que vous pouvez téléchargez à http://www.improve.com.Sachez toutefois que Java (Jdk >= 1.3) doit être présent sur votremachine, pour utiliser Eclipse. Une autre possibilité, celle qu'en tant que vieux dinosaure je pré-fère, est d'employer le légendaire éditeur Emacs(http://www.gnu.org) En fait j'util ise XEmacs(http://www.xemacs.org), dont l'interface est plus agréable. Emacsdispose désormais de nombreux modes C#. Vous les trouverezfacilement sur le Web. Certains de ces modes sont très puissants,mais assez lourds et intéresseront principalement les utilisateurschevronnés d'Emacs. Je vous suggère de télécharger un modeEmacs C# simple, mais amplement suffisant àhttp://davh.dk/script/. L'installation de ce mode, qui vient sous laforme d'un seul fichier, consiste à déposer ce dernier dans le sous-

répertoire xemacs-packages\lisp\prod-modes de votre installationde XEmacs. Ensuite, ajoutez ces lignes à la fin du fichier de confi-guration .emacs.el ou init.el :

(autoload 'csharp-mode "csharp-mode" "Major mode for editing C# code." t)

(setq auto-mode-alist (cons '( "\\.cs\\'" . csharp-mode ) auto-mode-alist ))

Si vous ne savez pas où localiser ce fichier, accédez y directementdepuis le menu 'Options|Edit Init File' d'Emacs. Tout est ensuiteautomatique.Si au lieu d'Emacs, vous utilisez XEmacs, et selon la version decelui-ci, il se peut que vous vous heurtiez à un message d'erreurpour les fichiers C#:

file mode spécification error: (void-variable font-lock-constant-face)

La raison en est que la variable font-lock-constant-face, qui doitdétenir une fonte, n'existe pas par défaut dans votre XEmacs. Poury remédier, ajouter ces deux lignes :

(setq font-lock-constant-face nil)(make-face 'font-lock-constant-face)

JUSTE AVANT les lignes ajoutées plus haut.

Un coucou traditionnel

Il est maintenant temps de passer à la pratique en écrivant le pro-gramme traditionnel. On suppose que le texte de ce code se situedans un ficher nommé coucou.cs.

class Coucou{

public static void Main(){

System.Console.WriteLine("Coucou !");}

}

Programmez N°49 • JANVIER 2003

69

> Figure 1: Ecriture de code C# avec Eclipse.

Page 3: Débuter La Programmation Avec C#

PRAT

IQUE

NIVEAU : DÉBUTANT

Programmez N°49 • JANVIER 2003

70

C#

Cet article n'ayant pas pour but d'expliquer C#, mais seulementd'apprendre à utiliser des outils, nous ne donnons maintenantque les explications minimum pour comprendre ce code.

• C# est un langage objet. Un programme C# est constitué d'uneou plusieurs classes. Une classe dans le code source devient unobjet lors de l'exécution.

• Un programme C# doit avoir au moins une classe ayant uneméthode Main (avec un m majuscule). Cette méthode est alors lepoint d'entrée du programme, c'est à dire que l'exécution de toutprogramme C# commence par cette méthode Main.

• C# est équipé à la base d'un énorme jeu de classes, groupéesdans des namespace ou espaces de noms.

• Les classes ayant des propos communs sont groupés dans unmême namespace. Il est possible d'accéder à une classe avec unenotation pointée. Ainsi System.Console fait référence à la classeConsole de l'espace de nom 'System'.

• On invoque les méthodes d'une classe ou d'un objet égalementavec cette notation pointée. Finalement System.Console.Writelineinvoque la méthode 'WriteLine' de la classe 'Console' de l'espacede nom 'System'

Le Framework SDK vient avec une documentation complète. Vouspouvez connaître tous les espaces de noms, toutes les classes etleurs méthodes à votre disposition. Il suffit d'ouvrir la documenta-tion, puis de choisir 'Reference' puis 'Class Libray' (figure 2). Usezet abusez de cette documentation.

Le compilateur C#

Apprenons maintenant à utiliser le compilateur C#. Celui-ci vatransformer le fichier texte coucou.cs en un programme exécu-table. Dans une console et en étant situé dans le répertoire conte-nant le fichier coucou.cs, tapez :

csc coucou.cs

Dès que le compilateur rend la main, vous pouvez apprécier lerésultat en tapant 'coucou' (figure 3).Le compilateur csc est relativement intelligent et a pris beaucoupd'initiatives par lui-même. Il a généré un programme exécutable etconnecté celui-ci à une librairie d'exécution de C#. Dans ce cas, lalibrairie est System.dll. Il est simple de connaître le nom de toutesles librairies existantes: à chaque espace de noms de la documen-tation correspond un fichier de même nom plus l'extension.dll.Exemples :

Namespace Librairie

System System.dllSystem.Drawing System.Drawing.dllSystem.Windows.Forms System.Windows.Forms.dlletc. etc.

Compiler du code, en se reposant sur la bonne volonté du compi-lateur, va bien pour de petits exemples. Mais très vite apparaîtra lebesoin d'être beaucoup plus directif. Ainsi, nous pouvons spécifierexplicitement au compilateur que nous voulons qu'il génère unexécutable de nom 'coucou' et qu'il y joigne la librairie System.dll.On procède alors en utilisant des commutateurs en ligne de com-mande:

• /target ou /t peut être suivi de exe, winexe, library ou module,pour générer respectivement: un exécutable console, un exécu-table Windows, un module ou une librairie.

• /out est suivi par le nom du fichier cible.

• /reference ou /r est suivi du nom des librairies qui seront jointesà l'exécutable.

Ainsi nous aurions pu compiler notre programme comme ceci:

csc /t:exe /r:System.dll /out:coucou.exe coucou.cs

(Remarque: En pratique la librairie System.dll est systématique-ment jointe par le compilateur C#. L'exemple ci-dessus a avanttout une vocation pédagogique.) S'il est nécessaire de joindre plusieurs librairies, on énumèrecelles-ci en les séparant par des virgules. Par exemple :

/r:System.dll,System.Drawing.dll,System.Windows.Forms.dll

Attention! Il ne doit pas y avoir d'espaces dans une telle énuméra-tion. Ainsi :

/r:System.dll, System.Drawing.dll,System.Windows.Forms.dll

est invalide. On verra dans un article à venir qu'il peut être pra-tique de répéter un commutateur. Ainsi :

csc /t:exe /r:System.dll /r:System.Drawing.dll /out:coucou.exe coucou.cs

serait parfaitement correct.

Diviser pour régner

Avant d'aborder la programmation Windows et donc de faire deschoses amusantes, nous devons acquérir encore un savoir faire.Dès qu'un programme grossit, il devient malaisé, voire insuppor-table de concentrer le code dans un seul fichier. Nous devons doncapprendre à fragmenter un programme en de multiples petitsfichiers et à faire en sorte que le compilateur regroupe tout ça, lors

> Figure 2: La documentation du SDK décrit tous les espaces de noms ettoutes les classes de C#.

Page 4: Débuter La Programmation Avec C#

Programmez N°49 • JANVIER 2003

71

de la génération de l'application. La technique est simple. Il y auraun fichier 'principal' et les autres fichiers. Ces autres fichiersseront compilés séparément un à un, non pas en exécutable maisen modules. Un module peut être vu comme un fichier intermé-diaire, analogue à un fichier objet du langage C. Soit le fichier prin-cipal suivant :

// fichier coucou.csclass Coucou{public static void Main(){

DireBonjour coucou_ext = new DireBonjour();coucou_ext.Bonjour();

}}

et le fichier secondaire suivant :

// fichier CoucouExterne.csclass DireBonjour{

public void Bonjour(){

System.Console.WriteLine("Bonjour a tous :-)");}

}

On compile d'abord les fichiers secondaires en modules. Nous n'en avons qu'un, donc:

csc /t:module /out:ce.ntm CoucouExterne.cs

Remarquez le commutateur /t qui demande la génération d'unmodule. L'extension .ntm du fichier généré, est une abréviation enlieu et place de .NeTModule, utilisé par défaut par le compilateur.Nous n'avons maintenant plus qu'à compiler le fichier principa,l eny intégrant notre module:

csc /t:exe /out:coucou.exe /addmodule:ce.ntm coucou.cs

Et voilà! (figure 4)

Mon make à moiNous savons éclater un programme en plusieurs morceaux. Lerevers de la médaille est qu'il faut recompiler sans omission toutfichier, après modification, puis recompiler le fichier principal, pourmettre l'application à jour. Ce qu'il nous faut, est un utilitaire pourautomatiser cette tâche fastidieuse. Un tel utilitaire s'appelle unmake. Vous pouvez télécharger gratuitement le GNU make àhttp://www.gnu.org. Pour installer le make, il suffit de décompres-ser l'archive et de mettre le PATH de votre système à jour, pourqu'il pointe sur les exécutables.

Ceci fait, pour assurer la compilation de votre projet, vous devezécrire un fichier Makefile. Nous en apprendrons les secrets petit àpetit. Voici le makefile capable de générer notre projet:

CC=cscREF=/r:System.dllTARGETTYPE=/t:exeMODULES=ce.ntmADDMODULES=/addmodule:ce.ntmTARGET=coucou.exe

$(TARGET): coucou.cs $(MODULES)$(CC) $(ADDMODULES) $(TARGETTYPE) $(REF) /out:$(TARGET) coucou.cs

ce.ntm: CoucouExterne.cs$(CC) /t:module $(REF) /out:ce.ntm CoucouExterne.cs

clean:del *.exedel *.ntm

Attention !! les lignes indentées DOIVENT débuter par une tablatu-re et ne DOIVENT contenir AUCUN caractère d'espacement. Sinonvous vous heurteriez à des messages d'erreur à faire dresser lescheveux sur la tête.

L'opération de génération se lance alors par la seule commande'make' dans la console (figure 5). Notez que make peut être lancédirectement depuis XEmacs. Même chose depuis Eclipse, si vousdéclarez make comme un outil externe. Remarquez comment réagit

make, si vous le lancez une seconde fois. Essayez ensuite de modi-fier un des fichiers puis relancez make. Observez le résultat.Nous savons désormais tout ce qu'il nous faut, pour créer debeaux programmes en C#. Nous mettrons cela en pratique la pro-chaine fois, avec des applications Windows fenêtrées. C'est légiti-me me direz vous :-) ■

par Frédéric Mazué

[email protected]

> Figure 3: Notre première compilation. Un début prometteur.

> Figure 4: Compilation en deux temps.

> Figure 5: Automatisez le travail de compilation avec un utilitaire make.