Manipulation d'interface

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 11 sept. 2007 à 09:50
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 16 sept. 2007 à 23:25
salut tout le monde, j'ai un petit souci et je ne vois pas trop comment le contourner.

voici la structure de mes classes :

ma question est la suivante :
j'ai une variable de type TObjetGeometrique qui contient soit un TOGPointSpecial, soit un TOGSegmentSpecial. Je voudrais le caster en IOGSpecial, mais apparament c'est pas possible (il faut absolument que le type de ma variable implemente l'interface) !!!

Avez vous une idée?

Merci

9 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
12 sept. 2007 à 09:08
salut,
ce comportement est normal.

pourquoi n'utilises-tu pas directement une var de type IOGSpecial?

sinon, je sais pas si ça "passe", mais si tu le cast d'abord en (le bon) TOGSpecial, puis en IOGSpecial ? Genre avec une function avec des "is" et "as".

mais je te conseille plustot de revoir ton design ou d'utiliser une var de type interface.

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
12 sept. 2007 à 09:27
je peux pas utiliser directement une var de type IOGSspecial car celle ci m'est renvoyée par une fonction de base sur les TObjetGeometrique.

"tu le cast d'abord en (le bon) TOGSpecial, puis en IOGSpecial ?"
c'est ce que j'ai fait finalement, j'ai une fonction TObjetGeometrique2IOGSpecial qui verifie le type avant de caster. Le probleme, c'est que si je rajoute un heritier de IOGSpecial, il faudra que je pense a le rajouter dans cette fonction.
par contre, la commande
z := TOGPointSpecial(MonOG) as IOGZone;

ne marche pas, il faut que je fasse
z := IOGZone(TOGPointSpecial(MonOG));

Je cherche donc toujours une solution plus generique.

0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
12 sept. 2007 à 13:49
re,

ouai, je vois pas trop d'autre solution...

sinon et sans l'avoir jamais utiliser, avec tobject.GetInterface ???

mais j'essayer plustot de voir si tu ne peux pas changer un peu ta structure. pour éviter les trucs trop "bricole".

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
12 sept. 2007 à 13:56
bah c'est a dire que m'a structure de base est assez avancée, et la partie que j'ai decrite n'en est qu'une infime paartie.
En fait je me base sur un structure de geometrie de base, que j'utilise dans plusieurs projets donc je ne peux pas la modifier impunement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 sept. 2007 à 09:05
re,

ouai dans ce cas...

sinon, en function de ce qu'est "special" tu peux aussi cherché du côté d'une association avec un object suplémentaire qui manage le "spécial". (solution adapté, si par exemple, spécial contient des couleurs ou des attributs de dessin).

mais j'ai pas d'autre idée.

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
13 sept. 2007 à 09:13
en

function de ce qu'est "special" : hou la deformation professionelle !

un objet supplementaire ne changera rien, il faudra que je cast en le type final pour y avoir acces. Ce que je voulais, c'est pouvoir caster ma classe de base en un type, afin d'avoir acces a des proprietes pour certains objets herites, quel que soit le chemin d'heritage qu'ils prennent (point, segment, ...)

Merci de ton aide Loda.
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
13 sept. 2007 à 10:54
"en function de ce qu'est "special" : hou la deformation professionelle !"
m'en parle pas! en plus je code/documente en anglais tout la jounrée (et le soir de temps en temps). imagine.

tu peux aussi créer le lien avec l'objet dans ta class de base.

note que je te fais des grandes supposition dans le vide vu que j'ai pas la moindre idée (précise) de ta structure/besoins.

allez. bon code !

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
16 sept. 2007 à 19:27
"il faut absolument que le type de ma variable implemente l'interface"
Si tu veux vraiment utiliser les interfaces, c'est le minimum auquel tu devras te plier...
A mon tour de poser quelques questions :
1 : pourquoi la classe TObjetGeometrique n'implémente-t-elle pas également cette interface ?
2 : en quoi l'utilisation de l'interface IOGSpecial est-elle vraiement indispensable ?
3 : si cette interface est vraiment indispensable, pourquoi les membres de la hiérarchie ne l'implémentent-ils pas aussi ?

NB : si tu veux accéder à des propriétés, tu peux très bien les décrire dans l'interface IOGSpecial mais il faudra aussi les implémenter les accesseurs des classes qui l'utilisent.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
16 sept. 2007 à 23:25
1 : pourquoi la classe TObjetGeometrique n'implémente-t-elle pas également cette interface ?
parce que cette interface n'a rien a voir avec les objets de base, les objets speciaux sont plus evolués et ont quand meme une grosse difference avec ceux de base

2 : en quoi l'utilisation de l'interface IOGSpecial est-elle vraiement indispensable ?
afin de manipuler des proprietes/methodes communes a mes objets speciaux, qui peuvent heriter d'objetgeometrique par divers voies

3 : si cette interface est vraiment indispensable, pourquoi les membres de la hiérarchie ne l'implémentent-ils pas aussi ?
cf question 1
0
Rejoignez-nous