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
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()
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
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 >
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)#alexandre.claverie@latelec.fr(@Anti-Spam)#> a écrit
dans le message de news:ObHyK3$8EHA.2112@TK2MSFTNGP14.phx.gbl...
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" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news: ukhodw$8EHA.3756@TK2MSFTNGP14.phx.gbl...
> 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
>
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 >
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
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
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
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
Merci Patrick pour ces explications très claires.
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news:u28pohK9EHA.2876@TK2MSFTNGP12.phx.gbl...
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
"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