Principe de l'héritage

Bonjour,
je suis en train de suivre les cours sur Kotlin / android studio, et je n’arrive pas à comprendre quand utiliser l’héritage dans une création d’application. Pouvez vous me dire quand l’héritage doit être utilisé? Quand sait-on qu’on doit l’utiliser?
Si vous avez des exemples simples ça serait cool!
Merci

Bonjour,

Le principe de l’héritage est simple.

C’est une class qui hérite d’une autre pour éviter de tout réécrire.

L’exemple le plus simple est les personnages de jeux vidéo.

Exemple :

On crée une class Personnage, avec les variables et fonctionnes qui sont en commun à tous les personnages du jeu.

Puis, on crée une class Mage, qui hérite de la class Personnage, mais dans celle-ci on lui met seulement les caractéristiques de celui-ci. Exemple des pouvoirs magiques.

On peut faire ça pour autant de personnage que l’on veut (guerrier, chevalier, etc…)

Après quand l’utiliser, c’est à toi de voir quand une class peut hériter d’une autre pour éviter de tout écrire une deuxième fois voir plus.

Bonjour anthonyfassler1
merci pour ta réponse, en fait je n’arrive pas à mettre en pratique ce que j’apprends sur Kotlin dans une création d’application, on me dit de pratiquer, je veux bien pratiquer mais je ne vois pas encore comment faire… Je vois le principe de l’héritage c’est pas difficile à comprendre mais savoir comment et quand l’utiliser reste encore un peu difficile, je pense qu’en regardant plus de vidéos je comprendrais mieux. Mais si une personne peut me faire comprendre ça serait cool aussi:smile:

Tu comprends le principe, c’est déjà un bon début. Si, il te faut plus d’inspiration pour voir dans quel cas c’est utilisé vas, sur Google il y a pleine d’exemples différents.

Après, c’est plus de la logique et il ne faut pas croire que ton code sera toujours parfait du premier coup.

Des fois, tu créeras le Mage avant le Personnage, car sur le coup du auras peut-être que le Mage et tout d’un coup du voudras mettre un Guerrier et la tu vas te rentre compte qu’une class Personnage serait utile, car Mage et Guerrier on des choses en communs.

C’est de l’optimisation de ton code. Ça permet de ne pas « copier coller » des bouts de code et de mieux gérer les futures mises à jour.

Hypothèse : tu dois créer une application pour réaliser l’inventaire d’une maison, pour répertorier un héritage (joke), par exemple !

Dans une maison, on trouve des meubles, des tv, des postes de radio, des livres, des habits, des CD, des appareils de cuisine, des assiettes, des chaussures, des tableaux, des machines à laver, des posters de joueurs de foot, des figurines, des calendriers, des paniers de linges sales, des conserves, des rallonges électriques, des croquettes pour chats, et des tas d’autres choses encore … ça fait beaucoup de trucs !

Chaque objet a des caractéristiques communes avec les autres : nom, date d’achat, état (neuf, abimé), valeur estimée, etc…, et des caractéristiques spécifiques (les croquettes pour chats ont une date de péremption, à la différence des fours à micro-ondes).

En programmation classique, chaque type d’objet a besoin de sa propre classe, mais aussi de mécanismes de stockage, d’affichage et de traitement.

Par exemple, les fours à micro ondes. Il faut une classe de base pour stocker les informations :

  • puissance électrique
  • référence du constructeur
  • type de four (simple, four combiné, chaleur tournante, cuisson vapeur)
  • date d’achat
  • état
  • valeur estimé à la revente

Ainsi qu’un tableau pour y stocker la liste de tous les fours à micro-ondes de la maison. Et des fonctions pour ajouter/supprimer un nouvel appareil dans la liste. Sans parler d’un système pour rechercher des informations. Par exemple, l’utilisateur peut avoir besoin de savoir quels sont les objets achetés en 2007. Ça fait des lignes de code à écrire …

Les machines à laver doivent avoir les mêmes mécanismes, de même que les fers à repasser, les ronds de serviettes, les chaises, et … A chaque fois, il faut recréer les mêmes fonctions de base, avec du code quasi-identique.

Pour une centaine d’objets de base (on y arrive rapidement dans l’inventaire d’une maison), la duplication de tout ce code représente un énorme gaspillage de temps et un risque énorme de bug.

C’est beaucoup plus simple avec l’héritage. On commence par créer une classe ObjetMaison de base, regroupant les caractéristiques communes à tous les objets. On y ajoute un tableau pour stocker les objets et le code pour ajouter/supprimer des items et la recherche.

TOUS les objets créés par héritage à partir de la classe ObjetMaison peuvent être stockés dans un seul et unique tableau. Par exemple : FourMicroOnde, Chaise, Tableau et LitiereDuChat.

Une centaine de types d’objets différents … 1 seul tableau pour les stocker, un seul code pour les ajouter/supprimer et faire des recherches. C’est infiniment mieux qu’avec la programmation classique !

On peut aussi créer des classes intermédiaires. Par exemple, une classe AppareilElectrique dérivant de ObjetMaison, et servant à créer les classes FourMicroOnde, FerRepassage, MachineALaver, SecheCheveux, etc …

Tous les appareils électriques ont des informations communes comme la puissance électrique et le type de prise. On gagne beaucoup à les définir une seule fois dans la classe AppareilElectrique, plutôt que de dupliquer le code dans FourMicroOnde, MachineALaver, SecheCheveux, LampeElectrique, GrillePain, etc …

La notion de polymorphisme est importante, c’est-à-dire qu’un objet peut avoir plusieurs aspects. Selon les besoins, le même objet peut être un FourMicroOnde, un AppareilElectrique ou un ObjetMaison.

Je comprends mieux. Merci à vous.
Maintenant prenons l’exemple d’une application qu’on utilise tous les jours comme Instagram, ou whattsapp, facebook… quand est ce que par exemple les developpeurs ont utilisé les héritages?

N’ayant jamais utilisé ces applications, pas la moindre idée …

Une utilisation classique de l’héritage est la personnalisation des composants graphiques. Par exemple, on peut créer un nouveau type de bouton par héritage à partir d’un bouton classique, puis en réécrivant l’une des méthodes pour modifier le comportement par défaut.

1 J'aime

Merci à vous tous je comprends mieux.