"kanze" writes:Fabien CHÊNE wrote:James Kanze writes:[...] le modèle de la programmation par contrat est
assez répandue qu'il l'a sans doute supposé connu. Dans
la pratique, évidemment, la classe ne contient pas que
des fonctions virtuelles pûres, mais aussi des fonctions
non-virtuelles publiques qui les appellent,
[snip]
Qu'appelles-tu "programmation par contrat" ?
Je ne le connais pas d'autre nom. C'est Bertrand Meyer qui
en est l'auteur original je crois.L'idiome que je reconnais la, est celui de la template
méthode popularisée par Gamma et al.
(Par « template méthode », je suppose que tu veux dire le
modèle template -- le « template pattern » en anglais.
"template methode" (ou "template methode pattern") est le
terme utilisé par Herb Sutter dans les exceptional C++. Je
pensais que c'était suffisament répendu. Mais je ne suis pas
opposé, loin de là, à l'appeler autrement. (Je ne peut pas
m'empêcher de penser qu'un mot tel que customization aurait pu
être utilisé pour désigner ce modèle de conception.)
Je t'en prie, pas encore une autre signification pour «
méthode ».)
Ah bon, il y en a une autre ? ;)
Au temps pour moi. Peut-on parvenir à séparer logiquement les
préconditions/postconditions, des invariants d'une classe ?
Et je te rejoins surement quand, à un autre endroit dans ce
fil, tu dis ne pas trop utiliser le modèle de template. Je
pense que tu leur préfèrent alors les Mixins.
Question subsidiaire : est-il imaginable de faire de la
programmation par contrat, tout en utilisant la méthode de
template ou les Mixins ? Ces deux choses m'ont l'air a priori
orthogonales.
En supposant qu'il s'agit d'une implémentation de B qui
lui-même utilise le modèle de template : conceptuellement, f() e st
^^^^^^^^^^^^^^^^^^^^^^^
Est-ce la traduction de template méthode ?
J'utilise le mot « modèle » assez systèmatiquement comme
traduction de « pattern » (dans « design pattern »). Le « mod èle
de template », c'est le « template pattern ».
Et moi, je traduis souvent template par modèle. Ce qui fait
que modèle de template me parait pour le moins abstrait.
"kanze" <kanze@gabi-soft.fr> writes:
Fabien CHÊNE wrote:
James Kanze <kanze.james@neuf.fr> writes:
[...] le modèle de la programmation par contrat est
assez répandue qu'il l'a sans doute supposé connu. Dans
la pratique, évidemment, la classe ne contient pas que
des fonctions virtuelles pûres, mais aussi des fonctions
non-virtuelles publiques qui les appellent,
[snip]
Qu'appelles-tu "programmation par contrat" ?
Je ne le connais pas d'autre nom. C'est Bertrand Meyer qui
en est l'auteur original je crois.
L'idiome que je reconnais la, est celui de la template
méthode popularisée par Gamma et al.
(Par « template méthode », je suppose que tu veux dire le
modèle template -- le « template pattern » en anglais.
"template methode" (ou "template methode pattern") est le
terme utilisé par Herb Sutter dans les exceptional C++. Je
pensais que c'était suffisament répendu. Mais je ne suis pas
opposé, loin de là, à l'appeler autrement. (Je ne peut pas
m'empêcher de penser qu'un mot tel que customization aurait pu
être utilisé pour désigner ce modèle de conception.)
Je t'en prie, pas encore une autre signification pour «
méthode ».)
Ah bon, il y en a une autre ? ;)
Au temps pour moi. Peut-on parvenir à séparer logiquement les
préconditions/postconditions, des invariants d'une classe ?
Et je te rejoins surement quand, à un autre endroit dans ce
fil, tu dis ne pas trop utiliser le modèle de template. Je
pense que tu leur préfèrent alors les Mixins.
Question subsidiaire : est-il imaginable de faire de la
programmation par contrat, tout en utilisant la méthode de
template ou les Mixins ? Ces deux choses m'ont l'air a priori
orthogonales.
En supposant qu'il s'agit d'une implémentation de B qui
lui-même utilise le modèle de template : conceptuellement, f() e st
^^^^^^^^^^^^^^^^^^^^^^^
Est-ce la traduction de template méthode ?
J'utilise le mot « modèle » assez systèmatiquement comme
traduction de « pattern » (dans « design pattern »). Le « mod èle
de template », c'est le « template pattern ».
Et moi, je traduis souvent template par modèle. Ce qui fait
que modèle de template me parait pour le moins abstrait.
"kanze" writes:Fabien CHÊNE wrote:James Kanze writes:[...] le modèle de la programmation par contrat est
assez répandue qu'il l'a sans doute supposé connu. Dans
la pratique, évidemment, la classe ne contient pas que
des fonctions virtuelles pûres, mais aussi des fonctions
non-virtuelles publiques qui les appellent,
[snip]
Qu'appelles-tu "programmation par contrat" ?
Je ne le connais pas d'autre nom. C'est Bertrand Meyer qui
en est l'auteur original je crois.L'idiome que je reconnais la, est celui de la template
méthode popularisée par Gamma et al.
(Par « template méthode », je suppose que tu veux dire le
modèle template -- le « template pattern » en anglais.
"template methode" (ou "template methode pattern") est le
terme utilisé par Herb Sutter dans les exceptional C++. Je
pensais que c'était suffisament répendu. Mais je ne suis pas
opposé, loin de là, à l'appeler autrement. (Je ne peut pas
m'empêcher de penser qu'un mot tel que customization aurait pu
être utilisé pour désigner ce modèle de conception.)
Je t'en prie, pas encore une autre signification pour «
méthode ».)
Ah bon, il y en a une autre ? ;)
Au temps pour moi. Peut-on parvenir à séparer logiquement les
préconditions/postconditions, des invariants d'une classe ?
Et je te rejoins surement quand, à un autre endroit dans ce
fil, tu dis ne pas trop utiliser le modèle de template. Je
pense que tu leur préfèrent alors les Mixins.
Question subsidiaire : est-il imaginable de faire de la
programmation par contrat, tout en utilisant la méthode de
template ou les Mixins ? Ces deux choses m'ont l'air a priori
orthogonales.
En supposant qu'il s'agit d'une implémentation de B qui
lui-même utilise le modèle de template : conceptuellement, f() e st
^^^^^^^^^^^^^^^^^^^^^^^
Est-ce la traduction de template méthode ?
J'utilise le mot « modèle » assez systèmatiquement comme
traduction de « pattern » (dans « design pattern »). Le « mod èle
de template », c'est le « template pattern ».
Et moi, je traduis souvent template par modèle. Ce qui fait
que modèle de template me parait pour le moins abstrait.
"template methode" (ou "template methode pattern") est le
terme utilisé par Herb Sutter dans les exceptional C++. Je
pensais que c'était suffisament répendu. Mais je ne suis pas
opposé, loin de là, à l'appeler autrement. (Je ne peut pas
m'empêcher de penser qu'un mot tel que customization aurait pu
être utilisé pour désigner ce modèle de conception.)
Je ne me rappelais plus de la terminologie exacte de Herb. Je
sais qu'il l'a rapproché au « template design pattern » du GoF ;
je me suis opposé, parce qu'il s'agit à mon avis de deux choses
différentes. Dans le GoF, c'est « Template Design Pattern », ce
que je traduis par « modèle de template ». (Dans cette
utilisation, la meilleur traduction de « template » serait
« modèle ». Mais « modèle de modèle », ça me laisse froid.) Si
Herb y a ajouté « method », c'est encore pire, parce que
précisement, dans le modèle, ce n'est pas lié à une fonction
unique.
Quant à la possibilité de l'appeler « customisation », pourquoi
pas ? Mais comment distinguer alors entre la customisation au
moyen des fonctions virtuelles supplantées dans une classe
dérivée, et la customisation au moyen d'un délégué (ce que le
GoF appelle le modèle stratégie, je crois -- mais je m'en
servais bien avant le GoF).
Je t'en prie, pas encore une autre signification pour «
méthode ».)
Ah bon, il y en a une autre ? ;)
J'utilisais le mèthode Booch dans le temps. Le mot « méthode »,
pour moi, se rapproche à la méthodologie.
Dans d'autres langages, on s'en sert pour signifier une
fonction. Ce qui prète parfois à la confusion, mais en général
le contexte permet à distinguer.
[...]Au temps pour moi. Peut-on parvenir à séparer logiquement les
préconditions/postconditions, des invariants d'une classe ?
Je ne suis pas trop sûr ce que tu entends par « séparer
logiquement ». Les pré- et les postconditions concernent surtout
les fonctions ; les invariants, la classe (mais évidemment, les
invariants de la classe sont à la fois pré- et post-conditions
de toute fonction membre). Quand je vérifie les invariants, je
le fais toujours au moyen d'une fonction « checkInvariants() »
(qui aborte le cas où). Une fonction avec toutes ces
vérifications serait donc :
ReturnType someOperation( ParamType param )
{
checkInvariants() ;
assert( preconditions ) ;
ReturnType result = doSomeOperation( param ) ;
checkInvariants() ;
assert( postconditions ) ;
return result ;
}
Dans la pratique, la plupart de mes classes sont assez simple,
avec des invariants plutôt triviaux -- et je m'en passe souvent
des vérifications. En ce qui concerne les post-conditions, il
n'ont une signification que pour les fonctions non-const ; qui
en général ne renvoient rien, ce qui simplifie la charpente de
fonction ci-dessus.
[...]Et je te rejoins surement quand, à un autre endroit dans ce
fil, tu dis ne pas trop utiliser le modèle de template. Je
pense que tu leur préfèrent alors les Mixins.
Je préfère en général les délégués. Je crois que les mixins,
c'est une forme extrème du modèle template -- c'est toujours à
travers des fonctions virtuelles de la classe de base qu'on
customise.
Note qu'en C++, il y a un contraint majeur dans toutes les
variantes du modèle template : la customisation n'est active
qu'une fois le constructeur terminé. Tu ne peux pas t'en servir
dans le constructeur de la classe de base. L'utilisation d'un
délégué règle ce problème (la plupart du temps, au prix d'une
allocation dynamique en plus).
"template methode" (ou "template methode pattern") est le
terme utilisé par Herb Sutter dans les exceptional C++. Je
pensais que c'était suffisament répendu. Mais je ne suis pas
opposé, loin de là, à l'appeler autrement. (Je ne peut pas
m'empêcher de penser qu'un mot tel que customization aurait pu
être utilisé pour désigner ce modèle de conception.)
Je ne me rappelais plus de la terminologie exacte de Herb. Je
sais qu'il l'a rapproché au « template design pattern » du GoF ;
je me suis opposé, parce qu'il s'agit à mon avis de deux choses
différentes. Dans le GoF, c'est « Template Design Pattern », ce
que je traduis par « modèle de template ». (Dans cette
utilisation, la meilleur traduction de « template » serait
« modèle ». Mais « modèle de modèle », ça me laisse froid.) Si
Herb y a ajouté « method », c'est encore pire, parce que
précisement, dans le modèle, ce n'est pas lié à une fonction
unique.
Quant à la possibilité de l'appeler « customisation », pourquoi
pas ? Mais comment distinguer alors entre la customisation au
moyen des fonctions virtuelles supplantées dans une classe
dérivée, et la customisation au moyen d'un délégué (ce que le
GoF appelle le modèle stratégie, je crois -- mais je m'en
servais bien avant le GoF).
Je t'en prie, pas encore une autre signification pour «
méthode ».)
Ah bon, il y en a une autre ? ;)
J'utilisais le mèthode Booch dans le temps. Le mot « méthode »,
pour moi, se rapproche à la méthodologie.
Dans d'autres langages, on s'en sert pour signifier une
fonction. Ce qui prète parfois à la confusion, mais en général
le contexte permet à distinguer.
[...]
Au temps pour moi. Peut-on parvenir à séparer logiquement les
préconditions/postconditions, des invariants d'une classe ?
Je ne suis pas trop sûr ce que tu entends par « séparer
logiquement ». Les pré- et les postconditions concernent surtout
les fonctions ; les invariants, la classe (mais évidemment, les
invariants de la classe sont à la fois pré- et post-conditions
de toute fonction membre). Quand je vérifie les invariants, je
le fais toujours au moyen d'une fonction « checkInvariants() »
(qui aborte le cas où). Une fonction avec toutes ces
vérifications serait donc :
ReturnType someOperation( ParamType param )
{
checkInvariants() ;
assert( preconditions ) ;
ReturnType result = doSomeOperation( param ) ;
checkInvariants() ;
assert( postconditions ) ;
return result ;
}
Dans la pratique, la plupart de mes classes sont assez simple,
avec des invariants plutôt triviaux -- et je m'en passe souvent
des vérifications. En ce qui concerne les post-conditions, il
n'ont une signification que pour les fonctions non-const ; qui
en général ne renvoient rien, ce qui simplifie la charpente de
fonction ci-dessus.
[...]
Et je te rejoins surement quand, à un autre endroit dans ce
fil, tu dis ne pas trop utiliser le modèle de template. Je
pense que tu leur préfèrent alors les Mixins.
Je préfère en général les délégués. Je crois que les mixins,
c'est une forme extrème du modèle template -- c'est toujours à
travers des fonctions virtuelles de la classe de base qu'on
customise.
Note qu'en C++, il y a un contraint majeur dans toutes les
variantes du modèle template : la customisation n'est active
qu'une fois le constructeur terminé. Tu ne peux pas t'en servir
dans le constructeur de la classe de base. L'utilisation d'un
délégué règle ce problème (la plupart du temps, au prix d'une
allocation dynamique en plus).
"template methode" (ou "template methode pattern") est le
terme utilisé par Herb Sutter dans les exceptional C++. Je
pensais que c'était suffisament répendu. Mais je ne suis pas
opposé, loin de là, à l'appeler autrement. (Je ne peut pas
m'empêcher de penser qu'un mot tel que customization aurait pu
être utilisé pour désigner ce modèle de conception.)
Je ne me rappelais plus de la terminologie exacte de Herb. Je
sais qu'il l'a rapproché au « template design pattern » du GoF ;
je me suis opposé, parce qu'il s'agit à mon avis de deux choses
différentes. Dans le GoF, c'est « Template Design Pattern », ce
que je traduis par « modèle de template ». (Dans cette
utilisation, la meilleur traduction de « template » serait
« modèle ». Mais « modèle de modèle », ça me laisse froid.) Si
Herb y a ajouté « method », c'est encore pire, parce que
précisement, dans le modèle, ce n'est pas lié à une fonction
unique.
Quant à la possibilité de l'appeler « customisation », pourquoi
pas ? Mais comment distinguer alors entre la customisation au
moyen des fonctions virtuelles supplantées dans une classe
dérivée, et la customisation au moyen d'un délégué (ce que le
GoF appelle le modèle stratégie, je crois -- mais je m'en
servais bien avant le GoF).
Je t'en prie, pas encore une autre signification pour «
méthode ».)
Ah bon, il y en a une autre ? ;)
J'utilisais le mèthode Booch dans le temps. Le mot « méthode »,
pour moi, se rapproche à la méthodologie.
Dans d'autres langages, on s'en sert pour signifier une
fonction. Ce qui prète parfois à la confusion, mais en général
le contexte permet à distinguer.
[...]Au temps pour moi. Peut-on parvenir à séparer logiquement les
préconditions/postconditions, des invariants d'une classe ?
Je ne suis pas trop sûr ce que tu entends par « séparer
logiquement ». Les pré- et les postconditions concernent surtout
les fonctions ; les invariants, la classe (mais évidemment, les
invariants de la classe sont à la fois pré- et post-conditions
de toute fonction membre). Quand je vérifie les invariants, je
le fais toujours au moyen d'une fonction « checkInvariants() »
(qui aborte le cas où). Une fonction avec toutes ces
vérifications serait donc :
ReturnType someOperation( ParamType param )
{
checkInvariants() ;
assert( preconditions ) ;
ReturnType result = doSomeOperation( param ) ;
checkInvariants() ;
assert( postconditions ) ;
return result ;
}
Dans la pratique, la plupart de mes classes sont assez simple,
avec des invariants plutôt triviaux -- et je m'en passe souvent
des vérifications. En ce qui concerne les post-conditions, il
n'ont une signification que pour les fonctions non-const ; qui
en général ne renvoient rien, ce qui simplifie la charpente de
fonction ci-dessus.
[...]Et je te rejoins surement quand, à un autre endroit dans ce
fil, tu dis ne pas trop utiliser le modèle de template. Je
pense que tu leur préfèrent alors les Mixins.
Je préfère en général les délégués. Je crois que les mixins,
c'est une forme extrème du modèle template -- c'est toujours à
travers des fonctions virtuelles de la classe de base qu'on
customise.
Note qu'en C++, il y a un contraint majeur dans toutes les
variantes du modèle template : la customisation n'est active
qu'une fois le constructeur terminé. Tu ne peux pas t'en servir
dans le constructeur de la classe de base. L'utilisation d'un
délégué règle ce problème (la plupart du temps, au prix d'une
allocation dynamique en plus).
J'avais trouvé cela convainquant à l'époque et l'ai adopté
pour mon propre code.
[...]
le procès de développement n'est pas parfait. Et évidemment, si
tu produis les bibliothèques qui doivent servir en dehors de ta
société, tu ne peux absolument pas permettre une telle chose
dans les en-têtes que tu livres.)
J'avais trouvé cela convainquant à l'époque et l'ai adopté
pour mon propre code.
[...]
le procès de développement n'est pas parfait. Et évidemment, si
tu produis les bibliothèques qui doivent servir en dehors de ta
société, tu ne peux absolument pas permettre une telle chose
dans les en-têtes que tu livres.)
J'avais trouvé cela convainquant à l'époque et l'ai adopté
pour mon propre code.
[...]
le procès de développement n'est pas parfait. Et évidemment, si
tu produis les bibliothèques qui doivent servir en dehors de ta
société, tu ne peux absolument pas permettre une telle chose
dans les en-têtes que tu livres.)