INTRODUCTION AU POLYMORPHISME

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 25 avril 2003 à 12:07
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004 - 26 avril 2003 à 18:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12492-introduction-au-polymorphisme

cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
26 avril 2003 à 18:27
Delphiprog : Merçi de ta réponse. Le logiciel dont tu parles est très intéressant, j'aime bien la fonction générer documentation. Pour les Design Patterns, j'ai regardé un peu.
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
26 avril 2003 à 16:59
Merci à toi de m'avoir répondu !! Connaissant un peu l'étendue du sujet, mais sans connaitre pour autant le rôle exact des interfaces, je me doutait bien que tu ne répondrais pas en trois mots, mais ton explication me va quand même !!

Encore merci !
Bestiol.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 avril 2003 à 11:30
"Est-ce qu'on peut s'attendre à une évolution du Pascal Objet pour permettre l'utilisation directe de l'héritage multiple ???"
Je ne le pense pas car celà remettrait en cause tout la VCL. Celà dit, il n'y pas que l'utilisation des interfaces COM qui permette d'implémenter le mécanisme de l'héritage multiple.
Si le sujet t'intéresse, je t'invite à étudier les Design Patterns et à voir comment, selon le modèle de conception choisi, on peut aller plus loin que le simple héritage multiple. Henri CESBRON-LAVAU aborde le sujet de manière discrète sur le site Developpez.com à l'aide de schémas UML pour faciliter la compréhension..
Bien sûr, il faudra pousser l'étude plus avant avant de se plonger dans la VCL et voir comment Borland a utilisé les design patterns pour nous offrir des composants héritant de plusieurs autres classes.
Le pascal objet offre tant de possibilités que nous ne les remarquons même pas.
En tous cas, merci à BGK et à Bestiol d'avoir ouvert un débat aussi passionnant.
Pour ceux qui voudrait qui voudrait mieux visualiser la différence entre "hérite de" et "utilise" aus sens UML de ces deux expressions, je leur propose de télécharger un utilitaire nommé EssModel (en open source), qui analysera vos sources Pascal et vous en fera une représentation visuelle (à une vitesse fulgurante). Ce bijou est disponible à l'adresse http://www.essmodel.com.
"ESS-MODEL: The fastest and easiest to use UML reversing tool on the market!"
Très utile pour ceux qui ne disposent pas de logiciels comme ModelMaker, par exemple ou autres monstres comme Rational Rose.
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
26 avril 2003 à 11:06
Donc, les interfaces sont juste une méthode pour mettre en place un héritage multiple. Et permettent également d'implémenter des objets COM ???

Est-ce qu'on peut s'attendre à une évolution du Pascal Objet pour permettre l'utilisation directe de l'héritage multiple ???
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 avril 2003 à 10:02
Les interfaces définissent les procédures ou fonctions que devront implémenter, sous forme de méthodes, les classes les utilisant. Une interface est comparables à la définition d'une classe dont toutes les méthodes seraient abstraites. Mais la comparaison s'arrêtera là.
Delphi ne dispose pas du mécanisme de l'héritage multiple comme en C++.
Les interfaces sont une façon de contourner cette lacune de manière élégante, sauf que COM n'est pas disponible avec Kylix et que leur utilisation se limitera donc à l'environnement Windows.
Le polymorphisme et l'héritage sont basés sur la compatibilité des interfaces (comprenez de la partie interface d'une classe).
Les interfaces COM sont basées sur l'implémentation, par les classes ayant passé un "contrat", des fonctions ou procédures définies dans l'interface.
Ainsi, une classe peut passer un "contrat" indiquant qu'elle implémente plusieurs interfaces. C'est ce qui nous fait penser à une comparaison avec le concept d'héritage multiple.
Plutôt que de faire un long discours, il y a un petit tutorial sympa sur le site phidels.com (http://www.phidels.com/php/index.php3?page=../php/interfaces/interfaces.htm&id=180) qui illustre parfaitement ce principe.

Pour en savoir davantage, voir aussi le site www.techvanguards.com ou le livre de l'excellent Eric HARMON : "Delphi COM programming". Ces deux références sont toutes deux en anglais, sorry...

Désolé Bestiol, en trois mots ce n'était pas possible.
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
26 avril 2003 à 09:20
Je viens de mettre à jour la source pour utiliser Base.ClassName selon la suggestion de Bestiol.
Je ne me prononce pas pour les interfaces car je ne suis pas très sur ...
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
26 avril 2003 à 02:57
Félicitations pour ce code, qui montre clairement et surtout directement ce qu'il y a à voir !!

J'aurais une petite remarque à faire...
Si vous remplacez le message passé en paramètre à Méthode1 par "Base.ClassName", on se rend compte tout de suite du principe :
la même variable peut contenir à l'exécution deux choses (et plus !) complètement différentes, puisque leur nom de classe est différent !!
Je sais que c'est ce qu'à très bien expliqué bgK, mais ça peut peut-être aider à comprendre pour certains ?!

Et aussi, mais là c'est plutôt de l'ordre de l'organisation de chacun : il faut bien sûr déclarer classes et classes dérivées dans des unités indépendantes... Quand on se retrouve avec plusieurs classes dans la même unité, on est un peu perdu !! (voir peut-être les sources VCL de Delphi ?!! :o)

Enfin (désolé je suis embêtant aujourd'hui !), une petite question, à qui pourra me répondre :
Ce principe que nous montre bgK, est-il à peu près équivalent aux interfaces ?!
Si quelqu'un pouvait m'expliquer en trois mots à quoi servent les interfaces, ça me permettrait de me faire une idée !

merci, et encore bravo, bgK !
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
25 avril 2003 à 12:32
Merci ...
Bon, j'ai changé le niveau de la source de 3 vers 2, parce que c'est vrai que ce n'est pas si compliqué que ça.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 avril 2003 à 12:07
Le polymorphisme est un concept à côté duquel pas mal de débutants n'attachent aucune importance.
C'est pourtant, avec l'héritage, l'une des clés de voûte de la VCL. Passer à côté serait une erreur.
La démonstration faite ici par BGK est formidable de simplicité et d'efficacité.
Bravo.
A quand un exemple de niveau 2 ?
Rejoignez-nous