wrote:Guillaume Desticourt wrote:On Wed, 20 Jul 2005 18:30:57 +0200, Guillaume Desticourt
:- est ce que mon test est pertinent?
Est-ce que la différence sera réellement visible par
l'utilisateur, dans le programme final ?
je ne sais pas. la en faisant un boucle de 1000000000
iterations, la difference est visible a l oeil nu.
maintenant je n ai aucune idee du volume de donnees que mon
programme aura a traiter.
Qu'importe, d'un certain côté.
[...]Le choix ne peut influer sur la vitesse totale d'exécution
que si cette partie représente une partie significative du
temps d'exécution.
je sais tout de meme que cette partie du code sera appelee
extremement souvent, donc faire des economies a ce niveau a
tout de meme des chances d'etre rentable.
Chose que tu ne sauras de toute façon qu'une fois le
programme complet, avec les données du profiler. Tout essai
à faire quelque chose de ce genre avant est contreproductif.
donc tu preconises de ne pas s occuper de performance avant
d'avoir code le programme - comme Fabien Lelez si je vous ai
bien suivi...
[...]Code de la manière la plus claire et lisible possible, et
occupe-toi des problèmes de performances si le programme
final est effectivement trop lent.
heu bof, je trouve plus logique de viser le resultat desire
plutot qu'appliquer des rustines et me retrouver avec un
code - encore plus - illisible.
Je vois que tu n'as aucune expérience avec des vrais
programmes.
j'en ai ecrits pas mal de faux alors...
Si d'autres ne peut pas comprendre ton code, c'est foutu
d'avance. Ce que Fabien disait, justement, c'est d'écrire du
code que les autres peuvent comprendre.
bof. des beaux principes, mais comprendre le code de quelqu'un
d'autre est amha une des choses les plus diffiles.
Des qu'un programme commence a avoir une certaine
taille/complexite, cela devient ardu, malgre la lisibilite du
code, les patrons de conception etc...
kanze@gabi-soft.fr wrote:
Guillaume Desticourt wrote:
On Wed, 20 Jul 2005 18:30:57 +0200, Guillaume Desticourt
<guillaume.desticourt.invalid@free.fr>:
- est ce que mon test est pertinent?
Est-ce que la différence sera réellement visible par
l'utilisateur, dans le programme final ?
je ne sais pas. la en faisant un boucle de 1000000000
iterations, la difference est visible a l oeil nu.
maintenant je n ai aucune idee du volume de donnees que mon
programme aura a traiter.
Qu'importe, d'un certain côté.
[...]
Le choix ne peut influer sur la vitesse totale d'exécution
que si cette partie représente une partie significative du
temps d'exécution.
je sais tout de meme que cette partie du code sera appelee
extremement souvent, donc faire des economies a ce niveau a
tout de meme des chances d'etre rentable.
Chose que tu ne sauras de toute façon qu'une fois le
programme complet, avec les données du profiler. Tout essai
à faire quelque chose de ce genre avant est contreproductif.
donc tu preconises de ne pas s occuper de performance avant
d'avoir code le programme - comme Fabien Lelez si je vous ai
bien suivi...
[...]
Code de la manière la plus claire et lisible possible, et
occupe-toi des problèmes de performances si le programme
final est effectivement trop lent.
heu bof, je trouve plus logique de viser le resultat desire
plutot qu'appliquer des rustines et me retrouver avec un
code - encore plus - illisible.
Je vois que tu n'as aucune expérience avec des vrais
programmes.
j'en ai ecrits pas mal de faux alors...
Si d'autres ne peut pas comprendre ton code, c'est foutu
d'avance. Ce que Fabien disait, justement, c'est d'écrire du
code que les autres peuvent comprendre.
bof. des beaux principes, mais comprendre le code de quelqu'un
d'autre est amha une des choses les plus diffiles.
Des qu'un programme commence a avoir une certaine
taille/complexite, cela devient ardu, malgre la lisibilite du
code, les patrons de conception etc...
wrote:Guillaume Desticourt wrote:On Wed, 20 Jul 2005 18:30:57 +0200, Guillaume Desticourt
:- est ce que mon test est pertinent?
Est-ce que la différence sera réellement visible par
l'utilisateur, dans le programme final ?
je ne sais pas. la en faisant un boucle de 1000000000
iterations, la difference est visible a l oeil nu.
maintenant je n ai aucune idee du volume de donnees que mon
programme aura a traiter.
Qu'importe, d'un certain côté.
[...]Le choix ne peut influer sur la vitesse totale d'exécution
que si cette partie représente une partie significative du
temps d'exécution.
je sais tout de meme que cette partie du code sera appelee
extremement souvent, donc faire des economies a ce niveau a
tout de meme des chances d'etre rentable.
Chose que tu ne sauras de toute façon qu'une fois le
programme complet, avec les données du profiler. Tout essai
à faire quelque chose de ce genre avant est contreproductif.
donc tu preconises de ne pas s occuper de performance avant
d'avoir code le programme - comme Fabien Lelez si je vous ai
bien suivi...
[...]Code de la manière la plus claire et lisible possible, et
occupe-toi des problèmes de performances si le programme
final est effectivement trop lent.
heu bof, je trouve plus logique de viser le resultat desire
plutot qu'appliquer des rustines et me retrouver avec un
code - encore plus - illisible.
Je vois que tu n'as aucune expérience avec des vrais
programmes.
j'en ai ecrits pas mal de faux alors...
Si d'autres ne peut pas comprendre ton code, c'est foutu
d'avance. Ce que Fabien disait, justement, c'est d'écrire du
code que les autres peuvent comprendre.
bof. des beaux principes, mais comprendre le code de quelqu'un
d'autre est amha une des choses les plus diffiles.
Des qu'un programme commence a avoir une certaine
taille/complexite, cela devient ardu, malgre la lisibilite du
code, les patrons de conception etc...
On Wed, 20 Jul 2005 18:30:57 +0200, Guillaume Desticourt
:- est ce que mon test est pertinent?
Est-ce que la différence sera réellement visible par
l'utilisateur, dans le programme final ?
Code de la manière la plus claire et lisible possible, et
occupe-toi des problèmes de performances si le programme
final est effectivement trop lent.
Je trouve votre réponse étonnante.
Vous considérez à priori que toute question sur l'optimisation
ne sera pas posée.
Existent, pratiquant le C++, des gens qui ne sont pas plus
idiots que vous et qui ont le droit de (se) poser des
questions, éventuellement pour pour le plaisir, ou ne pas
mourir idiots. Vous avez celui, si vous ne savez pas, de ne
pas répondre.
Quand au ton que vous employez, l'impératif, le tutoiement, il
n'est pas simplement grossier, il est grotesque.
On Wed, 20 Jul 2005 18:30:57 +0200, Guillaume Desticourt
<guillaume.desticourt.invalid@free.fr>:
- est ce que mon test est pertinent?
Est-ce que la différence sera réellement visible par
l'utilisateur, dans le programme final ?
Code de la manière la plus claire et lisible possible, et
occupe-toi des problèmes de performances si le programme
final est effectivement trop lent.
Je trouve votre réponse étonnante.
Vous considérez à priori que toute question sur l'optimisation
ne sera pas posée.
Existent, pratiquant le C++, des gens qui ne sont pas plus
idiots que vous et qui ont le droit de (se) poser des
questions, éventuellement pour pour le plaisir, ou ne pas
mourir idiots. Vous avez celui, si vous ne savez pas, de ne
pas répondre.
Quand au ton que vous employez, l'impératif, le tutoiement, il
n'est pas simplement grossier, il est grotesque.
On Wed, 20 Jul 2005 18:30:57 +0200, Guillaume Desticourt
:- est ce que mon test est pertinent?
Est-ce que la différence sera réellement visible par
l'utilisateur, dans le programme final ?
Code de la manière la plus claire et lisible possible, et
occupe-toi des problèmes de performances si le programme
final est effectivement trop lent.
Je trouve votre réponse étonnante.
Vous considérez à priori que toute question sur l'optimisation
ne sera pas posée.
Existent, pratiquant le C++, des gens qui ne sont pas plus
idiots que vous et qui ont le droit de (se) poser des
questions, éventuellement pour pour le plaisir, ou ne pas
mourir idiots. Vous avez celui, si vous ne savez pas, de ne
pas répondre.
Quand au ton que vous employez, l'impératif, le tutoiement, il
n'est pas simplement grossier, il est grotesque.
oui enfin dans le cas present je ne vois pas trop le
rapport, l'encapsulation est la que je fasse
if
test->behavior1()
else
test->behavior2()
ou
(test->*behavior)();
Sauf que ce que James proposais, c'était d'utiliser le pattern
strategy, qui apporte certainement une souplesse
supplémentaire (et qui a plus de chance d'être optimisé que
l'appel par pointeur de fonction membre, en plus).
oui enfin dans le cas present je ne vois pas trop le
rapport, l'encapsulation est la que je fasse
if
test->behavior1()
else
test->behavior2()
ou
(test->*behavior)();
Sauf que ce que James proposais, c'était d'utiliser le pattern
strategy, qui apporte certainement une souplesse
supplémentaire (et qui a plus de chance d'être optimisé que
l'appel par pointeur de fonction membre, en plus).
oui enfin dans le cas present je ne vois pas trop le
rapport, l'encapsulation est la que je fasse
if
test->behavior1()
else
test->behavior2()
ou
(test->*behavior)();
Sauf que ce que James proposais, c'était d'utiliser le pattern
strategy, qui apporte certainement une souplesse
supplémentaire (et qui a plus de chance d'être optimisé que
l'appel par pointeur de fonction membre, en plus).
On Thu, 21 Jul 2005 22:11:08 +0200, "Pierre Maurette"
:Vous considérez à priori que toute
question sur l'optimisation ne sera pas posée.
L'OP avait posé (entre autre) une question : "est ce que mon
test est pertinent?"
J'ai répondu : non. (Bon, d'accord, je ne l'ai pas dit
explicitement. Alors je le fais maintenant pour celui qui
n'avait pas compris.)
On Thu, 21 Jul 2005 22:11:08 +0200, "Pierre Maurette"
<mmaauurreetttteeppiieerrrree@wwaannaaddoooo.ffrr>:
Vous considérez à priori que toute
question sur l'optimisation ne sera pas posée.
L'OP avait posé (entre autre) une question : "est ce que mon
test est pertinent?"
J'ai répondu : non. (Bon, d'accord, je ne l'ai pas dit
explicitement. Alors je le fais maintenant pour celui qui
n'avait pas compris.)
On Thu, 21 Jul 2005 22:11:08 +0200, "Pierre Maurette"
:Vous considérez à priori que toute
question sur l'optimisation ne sera pas posée.
L'OP avait posé (entre autre) une question : "est ce que mon
test est pertinent?"
J'ai répondu : non. (Bon, d'accord, je ne l'ai pas dit
explicitement. Alors je le fais maintenant pour celui qui
n'avait pas compris.)
"Michel Michaud" writes:Quelqu'un a-t-il déjà vu une explication du principe des
« méthodes » où ce terme semble justifié adéquatement ?
Si un gugus s'amène sur ce forum et s'entête à ne converser
exclusivement qu'en Anglais (tout en sachant parler Français et le
status de ce forum), tu trouverais cela un brin déplacé, non ?
"Michel Michaud" <mm@gdzid.com> writes:
Quelqu'un a-t-il déjà vu une explication du principe des
« méthodes » où ce terme semble justifié adéquatement ?
Si un gugus s'amène sur ce forum et s'entête à ne converser
exclusivement qu'en Anglais (tout en sachant parler Français et le
status de ce forum), tu trouverais cela un brin déplacé, non ?
"Michel Michaud" writes:Quelqu'un a-t-il déjà vu une explication du principe des
« méthodes » où ce terme semble justifié adéquatement ?
Si un gugus s'amène sur ce forum et s'entête à ne converser
exclusivement qu'en Anglais (tout en sachant parler Français et le
status de ce forum), tu trouverais cela un brin déplacé, non ?
Quand au ton que vous employez, l'impératif, le tutoiement, il n'est
pas simplement grossier, il est grotesque.
Quand au ton que vous employez, l'impératif, le tutoiement, il n'est
pas simplement grossier, il est grotesque.
Quand au ton que vous employez, l'impératif, le tutoiement, il n'est
pas simplement grossier, il est grotesque.
Quels sont les autres reproches à faire à Java pour le
développement de gros projets ?
Le plus gros problème, évidemment, c'est qu'il melange
implémentation et interface (au sens général, et non au sens du
mot clé Java). Le langage même (et non seulement les
implémentations actuelles) exige que je mets tous les détails de
l'implémentation dans le même fichier physique que la
spécification de l'interface, et même que je les melange à
l'intérieur du fichier -- je ne peux pas, par exemple, mettre
la spécification en tête du fichier, et l'implémentation à la
suite. Alors que dans tous les gros projets où j'ai travaillé en
C++, il fallait davantage d'autorité pour modifier un en-tête
(dont dépendent les autres) qu'un fichier source.
[...]
Pour la reste, j'ai des assez bonnes expériences avec la
programmation par contrat dans de grands projets. Ici, le C++
n'a pas de supporte direct, mais il s'est développé des idiomes
(avec des fonctions virtuelles privées) pour l'implémenter,
quand elle convient. Ici, le langage de Java rend la
programmation par contrat même impossible, ou au moins, beaucoup
plus difficile : il faut se limiter à l'héritage simple, avec
beaucoup de classes supplémentaires intermédiaires. De même, je
préfère les erreurs le plus tôt possible -- l'absense des
templates et le fait que tout dérive d'Object pose un problème
ici (mais je crois que ce problème est reconnu même par ceux qui
font le Java, et que des versions les plus récentes de Java ont
des templates).
Quels sont les autres reproches à faire à Java pour le
développement de gros projets ?
Le plus gros problème, évidemment, c'est qu'il melange
implémentation et interface (au sens général, et non au sens du
mot clé Java). Le langage même (et non seulement les
implémentations actuelles) exige que je mets tous les détails de
l'implémentation dans le même fichier physique que la
spécification de l'interface, et même que je les melange à
l'intérieur du fichier -- je ne peux pas, par exemple, mettre
la spécification en tête du fichier, et l'implémentation à la
suite. Alors que dans tous les gros projets où j'ai travaillé en
C++, il fallait davantage d'autorité pour modifier un en-tête
(dont dépendent les autres) qu'un fichier source.
[...]
Pour la reste, j'ai des assez bonnes expériences avec la
programmation par contrat dans de grands projets. Ici, le C++
n'a pas de supporte direct, mais il s'est développé des idiomes
(avec des fonctions virtuelles privées) pour l'implémenter,
quand elle convient. Ici, le langage de Java rend la
programmation par contrat même impossible, ou au moins, beaucoup
plus difficile : il faut se limiter à l'héritage simple, avec
beaucoup de classes supplémentaires intermédiaires. De même, je
préfère les erreurs le plus tôt possible -- l'absense des
templates et le fait que tout dérive d'Object pose un problème
ici (mais je crois que ce problème est reconnu même par ceux qui
font le Java, et que des versions les plus récentes de Java ont
des templates).
Quels sont les autres reproches à faire à Java pour le
développement de gros projets ?
Le plus gros problème, évidemment, c'est qu'il melange
implémentation et interface (au sens général, et non au sens du
mot clé Java). Le langage même (et non seulement les
implémentations actuelles) exige que je mets tous les détails de
l'implémentation dans le même fichier physique que la
spécification de l'interface, et même que je les melange à
l'intérieur du fichier -- je ne peux pas, par exemple, mettre
la spécification en tête du fichier, et l'implémentation à la
suite. Alors que dans tous les gros projets où j'ai travaillé en
C++, il fallait davantage d'autorité pour modifier un en-tête
(dont dépendent les autres) qu'un fichier source.
[...]
Pour la reste, j'ai des assez bonnes expériences avec la
programmation par contrat dans de grands projets. Ici, le C++
n'a pas de supporte direct, mais il s'est développé des idiomes
(avec des fonctions virtuelles privées) pour l'implémenter,
quand elle convient. Ici, le langage de Java rend la
programmation par contrat même impossible, ou au moins, beaucoup
plus difficile : il faut se limiter à l'héritage simple, avec
beaucoup de classes supplémentaires intermédiaires. De même, je
préfère les erreurs le plus tôt possible -- l'absense des
templates et le fait que tout dérive d'Object pose un problème
ici (mais je crois que ce problème est reconnu même par ceux qui
font le Java, et que des versions les plus récentes de Java ont
des templates).
Quels sont les autres reproches à faire à Java pour le
développement de gros projets ?
Le plus gros problème, évidemment, c'est qu'il melange
implémentation et interface (au sens général, et non au sens
du mot clé Java). Le langage même (et non seulement les
implémentations actuelles) exige que je mets tous les détails
de l'implémentation dans le même fichier physique que la
spécification de l'interface, et même que je les melange à
l'intérieur du fichier -- je ne peux pas, par exemple, mettre
la spécification en tête du fichier, et l'implémentation à la
suite. Alors que dans tous les gros projets où j'ai travaillé
en C++, il fallait davantage d'autorité pour modifier un
en-tête (dont dépendent les autres) qu'un fichier source.
[...]
Je ne suis pas trop d'accord sur ce point. En Java,
l'interface s'écrit à l'aide des commentaires et de javadoc.
Le résultat est beaucoup plus clair qu'un en-tête C++, et
permet des choses assez fines comme le marquage "deprecated"
des membres qu'ils ne faut plus utiliser.
Quant à ne plus modifier une interface, ce n'est qu'un
problème de discipline, et rien n'empêche la discipline en
Java ou l'indiscipline en C++.
Quels sont les autres reproches à faire à Java pour le
développement de gros projets ?
Le plus gros problème, évidemment, c'est qu'il melange
implémentation et interface (au sens général, et non au sens
du mot clé Java). Le langage même (et non seulement les
implémentations actuelles) exige que je mets tous les détails
de l'implémentation dans le même fichier physique que la
spécification de l'interface, et même que je les melange à
l'intérieur du fichier -- je ne peux pas, par exemple, mettre
la spécification en tête du fichier, et l'implémentation à la
suite. Alors que dans tous les gros projets où j'ai travaillé
en C++, il fallait davantage d'autorité pour modifier un
en-tête (dont dépendent les autres) qu'un fichier source.
[...]
Je ne suis pas trop d'accord sur ce point. En Java,
l'interface s'écrit à l'aide des commentaires et de javadoc.
Le résultat est beaucoup plus clair qu'un en-tête C++, et
permet des choses assez fines comme le marquage "deprecated"
des membres qu'ils ne faut plus utiliser.
Quant à ne plus modifier une interface, ce n'est qu'un
problème de discipline, et rien n'empêche la discipline en
Java ou l'indiscipline en C++.
Quels sont les autres reproches à faire à Java pour le
développement de gros projets ?
Le plus gros problème, évidemment, c'est qu'il melange
implémentation et interface (au sens général, et non au sens
du mot clé Java). Le langage même (et non seulement les
implémentations actuelles) exige que je mets tous les détails
de l'implémentation dans le même fichier physique que la
spécification de l'interface, et même que je les melange à
l'intérieur du fichier -- je ne peux pas, par exemple, mettre
la spécification en tête du fichier, et l'implémentation à la
suite. Alors que dans tous les gros projets où j'ai travaillé
en C++, il fallait davantage d'autorité pour modifier un
en-tête (dont dépendent les autres) qu'un fichier source.
[...]
Je ne suis pas trop d'accord sur ce point. En Java,
l'interface s'écrit à l'aide des commentaires et de javadoc.
Le résultat est beaucoup plus clair qu'un en-tête C++, et
permet des choses assez fines comme le marquage "deprecated"
des membres qu'ils ne faut plus utiliser.
Quant à ne plus modifier une interface, ce n'est qu'un
problème de discipline, et rien n'empêche la discipline en
Java ou l'indiscipline en C++.
wrote:
Guillaume Desticourt wrote:
[...]
En général, les appels sur des pointeurs à fonction membre ne
sont pas ce qu'il y a de plus rapide. Mais ce n'est pas là la
question. Qu'est-ce qu'il est plus clair :
(this->*pmf)() ;
ma foi, cette solution va reduire le code, mais la syntaxe est
plus lourde qu un if/else donc c est une question de gout...
--
if ( c1 ) {
f1() ;
} else {
f2() ;
} // Avec éventuellement plus de cas.
--
switch ( mode ) {
case m1 :
f1() ;
break ;
case m2 :
f2() ;
break ;
} // Avec éventuellement plus de cas.
--
deleguee->f() ;
?
je suppose que c est le cas ou on utilise une strategie(?)
mais comme je ne connais pas je regarde...
(En passant, en C, j'aurais certainement utilisé le switch.
Pourquoi ne pas en avoir parler aussi ?)
et bien if/else c est pareil que switch et puis il n y a que
deux cas donc if/else me semble bien...
kanze@gabi-soft.fr wrote:
Guillaume Desticourt wrote:
[...]
En général, les appels sur des pointeurs à fonction membre ne
sont pas ce qu'il y a de plus rapide. Mais ce n'est pas là la
question. Qu'est-ce qu'il est plus clair :
(this->*pmf)() ;
ma foi, cette solution va reduire le code, mais la syntaxe est
plus lourde qu un if/else donc c est une question de gout...
--
if ( c1 ) {
f1() ;
} else {
f2() ;
} // Avec éventuellement plus de cas.
--
switch ( mode ) {
case m1 :
f1() ;
break ;
case m2 :
f2() ;
break ;
} // Avec éventuellement plus de cas.
--
deleguee->f() ;
?
je suppose que c est le cas ou on utilise une strategie(?)
mais comme je ne connais pas je regarde...
(En passant, en C, j'aurais certainement utilisé le switch.
Pourquoi ne pas en avoir parler aussi ?)
et bien if/else c est pareil que switch et puis il n y a que
deux cas donc if/else me semble bien...
wrote:
Guillaume Desticourt wrote:
[...]
En général, les appels sur des pointeurs à fonction membre ne
sont pas ce qu'il y a de plus rapide. Mais ce n'est pas là la
question. Qu'est-ce qu'il est plus clair :
(this->*pmf)() ;
ma foi, cette solution va reduire le code, mais la syntaxe est
plus lourde qu un if/else donc c est une question de gout...
--
if ( c1 ) {
f1() ;
} else {
f2() ;
} // Avec éventuellement plus de cas.
--
switch ( mode ) {
case m1 :
f1() ;
break ;
case m2 :
f2() ;
break ;
} // Avec éventuellement plus de cas.
--
deleguee->f() ;
?
je suppose que c est le cas ou on utilise une strategie(?)
mais comme je ne connais pas je regarde...
(En passant, en C, j'aurais certainement utilisé le switch.
Pourquoi ne pas en avoir parler aussi ?)
et bien if/else c est pareil que switch et puis il n y a que
deux cas donc if/else me semble bien...
wrote:
Guillaume Desticourt wrote:
[...]
j ai une class dont une methode peut changer de comportement
au cours de la vie du process, mais cela rarement. je me
demandais si je devais avoir une methode unique avec un bloc
if/else ou alors un pointeur de methode sette a la methode
qui va bien.
La solution classique ici, c'est la modèle stratégie, non ?
d'apres ce que je lis dans Design Patterns, Catalogue de
modeles de conception reutilisables de Gamma Helm Johnson et
vissides, la strategy sert a remplacer:
switch(_srategie):
case STRATEGY1
behavior1();
break;
case STRATEGY2:
behavior2()
...
par:
_strategie->behavior();
donc oui ca a l air de coller, mais:
vu que je dois pouvoir changer de comportement, il faudrait
que _compositeur soit un pointer sur la strategie qui m
interesse, donc dans ma classe j aurais un set de disons 2
strategies differentes, et _strategie serait settee sur un
element de mon set, puis change sur l autre etc...
j aurais donc
- un Strategy * pointant sur un des...
- deux Strategy * (un &Strategy1 et un &Strategy2)
bon ca revient au meme que mon pointer de methode
si ce n est que au lieu de bosser avec des objets Stratetegy
ma solution de pointer de methode bosser avec des methodes
behavior, et que le behavior est donc dans ma classe
principale au lieu d etre dans une derivee de Strategy. bref
il me semble que c est pareil?
Est-ce qu'il y a des raisons pour faire autre chose ? D'après
mon expérience :
-- La syntaxe de l'utilisation des pointeurs deplaît à
beaucoup. Moi, je m'en sers de temps en temps, mais chaque
fois, j'ai dû bien en justifier l'utilisation dans les
révues de code. Il faut donc bien une justification pour les
utiliser.
-- L'utilisation des if/else (dans ce cas-ci) risque de donner
des fonctions trop grandes et trop complexes.
d'accord mais dans ce cas, et apres reflexion suite a ce
thread, je me demande si ce n est pas la meilleure solution,
en effet le code du if et du else sont quasi identique, a 4
lignes pres, ainsi, dispatcher le code dans des fonctions
differentes n est peut etre pas pertient notamment au niveau
de la maintenance du code.
kanze@gabi-soft.fr wrote:
Guillaume Desticourt wrote:
[...]
j ai une class dont une methode peut changer de comportement
au cours de la vie du process, mais cela rarement. je me
demandais si je devais avoir une methode unique avec un bloc
if/else ou alors un pointeur de methode sette a la methode
qui va bien.
La solution classique ici, c'est la modèle stratégie, non ?
d'apres ce que je lis dans Design Patterns, Catalogue de
modeles de conception reutilisables de Gamma Helm Johnson et
vissides, la strategy sert a remplacer:
switch(_srategie):
case STRATEGY1
behavior1();
break;
case STRATEGY2:
behavior2()
...
par:
_strategie->behavior();
donc oui ca a l air de coller, mais:
vu que je dois pouvoir changer de comportement, il faudrait
que _compositeur soit un pointer sur la strategie qui m
interesse, donc dans ma classe j aurais un set de disons 2
strategies differentes, et _strategie serait settee sur un
element de mon set, puis change sur l autre etc...
j aurais donc
- un Strategy * pointant sur un des...
- deux Strategy * (un &Strategy1 et un &Strategy2)
bon ca revient au meme que mon pointer de methode
si ce n est que au lieu de bosser avec des objets Stratetegy
ma solution de pointer de methode bosser avec des methodes
behavior, et que le behavior est donc dans ma classe
principale au lieu d etre dans une derivee de Strategy. bref
il me semble que c est pareil?
Est-ce qu'il y a des raisons pour faire autre chose ? D'après
mon expérience :
-- La syntaxe de l'utilisation des pointeurs deplaît à
beaucoup. Moi, je m'en sers de temps en temps, mais chaque
fois, j'ai dû bien en justifier l'utilisation dans les
révues de code. Il faut donc bien une justification pour les
utiliser.
-- L'utilisation des if/else (dans ce cas-ci) risque de donner
des fonctions trop grandes et trop complexes.
d'accord mais dans ce cas, et apres reflexion suite a ce
thread, je me demande si ce n est pas la meilleure solution,
en effet le code du if et du else sont quasi identique, a 4
lignes pres, ainsi, dispatcher le code dans des fonctions
differentes n est peut etre pas pertient notamment au niveau
de la maintenance du code.
wrote:
Guillaume Desticourt wrote:
[...]
j ai une class dont une methode peut changer de comportement
au cours de la vie du process, mais cela rarement. je me
demandais si je devais avoir une methode unique avec un bloc
if/else ou alors un pointeur de methode sette a la methode
qui va bien.
La solution classique ici, c'est la modèle stratégie, non ?
d'apres ce que je lis dans Design Patterns, Catalogue de
modeles de conception reutilisables de Gamma Helm Johnson et
vissides, la strategy sert a remplacer:
switch(_srategie):
case STRATEGY1
behavior1();
break;
case STRATEGY2:
behavior2()
...
par:
_strategie->behavior();
donc oui ca a l air de coller, mais:
vu que je dois pouvoir changer de comportement, il faudrait
que _compositeur soit un pointer sur la strategie qui m
interesse, donc dans ma classe j aurais un set de disons 2
strategies differentes, et _strategie serait settee sur un
element de mon set, puis change sur l autre etc...
j aurais donc
- un Strategy * pointant sur un des...
- deux Strategy * (un &Strategy1 et un &Strategy2)
bon ca revient au meme que mon pointer de methode
si ce n est que au lieu de bosser avec des objets Stratetegy
ma solution de pointer de methode bosser avec des methodes
behavior, et que le behavior est donc dans ma classe
principale au lieu d etre dans une derivee de Strategy. bref
il me semble que c est pareil?
Est-ce qu'il y a des raisons pour faire autre chose ? D'après
mon expérience :
-- La syntaxe de l'utilisation des pointeurs deplaît à
beaucoup. Moi, je m'en sers de temps en temps, mais chaque
fois, j'ai dû bien en justifier l'utilisation dans les
révues de code. Il faut donc bien une justification pour les
utiliser.
-- L'utilisation des if/else (dans ce cas-ci) risque de donner
des fonctions trop grandes et trop complexes.
d'accord mais dans ce cas, et apres reflexion suite a ce
thread, je me demande si ce n est pas la meilleure solution,
en effet le code du if et du else sont quasi identique, a 4
lignes pres, ainsi, dispatcher le code dans des fonctions
differentes n est peut etre pas pertient notamment au niveau
de la maintenance du code.