• Aucun résultat trouvé

Dans le chapitre précédent, nous avons parlé des objets mais nous avons également parlé de la définition de l’objet, de sa structure. Eh bien, c’est exactement ça, une classe.

Une classe est une manière de représenter un objet. Le C# nous permet de créer des classes.

Nous avons déjà pu voir une classe dans le code que nous avons utilisé précédemment et qui a été généré par Visual C# Express, la classe Program. Nous n’y avons pas fait trop attention, mais voilà à peu près à quoi elle ressemblait :

Code : C#

class Program {

static void Main(string[] args) {

} }

C’est elle qui contenait la méthode spéciale Main() qui sert de point d’entrée à l’application.

Nous pouvons découvrir avec des yeux neufs le mot clé class qui comme son nom le suggère permet de définir une classe, c'est-à-dire la structure d’un objet.

Rappelez-vous, les objets peuvent avoir des caractéristiques et faire des actions.

Ici, c’est exactement ce qu’il se passe. Nous avons défini la structure d’un objet Program qui contient une action : la méthode Main().

Vous aurez remarqué au passage que pour définir une classe, nous utilisons à nouveau les accolades permettant de créer un bloc de code qui délimite la classe.

Passons sur cette classe particulière et lançons-nous dans la création d’une classe qui nous servira à créer des objets. Par exemple, une classe Voiture.

fichier, du même nom que la classe, qui lui sera entièrement dédié.

Une règle d’écriture commune à beaucoup de langage de programmation est que chaque fichier doit avoir une seule classe. Faisons un clic droit sur notre projet pour ajouter une nouvelle classe :

Visual C# express nous ouvre sa fenêtre permettant de faire l’ajout d’un élément en se positionnant sur l’élément Classe. Nous pourrons donner un nom à cette classe : Voiture.

Vous remarquerez que les classes commencent en général par une majuscule. Visual C# Express nous génère le code suivant :

Code : C# using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MaPremiereApplication { class Voiture { } }

Nous retrouvons le mot-clé class suivi du nom de notre classe Voiture et les accolades ouvrantes et fermantes permettant de délimiter notre classe. Notons également que cette classe fait partie de l’espace de nom MaPremièreApplication qui est l’espace de nom par défaut de notre projet. Pour nous simplifier le travail, Visual C# Express nous a également inclus quelques espaces de noms souvent utilisés.

Mais pour l’instant cette classe ne fait pas grand-chose.

Comme cette classe est vide, elle ne possède ni propriétés, ni actions. Nous ne pouvons absolument rien faire avec à part en créer une instance, c'est-à-dire un objet. Cela se fait grâce à l’utilisation du mot-clé new. Nous y reviendrons plus en détail plus tard, mais cela donne :

Code : C#

static void Main(string[] args) {

Voiture voitureNicolas = new Voiture(); Voiture voitureJeremie = new Voiture(); }

Nous avons créé deux instances de l’objet Voiture et nous les stockons dans les variable voitureNicolas et voitureJeremie.

Si vous vous rappelez bien, nous aurions logiquement dû écrire : Code : C#

MaPremiereApplication.Voiture voitureNicolas = new

MaPremiereApplication.Voiture();

Ou alors positionner le using qui allait bien, permettant d’inclure l’espace de nom MaPremiereApplication.

En fait, ici c’est superflu vu que nous créons les objets depuis la méthode Main() qui fait partie de la classe Program faisant partie du même espace de nom que notre classe.

Les méthodes

Nous venons de créer notre objet Voiture mais nous ne pouvons pas en faire grand-chose. Ce qui est bien dommage. Ça serait bien que notre voiture puisse klaxonner par exemple si nous sommes bloqués dans des embouteillages. Bref, que notre voiture soit capable de faire des actions. Qui dit « action » dit « méthode ».

comme nous l’avons déjà vu, directement dans le corps de la classe : Code : C# class Voiture { void Klaxonner() { Console.WriteLine("Pouet !"); } }

Notez quand même l’absence du mot-clé static que nous étions obligés de mettre avant. Je vous expliquerai un peu plus loin pourquoi.

Ce qui fait que si nous voulons faire klaxonner notre voiture, nous aurons juste besoin d’invoquer la méthode Klaxonner() depuis l’objet Voiture, ce qui s’écrit :

Code : C#

Voiture voitureNicolas = new Voiture(); voitureNicolas.Klaxonner();

Cela ressemble beaucoup à ce que nous avons déjà fait. En fait, nous avons déjà utilisé des méthodes sur des objets. Rappelez- vous, nous avons utilisé la méthode Add() permettant d’ajouter une valeur à une liste :

Code : C#

List<int> maListe = new List<int>(); maListe.Add(1);

Comme nous avons un peu plus de notions désormais, nous pouvons remarquer que nous instancions un objet List (plus précisément, une liste d’entier) grâce au mot clé new et que nous invoquons la méthode Add de notre liste pour lui ajouter l’entier 1.

Nous avons fait pareil pour obtenir un nombre aléatoire, dans une écriture un peu plus concise. Nous avions écrit : Code : C#

int valeurATrouver = new Random().Next(0, 100); Ce qui peut en fait s’écrire :

Code : C#

Random random = new Random();

int valeurATrouver = random.Next(0, 100);

Nous créons un objet du type Random grâce à new puis nous appelons la méthode Next() qui prend en paramètres les bornes du nombre aléatoire que nous souhaitons obtenir (0 étant inclus et 100 exclu). Puis nous stockons le résultat dans un

Et oui, nous avons manipulé quelques objets sans le savoir …

Revenons à notre embouteillage et compilons le code nous permettant de faire klaxonner notre voiture : Code : C#

Voiture voitureNicolas = new Voiture(); voitureNicolas.Klaxonner();

Impossible de compiler, le compilateur nous indique l’erreur suivante : Code : Console

MaPremiereApplication.Voiture.Klaxonner()' est inaccessible en raison de son niveau de protection

Diantre ! Déjà un premier échec dans notre apprentissage de l’objet !

Vous aurez deviné grâce au message d’erreur que la méthode Klaxonner() semble inaccessible. Nous expliquerons un peu plus bas de quoi il s’agit. Pour l’instant, nous allons juste préfixer notre méthode du mot-clé public, comme ceci :

Code : C#

class Voiture {

public void Klaxonner() {

Console.WriteLine("Pouet !"); }

}

Nous allons y revenir juste en-dessous, mais le mot-clé public permet d’indiquer que la méthode est accessible depuis n’importe où.

Wahou, notre première action d’un objet.

Bien sûr, ces méthodes peuvent également avoir des paramètres et renvoyer un résultat. Par exemple : Code : C#

class Voiture {

public bool VitesseAutorisee(int vitesse) { if (vitesse > 90) return false; else return true; } }

Cette méthode accepte une vitesse en paramètre et si elle est supérieure à 90, alors la vitesse n’est pas autorisée. Cette méthode pourrait également s’écrire :

Code : C#

class Voiture {

public bool VitesseAutorisee(int vitesse) {

return vitesse <= 90; }

}

En effet, nous souhaitons renvoyer faux si la vitesse est supérieure à 90 et vrai si la vitesse est inférieure ou égale.

Donc en fait, nous souhaitons renvoyer la valeur du résultat de la comparaison d’infériorité ou d’égalité de la vitesse à 90, c'est-à -dire :

Code : C#

class Voiture {

public bool VitesseAutorisee(int vitesse) {

bool estVitesseAutorisee = vitesse <= 90; return estVitesseAutorisee;

} }

Ce que nous pouvons écrire finalement en une seule ligne comme précédemment.

Il est bien sûr possible d’avoir plusieurs méthodes dans une même classe et elles peuvent s’appeler entre elles, par exemple : Code : C#

class Voiture {

public bool VitesseAutorisee(int vitesse) {

return vitesse <= 90; }

public void Klaxonner() {

if (!VitesseAutorisee(180))

Console.WriteLine("Pouet !"); }

}

Quitte à rouler à une vitesse non autorisée, autant faire du bruit !