Héritage multiple en Delphi ??? - Delphi/Pascal - Programmation
Marsh Posté le 30-09-2004 à 18:02:44
Stef.D a écrit : cette maudite classe TObjet |
C'est bien pratique d'avoir un ancêtre commun dans certains cas
Stef.D a écrit : |
Je suis pas sûr que ce soit possible malheureusement.
Il n'y a pas de classe abstraite, juste des méthodes de class (class procedure / class function) qui s'appliquent donc à la classe et non à une instance (le Create en est une par exemple).
Marsh Posté le 01-10-2004 à 10:25:52
Citation : C'est bien pratique d'avoir un ancêtre commun dans certains cas |
Oui c vrai, et cette classe est bien pratique à plusieurs niveau (l'opérateur IS découle très probablement de l'intégration de cette classe)... mais en contre parti ça alourdit un peu l'appli surtout si comme moi, on utilise les classes même la où une simple structure suffirait... je trouve la manipulation des structures en delphi pas pratique (syntaxiquement surtout).
Citation : |
Arg :-( donc je vais être obligé de ma taper 20 fois le même code :-/
je comprends pas pourquoi certains disent que l'utilisation d'interface permet de rémédier à l'héritage multiple, ça comble une des facettes de l'héritage multiple, mais c'est loin de le remplacer...
Merci de ton aide en tout cas
Marsh Posté le 19-11-2004 à 15:14:36
Pour moi une classe abstraite est une classe qui n'est pas instanciable, car l'une de ses méthodes est abstraite (seul le model est définit).
Pour moi, les interfaces ne permettent pas de remédier complètement à l'héritage multiple : elles permettent seulement d'avoir d'être certain q'une serie de méthode existent pour les classes implémentant l'interface, le code restant à implémenter pour chaque classe... Ca ressemble a l'héritage multiple avec des classes avec que des méthodes abstraites.
SInon pourrait-tu dire ce à quoi te sert ton interface IMyData pour essayer de trouver une façon d'implémenter ça le plus "proprement" possible....
Marsh Posté le 19-11-2004 à 18:34:08
dreameddeath a écrit : Ca ressemble a l'héritage multiple avec des classes avec que des méthodes abstraites. |
point du tout, vu qu'une classe abstraite peut avoir des données membre (et c'est surtout les données qui foutent le bordel dans l'heritage multiple)
Marsh Posté le 20-11-2004 à 14:49:18
... ou on peut aussi attendre un peu, et utiliser delphi 2005. Qui devrait ne plus tarder d'ailleurs
Marsh Posté le 20-11-2004 à 21:11:57
Ils ont ajouté ça dans Delphi 9 ?
Marsh Posté le 21-11-2004 à 00:51:22
Passage en coup de vent...
Indice: Regarde du côté du "implements", c'est nickel pour utiliser plusieurs interfaces dans une classe en utilisant des objets externes qui chacun implémente une interface.
Marsh Posté le 21-11-2004 à 16:25:33
ui ui, z'ont rajouté ca o_o!
Marsh Posté le 22-11-2004 à 13:12:57
chrisbk a écrit : point du tout, vu qu'une classe abstraite peut avoir des données membre (et c'est surtout les données qui foutent le bordel dans l'heritage multiple) |
justement c'est bien pour cela que je dis que les interfaces ne permettent pas "d'émuler" l'heritage multiple : je dis qu'au mieux les interfaces permettent d'émuler l'héritage multiple de classes qui n'ont QUE DES METHODES ABSTRAITES (et donc pas de données membres).
Sinon pour ce qui est delphi 2005 je ne vois pas en quoi il y a de l'héritage multiple (sauf si c'est dans .NET que je ne connais pas...
++
Marsh Posté le 22-11-2004 à 14:04:33
dreameddeath a écrit : |
Tu l'as déjà testé ou quoi ?
Marsh Posté le 22-11-2004 à 14:11:12
Stef.D a écrit : Je sais que l'héritage multiple à proprement parler en delphi n'existe pas, ce qui me parait logique puisque toutes les classes VCL héritent de cette maudite classe TObjet, ce qui induirait des conflits avec l'héritage multiple (multiples définitions)... |
y a des langages qui gèrent ça très bien tu sais
Marsh Posté le 25-11-2004 à 09:33:43
Un exemple en delphi 2005....
Interfaces may employ multiple inheritance. In the following example, the interface IComboBox inherits from both ITextBox and IListBox:
Interface IControl
Sub Paint()
End Interface
Interface ITextBox
Inherits IControl
Sub SetText([text] As String)
End Interface
Interface IListBox
Inherits IControl
Sub SetItems(items() As String)
End Interface
Interface IComboBox
Inherits ITextBox, IListBox
End Interface
Marsh Posté le 25-11-2004 à 09:40:58
oué la, y'a pas de quoi pousser des hauts cris.
Marsh Posté le 25-11-2004 à 10:59:09
C'est clair, en plus il y a ça déjà depuis plusieurs versions de Delphi
Et l'exemple, c'est du VB on dirait (les sub, inherits, as, etc., c'est pas du Delphi)
Marsh Posté le 25-11-2004 à 11:18:10
Autant pour moi, ceci concerne bien vb.net, les nouveauté en langage pur delphi sont:
Delphi Language Enhancements
Delphi has a new for-in-do statement that you can use to iterate over containers. See the Delphi Language Guide topic Declarations and Statements for more information.
The compiler now supports function and procedure inlining. See the Delphi Language Guide topic Calling Procedures and Functions for more information.
The Delphi language has been expanded to include alphabetic and alphanumeric Unicode characters in identifiers. Note: Unicode characters are not allowed in identifiers in published sections of classes, or in types used by published members.
The language now supports the aggregation of multiple units within a namespace. See the topic Using Namespaces with Delphi for more information.
The Delphi for .NET compiler now supports dynamically allocated multi-dimensional arrays. See the Delphi Language Guide topic Structured Types for more information.
Marsh Posté le 25-11-2004 à 11:37:17
"The Delphi language has been expanded to include alphabetic and alphanumeric Unicode characters in identifiers"
la VCL supporte pas l'unicode en natif, mais ils foutent de l'unicode dans les identifiants, c'est le monde à l'envers
Marsh Posté le 25-11-2004 à 11:40:52
>Delphi has a new for-in-do statement that you can use to iterate over containers
c'est trop la mmode du foreach ces tps ci
Marsh Posté le 25-11-2004 à 13:39:11
Je suis en train de tester la version 2005 là et première reflexion: 'putain c lourd!', moi qui avait l'habitude de planter delphi en jouant un peu trop avec les allocations et l'assembleur va falloir que je fasse un peu plus attention...
Ensuite, c'est vrai que c'est du pur multi-langage. Dans un sens c'est interessant, c'est du bon boulot... Mais en fait je me dis que si je code en delphi c'était justement pour ne pas coder en c# ou pour .net... Alors bon je ne sais pas trop encore quoi penser...
Ensuite, j'ai essayé de compiler 3 projets coder en delphi 7 et 5 (ou 6 je crois); un des deux en delphi 7 s'est compilé sans problèmes, l'autre a butter sur des utilisations de freemem() qui passe pourtant tres bien dans la version 7. Je souligne aussi que ceux qui utilise les interfaces directdraw risquent d'avoir des soucis de compil'... Le projet en delphi 5/6 est passé correctement. Enfin le compilateur à l'air costaud avec un bon système de debugage c'est le seul truc qui me fait plaisir, avec l'ide sans doute qui est une tite merveille d'intégration. Pour ce qui est de l'aspect de .Net , je ne l'ai pas encore utiliser car pour l'instant ca ne m'interesse pas. Alors je ne sais pas quoi penser de cette version. Pour conclure: technologiquement parlant c bô, mais en fait je trouve pas que ca réponds à mes besoins... Borland m'aurait filé un add-on à delphi 7 avec le nouvel ide et les 5 conneries qu'ils ont rajoute au compilo (bon ok le inline c'est sympa et les supports extnsion cpu natif c'est cool mais bon...) ca m'aurait largement suffit... Et je ne sais pas pour vous mais à 999 euros pour se servir juste du vcl, je trouve ça moyen bof..
Marsh Posté le 25-11-2004 à 13:47:36
999 c'est la version complète, la mise à jour est à 399 (comme pour l'upgrade vers le 7)
Marsh Posté le 25-11-2004 à 14:07:16
C'est la version complete pro, la version complete architect est à 3000 euros...
Marsh Posté le 25-11-2004 à 14:18:25
bah oui mais si t'as le 7 ça te coûte pas 999 de passer à la la 2005
Marsh Posté le 25-11-2004 à 14:25:26
ReplyMarsh Posté le 25-11-2004 à 14:33:33
Citation : |
999 c'est pour le complet, donc s'il est au même prix de D7 je vois pas le problème. Et celui qui a déjà D7 il paiera pas 999 .
Marsh Posté le 25-11-2004 à 14:40:40
C'est peu etre pas clair, mais j'explique par cette phrase que j'aurai préféré un simple add-on a delphi 7 avec quelques mises à jour plutot que la sortie d'une grosse suite logiciel que de toute manière je n'utiliserais pas. Bien sûr ca n'engage que moi.
Marsh Posté le 30-09-2004 à 17:29:45
Je sais que l'héritage multiple à proprement parler en delphi n'existe pas, ce qui me parait logique puisque toutes les classes VCL héritent de cette maudite classe TObjet, ce qui induirait des conflits avec l'héritage multiple (multiples définitions)...
Mais bon forcément ça me pose un gros problème, les interfaces c bien sympa mais on peut pas y mettre de code !
et donc imaginons que j'ai X classes définit comme suit :
MyComboBox = class(TCustomComboBox, IMyData)
MyEdit = class(TCustomEdit, IMyData)
MyListBox = class(TCustomListBox, IMyData)
....
L'idée c'est que l'interface IMyData définie des méthodes génériques utilisées dans chacunes de mes classes... certaines de ces méthodes sont identiques pour toutes les classes, d'autres non...
J'aimerais que le code des classes identiques soit donc directement dans l'interface, histoire de pas me taper X copier/coller à chaque modif du code :-/
Mais bon, pas moyen de mettre du code dans une interface donc ma question est la suivante :
Y'a-t-il un moyen de contourner cette limitation de manière propre ? classe abstraite ? ça existe ça en delphi ?
je me vois mal mettre une instance de la classe IMyData dans chaque classe ... ça serait vraiment pas glop :-/
merci d'avance pour toute aide