OVH Cloud OVH Cloud

Le père de "Me." est ?

14 réponses
Avatar
Julien
Lu all !

J'ai une classe et une sousclasse.
Dans cette dernière je souhaite accéder à un membre de la classe (donc sa
classe père (??! ;)).
Comment faire ?

Me.Father.MonMembre ? (non ça c idiot...)

Merci beaucoup.
Julien

4 réponses

1 2
Avatar
Zoury
Salut!

En effet, j'ai déclarer ma classe enfant à l'intérieur de ma classe Papa,
cela-t-il déconseillé ?



Non. Et c'est même très, très utilisé en OO.
Par exemple un ListView possède une collection de ListViewItem. C'est
dernier sont *des* "enfants" du ListView. Je dits des parce que le ListView
peut avoir d'autres types d'enfants comme la collection de Columns.


Donc Papa est rééllement le père de Enfant. Ne puis-je pas y accéder comme
ça ?



à moins de mal comprendre ta question, c'est ce que je ferais aussi. Dans
Papa j'exposerais une propriété publique Enfant et dans Enfant j'exposerais
Papa (si besoin est)... toutefois il faut peut-être faire attention aux
reférences circulaires.. j'ai pas exploré cet aspect sous .NET..

donc au lieu d'appeler enfant.ExecuteSalutSubPapa(),
tu aurais enfant.Papa.Salut()

c'est, amha, plus OO ainsi.

---
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Julien
Lu all !
Je ne connais pas la différence entre agrégation et héritage, donc j'ai pas
trop compris les histoire de myBas et autre...

Simplement, j'ai déclaré ceci :

Public Class MonPapa
Dim Jambe as Integer

Public Class Fiston
Dim Bras as Integer

Public Sub Manger()
'Comment accéder ici à la jambe de "MonPapa" ?
End Sub
End Class
End Class

De plus, le constructeur de MonPapa créé "Fiston".
Je n'ai pas encore essayer MyBase... et cela me paraît lourd de passer mon
obj "MonPapa" dan le constructeur de "Fiston".

Merciii

"AlexC" <(@Anti-Spam)#(@Anti-Spam)#> a écrit
dans le message de news:ObHyK3$
Je ne suis pas sur de la définition de l'agréation mais ca doit etre ca,


vu
qu'il ne s'agit pas, dans le cas de Julien, d'un héritage
Je t'ai peut etre induit en erreur avec le Mybase que j'ai mit dans mon
exmple ( qui soit dit en passant ne sert à rien).

"Patrick Philippot" a écrit dans le
message de news: ukhodw$
> AlexC wrote:
>> Mybase est pour appeler les membres de la classe de laquelle on herite
>> pas pour appeler les membres de la classe "Parent"
>
> Bon, je n'ai pas dû suivre: qu'est-ce que Julien veut dire avec classe


et
> sous-classse: héritage ou agrégation?
>
> --
> Patrick Philippot - Microsoft MVP
> MainSoft Consulting Services
> www.mainsoft.fr
>




Avatar
Patrick Philippot
Julien wrote:
Lu all !
Je ne connais pas la différence entre agrégation et héritage, donc
j'ai pas trop compris les histoire de myBas et autre...



Bonjour,

Faire la différence entre héritage et agrégation me paraît tout à fait
essentiel si on fait de l'objet. Comment survivre dans l'OOP sans avoir
assimilé ces notions?

L'héritage se met en place quand on a une relation est-un(e) entre une
classe A et une classe B. Dans ce cas, on va dire que B hérite de A
(Inherits) et B va donc bénéficier de ce qui est déjà implémenté dans A.
B est une spécialisation de A. On parle ici d'héritage d'implémentation.

L'agrégation s'utilise quand une relation de type a-un(e) existe entre 2
classes. Par exemple, j'ai une classe Voiture et une classe Moteur. Je
peux dire qu'une Voiture a un Moteur. Je vais donc faire de
l'agrégation, c-à-d spécifier que la classe Voiture a comme propriété un
objet de type Moteur. Dans ce cas, on n'utilise pas l'héritage.

Enfin, si je peux dire à propos d'une classe "peut-faire", cela signifie
que la classe est capable d'implémenter un comportement particulier
défini par une Interface (IMonInterface). Dans ce cas, on va dire que la
classe hérite de l'interface (héritage d'interface) mais comme elle ne
bénéficie pas d'une implémentation existante des signatures de
l'interface, on n'utilise pas le mot-clé Inherits mais "Implements
IMonInterface" pour indiquer que la classe implémente du code derrière
les signatures de l'interface IMonInterface.

Dans l'exemple que vous indiquez, il ne s'agit ni d'héritage, ni
d'agrégation mais d'inclusion (nested class). Pour permettre à une
instance de la classe incluse (inner class) d'accéder aux membres de la
classe englobante (outer class) , il faut passer à son constructeur une
référence à l'instance de la classe englobante avec laquelle elle doit
communiquer. Il n'y a aucune raison que cela se passe autrement. Le fait
que ce soit une classe incluse ne fait que limiter éventuellement sa
visibilité (il faut qualifier le nom de la classe opar le nom de la
classe englobante) mais cela ne change rien quant à la manière dont on
l'utilise. Tout se passe comme si la classe était externe. Le fait que
ce soit une "inner class" ne lui donne pas un accès privilégié aux
membres de l'"outer class". La communication entre les 2 classes
s'organise de la même manière que si la classe était externe.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Julien
Merci Patrick pour ces explications très claires.



"Patrick Philippot" a écrit dans le
message de news:
Julien wrote:
> Lu all !
> Je ne connais pas la différence entre agrégation et héritage, donc
> j'ai pas trop compris les histoire de myBas et autre...

Bonjour,

Faire la différence entre héritage et agrégation me paraît tout à fait
essentiel si on fait de l'objet. Comment survivre dans l'OOP sans avoir
assimilé ces notions?

L'héritage se met en place quand on a une relation est-un(e) entre une
classe A et une classe B. Dans ce cas, on va dire que B hérite de A
(Inherits) et B va donc bénéficier de ce qui est déjà implémenté dans A.
B est une spécialisation de A. On parle ici d'héritage d'implémentation.

L'agrégation s'utilise quand une relation de type a-un(e) existe entre 2
classes. Par exemple, j'ai une classe Voiture et une classe Moteur. Je
peux dire qu'une Voiture a un Moteur. Je vais donc faire de
l'agrégation, c-à-d spécifier que la classe Voiture a comme propriété un
objet de type Moteur. Dans ce cas, on n'utilise pas l'héritage.

Enfin, si je peux dire à propos d'une classe "peut-faire", cela signifie
que la classe est capable d'implémenter un comportement particulier
défini par une Interface (IMonInterface). Dans ce cas, on va dire que la
classe hérite de l'interface (héritage d'interface) mais comme elle ne
bénéficie pas d'une implémentation existante des signatures de
l'interface, on n'utilise pas le mot-clé Inherits mais "Implements
IMonInterface" pour indiquer que la classe implémente du code derrière
les signatures de l'interface IMonInterface.

Dans l'exemple que vous indiquez, il ne s'agit ni d'héritage, ni
d'agrégation mais d'inclusion (nested class). Pour permettre à une
instance de la classe incluse (inner class) d'accéder aux membres de la
classe englobante (outer class) , il faut passer à son constructeur une
référence à l'instance de la classe englobante avec laquelle elle doit
communiquer. Il n'y a aucune raison que cela se passe autrement. Le fait
que ce soit une classe incluse ne fait que limiter éventuellement sa
visibilité (il faut qualifier le nom de la classe opar le nom de la
classe englobante) mais cela ne change rien quant à la manière dont on
l'utilise. Tout se passe comme si la classe était externe. Le fait que
ce soit une "inner class" ne lui donne pas un accès privilégié aux
membres de l'"outer class". La communication entre les 2 classes
s'organise de la même manière que si la classe était externe.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr




1 2