C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Héritage ou pas?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Michaël Delva
Guest





PostPosted: Wed Mar 03, 2004 9:37 pm    Post subject: Héritage ou pas? Reply with quote



Bonsoir à tous,

j'ai la classe suivante, qui correspond à une séquence temporelle, qui
commence et finit à deux temps différents, et dont on peut calculer la
durée:

//-----------------------------------------------------------------------
struct SJ_Intervalle_Temps
{
LONGLONG debut,fin;

__fastcall SJ_Intervalle_Temps(const LONGLONG & debut_int,const
LONGLONG & fin_int) : debut(debut_int),fin(fin_int) {}

bool operator==(const SJ_Intervalle_Temps & compar) const
{ return (debut == compar.debut && fin == compar.fin); }

bool operator<(const SJ_Intervalle_Temps & compar) const
{ return (debut < compar.debut); }

inline LONGLONG __fastcall duree_intervalle() const
{ return fin - debut; }
};
//-----------------------------------------------------------------------

J'ai ensuite la classe suivante:

//-----------------------------------------------------------------------
class SJ_Sequence
{
public:
SJ_Intervalle_Temps debut_et_fin;

int index_action_fin,
index_action_debut;

//blablabla...

LONGLONG __fastcall DureeSequence() const
{ return debut_et_fin.duree_intervalle(); }
};
//-----------------------------------------------------------------------

J'ai dans cette classe un membre SJ_Intervalle_Temps qui me permet de
déterminer le début et la fin de cette séquence, et que j'utilise pour
calculer la durée de la séquence.

Mais ne serait-il pas plus simple d'utiliser l'héritage dans ce cas de
figure?

J'avoue (encore une fois Wink ) ne pas être au point sur cette notion.

Si je déclare SJ_Sequence comme héritant de SJ_Intervalle_Temps, les
membres LONGLONG debut et fin seront accessibles depuis SJ_Sequence, c'est
bien ça?
Et donc il n'y aurait plus besoin de définir une fonction DureeSequence
dans SJ_Sequence, la fonction de la classe SJ_Intervalle_Temps étant là?

Je me trompe, ou bien je peux faire comme ça?

Merci d'avance!
Back to top
Arnaud Debaene
Guest





PostPosted: Wed Mar 03, 2004 9:57 pm    Post subject: Re: Héritage ou pas? Reply with quote



Michaël Delva wrote:
Quote:
Bonsoir à tous,
Bonsoir.

j'ai la classe suivante, qui correspond à une séquence temporelle, qui
commence et finit à deux temps différents, et dont on peut calculer la
durée:

struct SJ_Intervalle_Temps
{
snip
};

J'ai ensuite la classe suivante:

class SJ_Sequence
{
public:
SJ_Intervalle_Temps debut_et_fin;
snip
};

J'ai dans cette classe un membre SJ_Intervalle_Temps qui me permet de
déterminer le début et la fin de cette séquence, et que j'utilise pour
calculer la durée de la séquence.

Mais ne serait-il pas plus simple d'utiliser l'héritage dans ce cas de
figure?

Sauf cas particulier, ce qui doit te décider à utiliser l'héritage public,
ce n'est pas la simplicité (apparente) de programmation, mais la sémantique
de tes objets : une classe B ne doit hériter d'une classe A que si
l'assertion "un objet B est un objet A" est vraie. On appelle ca le principe
de substitution de Liskov (LSP).

Je n'ai pas le contexte pour comprendre ce qu'est une "séquence" dans ton
cas, mais si une séquence *est* un intervalle de temps, alors utilise
l'héritage, sinon reste avec l'aggregation.

Arnaud



Back to top
Michaël Delva
Guest





PostPosted: Wed Mar 03, 2004 10:26 pm    Post subject: Re: Héritage ou pas? Reply with quote



"Arnaud Debaene" <adebaene (AT) club-internet (DOT) fr> wrote in
news:404654ab$0$28435$636a15ce (AT) news (DOT) free.fr:

Quote:
Sauf cas particulier, ce qui doit te décider à utiliser l'héritage
public, ce n'est pas la simplicité (apparente) de programmation, mais
la sémantique de tes objets : une classe B ne doit hériter d'une
classe A que si l'assertion "un objet B est un objet A" est vraie. On
appelle ca le principe de substitution de Liskov (LSP).

Tu aurais des infos là dessus, url?

Quote:
Je n'ai pas le contexte pour comprendre ce qu'est une "séquence" dans
ton cas, mais si une séquence *est* un intervalle de temps, alors
utilise l'héritage, sinon reste avec l'aggregation.

Et comme c'est le cas, j'ai "tenté" l'héritage, et ça marche...


Je trouve ça plus simple comme ça en plus...

Merci de ta réponse!

Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Mar 03, 2004 11:57 pm    Post subject: Re: Héritage ou pas? Reply with quote

Si tu écris

class D : public B ...

les codes ci-dessous doivent avoir un sens :

void f (B& b);

int main()
{
D d;
f (d);
}


int main()
{
B* ptr= new D;
}


--
Wink
Back to top
Michaël Delva
Guest





PostPosted: Thu Mar 04, 2004 12:22 am    Post subject: Re: Héritage ou pas? Reply with quote

Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote in
news:74sc405qv27bfecrldfotqarlltqe6ai40 (AT) 4ax (DOT) com:

Quote:
Si tu écris

class D : public B ...

les codes ci-dessous doivent avoir un sens :

void f (B& b);

int main()
{
D d;
f (d);
}

Ca, j'ai compris, c'est passer dans une fonction qui a comme argument la
classe "héritée" une instance de la classe qui "hérite"

Quote:

int main()
{
B* ptr= new D;
}



Là par contre je suis pas sûr: on peut instancier la classe "héritée" grâce
à la classe qui "hérite"?

PS: je ne pense pas que "héritée" et qui "hérite" soient les appellations
justes...

Back to top
Michel Michaud
Guest





PostPosted: Thu Mar 04, 2004 1:16 am    Post subject: Re: Héritage ou pas? Reply with quote

Dans news:Xns94A1EE70143A8zoubidamanhotmailcom (AT) 212 (DOT) 27.42.67, Michaël
Delva <zoubidaman (AT) hotmail (DOT) com> a écrit :
Quote:
"Arnaud Debaene" <adebaene (AT) club-internet (DOT) fr> wrote in
news:404654ab$0$28435$636a15ce (AT) news (DOT) free.fr:

Sauf cas particulier, ce qui doit te décider à utiliser l'héritage
public, ce n'est pas la simplicité (apparente) de programmation,
mais la sémantique de tes objets : une classe B ne doit hériter
d'une classe A que si l'assertion "un objet B est un objet A" est
vraie. On appelle ca le principe de substitution de Liskov (LSP).

Tu aurais des infos là dessus, url?

Comme dirait je ne sais qui, Altavista est ton ami Smile Mais
attention, Barbara (Liskov) n'a pas dit exactement ce que la
plupart des gens pensent qu'elle a dit ! Alors tu n'en tireras
probablement pas grand chose (en fait, elle a dit quelque chose
comme « If for each object o1 of type S there is an object o2 of
type T such that for all programs P defined in terms of T, the
behaviour of P is unchanged when o1 is substituted for o2 then S
is a subtype of T. »)...

Quote:
Je n'ai pas le contexte pour comprendre ce qu'est une "séquence"
dans ton cas, mais si une séquence *est* un intervalle de temps,
alors utilise l'héritage, sinon reste avec l'aggregation.

Et comme c'est le cas, j'ai "tenté" l'héritage, et ça marche...

Ce n'est pas un critère suffisant. Si ça marche aussi bien sans
l'héritage, il vaut probablement mieux s'en passer.

Quote:
Je trouve ça plus simple comme ça en plus...

Ce n'est pas un bon critère non plus :-(

D'après ce que je comprends de ton problème, une séquence
n'est pas une sorte d'intervalle de temps. Alors l'héritage
ne convient pas.

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
Michel Michaud
Guest





PostPosted: Thu Mar 04, 2004 1:18 am    Post subject: Re: Héritage ou pas? Reply with quote

Dans news:Xns94A2E014FD1Czoubidamanhotmailcom (AT) 212 (DOT) 27.42.66, Michaël
Delva <zoubidaman (AT) hotmail (DOT) com> a écrit :
Quote:
Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote in
news:74sc405qv27bfecrldfotqarlltqe6ai40 (AT) 4ax (DOT) com:
int main()
{
B* ptr= new D;
}



Là par contre je suis pas sûr: on peut instancier la classe
"héritée" grâce à la classe qui "hérite"?

PS: je ne pense pas que "héritée" et qui "hérite" soient les
appellations justes...


B est la « classe de base ». D est la « classe dérivée ». Ce qui
explique les noms classiques B et D pour ce genre d'exemple...

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Back to top
Fabien LE LEZ
Guest





PostPosted: Thu Mar 04, 2004 1:19 am    Post subject: Re: Héritage ou pas? Reply with quote

On 04 Mar 2004 00:22:27 GMT, "Michaël Delva" <zoubidaman (AT) hotmail (DOT) com>
wrote:

Quote:
PS: je ne pense pas que "héritée" et qui "hérite" soient les appellations
justes...

Je confirme, on dit généralement "classe de base" (ici, B) et "classe
dérivée" (ici, D).

Quote:
int main()
{
B* ptr= new D;
}

Là par contre je suis pas sûr: on peut instancier la classe "héritée" grâce
à la classe qui "hérite"?

Oui : un D* convient partout où un B* convient.

Si tu acceptes l'idée

void f (B& b);

D d;
f (d);

tu accepteras sans doute aussi

void f (B* b);

D d;
D* ptr_d= &d;
f (ptr_d);

Si tu remplaces "f" par "operator=", tu obtiens assez directement
B* ptr= new D;


--
;-)

Back to top
Fabien LE LEZ
Guest





PostPosted: Thu Mar 04, 2004 1:52 am    Post subject: Re: Héritage ou pas? Reply with quote

On Wed, 3 Mar 2004 20:16:02 -0500, "Michel Michaud" <mm (AT) gdzid (DOT) com>
wrote:

Quote:
(en fait, elle a dit quelque chose
comme « If for each object o1 of type S there is an object o2 of
type T such that for all programs P defined in terms of T, the
behaviour of P is unchanged when o1 is substituted for o2 then S
is a subtype of T. »)

Houlà, ça devient compliqué, ça. J'ai peut-être mal compris le terme
"subtype". Est-ce un équivalent de "dérivée", ou totalement autre
chose.

Prenons un exemple :

class T
{
public: virtual string nom_du_type() { return "T"; }
...
};
class S : public T
{
public: virtual string nom_du_type() { return "S"; }
...
};

void P (T &t) { cout << t.nom_du_type() << endl; }

Soit un objet o1 de classe S. P(o1) affichera "S".
Quel que soit o2 de classe T, P(o2) affichera "T".

Donc, quel que soit le contenu de S et T par ailleurs, dériver S de T
n'est pas correct ?

--
;-)

Back to top
Michaël Delva
Guest





PostPosted: Thu Mar 04, 2004 9:31 am    Post subject: Re: Héritage ou pas? Reply with quote

"Michel Michaud" <mm (AT) gdzid (DOT) com> wrote in news:orv1c.16653$qA2.876307
@news20.bellglobal.com:

Quote:
Comme dirait je ne sais qui, Altavista est ton ami Smile Mais
attention, Barbara (Liskov) n'a pas dit exactement ce que la
plupart des gens pensent qu'elle a dit ! Alors tu n'en tireras
probablement pas grand chose (en fait, elle a dit quelque chose
comme « If for each object o1 of type S there is an object o2 of
type T such that for all programs P defined in terms of T, the
behaviour of P is unchanged when o1 is substituted for o2 then S
is a subtype of T. »)...

Mouais, faudra que je relise ça moins fatigué ;-)

Quote:
Je n'ai pas le contexte pour comprendre ce qu'est une "séquence"
dans ton cas, mais si une séquence *est* un intervalle de temps,
alors utilise l'héritage, sinon reste avec l'aggregation.

Et comme c'est le cas, j'ai "tenté" l'héritage, et ça marche...

Ce n'est pas un critère suffisant. Si ça marche aussi bien sans
l'héritage, il vaut probablement mieux s'en passer.

Je trouve ça plus simple comme ça en plus...

Ce n'est pas un bon critère non plus :-(

D'après ce que je comprends de ton problème, une séquence
n'est pas une sorte d'intervalle de temps. Alors l'héritage
ne convient pas.


Ben c'est quand même le cas, une séquence est un intervalle de temps...

Back to top
Arnaud Debaene
Guest





PostPosted: Thu Mar 04, 2004 10:29 am    Post subject: Re: Héritage ou pas? Reply with quote

"Michaël Delva" <zoubidaman (AT) hotmail (DOT) com> wrote

Quote:
"Arnaud Debaene" <adebaene (AT) club-internet (DOT) fr> wrote in
news:404654ab$0$28435$636a15ce (AT) news (DOT) free.fr:

Sauf cas particulier, ce qui doit te décider à utiliser l'héritage
public, ce n'est pas la simplicité (apparente) de programmation, mais
la sémantique de tes objets : une classe B ne doit hériter d'une
classe A que si l'assertion "un objet B est un objet A" est vraie. On
appelle ca le principe de substitution de Liskov (LSP).

Tu aurais des infos là dessus, url?
Google ou n'importe quel bouqin de conception objet.


Quote:

Je n'ai pas le contexte pour comprendre ce qu'est une "séquence" dans
ton cas, mais si une séquence *est* un intervalle de temps, alors
utilise l'héritage, sinon reste avec l'aggregation.

Et comme c'est le cas,
Ah bon? Une séquence est un intervalle de temps? Ca représnte quoi une

séquence exactement?

Quote:
Je trouve ça plus simple comme ça en plus...
Mauvaise raison : La question est de savoir si ca a un sens par

rapport à ta modélisation objet.

Arnaud

Back to top
Michaël Delva
Guest





PostPosted: Thu Mar 04, 2004 11:35 am    Post subject: Re: Héritage ou pas? Reply with quote

[email]adebaene (AT) club-internet (DOT) fr[/email] (Arnaud Debaene) wrote in
news:16a4a8c7.0403040229.54e33375 (AT) posting (DOT) google.com:

Quote:
Tu aurais des infos là dessus, url?
Google ou n'importe quel bouqin de conception objet.

Cet après-midi...

Quote:

Je n'ai pas le contexte pour comprendre ce qu'est une "séquence"
dans ton cas, mais si une séquence *est* un intervalle de temps,
alors utilise l'héritage, sinon reste avec l'aggregation.

Et comme c'est le cas,
Ah bon? Une séquence est un intervalle de temps? Ca représnte quoi une
séquence exactement?

Une séquence correspond à la durée pendant laquelle une équipe de basket
défend ou attaque lors d'un match... Il y a donc un début (une remise en
jeu, un rebond...) et une fin (tir, balle perdue...), et donc une durée.

Quote:
Je trouve ça plus simple comme ça en plus...
Mauvaise raison : La question est de savoir si ca a un sens par
rapport à ta modélisation objet.


Tu es le deuxième à me le dire. Ca me semblait en être une ;-)

Quote:
Arnaud



Back to top
Michel Michaud
Guest





PostPosted: Thu Mar 04, 2004 12:43 pm    Post subject: Re: Héritage ou pas? Reply with quote

Dans news:Xns94A2800B5A525zoubidamanhotmailcom (AT) 212 (DOT) 27.42.67, Michaël
Delva <zoubidaman (AT) hotmail (DOT) com> a écrit :
Quote:
Une séquence correspond à la durée pendant laquelle une équipe de
basket défend ou attaque lors d'un match... Il y a donc un début
(une remise en jeu, un rebond...) et une fin (tir, balle
perdue...), et donc une durée.

Donc une séquence « a » une durée. Elle « n'est pas » une durée.

C'est la relation dite HAS-A, pour laquelle l'héritage public
n'est pas approprié. Il faut la relation IS-A pour la relation.

Prends cet exemple : que feras-tu si tu veux un jour conserver
la durée en deux valeurs, une pour la détention du ballon par
chaque équipe ?

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
Michel Michaud
Guest





PostPosted: Thu Mar 04, 2004 12:45 pm    Post subject: Re: Héritage ou pas? Reply with quote

Dans news:gwF1c.17010$qA2.977909 (AT) news20 (DOT) bellglobal.com, Michel
Michaud <mm (AT) gdzid (DOT) com> a écrit :
Quote:
C'est la relation dite HAS-A, pour laquelle l'héritage public
n'est pas approprié. Il faut la relation IS-A pour la relation.

Il faut la relation IS-A pour « l'héritage public ».

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
Michaël Delva
Guest





PostPosted: Thu Mar 04, 2004 1:13 pm    Post subject: Re: Héritage ou pas? Reply with quote

"Michel Michaud" <mm (AT) gdzid (DOT) com> wrote in news:gwF1c.17010$qA2.977909
@news20.bellglobal.com:

Quote:
Donc une séquence « a » une durée. Elle « n'est pas » une durée.

Ben c'est aussi une durée il me semble... Je trouve que l'on peut dire les
deux...

Quote:
C'est la relation dite HAS-A, pour laquelle l'héritage public
n'est pas approprié. Il faut la relation IS-A pour la relation.

Prends cet exemple : que feras-tu si tu veux un jour conserver
la durée en deux valeurs, une pour la détention du ballon par
chaque équipe ?

Excuse moi, mais je suis pas sûr d'avoir bien compris...

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.