Fonctions abstraites

Résolu
olivbarb Messages postés 303 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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

loupius
 
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
Arameya
 
Question de portabilité aussi
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Question de portabilité aussi
Non, cela n'a rien à voir avec la portabilité.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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