bruno modulix
2005-09-09 09:55:56 UTC
NB : xpost et fu2 fr.comp.objet. On devient vraiment HS ici...
NB2 : Tout ce que j'énonce dans ce post ne saurait être qu'un avis
personnel, et comme seuls les imbéciles ne changent pas d'avis, je me
réserve le droit de me contredire à l'avenir. Vous voilà prévenus !-)
oui c'est vrai, mais avec des finalités différentes donc (à mon humble
avis) non comparable. ce serait comme comparer Python et le français: ce
sont des langages.
UML et les langages de programmation ont tout de même bien de plus de
point communs, que ce soit dans le formalisme ou dans les finalités,
qu'un langage informatique (quelqu'il soit : programmation, requete,
description, conception etc) et un langage 'naturel'.
spécification somme tu le faisais au début de ce paragraphe.
La frontière entre les deux est ténue. Très ténue.
finalités sont différentes, et c'est pour cela que je trouve ton
utilisation d'idiome pertinente par opposition aux patrons de conception
en UML.
Mais je n'oppose pas les deux... Certains modèles "de conception" n'ont
guère de sens quand le langage fournit déjà le support nécessaire. Relis
attentivement le pattern Visiteur dans le GoF, les auteurs précisent en
toutes lettres que ce pattern n'a aucun sens en CLOS qui fournit
nativement le multidispatch. De même, si on prend la description du
pattern Etat, on voit que ce pattern n'a pas lieu d'être en Python où
l'on peut très simplement changer la classe d'un objet à l'exécution.
Encore un: les décorateurs de fonction Python : idiome ou pattern ? Et
les itérateurs ?
En fait, une grande partie des modèles présentés dans le GoF ont pour
finalité d'introduire un peu de dynamisme dans des langages statiques,
et ce n'est certainement pas un hasard si la plupart sont illustrés par
des exemples en C++, et seulement quelques uns en Smalltalk.
frontière claire entre conception et implémentation, et l'idée même
qu'une conception puisse être *totalement* indépendante du langage
d'implémentation me semble parfaitement surréaliste. <AMHA>Au mieux, on
aura une conception suffisament générique pour pouvoir être implémentée
avec plus ou moins de bonheur dans un nombre fini de langages</AMHA>.
en est un exemple flagrant: tel qu'il est décrit, c'est typiquement un
idiome C++/Java. En Python, les itérateurs sont partie intégrante du
langage - et je veux bien que tu me modélise ça en UML...
masochisme que d'autre chose... (enfin, ça dépend bien sûr de la
granularité souhaitées...)
des niveaux d'abstraction successifs, et c'est toute l'histoire de
l'informatique. Le problème étant ici que (toujours AMHA), UML est trop
empêtré dans un modèle spécifique à un petit sous-ensemble de l'OO pour
permettre d'exprimer certains modèles, et évacue le problème en
considérant ces modèles comme des idiomes...
réalité effective... Quand on voit le fiasco qu'on été les CASE tools...
de 'conception' qui est distincte de 'réalisation' ou 'mise en oeuvre'.
Pour moi, la mise en oeuvre, c'est un programme en cours d'exécution.
Tout le reste relève de la spécification - à un niveau d'abstraction ou
à un autre. Même le code binaire n'est qu'une spécification, que l'on
fournit au processeur, lequel exécute (réalise) cette spécification...
c'est un point de vue, n'est-ce pas ?
il est vrai que toute analogie a ses limites, mais le message était: uml
permet de faire des plans des sytèmes comme la table des plans de murs,
alors que python permet de construire les systèmes comme la truelle des
murs.
Le mien est: uml permet (éventuellement...) de faire un crobard, Python
permet de faire les plans, et le processeur réalise le tout.
d'architecte.
mes deux centimes...
NB2 : Tout ce que j'énonce dans ce post ne saurait être qu'un avis
personnel, et comme seuls les imbéciles ne changent pas d'avis, je me
réserve le droit de me contredire à l'avenir. Vous voilà prévenus !-)
UML est une *notation* pour exprimer des éléments de *conceptions*
alors que les autres langages sont de *programmation*.
Dans les deux cas, ce sont des langages...alors que les autres langages sont de *programmation*.
avis) non comparable. ce serait comme comparer Python et le français: ce
sont des langages.
point communs, que ce soit dans le formalisme ou dans les finalités,
qu'un langage informatique (quelqu'il soit : programmation, requete,
description, conception etc) et un langage 'naturel'.
Il y a une théorie - pas dénuée d'intérêt d'ailleurs - selon laquelle
le code source d'un programme est lui-même une spécification détaillée
je suis d'accord sur ce pointle code source d'un programme est lui-même une spécification détaillée
importante, et qu'on peut aussi bien considérer le source Python comme
une notation pour exprimer une conception *détaillée* plus que comme
un produit fini.
je suis toujours d'accord, bien que je remplacerait conception parune notation pour exprimer une conception *détaillée* plus que comme
un produit fini.
spécification somme tu le faisais au début de ce paragraphe.
Le problème avec UML - langage destiné, donc, à exprimer des
conceptions - est qu'il ne permet pas - ou, en tous cas, je n'ai pas
trouvé le moyen de le faire, mais je ne dois pas être le seul -
d'exprimer lisiblement certains idiomes/modèles de conceptions
couramment employés dans des langages de haut niveau comme Python,
Ruby ou CLOS - sans parler des langages à prototype (Self, Io,
Javascript, ...). Dans
je suis toujours d'accord avec toi, mais ici encore je pense que lesconceptions - est qu'il ne permet pas - ou, en tous cas, je n'ai pas
trouvé le moyen de le faire, mais je ne dois pas être le seul -
d'exprimer lisiblement certains idiomes/modèles de conceptions
couramment employés dans des langages de haut niveau comme Python,
Ruby ou CLOS - sans parler des langages à prototype (Self, Io,
Javascript, ...). Dans
finalités sont différentes, et c'est pour cela que je trouve ton
utilisation d'idiome pertinente par opposition aux patrons de conception
en UML.
guère de sens quand le langage fournit déjà le support nécessaire. Relis
attentivement le pattern Visiteur dans le GoF, les auteurs précisent en
toutes lettres que ce pattern n'a aucun sens en CLOS qui fournit
nativement le multidispatch. De même, si on prend la description du
pattern Etat, on voit que ce pattern n'a pas lieu d'être en Python où
l'on peut très simplement changer la classe d'un objet à l'exécution.
Encore un: les décorateurs de fonction Python : idiome ou pattern ? Et
les itérateurs ?
En fait, une grande partie des modèles présentés dans le GoF ont pour
finalité d'introduire un peu de dynamisme dans des langages statiques,
et ce n'est certainement pas un hasard si la plupart sont illustrés par
des exemples en C++, et seulement quelques uns en Smalltalk.
idiomes et patrons de conception sont deux choses distincts à
deux niveaux différents.
Pas tant que ça... Quoi qu'en pensent certains, il n'y a pas dedeux niveaux différents.
frontière claire entre conception et implémentation, et l'idée même
qu'une conception puisse être *totalement* indépendante du langage
d'implémentation me semble parfaitement surréaliste. <AMHA>Au mieux, on
aura une conception suffisament générique pour pouvoir être implémentée
avec plus ou moins de bonheur dans un nombre fini de langages</AMHA>.
et UML n'est pas fait pour exprimer des
idiomes,
C'est pourtant ainsi qu'il est utilisé dans le GoF. Le modèle itérateuridiomes,
en est un exemple flagrant: tel qu'il est décrit, c'est typiquement un
idiome C++/Java. En Python, les itérateurs sont partie intégrante du
langage - et je veux bien que tu me modélise ça en UML...
ni même des traitements (ou si peu).
Effectivement, tenter de décrire un traitement en UML relève plus dumasochisme que d'autre chose... (enfin, ça dépend bien sûr de la
granularité souhaitées...)
c'est pour cela que la
comparaison UML / langage de programmation me surprend.
Personnellemnt, je la trouve évidente. Ce sont (ou ce devraient être)comparaison UML / langage de programmation me surprend.
des niveaux d'abstraction successifs, et c'est toute l'histoire de
l'informatique. Le problème étant ici que (toujours AMHA), UML est trop
empêtré dans un modèle spécifique à un petit sous-ensemble de l'OO pour
permettre d'exprimer certains modèles, et évacue le problème en
considérant ces modèles comme des idiomes...
je suis d'accord aussi que d'un point de vue plus théorique UML peut
être considéré comme exécutable, puisqu'il est possible de faire un
interpréteur d'UML qui va produire une nouvelle spécification d'un
système dans un espace technologique différent. c'est une des bases de
l'ingénierie dirigée par les modèles (comme MDA) avec les
transformations de modèles.
Je crains que tout cela ne relève plus du fantasme marketing que de laêtre considéré comme exécutable, puisqu'il est possible de faire un
interpréteur d'UML qui va produire une nouvelle spécification d'un
système dans un espace technologique différent. c'est une des bases de
l'ingénierie dirigée par les modèles (comme MDA) avec les
transformations de modèles.
réalité effective... Quand on voit le fiasco qu'on été les CASE tools...
certains cas, le code source exprime mieux (au sens de plus
lisiblement) la conception que le modèle UML.
hmmm j'ai du mal à acheter ici, mais c'est peut être due à ma définitionlisiblement) la conception que le modèle UML.
de 'conception' qui est distincte de 'réalisation' ou 'mise en oeuvre'.
Tout le reste relève de la spécification - à un niveau d'abstraction ou
à un autre. Même le code binaire n'est qu'une spécification, que l'on
fournit au processeur, lequel exécute (réalise) cette spécification...
désolé, je suis parfois un peu rigide.
Mais non, mais non !-)moralité, autant comparer une truelle et une table à dessin...
Je ne suis pas sûr que ton analogie soit si pertinente. Mais bon,c'est un point de vue, n'est-ce pas ?
permet de faire des plans des sytèmes comme la table des plans de murs,
alors que python permet de construire les systèmes comme la truelle des
murs.
permet de faire les plans, et le processeur réalise le tout.
et il reste plus simple d'appréhender un diagramme de classe uml de 20
boîtes qu'un programme python de 2000 lignes.
Il est aussi bien plus simple d'appréhender un crobard qu'un planboîtes qu'un programme python de 2000 lignes.
d'architecte.
mes deux centimes...
--
bruno desthuilliers
ruby -e "print '***@xiludom.gro'.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"
bruno desthuilliers
ruby -e "print '***@xiludom.gro'.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"