Skip to content

🔸4🔸Définition du polymorphisme

Le polymorphisme est un concept fondamental en programmation orientée objet qui permet à des objets de différentes classes d’être traités comme des objets d’une classe commune.

Définition formelle

Le polymorphisme se manifeste sous deux formes principales :

Polymorphisme ad hoc (surcharge)

  • Permet à plusieurs méthodes d’avoir le même nom mais des paramètres différents
  • Résolu à la compilation

Polymorphisme par sous-typage (héritage)

  • Permet à une classe enfant de redéfinir le comportement d’une méthode héritée
  • Résolu à l’exécution (liaison dynamique)

Exemple avec des Véhicules

Classe de base

public class Vehicule {
    private String marque;
    private String modele;

    public Vehicule(String marque, String modele) {
        this.marque = marque;
        this.modele = modele;
    }

    public void demarrer() {
        System.out.println("Le véhicule démarre");
    }

    public String getDescription() {
        return marque + " " + modele;
    }
}

Première sous-classe

public class Voiture extends Vehicule {
    private int nombrePortes;

    public Voiture(String marque, String modele, int nombrePortes) {
        super(marque, modele);
        this.nombrePortes = nombrePortes;
    }

    @Override
    public void demarrer() {
        System.out.println("La voiture démarre en tournant la clé");
    }

    @Override
    public String getDescription() {
        return super.getDescription() + " (" + nombrePortes + " portes)";
    }
}

Deuxième sous-classe

public class Moto extends Vehicule {
    private int cylindree;

    public Moto(String marque, String modele, int cylindree) {
        super(marque, modele);
        this.cylindree = cylindree;
    }

    @Override
    public void demarrer() {
        System.out.println("La moto démarre avec le kick");
    }

    @Override
    public String getDescription() {
        return super.getDescription() + " (" + cylindree + "cc)";
    }
}

Avantages du polymorphisme

  • Extensibilité: Ajout facile de nouvelles sous-classes sans modifier le code existant
  • Réutilisabilité: Le même code peut traiter différents types d’objets
  • Maintenance: Modification du comportement spécifique sans affecter le code client

Démonstration du polymorphisme

public class DemoPolymorphisme {
    public static void main(String[] args) {
        // Tableau polymorphique
        Vehicule[] vehicules = new Vehicule[3];
        vehicules[0] = new Vehicule("Generic", "Transport");
        vehicules[1] = new Voiture("Toyota", "Corolla", 4);
        vehicules[2] = new Moto("Honda", "CBR", 600);

        // Utilisation polymorphique
        for (Vehicule v : vehicules) {
            System.out.println("Description: " + v.getDescription());
            v.demarrer();
            System.out.println("---");
        }
    }
}

Exemple d’utilisation pratique

public class GarageAuto {
    public static void demarrerTousLesVehicules(Vehicule[] vehicules) {
        for (Vehicule v : vehicules) {
            System.out.println("Démarrage de: " + v.getDescription());
            v.demarrer();
        }
    }
}

Cette implémentation illustre comment le polymorphisme permet d’écrire du code générique qui fonctionne avec n’importe quelle sous-classe de Vehicule. La méthode demarrerTousLesVehicules peut traiter n’importe quel type de véhicule sans avoir besoin de connaître sa classe spécifique.


Note

Page rédigée en partie avec l’aide d’un assistant IA, principalement à l’aide de Perplexity AI, avec le LLM Claude 3.5 Sonnet. L’IA a été utilisée pour générer des explications, des exemples et/ou des suggestions de structure. Toutes les informations ont été vérifiées, éditées et complétées par l’auteur.