Pour rester avec notre exemple de véhicule, la notion d'héritage est assez simple à illustrer.
La classe principale s'appelle VEHICULE.
Un véhicule va avoir différentes propriétés (couleur, taille, vitesse maximale, vitesse actuelle, position, clignotant allumé ou non ) et différentes méthodes ( démarrer, ralentir, tourner, allumer_clignotant)
A partir de ce schéma général, valable pour tous les types de véhicules, on va souvent vouloir aller plus loin.
Parmi les véhicules, il y a les vélos, les voitures, les camions…
C'est là que la notion d'héritage intervient.
On va donc créer une classe parent : vehicule, et des classes filles : Voiture / velo / camion…
Chaque type de véhicule aura en plus des propriétés et des méthodes générales, d'autres propriétés et d'autres méthodes spécifiques.
Ca permet de programmer une fois pour toutes un comportement standard pour tous les types de véhicules.
Par exemple, la fonction allumer_clignotant sera la même pour les voitures, les motos et les camions. Le code de la fonction Allumer_clignotant sera dans la classe Vehicule, et pas dans les autres classes.
Par contre, pour la classe Velo, on va créer une fonction allume_clignotant qui aura comme code un truc du genre :
allumer_clignotant()
Renvoyer 0 // On ne peut pas allumer les clignotants sur un vélo.
Pour un objet de la classe Velo, cette fonction 'remplacera' la fonction allumer_clignotant commune à tous les autres types de véhicules.
On a donc:
- Les méthodes de la classe véhicule.
- Les méthodes de la classe 'fille', qui portent le même nom qu'une méthode de la classe mère, et qui remplacent le comportement standard. (on parle de surcharge de méthode)
- Et aussi, on peut avoir des méthodes propres à chaque classe fille. Par exemple, dans la classe camion, on va avoir une méthode supplémentaire qui est vider_remorque()
L'intérêt de l'héritage est toujours le même : diviser le travail de programmation en petits morceaux, indépendants les uns des autres, et éviter les redondances.
Un principe important en développement, c'est de ne pas copier/coller les mêmes portions de code à différents endroits.
La fonction allumer_clignotant est commune à la classe moto et à la classe camion, on la place donc à un niveau plus haut, dans la classe véhicule.