Fonctions abstraites

Résolu/Fermé
olivbarb Messages postés 303 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 10 mars 2013 - 4 avril 2009 à 21:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 avril 2009 à 12:27
Bonjour,

Je suis en train d'apprendre le Java et je me pose une question quant à l'utilité des fonctions abstraites.

J'ai bien compris l'intérêt des classes abstraites mais pour les fonctions ??? Étant donné qu'il faut les implémenter dans chaque classe qui les utilise, je ne vois pas pourquoi les définir dans une classe abstraites ou une interface.

3 réponses

Je ne connais pas Java mais le C++ et je suppose que ça se passe de la même manière.
Il y a une bonne raison pour déclarer des fonctions comme virtuelles:
- c'est la seule manière de déclarer des classes abstraites. Si une classe contient une fonction virtuelle alors la classe est abstraite; ce qui est logique puisqu'on ne peut instancier une classe dont une des fonctions n'est pas définie.
D'autre part l'avantage des fonctions virtuelles est justement de forcer à redéfinir ces fonctions dans les classes dérivées car la classe mère (qui est une classe généraliste) n'a pas de solution à offrir pour ces fonctions (qui sont spécifiques à chaque classe dérivée).
0
Question de portabilité aussi
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 816
5 avril 2009 à 12:16
Salut,
Question de portabilité aussi
Non, cela n'a rien à voir avec la portabilité.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 816
5 avril 2009 à 12:27
Salut,
L'intérêt de la fonction abstraite réside dans la conception. Cela a particulièrement un sens lorsque tu fais un diagramme d'UML. Un exemple : imagine que tu souhaites instancier des animaux et leur faire faire des actions comme crier. Pour cela, pour faire plus propre tu vas créer une classe abstraite Animal avec une méthode abstraite crier(). Tu ne peux pas définir la méthode dans la classe Animal car cela dépend du nom de l'animal. Et ensuite, si tu choisis de créer une classe Chien, tu la fais hériter d'Animal, tu définis la méthode creer() pour dire qu'il s'agit de l'aboiement. Et tu continues avec d'autres animaux. Voilà grosso modo la philosophie. ^^.

Cdlt
0