Les interfaces
chahbane
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
chahbane -
chahbane -
Bonjour,
on a une class Animal, et des sous class Chien, Poule ... je veux que mes animeaux se nourrissent, mais ils se nourrissent differemment donc
1/ je fais une interface,
public Interface INourriture {
public void manger();
}
et je redefinis ces methodes dans chaqye Class.
2/ je n'utilise pas d'interfaces mais je definis la methode manger dans tous les Class.
Quelle est la methode la plus correcte?
merci
on a une class Animal, et des sous class Chien, Poule ... je veux que mes animeaux se nourrissent, mais ils se nourrissent differemment donc
1/ je fais une interface,
public Interface INourriture {
public void manger();
}
et je redefinis ces methodes dans chaqye Class.
2/ je n'utilise pas d'interfaces mais je definis la methode manger dans tous les Class.
Quelle est la methode la plus correcte?
merci
A voir également:
- Les interfaces
- UniGetUI : une interface graphique unifiée pour les gestionnaires de paquets Windows - Télécharger - Divers Utilitaires
- WhatsApp s'offre une nouvelle interface pour les appels audio et vidéo - Guide
2 réponses
La plus correcte (parmi les deux) c'est la 1, car dans la 2 rien ne t'oblige à définir la méthode donc tu ne pourras pas utiliser le polymorphisme alors que c'est tout l'intérêt, cependant la 1 n'est pas parfaite non plus car rien ne t'oblige à implémenter INourriture, donc on pourra aussi avoir des animaux qui ne mangent pas, c'est embêtant...
La meilleure manière de faire c'est de définir la méthode manger() directement dans la classe Animal, comme ça on est certain que tous les animaux pourront manger, et le polymorphisme est alors tout à fait correct. Cependant il reste une question, est-ce qu'on le fait directement ou est-ce qu'on passe par l'interface, cela dépend du reste des classes (est-ce que d'autres objets peuvent manger, ou seul les animaux le peuvent ?)
La meilleure manière de faire c'est de définir la méthode manger() directement dans la classe Animal, comme ça on est certain que tous les animaux pourront manger, et le polymorphisme est alors tout à fait correct. Cependant il reste une question, est-ce qu'on le fait directement ou est-ce qu'on passe par l'interface, cela dépend du reste des classes (est-ce que d'autres objets peuvent manger, ou seul les animaux le peuvent ?)
public abstract class Animal // implements INourriture { public abstract void manger(); }
Il faut donc savoir si le fait de manger est "optionnel" ou "obligatoire" pour un Animal, personnellement je pense que tous les êtres vivants "mangent" (d'une manière ou d'une autre) et que l'interface ne servirait à rien ici.
Une interface judicieuse ce serait par exemple pour dire si l'animal est une proie ou un prédateur et donner la liste des animaux qui sont concernés par la relation de prédation.
Voici un exemple grossier (je ne respecte pas rigoureusement la chaîne alimentaire)
Remarque : j'ai utilisé des Class<?> car la relation de prédation dépend des espèces (des classes) et non des individus (les objets). En effet, si Félix mange Bubulle, c'est avant tout parce que Félix est un Chat et Bubulle est un Poisson, ce n'est pas liés aux personnalités de chacun des deux ;-)