samedi 1 mars 2025

héritage, encapsulation et polymorphisme

héritage, encapsulation et polymorphisme — sont les piliers de la programmation orientée objet (POO), et C# les utilise pleinement. Voici une explication claire avec des exemples simples :


🔐 Encapsulation

Définition :
C’est le fait de protéger les données d’un objet en les rendant inaccessibles directement depuis l’extérieur, sauf via des méthodes (souvent appelées "getters" et "setters").

Exemple :

public class Personne
{
    private string nom; // Champ privé

    public void SetNom(string n)
    {
        nom = n;
    }

    public string GetNom()
    {
        return nom;
    }
}

Ici, nom est protégé (privé), donc on ne peut pas y accéder directement. Il faut passer par les méthodes SetNom et GetNom.


🧬 Héritage

Définition :
Une classe peut hériter des attributs et méthodes d'une autre classe. Cela favorise la réutilisation du code.

Exemple :

public class Animal
{
    public void Manger()
    {
        Console.WriteLine("L'animal mange");
    }
}

public class Chien : Animal
{
    public void Aboyer()
    {
        Console.WriteLine("Le chien aboie");
    }
}

Chien hérite de Animal, donc un objet Chien peut faire Manger() même si ce n’est pas défini dans Chien.


🎭 Polymorphisme

Définition :
C’est la capacité d’un objet à prendre plusieurs formes. En gros, on peut appeler la même méthode sur des objets différents, et obtenir des comportements différents.

Il y a deux types :

  • Polymorphisme à la compilation (surcharge)

  • Polymorphisme à l’exécution (surdéfinition)

Exemple avec la surdéfinition (override) :

public class Animal
{
    public virtual void FaireDuBruit()
    {
        Console.WriteLine("L'animal fait un bruit");
    }
}

public class Chien : Animal
{
    public override void FaireDuBruit()
    {
        Console.WriteLine("Le chien aboie");
    }
}

public class Chat : Animal
{
    public override void FaireDuBruit()
    {
        Console.WriteLine("Le chat miaule");
    }
}

Et dans un programme :

List<Animal> animaux = new List<Animal>
{
    new Chien(),
    new Chat()
};

foreach (var a in animaux)
{
    a.FaireDuBruit(); // Appelle la bonne méthode selon le type réel
}

Résumé rapide :

Concept But Mots-clés
Encapsulation Protéger les données private, get, set
Héritage Réutiliser du code : (ex. Chien : Animal)
Polymorphisme Comportement différent via même interface virtual, override


overload et override sont deux concepts liés au polymorphisme, mais ils ne signifient pas la même chose.


🔁 Overload (Surcharge)

➤ C’est quoi ?

C’est quand plusieurs méthodes ont le même nom, mais des paramètres différents (en type ou en nombre).
👉 Ça se passe dans la même classe.

➤ Exemple :

public class Calculatrice
{
    public int Addition(int a, int b)
    {
        return a + b;
    }

    public double Addition(double a, double b)
    {
        return a + b;
    }

    public int Addition(int a, int b, int c)
    {
        return a + b + c;
    }
}

Ici, Addition est surchargée : même nom, mais des signatures différentes.


🔁 Override (Redéfinition)

➤ C’est quoi ?

C’est quand une classe dérivée change le comportement d’une méthode définie dans la classe parente.
👉 Nécessite des mots-clés virtual (dans la classe de base) et override (dans la classe dérivée).

➤ Exemple :

public class Animal
{
    public virtual void FaireDuBruit()
    {
        Console.WriteLine("L'animal fait un bruit");
    }
}

public class Chien : Animal
{
    public override void FaireDuBruit()
    {
        Console.WriteLine("Le chien aboie");
    }
}

Ici, Chien override la méthode FaireDuBruit de Animal. Le comportement est différent même si le nom est identique.


📌 Résumé rapide :

Terme Quand ? Mots-clés Exemple
Overload Même méthode, plusieurs versions Aucun Addition(int, int)Addition(double, double)
Override Redéfinir une méthode de la classe de base virtual + override Animal.FaireDuBruit() vs Chien.FaireDuBruit()


Aucun commentaire:

Enregistrer un commentaire