Tu sais déjà programmer. Tu sais déclarer des variables, écrire des fonctions, utiliser des listes. Maintenant, on change de perspective. En programmation orientée objet, on ne pense plus en termes d'instructions, mais en termes d'objets — des entités autonomes qui savent ce qu'elles sont et ce qu'elles peuvent faire. C# est un langage conçu pour ça, et ce premier chapitre pose la brique fondamentale : la classe.
À la fin de ce chapitre, tu seras capable de :
| # | Notion | En une phrase |
|---|---|---|
| 1 | Classe | Le plan de construction — le moule qui décrit à quoi ressemble un objet |
| 2 | Objet | Une instance concrète créée à partir d'une classe |
| 3 | Attribut | Une donnée propre à chaque objet (ex : la couleur d'une voiture) |
| 4 | Méthode | Une action que l'objet sait effectuer (ex : démarrer) |
| 5 | Instanciation | L'acte de créer un objet à partir d'une classe avec le mot-clé new |
Imagine une usine automobile. L'ingénieur dessine un plan de fabrication pour la Peugeot 208 : couleur, nombre de portes, motorisation... Ce plan, c'est la classe.
Quand l'usine fabrique une vraie voiture à partir de ce plan, elle crée un objet (une instance). On peut fabriquer des dizaines de voitures à partir du même plan : chacune est un objet différent, mais elles partagent la même structure.
Classe = le plan (existe une seule fois dans le code)
Objet = la voiture réelle (on peut en créer autant qu'on veut)
class Voiture
{
// Attributs : les données de chaque voiture
public string Marque;
public string Couleur;
public int NombreDePortes;
// Méthode : une action que la voiture peut effectuer
public void Demarrer()
{
Console.WriteLine($"{Marque} démarre. Vroum !");
}
public void AfficherInfos()
{
Console.WriteLine($"Voiture : {Marque} | Couleur : {Couleur} | Portes : {NombreDePortes}");
}
}
class déclare une nouvelle classeMarque, Couleur, NombreDePortes) stockent les données de l'objetDemarrer(), AfficherInfos()) définissent ce que l'objet peut fairepublic signifie que ces membres sont accessibles depuis l'extérieur de la classe (on reviendra sur ce point au chapitre 2)Pour créer un objet à partir de la classe, on utilise le mot-clé new :
// Création (instanciation) d'un objet de type Voiture
Voiture maVoiture = new Voiture();
// On donne des valeurs à ses attributs
maVoiture.Marque = "Peugeot";
maVoiture.Couleur = "Rouge";
maVoiture.NombreDePortes = 5;
// On appelle ses méthodes
maVoiture.AfficherInfos(); // Voiture : Peugeot | Couleur : Rouge | Portes : 5
maVoiture.Demarrer(); // Peugeot démarre. Vroum !
. (opérateur d'accès)Pour accéder aux attributs ou aux méthodes d'un objet, on utilise le point . :
nomObjet.Attribut
nomObjet.Methode()
C'est là que la POO devient puissante : on peut créer autant d'objets qu'on veut à partir du même plan.
// Trois voitures instanciées à partir de la même classe
Voiture voiture1 = new Voiture();
voiture1.Marque = "Peugeot";
voiture1.Couleur = "Rouge";
voiture1.NombreDePortes = 5;
Voiture voiture2 = new Voiture();
voiture2.Marque = "Renault";
voiture2.Couleur = "Bleu";
voiture2.NombreDePortes = 3;
Voiture voiture3 = new Voiture();
voiture3.Marque = "BMW";
voiture3.Couleur = "Noir";
voiture3.NombreDePortes = 5;
// Chaque objet est indépendant
voiture1.AfficherInfos();
voiture2.AfficherInfos();
voiture3.AfficherInfos();
Chaque objet possède ses propres valeurs pour chaque attribut. Modifier voiture1.Couleur n'affecte pas voiture2 ni voiture3.
En pratique, on travaille souvent avec de nombreux objets. On les stocke dans une List<T> :
List<Voiture> parking = new List<Voiture>();
// On crée et on ajoute chaque voiture
Voiture v1 = new Voiture();
v1.Marque = "Peugeot";
v1.Couleur = "Rouge";
v1.NombreDePortes = 5;
parking.Add(v1);
Voiture v2 = new Voiture();
v2.Marque = "Renault";
v2.Couleur = "Bleu";
v2.NombreDePortes = 3;
parking.Add(v2);
// On parcourt la liste avec foreach
foreach (Voiture v in parking)
{
v.AfficherInfos();
}
Créer une application console C# qui gère un garage de voitures.
Crée un nouveau projet console C# dans Rider. Ajoute un fichier Voiture.cs et déclare la classe Voiture avec les attributs et méthodes vus dans le cours.
Dans Program.cs, crée 3 voitures avec des caractéristiques différentes et affiche leurs informations.
Stocke tes 3 voitures dans une List<Voiture> et affiche-les toutes avec un foreach.
Ajoute une méthode Klaxonner() à la classe. Elle affiche : {Marque} fait : Tuuut !. Appelle-la sur chaque voiture de ta liste.
Ajoute un attribut int Kilometrage à ta classe. Crée une méthode Rouler(int km) qui augmente le kilométrage de la voiture et affiche un message.
┌─────────────────────────────────┐
│ class Voiture │ ← LE PLAN (existe une fois)
│ │
│ Attributs : │
│ Marque, Couleur, Portes │
│ │
│ Méthodes : │
│ Demarrer(), AfficherInfos() │
└─────────────────────────────────┘
│ │ │
▼ ▼ ▼
[Peugeot] [Renault] [BMW]
Rouge Bleu Noir
5 portes 3 portes 5 portes
← LES OBJETS (autant qu'on veut)
Quand on conçoit une application orientée objet, on dessine souvent les classes sous forme d'un schéma avant d'écrire le moindre code. C'est plus rapide qu'un programme, et ça permet de réfléchir à la structure sans se perdre dans la syntaxe.
Voici le schéma correspondant à notre classe Voiture :

Le schéma est découpé en trois compartiments :
En-tête — le nom de la classe, mis en évidence. C'est le nom qu'on utilisera dans le code avec le mot-clé class.
Attributs — chaque ligne indique un attribut avec son type.
Le signe - signifie que l'attribut est privé : on ne peut pas y accéder directement depuis l'extérieur de la classe. (On verra pourquoi c'est important au chapitre 2.)
Méthodes — chaque ligne indique une méthode avec son type de retour.
Le signe + signifie que la méthode est publique : n'importe qui peut
l'appeler depuis l'extérieur.
-= privé ·+= public ·: type= ce que ça contient ou retourne
Pour l'instant, nos attributs sont public : n'importe qui peut les modifier directement. C'est un problème — rien n'empêche d'écrire voiture1.NombreDePortes = -12.
Au chapitre 2, on découvrira l'encapsulation : comment protéger les données d'un objet pour garantir qu'elles restent cohérentes.