Bonjour,
Première question pour moi sur ce forum, j'espère la poser au bon endroit...
J'étudie en ce moment la POO avec Java (mais j'en fais aussi un peu avec du code .NET sur lequel un collègue et moi, tous deux amateurs dans ce domaine, bossons).
Dans du code que nous avons écrit par le passé, nous avons une classe mère, et plusieurs classes filles. La classe mère contient des méthodes, dont le comportement varie en fonction de la classe fille à laquelle appartient l'objet (de fait, nous n'instancions jamais directement d'objet de la classe mère, mais comme nous ignorions le concept de classe abstraite, nous ne l'avions pas formalisé).
Dans notre code, la méthode dans la classe mère peut ressembler à ça :
et dans les classes filles nous avons :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public ClasseMere MaMethode() { if (me instanceOf classeFille1) { return ((classeFille1) me).MaMethode(); } else if (me instaceOf classeFille2) { return ((classeFille2) me).MaMethode(); } else if [...] }
Si je devais écrire cela à la lecture de mes cours de POO, je ferais en sorte d'avoir une classe mère abstraite, cette méthode y étant déclarée mais pas implémentée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public ClasseFille MaMethode() { [...] }
Cette méthode serait ensuite implémentée dans les classes filles.
Ma question étant donc : cela peut il avoir un impact notable en termes de performance ?
Dans le premier cas, on a systématiquement un appel imbriqué de deux méthodes et un ou plusieurs casts.
Dans le second cas, j'imagine que le runtime doit résoudre à l'exécution la classe fille pour appeler la bonne méthode sur l'objet.
Partager