Wykaaa wrote:In article <47f24354$0$898$,
Wykaaa wrote:Ca dépend. Si seulement c'était bien enseigné !
Et aujourd'hui, il y a quand même de très bon bouquins sur ces sujets
(la plupart en anglais, hélas...)
J'ai fabriqué des cours sur tout ça, faudrait que je les mette en
ligne...
Le plus gros probleme est d'ordre psychologique: les vraies bases sont
tres simples. Elles s'expliquent en cinq minutes, mais sont dures a
appliquer correctement... je crois plus a l'approche _refactoring_ pour
enseigner ces notions.
Prend un cours `classique' d'oriente objet, tu vas expliquer
abstraction et encapsulation en cinq minutes, et passer 3/4 h sur
l'heritage... et apres, si tu demandes a un etudiant de te
caracteriser programmation OO, forcement
il va te parler d'heritage...
Dans l'enseignement de l'approche objet, j'ai toujours adopté l'approche
de Grady Booch.
Le probleme c'est que cette approche est fortement correlee avec les
langages static avec single-dispatch. Dans les languages dynamiques
et/ou avec multiple-dispatch, les responsabilites sont reparties tres
differement.
C'est vrai mais en première approche, pour des novices, ceci n'est pas
Je dis (et je décris) que les 4 concepts majeurs de l'objet sont :
- le concept d'abstraction
- le concept d'encapsulation
- le concept de modularité
Ce "concept" (qui n'en est pas un) est un terme vague (inspire de la
notion de module?) incluant l'encapsulation et la reutilisabilite qui
inclue elle-meme la composabilite.
(au sens objet et non pas dans son sens plusancien) qui s'appuie sur les deux principes de : 1- Forte cohésion
interne d'une abstraction, 2- faible couplage entre abstraction
Ce ne sont pas des principes mais des metriques (ordinal) tres utiles
pour eviter/detecter les mauvais designs.
- La notion de hiérarchie : héritage, mais aussi agrégation et
composition qui sont toutes 3 des relations d'ordre strict entre
abstractions (c'est fondamental de comprendre ça pour éviter des erreurs
de conception)
Une fois exposer ces 4 concepts majeurs, j'indique, en insistant
fortement, que ce n'est qu'à la condition que ces 4 concepts soient mis
en oeuvre conjointement qu'on peut parler d'approche objet.
Interessant. Sauf que la notion de Programmation Orientee Objet n'est
pas clairement definie a ma connaissance (avec d'interminable debat
sur
le sujet).
melanges ce qui rend son enseignement difficile.
connaissez plus de 50 languages, vous devriez savoir que les concepts
cites ci-dessus sont aussi presents dans des languages _non_ objet
(fonctionnel ou prototype par exemple) et donc ne suffisent pas a
caracteriser un language OO.
Ce qui _pourrait_ caracteriser un language OO, c'est subtyping +
polymorphisme (d'inclusion). Ces deux concepts sont les seuls vraiment
present dans tous les languages OO et absent dans les non OO.
Après, il faut faire de nombreuses études de cas pour montrer comment,
EFFECTIVEMENT, ces 4 concepts doivent être mis en oeuvre ENSEMBLE dans
une réelle approche objet et comment ils contribuent les uns aux autres
à cette approche.
J'ai fait ca pas plus tard que la semaine derniere a des physiciens
qui
ne connaissait rien d'autre que Fortran 77 (qui sevit encore ici, he
oui...) et un peu C. Ca m'a pris 6-7 heures, dont la moitie sur
l'impact
des concepts des languages de programmations sur le design de
software.
En revanche mon approche n'est pas dans les livres (et donc discutable
a
souhait, en particulier ma classification des concepts). Neanmoins,
tout
le monde a compris en 1h a 2h (pour la partie OO).
Pédagogiquement parlant, je ne passe pas plus de temps sur la notion de
hiérarchie (et pas seulement l'héritage, c'est ça la clé) que sur les
autres concepts.
C'est dommage, parce que dans les languages a typage statique, la
notion
de hierarchie est intrinsequement liee a celle de couplage que l'on
cherche a eviter. Le jeux consiste donc a montrer comment reorganiser
les hierarchies pour diminuer le couplage sans rendre Liskov furieux.
C++ utilise les templates presque partout pour resoudre ce probleme,
mais les autres languages n'ont guere le choix que d'utiliser des
interfaces (au sens Java du terme).
Enfin, je ne suis pas d'accord que les "vraies" bases s'expliquent en 5
minutes car moi j'y passe 3 (oui trois) jours sur les 4 concepts.
Je suis d'accord, 3-4 jours c'est ce qu'il faut pour un etudiant moyen
n'ayant aucun background sur le sujet. Ne serait-ce que pour lui
laisser
le temps de se faire a l'idee (comme pour les pointeurs). Le probleme,
c'est qu'il faut encore 1-2 ans pour savoir le mettre a profit dans
des
gros projets (design).
Wykaaa wrote:
In article <47f24354$0$898$ba4acef3@news.orange.fr>,
Wykaaa <wykaaa@yahoo.fr> wrote:
Ca dépend. Si seulement c'était bien enseigné !
Et aujourd'hui, il y a quand même de très bon bouquins sur ces sujets
(la plupart en anglais, hélas...)
J'ai fabriqué des cours sur tout ça, faudrait que je les mette en
ligne...
Le plus gros probleme est d'ordre psychologique: les vraies bases sont
tres simples. Elles s'expliquent en cinq minutes, mais sont dures a
appliquer correctement... je crois plus a l'approche _refactoring_ pour
enseigner ces notions.
Prend un cours `classique' d'oriente objet, tu vas expliquer
abstraction et encapsulation en cinq minutes, et passer 3/4 h sur
l'heritage... et apres, si tu demandes a un etudiant de te
caracteriser programmation OO, forcement
il va te parler d'heritage...
Dans l'enseignement de l'approche objet, j'ai toujours adopté l'approche
de Grady Booch.
Le probleme c'est que cette approche est fortement correlee avec les
langages static avec single-dispatch. Dans les languages dynamiques
et/ou avec multiple-dispatch, les responsabilites sont reparties tres
differement.
C'est vrai mais en première approche, pour des novices, ceci n'est pas
Je dis (et je décris) que les 4 concepts majeurs de l'objet sont :
- le concept d'abstraction
- le concept d'encapsulation
- le concept de modularité
Ce "concept" (qui n'en est pas un) est un terme vague (inspire de la
notion de module?) incluant l'encapsulation et la reutilisabilite qui
inclue elle-meme la composabilite.
(au sens objet et non pas dans son sens plus
ancien) qui s'appuie sur les deux principes de : 1- Forte cohésion
interne d'une abstraction, 2- faible couplage entre abstraction
Ce ne sont pas des principes mais des metriques (ordinal) tres utiles
pour eviter/detecter les mauvais designs.
- La notion de hiérarchie : héritage, mais aussi agrégation et
composition qui sont toutes 3 des relations d'ordre strict entre
abstractions (c'est fondamental de comprendre ça pour éviter des erreurs
de conception)
Une fois exposer ces 4 concepts majeurs, j'indique, en insistant
fortement, que ce n'est qu'à la condition que ces 4 concepts soient mis
en oeuvre conjointement qu'on peut parler d'approche objet.
Interessant. Sauf que la notion de Programmation Orientee Objet n'est
pas clairement definie a ma connaissance (avec d'interminable debat
sur
le sujet).
melanges ce qui rend son enseignement difficile.
connaissez plus de 50 languages, vous devriez savoir que les concepts
cites ci-dessus sont aussi presents dans des languages _non_ objet
(fonctionnel ou prototype par exemple) et donc ne suffisent pas a
caracteriser un language OO.
Ce qui _pourrait_ caracteriser un language OO, c'est subtyping +
polymorphisme (d'inclusion). Ces deux concepts sont les seuls vraiment
present dans tous les languages OO et absent dans les non OO.
Après, il faut faire de nombreuses études de cas pour montrer comment,
EFFECTIVEMENT, ces 4 concepts doivent être mis en oeuvre ENSEMBLE dans
une réelle approche objet et comment ils contribuent les uns aux autres
à cette approche.
J'ai fait ca pas plus tard que la semaine derniere a des physiciens
qui
ne connaissait rien d'autre que Fortran 77 (qui sevit encore ici, he
oui...) et un peu C. Ca m'a pris 6-7 heures, dont la moitie sur
l'impact
des concepts des languages de programmations sur le design de
software.
En revanche mon approche n'est pas dans les livres (et donc discutable
a
souhait, en particulier ma classification des concepts). Neanmoins,
tout
le monde a compris en 1h a 2h (pour la partie OO).
Pédagogiquement parlant, je ne passe pas plus de temps sur la notion de
hiérarchie (et pas seulement l'héritage, c'est ça la clé) que sur les
autres concepts.
C'est dommage, parce que dans les languages a typage statique, la
notion
de hierarchie est intrinsequement liee a celle de couplage que l'on
cherche a eviter. Le jeux consiste donc a montrer comment reorganiser
les hierarchies pour diminuer le couplage sans rendre Liskov furieux.
C++ utilise les templates presque partout pour resoudre ce probleme,
mais les autres languages n'ont guere le choix que d'utiliser des
interfaces (au sens Java du terme).
Enfin, je ne suis pas d'accord que les "vraies" bases s'expliquent en 5
minutes car moi j'y passe 3 (oui trois) jours sur les 4 concepts.
Je suis d'accord, 3-4 jours c'est ce qu'il faut pour un etudiant moyen
n'ayant aucun background sur le sujet. Ne serait-ce que pour lui
laisser
le temps de se faire a l'idee (comme pour les pointeurs). Le probleme,
c'est qu'il faut encore 1-2 ans pour savoir le mettre a profit dans
des
gros projets (design).
Wykaaa wrote:In article <47f24354$0$898$,
Wykaaa wrote:Ca dépend. Si seulement c'était bien enseigné !
Et aujourd'hui, il y a quand même de très bon bouquins sur ces sujets
(la plupart en anglais, hélas...)
J'ai fabriqué des cours sur tout ça, faudrait que je les mette en
ligne...
Le plus gros probleme est d'ordre psychologique: les vraies bases sont
tres simples. Elles s'expliquent en cinq minutes, mais sont dures a
appliquer correctement... je crois plus a l'approche _refactoring_ pour
enseigner ces notions.
Prend un cours `classique' d'oriente objet, tu vas expliquer
abstraction et encapsulation en cinq minutes, et passer 3/4 h sur
l'heritage... et apres, si tu demandes a un etudiant de te
caracteriser programmation OO, forcement
il va te parler d'heritage...
Dans l'enseignement de l'approche objet, j'ai toujours adopté l'approche
de Grady Booch.
Le probleme c'est que cette approche est fortement correlee avec les
langages static avec single-dispatch. Dans les languages dynamiques
et/ou avec multiple-dispatch, les responsabilites sont reparties tres
differement.
C'est vrai mais en première approche, pour des novices, ceci n'est pas
Je dis (et je décris) que les 4 concepts majeurs de l'objet sont :
- le concept d'abstraction
- le concept d'encapsulation
- le concept de modularité
Ce "concept" (qui n'en est pas un) est un terme vague (inspire de la
notion de module?) incluant l'encapsulation et la reutilisabilite qui
inclue elle-meme la composabilite.
(au sens objet et non pas dans son sens plusancien) qui s'appuie sur les deux principes de : 1- Forte cohésion
interne d'une abstraction, 2- faible couplage entre abstraction
Ce ne sont pas des principes mais des metriques (ordinal) tres utiles
pour eviter/detecter les mauvais designs.
- La notion de hiérarchie : héritage, mais aussi agrégation et
composition qui sont toutes 3 des relations d'ordre strict entre
abstractions (c'est fondamental de comprendre ça pour éviter des erreurs
de conception)
Une fois exposer ces 4 concepts majeurs, j'indique, en insistant
fortement, que ce n'est qu'à la condition que ces 4 concepts soient mis
en oeuvre conjointement qu'on peut parler d'approche objet.
Interessant. Sauf que la notion de Programmation Orientee Objet n'est
pas clairement definie a ma connaissance (avec d'interminable debat
sur
le sujet).
melanges ce qui rend son enseignement difficile.
connaissez plus de 50 languages, vous devriez savoir que les concepts
cites ci-dessus sont aussi presents dans des languages _non_ objet
(fonctionnel ou prototype par exemple) et donc ne suffisent pas a
caracteriser un language OO.
Ce qui _pourrait_ caracteriser un language OO, c'est subtyping +
polymorphisme (d'inclusion). Ces deux concepts sont les seuls vraiment
present dans tous les languages OO et absent dans les non OO.
Après, il faut faire de nombreuses études de cas pour montrer comment,
EFFECTIVEMENT, ces 4 concepts doivent être mis en oeuvre ENSEMBLE dans
une réelle approche objet et comment ils contribuent les uns aux autres
à cette approche.
J'ai fait ca pas plus tard que la semaine derniere a des physiciens
qui
ne connaissait rien d'autre que Fortran 77 (qui sevit encore ici, he
oui...) et un peu C. Ca m'a pris 6-7 heures, dont la moitie sur
l'impact
des concepts des languages de programmations sur le design de
software.
En revanche mon approche n'est pas dans les livres (et donc discutable
a
souhait, en particulier ma classification des concepts). Neanmoins,
tout
le monde a compris en 1h a 2h (pour la partie OO).
Pédagogiquement parlant, je ne passe pas plus de temps sur la notion de
hiérarchie (et pas seulement l'héritage, c'est ça la clé) que sur les
autres concepts.
C'est dommage, parce que dans les languages a typage statique, la
notion
de hierarchie est intrinsequement liee a celle de couplage que l'on
cherche a eviter. Le jeux consiste donc a montrer comment reorganiser
les hierarchies pour diminuer le couplage sans rendre Liskov furieux.
C++ utilise les templates presque partout pour resoudre ce probleme,
mais les autres languages n'ont guere le choix que d'utiliser des
interfaces (au sens Java du terme).
Enfin, je ne suis pas d'accord que les "vraies" bases s'expliquent en 5
minutes car moi j'y passe 3 (oui trois) jours sur les 4 concepts.
Je suis d'accord, 3-4 jours c'est ce qu'il faut pour un etudiant moyen
n'ayant aucun background sur le sujet. Ne serait-ce que pour lui
laisser
le temps de se faire a l'idee (comme pour les pointeurs). Le probleme,
c'est qu'il faut encore 1-2 ans pour savoir le mettre a profit dans
des
gros projets (design).
En news:, wykaaa va escriure:Pour le Web, les gens utilisent n'importe quoi et il n'y a qu'à
regarder les résultats catastrophiques concernant l'interopérabilité
multi-plateformes (les sites qui ne marchent qu'avec tel OS ou tel
navigateur, ou le machin flash dernier cri, etc.).
Il semble clair que l'interopérabilité multi-plateforme n'est *PAS*
le critère primordial d'un serveur web.
Ceci est contraire à l'esprit des pionniers de l'Internet.
Par contre, en ce qui concerne le délivré, actuellement les choses
s'améliorent beaucoup, les normes étant nettement moins mouvantes...
En effet, quand la période entre deux versions incompatibles entre
elles des « standards » est inférieure au temps moyen de dévelop-
pement d'un site web, il est difficile de réussir l'impossible.
Les standards de l'Internet (et pas seulement du Web) sont les RFC,
ceux du W3C et de l'IETF (Internet Engineering Task Force).
Depuis que 1º Microsoft a imposé un navigateur sur >90% des
machines cibles, et que 2º --en rupture complète avec le passé
immédiat-- a cessé de le développer dans toutes les directions
pendant 6 ans, c'est beaucoup mieux ! Le bienfait des standards...
Microsoft n'a fabriqué quasiment aucun standard
Il y a deux types de standards les standards de Jure et les standards
de Facto.
Les seconds sont en bien plus grand nombre...
(quand il a tenté, souvent il s'est fait renvoyé dans les cordes...).
Quant à son navigateur, parlons-en, il n'est plus développé sur Mac
depuis la version 5.2. Pour Linux, je ne sais pas. C'est donc un total
non respect des plates-formes et des OS.
La politique de Microsoft a conduit beaucoup de gouvernements à
adopter les standards et, par voie de conséquence, les logiciels
libres qui se basent dessus (plus généralement, ils se basent sur
les standards ouverts.
En news:op.t8wd2csm54jsyq@lemacpro.local, wykaaa va escriure:
Pour le Web, les gens utilisent n'importe quoi et il n'y a qu'à
regarder les résultats catastrophiques concernant l'interopérabilité
multi-plateformes (les sites qui ne marchent qu'avec tel OS ou tel
navigateur, ou le machin flash dernier cri, etc.).
Il semble clair que l'interopérabilité multi-plateforme n'est *PAS*
le critère primordial d'un serveur web.
Ceci est contraire à l'esprit des pionniers de l'Internet.
Par contre, en ce qui concerne le délivré, actuellement les choses
s'améliorent beaucoup, les normes étant nettement moins mouvantes...
En effet, quand la période entre deux versions incompatibles entre
elles des « standards » est inférieure au temps moyen de dévelop-
pement d'un site web, il est difficile de réussir l'impossible.
Les standards de l'Internet (et pas seulement du Web) sont les RFC,
ceux du W3C et de l'IETF (Internet Engineering Task Force).
Depuis que 1º Microsoft a imposé un navigateur sur >90% des
machines cibles, et que 2º --en rupture complète avec le passé
immédiat-- a cessé de le développer dans toutes les directions
pendant 6 ans, c'est beaucoup mieux ! Le bienfait des standards...
Microsoft n'a fabriqué quasiment aucun standard
Il y a deux types de standards les standards de Jure et les standards
de Facto.
Les seconds sont en bien plus grand nombre...
(quand il a tenté, souvent il s'est fait renvoyé dans les cordes...).
Quant à son navigateur, parlons-en, il n'est plus développé sur Mac
depuis la version 5.2. Pour Linux, je ne sais pas. C'est donc un total
non respect des plates-formes et des OS.
La politique de Microsoft a conduit beaucoup de gouvernements à
adopter les standards et, par voie de conséquence, les logiciels
libres qui se basent dessus (plus généralement, ils se basent sur
les standards ouverts.
En news:, wykaaa va escriure:Pour le Web, les gens utilisent n'importe quoi et il n'y a qu'à
regarder les résultats catastrophiques concernant l'interopérabilité
multi-plateformes (les sites qui ne marchent qu'avec tel OS ou tel
navigateur, ou le machin flash dernier cri, etc.).
Il semble clair que l'interopérabilité multi-plateforme n'est *PAS*
le critère primordial d'un serveur web.
Ceci est contraire à l'esprit des pionniers de l'Internet.
Par contre, en ce qui concerne le délivré, actuellement les choses
s'améliorent beaucoup, les normes étant nettement moins mouvantes...
En effet, quand la période entre deux versions incompatibles entre
elles des « standards » est inférieure au temps moyen de dévelop-
pement d'un site web, il est difficile de réussir l'impossible.
Les standards de l'Internet (et pas seulement du Web) sont les RFC,
ceux du W3C et de l'IETF (Internet Engineering Task Force).
Depuis que 1º Microsoft a imposé un navigateur sur >90% des
machines cibles, et que 2º --en rupture complète avec le passé
immédiat-- a cessé de le développer dans toutes les directions
pendant 6 ans, c'est beaucoup mieux ! Le bienfait des standards...
Microsoft n'a fabriqué quasiment aucun standard
Il y a deux types de standards les standards de Jure et les standards
de Facto.
Les seconds sont en bien plus grand nombre...
(quand il a tenté, souvent il s'est fait renvoyé dans les cordes...).
Quant à son navigateur, parlons-en, il n'est plus développé sur Mac
depuis la version 5.2. Pour Linux, je ne sais pas. C'est donc un total
non respect des plates-formes et des OS.
La politique de Microsoft a conduit beaucoup de gouvernements à
adopter les standards et, par voie de conséquence, les logiciels
libres qui se basent dessus (plus généralement, ils se basent sur
les standards ouverts.
Il existe d'autres langages autrement mieux conçus. En Fortran, par
exemple [...]
Pour moi, la syntaxe C est aussi moisie que la
syntaxe Python sur ce point parce que d'une part un bloc peut être
implicite (if () gnagnagna;) et d'autre part parce qu'une
instruction peut être nulle (if ();).
Il existe d'autres langages autrement mieux conçus. En Fortran, par
exemple [...]
Pour moi, la syntaxe C est aussi moisie que la
syntaxe Python sur ce point parce que d'une part un bloc peut être
implicite (if () gnagnagna;) et d'autre part parce qu'une
instruction peut être nulle (if ();).
Il existe d'autres langages autrement mieux conçus. En Fortran, par
exemple [...]
Pour moi, la syntaxe C est aussi moisie que la
syntaxe Python sur ce point parce que d'une part un bloc peut être
implicite (if () gnagnagna;) et d'autre part parce qu'une
instruction peut être nulle (if ();).
Dans l'enseignement de l'approche objet, j'ai toujours adopté l'approc he
de Grady Booch.
Le probleme c'est que cette approche est fortement correlee avec les
langages static avec single-dispatch. Dans les languages dynamiques
et/ou avec multiple-dispatch, les responsabilites sont reparties tres
differement.
C'est vrai mais en première approche, pour des novices, ceci n'est pas
très grave. Il faudra raffiner plus tard dans le cursus.
Je dis (et je décris) que les 4 concepts majeurs de l'objet sont :
- le concept d'abstraction
- le concept d'encapsulation
- le concept de modularité
Ce "concept" (qui n'en est pas un) est un terme vague (inspire de la
notion de module?) incluant l'encapsulation et la reutilisabilite qui
inclue elle-meme la composabilite.
Bien sûr que si, la modularité est un concept. Ca me fait justement
bondir, à chaque fois que j'entends des informaticiens qui disent le
contraire. Et c'est bien pour ça que la conception globale est
généralement "foirée" parce que ce concept est mal appliqué (car l es
gens ne le comprennent pas)..
Dans le contexte objet, ce n'est pas un terme vague. ce qui trompe,
c'est que la modularité a plusieurs niveaux de granularité (je parle,
encore une fois, de la modularité dans le cadre de l'objet). Du plus fin
au plus grossier :
- la classe,
- le package : ensemble de classes
- le composant : ensemble de packages (dans l'approche de développement
par composants)
- le sous-système : ensemble de composants
Si l'on prend la hiérarchie IEEE, il y a d'autres groupements
intermédiaires.
Là vous mélangez beaucoup de choses. L'encapsulation est un concept à
part (on peut faire des modules où tout est visible à l'extérieur).
La
composabilité est au niveau le plus fin des classes (du moins au sens ou
on entend composabilité en objet, à savoir lien de composition).
C'est
donc une des relations de hiérarchie. La modularité est une condition
pour la réutilisabilité
(au sens objet et non pas dans son sens plusancien) qui s'appuie sur les deux principes de : 1- Forte cohésion
interne d'une abstraction, 2- faible couplage entre abstraction
Ce ne sont pas des principes mais des metriques (ordinal) tres utiles
pour eviter/detecter les mauvais designs.
Non. Ce sont bien des principes
- La notion de hiérarchie : héritage, mais aussi agrégation et
composition qui sont toutes 3 des relations d'ordre strict entre
abstractions (c'est fondamental de comprendre ça pour éviter des err eurs
de conception)
Une fois exposer ces 4 concepts majeurs, j'indique, en insistant
fortement, que ce n'est qu'à la condition que ces 4 concepts soient mi s
en oeuvre conjointement qu'on peut parler d'approche objet.
Interessant. Sauf que la notion de Programmation Orientee Objet n'est
pas clairement definie a ma connaissance (avec d'interminable debat
sur
le sujet).
Vous parlez de programmation OO alors que je parle d'approche OO !
Cette approche est parfaitement définie depuis les premiers articles de
Grady Booch en 83 (25 ans quand même !).
La notion d'heritage inclue plusieurs concepts bien souventmelanges ce qui rend son enseignement difficile.
Quels sont les concepts que mélange la notion d'héritage ?
L'héritage est un sous-concept de la notion de hiérarchie entre module s,
un point c'est tout
(c'est donc une relation entre modules au même titre
que l'agrégation et la composition. Elle en a les mêmes propriétés :
c'est une relation d'ordre stricte).
Enfin, puisque vousconnaissez plus de 50 languages, vous devriez savoir que les concepts
cites ci-dessus sont aussi presents dans des languages _non_ objet
(fonctionnel ou prototype par exemple) et donc ne suffisent pas a
caracteriser un language OO.
La modularité existait avant l'objet,
en 72 "On the Criteria To Be Used in Decomposing Systems into Modules"
(voir : http://sunnyday.mit.edu/16.355/parnas-criteria.html) mais la
modularité a été redéfinie dans le cadre de l'objet en s'appuyant sur
les principes de forte cohésion interne d'un module (il traite une seule
abstraction et cette abstraction est traitée entièrement dans le modul e
)
et le faible couplage (minimiser les dépendances entre modules et
encapsuler les détails non nécessaires à leur utilisation).
Encore une fois, je ne cherche pas à caractériser un langage de
programmation OO mais l'approche OO (ceci est moins difficile).
Je ne tiens pas à rentrer dans la querelle des langages OO ou pas OO
(qui est sans fin et n'apporte rien)
Ce qui _pourrait_ caracteriser un language OO, c'est subtyping +
polymorphisme (d'inclusion). Ces deux concepts sont les seuls vraiment
present dans tous les languages OO et absent dans les non OO.
Je ne parlais pas de ce qui caractérise un langage objet mais des
concepts à mettre en oeuvre pour qu'on puisse parler de véritable
approche objet (ce n'est pas du tout la même chose).
Le subtyping existe dans ADA 83 qui n'est pas objet.
Il y a en fait 4 sortes de polymorphismes :
- Le polymorphisme ad'hoc : la surcharge et la coercion (conversion de
type)
- Le polymorphisme universel qui se subdivise en polymorphisme
paramétrique (comme dans ML, par exemple) et en polymorphisme d'hérita ge
(qui est effectivement appelé, quelques fois, polymorphisme d'inclusion)
Cf lucacardelli.name/Papers/OnUnderstanding.A4.pdf (le fameux article de
Cardelli et Wegner : "On Understanding Types, Data Abstraction, and
Polymorphism" qui est ce que je connais de mieux sur le sujet)
Après, il faut faire de nombreuses études de cas pour montrer commen t,
EFFECTIVEMENT, ces 4 concepts doivent être mis en oeuvre ENSEMBLE dans
une réelle approche objet et comment ils contribuent les uns aux autre s
à cette approche.
J'ai fait ca pas plus tard que la semaine derniere a des physiciens
qui
ne connaissait rien d'autre que Fortran 77 (qui sevit encore ici, he
oui...) et un peu C. Ca m'a pris 6-7 heures, dont la moitie sur
l'impact
des concepts des languages de programmations sur le design de
software.
En revanche mon approche n'est pas dans les livres (et donc discutable
a
souhait, en particulier ma classification des concepts). Neanmoins,
tout
le monde a compris en 1h a 2h (pour la partie OO).
Oui mais quelle est votre approche ?
Vous n'en dites rien alors que j'ai détaillé la mienne.
Ce qui me gêne c'est que vous vous situez toujours par rapport aux
langages de programmation OO alors que ce n'est pas mon cas.
Pédagogiquement parlant, je ne passe pas plus de temps sur la notion d e
hiérarchie (et pas seulement l'héritage, c'est ça la clé) que su r les
autres concepts.
C'est dommage, parce que dans les languages a typage statique, la
notion
de hierarchie est intrinsequement liee a celle de couplage que l'on
cherche a eviter. Le jeux consiste donc a montrer comment reorganiser
les hierarchies pour diminuer le couplage sans rendre Liskov furieux.
Je vous reprends : "sans rendre Liskov furieuSE". j'ai assisté à un
workshop de Barbara Liskov (auteur du langage CLU) en 85 à Berlin.
C'était extra.
Vous faites allusion au fameux principe de substitution ?
C++ utilise les templates presque partout pour resoudre ce probleme,
mais les autres languages n'ont guere le choix que d'utiliser des
interfaces (au sens Java du terme).
Mais les interfaces "à la Java" c'est très bien non ?
J'ai vu une application de 450 mille lignes de Java qui utilisait très
proprement les interfaces. Cette application était nickel.
Enfin, je ne suis pas d'accord que les "vraies" bases s'expliquent en 5
minutes car moi j'y passe 3 (oui trois) jours sur les 4 concepts.
Je suis d'accord, 3-4 jours c'est ce qu'il faut pour un etudiant moyen
n'ayant aucun background sur le sujet. Ne serait-ce que pour lui
laisser
le temps de se faire a l'idee (comme pour les pointeurs). Le probleme,
c'est qu'il faut encore 1-2 ans pour savoir le mettre a profit dans
des
gros projets (design).
Hélas oui, mais il n'y a pas de mystère...
Dans l'enseignement de l'approche objet, j'ai toujours adopté l'approc he
de Grady Booch.
Le probleme c'est que cette approche est fortement correlee avec les
langages static avec single-dispatch. Dans les languages dynamiques
et/ou avec multiple-dispatch, les responsabilites sont reparties tres
differement.
C'est vrai mais en première approche, pour des novices, ceci n'est pas
très grave. Il faudra raffiner plus tard dans le cursus.
Je dis (et je décris) que les 4 concepts majeurs de l'objet sont :
- le concept d'abstraction
- le concept d'encapsulation
- le concept de modularité
Ce "concept" (qui n'en est pas un) est un terme vague (inspire de la
notion de module?) incluant l'encapsulation et la reutilisabilite qui
inclue elle-meme la composabilite.
Bien sûr que si, la modularité est un concept. Ca me fait justement
bondir, à chaque fois que j'entends des informaticiens qui disent le
contraire. Et c'est bien pour ça que la conception globale est
généralement "foirée" parce que ce concept est mal appliqué (car l es
gens ne le comprennent pas)..
Dans le contexte objet, ce n'est pas un terme vague. ce qui trompe,
c'est que la modularité a plusieurs niveaux de granularité (je parle,
encore une fois, de la modularité dans le cadre de l'objet). Du plus fin
au plus grossier :
- la classe,
- le package : ensemble de classes
- le composant : ensemble de packages (dans l'approche de développement
par composants)
- le sous-système : ensemble de composants
Si l'on prend la hiérarchie IEEE, il y a d'autres groupements
intermédiaires.
Là vous mélangez beaucoup de choses. L'encapsulation est un concept à
part (on peut faire des modules où tout est visible à l'extérieur).
La
composabilité est au niveau le plus fin des classes (du moins au sens ou
on entend composabilité en objet, à savoir lien de composition).
C'est
donc une des relations de hiérarchie. La modularité est une condition
pour la réutilisabilité
(au sens objet et non pas dans son sens plus
ancien) qui s'appuie sur les deux principes de : 1- Forte cohésion
interne d'une abstraction, 2- faible couplage entre abstraction
Ce ne sont pas des principes mais des metriques (ordinal) tres utiles
pour eviter/detecter les mauvais designs.
Non. Ce sont bien des principes
- La notion de hiérarchie : héritage, mais aussi agrégation et
composition qui sont toutes 3 des relations d'ordre strict entre
abstractions (c'est fondamental de comprendre ça pour éviter des err eurs
de conception)
Une fois exposer ces 4 concepts majeurs, j'indique, en insistant
fortement, que ce n'est qu'à la condition que ces 4 concepts soient mi s
en oeuvre conjointement qu'on peut parler d'approche objet.
Interessant. Sauf que la notion de Programmation Orientee Objet n'est
pas clairement definie a ma connaissance (avec d'interminable debat
sur
le sujet).
Vous parlez de programmation OO alors que je parle d'approche OO !
Cette approche est parfaitement définie depuis les premiers articles de
Grady Booch en 83 (25 ans quand même !).
La notion d'heritage inclue plusieurs concepts bien souvent
melanges ce qui rend son enseignement difficile.
Quels sont les concepts que mélange la notion d'héritage ?
L'héritage est un sous-concept de la notion de hiérarchie entre module s,
un point c'est tout
(c'est donc une relation entre modules au même titre
que l'agrégation et la composition. Elle en a les mêmes propriétés :
c'est une relation d'ordre stricte).
Enfin, puisque vous
connaissez plus de 50 languages, vous devriez savoir que les concepts
cites ci-dessus sont aussi presents dans des languages _non_ objet
(fonctionnel ou prototype par exemple) et donc ne suffisent pas a
caracteriser un language OO.
La modularité existait avant l'objet,
en 72 "On the Criteria To Be Used in Decomposing Systems into Modules"
(voir : http://sunnyday.mit.edu/16.355/parnas-criteria.html) mais la
modularité a été redéfinie dans le cadre de l'objet en s'appuyant sur
les principes de forte cohésion interne d'un module (il traite une seule
abstraction et cette abstraction est traitée entièrement dans le modul e
)
et le faible couplage (minimiser les dépendances entre modules et
encapsuler les détails non nécessaires à leur utilisation).
Encore une fois, je ne cherche pas à caractériser un langage de
programmation OO mais l'approche OO (ceci est moins difficile).
Je ne tiens pas à rentrer dans la querelle des langages OO ou pas OO
(qui est sans fin et n'apporte rien)
Ce qui _pourrait_ caracteriser un language OO, c'est subtyping +
polymorphisme (d'inclusion). Ces deux concepts sont les seuls vraiment
present dans tous les languages OO et absent dans les non OO.
Je ne parlais pas de ce qui caractérise un langage objet mais des
concepts à mettre en oeuvre pour qu'on puisse parler de véritable
approche objet (ce n'est pas du tout la même chose).
Le subtyping existe dans ADA 83 qui n'est pas objet.
Il y a en fait 4 sortes de polymorphismes :
- Le polymorphisme ad'hoc : la surcharge et la coercion (conversion de
type)
- Le polymorphisme universel qui se subdivise en polymorphisme
paramétrique (comme dans ML, par exemple) et en polymorphisme d'hérita ge
(qui est effectivement appelé, quelques fois, polymorphisme d'inclusion)
Cf lucacardelli.name/Papers/OnUnderstanding.A4.pdf (le fameux article de
Cardelli et Wegner : "On Understanding Types, Data Abstraction, and
Polymorphism" qui est ce que je connais de mieux sur le sujet)
Après, il faut faire de nombreuses études de cas pour montrer commen t,
EFFECTIVEMENT, ces 4 concepts doivent être mis en oeuvre ENSEMBLE dans
une réelle approche objet et comment ils contribuent les uns aux autre s
à cette approche.
J'ai fait ca pas plus tard que la semaine derniere a des physiciens
qui
ne connaissait rien d'autre que Fortran 77 (qui sevit encore ici, he
oui...) et un peu C. Ca m'a pris 6-7 heures, dont la moitie sur
l'impact
des concepts des languages de programmations sur le design de
software.
En revanche mon approche n'est pas dans les livres (et donc discutable
a
souhait, en particulier ma classification des concepts). Neanmoins,
tout
le monde a compris en 1h a 2h (pour la partie OO).
Oui mais quelle est votre approche ?
Vous n'en dites rien alors que j'ai détaillé la mienne.
Ce qui me gêne c'est que vous vous situez toujours par rapport aux
langages de programmation OO alors que ce n'est pas mon cas.
Pédagogiquement parlant, je ne passe pas plus de temps sur la notion d e
hiérarchie (et pas seulement l'héritage, c'est ça la clé) que su r les
autres concepts.
C'est dommage, parce que dans les languages a typage statique, la
notion
de hierarchie est intrinsequement liee a celle de couplage que l'on
cherche a eviter. Le jeux consiste donc a montrer comment reorganiser
les hierarchies pour diminuer le couplage sans rendre Liskov furieux.
Je vous reprends : "sans rendre Liskov furieuSE". j'ai assisté à un
workshop de Barbara Liskov (auteur du langage CLU) en 85 à Berlin.
C'était extra.
Vous faites allusion au fameux principe de substitution ?
C++ utilise les templates presque partout pour resoudre ce probleme,
mais les autres languages n'ont guere le choix que d'utiliser des
interfaces (au sens Java du terme).
Mais les interfaces "à la Java" c'est très bien non ?
J'ai vu une application de 450 mille lignes de Java qui utilisait très
proprement les interfaces. Cette application était nickel.
Enfin, je ne suis pas d'accord que les "vraies" bases s'expliquent en 5
minutes car moi j'y passe 3 (oui trois) jours sur les 4 concepts.
Je suis d'accord, 3-4 jours c'est ce qu'il faut pour un etudiant moyen
n'ayant aucun background sur le sujet. Ne serait-ce que pour lui
laisser
le temps de se faire a l'idee (comme pour les pointeurs). Le probleme,
c'est qu'il faut encore 1-2 ans pour savoir le mettre a profit dans
des
gros projets (design).
Hélas oui, mais il n'y a pas de mystère...
Dans l'enseignement de l'approche objet, j'ai toujours adopté l'approc he
de Grady Booch.
Le probleme c'est que cette approche est fortement correlee avec les
langages static avec single-dispatch. Dans les languages dynamiques
et/ou avec multiple-dispatch, les responsabilites sont reparties tres
differement.
C'est vrai mais en première approche, pour des novices, ceci n'est pas
très grave. Il faudra raffiner plus tard dans le cursus.
Je dis (et je décris) que les 4 concepts majeurs de l'objet sont :
- le concept d'abstraction
- le concept d'encapsulation
- le concept de modularité
Ce "concept" (qui n'en est pas un) est un terme vague (inspire de la
notion de module?) incluant l'encapsulation et la reutilisabilite qui
inclue elle-meme la composabilite.
Bien sûr que si, la modularité est un concept. Ca me fait justement
bondir, à chaque fois que j'entends des informaticiens qui disent le
contraire. Et c'est bien pour ça que la conception globale est
généralement "foirée" parce que ce concept est mal appliqué (car l es
gens ne le comprennent pas)..
Dans le contexte objet, ce n'est pas un terme vague. ce qui trompe,
c'est que la modularité a plusieurs niveaux de granularité (je parle,
encore une fois, de la modularité dans le cadre de l'objet). Du plus fin
au plus grossier :
- la classe,
- le package : ensemble de classes
- le composant : ensemble de packages (dans l'approche de développement
par composants)
- le sous-système : ensemble de composants
Si l'on prend la hiérarchie IEEE, il y a d'autres groupements
intermédiaires.
Là vous mélangez beaucoup de choses. L'encapsulation est un concept à
part (on peut faire des modules où tout est visible à l'extérieur).
La
composabilité est au niveau le plus fin des classes (du moins au sens ou
on entend composabilité en objet, à savoir lien de composition).
C'est
donc une des relations de hiérarchie. La modularité est une condition
pour la réutilisabilité
(au sens objet et non pas dans son sens plusancien) qui s'appuie sur les deux principes de : 1- Forte cohésion
interne d'une abstraction, 2- faible couplage entre abstraction
Ce ne sont pas des principes mais des metriques (ordinal) tres utiles
pour eviter/detecter les mauvais designs.
Non. Ce sont bien des principes
- La notion de hiérarchie : héritage, mais aussi agrégation et
composition qui sont toutes 3 des relations d'ordre strict entre
abstractions (c'est fondamental de comprendre ça pour éviter des err eurs
de conception)
Une fois exposer ces 4 concepts majeurs, j'indique, en insistant
fortement, que ce n'est qu'à la condition que ces 4 concepts soient mi s
en oeuvre conjointement qu'on peut parler d'approche objet.
Interessant. Sauf que la notion de Programmation Orientee Objet n'est
pas clairement definie a ma connaissance (avec d'interminable debat
sur
le sujet).
Vous parlez de programmation OO alors que je parle d'approche OO !
Cette approche est parfaitement définie depuis les premiers articles de
Grady Booch en 83 (25 ans quand même !).
La notion d'heritage inclue plusieurs concepts bien souventmelanges ce qui rend son enseignement difficile.
Quels sont les concepts que mélange la notion d'héritage ?
L'héritage est un sous-concept de la notion de hiérarchie entre module s,
un point c'est tout
(c'est donc une relation entre modules au même titre
que l'agrégation et la composition. Elle en a les mêmes propriétés :
c'est une relation d'ordre stricte).
Enfin, puisque vousconnaissez plus de 50 languages, vous devriez savoir que les concepts
cites ci-dessus sont aussi presents dans des languages _non_ objet
(fonctionnel ou prototype par exemple) et donc ne suffisent pas a
caracteriser un language OO.
La modularité existait avant l'objet,
en 72 "On the Criteria To Be Used in Decomposing Systems into Modules"
(voir : http://sunnyday.mit.edu/16.355/parnas-criteria.html) mais la
modularité a été redéfinie dans le cadre de l'objet en s'appuyant sur
les principes de forte cohésion interne d'un module (il traite une seule
abstraction et cette abstraction est traitée entièrement dans le modul e
)
et le faible couplage (minimiser les dépendances entre modules et
encapsuler les détails non nécessaires à leur utilisation).
Encore une fois, je ne cherche pas à caractériser un langage de
programmation OO mais l'approche OO (ceci est moins difficile).
Je ne tiens pas à rentrer dans la querelle des langages OO ou pas OO
(qui est sans fin et n'apporte rien)
Ce qui _pourrait_ caracteriser un language OO, c'est subtyping +
polymorphisme (d'inclusion). Ces deux concepts sont les seuls vraiment
present dans tous les languages OO et absent dans les non OO.
Je ne parlais pas de ce qui caractérise un langage objet mais des
concepts à mettre en oeuvre pour qu'on puisse parler de véritable
approche objet (ce n'est pas du tout la même chose).
Le subtyping existe dans ADA 83 qui n'est pas objet.
Il y a en fait 4 sortes de polymorphismes :
- Le polymorphisme ad'hoc : la surcharge et la coercion (conversion de
type)
- Le polymorphisme universel qui se subdivise en polymorphisme
paramétrique (comme dans ML, par exemple) et en polymorphisme d'hérita ge
(qui est effectivement appelé, quelques fois, polymorphisme d'inclusion)
Cf lucacardelli.name/Papers/OnUnderstanding.A4.pdf (le fameux article de
Cardelli et Wegner : "On Understanding Types, Data Abstraction, and
Polymorphism" qui est ce que je connais de mieux sur le sujet)
Après, il faut faire de nombreuses études de cas pour montrer commen t,
EFFECTIVEMENT, ces 4 concepts doivent être mis en oeuvre ENSEMBLE dans
une réelle approche objet et comment ils contribuent les uns aux autre s
à cette approche.
J'ai fait ca pas plus tard que la semaine derniere a des physiciens
qui
ne connaissait rien d'autre que Fortran 77 (qui sevit encore ici, he
oui...) et un peu C. Ca m'a pris 6-7 heures, dont la moitie sur
l'impact
des concepts des languages de programmations sur le design de
software.
En revanche mon approche n'est pas dans les livres (et donc discutable
a
souhait, en particulier ma classification des concepts). Neanmoins,
tout
le monde a compris en 1h a 2h (pour la partie OO).
Oui mais quelle est votre approche ?
Vous n'en dites rien alors que j'ai détaillé la mienne.
Ce qui me gêne c'est que vous vous situez toujours par rapport aux
langages de programmation OO alors que ce n'est pas mon cas.
Pédagogiquement parlant, je ne passe pas plus de temps sur la notion d e
hiérarchie (et pas seulement l'héritage, c'est ça la clé) que su r les
autres concepts.
C'est dommage, parce que dans les languages a typage statique, la
notion
de hierarchie est intrinsequement liee a celle de couplage que l'on
cherche a eviter. Le jeux consiste donc a montrer comment reorganiser
les hierarchies pour diminuer le couplage sans rendre Liskov furieux.
Je vous reprends : "sans rendre Liskov furieuSE". j'ai assisté à un
workshop de Barbara Liskov (auteur du langage CLU) en 85 à Berlin.
C'était extra.
Vous faites allusion au fameux principe de substitution ?
C++ utilise les templates presque partout pour resoudre ce probleme,
mais les autres languages n'ont guere le choix que d'utiliser des
interfaces (au sens Java du terme).
Mais les interfaces "à la Java" c'est très bien non ?
J'ai vu une application de 450 mille lignes de Java qui utilisait très
proprement les interfaces. Cette application était nickel.
Enfin, je ne suis pas d'accord que les "vraies" bases s'expliquent en 5
minutes car moi j'y passe 3 (oui trois) jours sur les 4 concepts.
Je suis d'accord, 3-4 jours c'est ce qu'il faut pour un etudiant moyen
n'ayant aucun background sur le sujet. Ne serait-ce que pour lui
laisser
le temps de se faire a l'idee (comme pour les pointeurs). Le probleme,
c'est qu'il faut encore 1-2 ans pour savoir le mettre a profit dans
des
gros projets (design).
Hélas oui, mais il n'y a pas de mystère...
C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
Euh, il n'y a pas besoin d'un cas aussi extrême.
Perso, un script très court exploité sur deux machines, donc deux éditeurs
de texte différents, dont les paramètres par défaut pour la génération
correspondant à la touche TAB du clavier étaient différents (HT d'un côté et
série d'espace de l'autre).
Résultat, au premier coup de correction à chaud pour « réparer » une c***ie
au milieu d'une focntion sur « l'autre » machine, crac tu casses le script
(en fait, il ne charge même pas, l'interpréteur détecte le souci, preuve
selon moi que je ne suis pas le premier à qui cela arrive ;-) ).
Depuis, j'ai sur les *deux* machines reconfigurer les éditeurs pour
visualiser les espaces et les tabulations « dures ».
Cela doit s'appeler l'expérience, non ?
Antoine
Euh, il n'y a pas besoin d'un cas aussi extrême.
Perso, un script très court exploité sur deux machines, donc deux éditeurs
de texte différents, dont les paramètres par défaut pour la génération
correspondant à la touche TAB du clavier étaient différents (HT d'un côté et
série d'espace de l'autre).
Résultat, au premier coup de correction à chaud pour « réparer » une c***ie
au milieu d'une focntion sur « l'autre » machine, crac tu casses le script
(en fait, il ne charge même pas, l'interpréteur détecte le souci, preuve
selon moi que je ne suis pas le premier à qui cela arrive ;-) ).
Depuis, j'ai sur les *deux* machines reconfigurer les éditeurs pour
visualiser les espaces et les tabulations « dures ».
Cela doit s'appeler l'expérience, non ?
Antoine
Euh, il n'y a pas besoin d'un cas aussi extrême.
Perso, un script très court exploité sur deux machines, donc deux éditeurs
de texte différents, dont les paramètres par défaut pour la génération
correspondant à la touche TAB du clavier étaient différents (HT d'un côté et
série d'espace de l'autre).
Résultat, au premier coup de correction à chaud pour « réparer » une c***ie
au milieu d'une focntion sur « l'autre » machine, crac tu casses le script
(en fait, il ne charge même pas, l'interpréteur détecte le souci, preuve
selon moi que je ne suis pas le premier à qui cela arrive ;-) ).
Depuis, j'ai sur les *deux* machines reconfigurer les éditeurs pour
visualiser les espaces et les tabulations « dures ».
Cela doit s'appeler l'expérience, non ?
Antoine
In article ,
Laurent Deniau wrote:C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
Est-ce que tu pourrais detailler un peu ? En particulier donner des
exemples simples ou les multi-methodes sont une nettement meilleure
solution que des techniques plus classiques...
In article <84a0987f-2d55-417c-995e-58a981b25a5b@a70g2000hsh.googlegroups.com>,
Laurent Deniau <Laurent.Deniau@gmail.com> wrote:
C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
Est-ce que tu pourrais detailler un peu ? En particulier donner des
exemples simples ou les multi-methodes sont une nettement meilleure
solution que des techniques plus classiques...
In article ,
Laurent Deniau wrote:C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
Est-ce que tu pourrais detailler un peu ? En particulier donner des
exemples simples ou les multi-methodes sont une nettement meilleure
solution que des techniques plus classiques...
Euh, il n'y a pas besoin d'un cas aussi extrême.
Perso, un script très court exploité sur deux machines, donc deux
éditeurs
de texte différents, dont les paramètres par défaut pour la génération
correspondant à la touche TAB du clavier étaient différents (HT d'un
côté et
série d'espace de l'autre).
Résultat, au premier coup de correction à chaud pour « réparer » une
c***ie
au milieu d'une focntion sur « l'autre » machine, crac tu casses le
script
(en fait, il ne charge même pas, l'interpréteur détecte le souci, preuve
selon moi que je ne suis pas le premier à qui cela arrive ;-) ).
D'un autre côté dans un process sérieux et normal ca n'arrive pas.
Les programmes sont livrés pour tests. Si les tests passent ils sont
installés en production. C'est tout.
S'il y a modif on reprend le process.
Euh, il n'y a pas besoin d'un cas aussi extrême.
Perso, un script très court exploité sur deux machines, donc deux
éditeurs
de texte différents, dont les paramètres par défaut pour la génération
correspondant à la touche TAB du clavier étaient différents (HT d'un
côté et
série d'espace de l'autre).
Résultat, au premier coup de correction à chaud pour « réparer » une
c***ie
au milieu d'une focntion sur « l'autre » machine, crac tu casses le
script
(en fait, il ne charge même pas, l'interpréteur détecte le souci, preuve
selon moi que je ne suis pas le premier à qui cela arrive ;-) ).
D'un autre côté dans un process sérieux et normal ca n'arrive pas.
Les programmes sont livrés pour tests. Si les tests passent ils sont
installés en production. C'est tout.
S'il y a modif on reprend le process.
Euh, il n'y a pas besoin d'un cas aussi extrême.
Perso, un script très court exploité sur deux machines, donc deux
éditeurs
de texte différents, dont les paramètres par défaut pour la génération
correspondant à la touche TAB du clavier étaient différents (HT d'un
côté et
série d'espace de l'autre).
Résultat, au premier coup de correction à chaud pour « réparer » une
c***ie
au milieu d'une focntion sur « l'autre » machine, crac tu casses le
script
(en fait, il ne charge même pas, l'interpréteur détecte le souci, preuve
selon moi que je ne suis pas le premier à qui cela arrive ;-) ).
D'un autre côté dans un process sérieux et normal ca n'arrive pas.
Les programmes sont livrés pour tests. Si les tests passent ils sont
installés en production. C'est tout.
S'il y a modif on reprend le process.
In article ,
Laurent Deniau wrote:C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
Est-ce que tu pourrais detailler un peu ? En particulier donner des
exemples simples ou les multi-methodes sont une nettement meilleure
solution que des techniques plus classiques...
In article <84a0987f-2d55-417c-995e-58a981b25a5b@a70g2000hsh.googlegroups.com>,
Laurent Deniau <Laurent.Deniau@gmail.com> wrote:
C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
Est-ce que tu pourrais detailler un peu ? En particulier donner des
exemples simples ou les multi-methodes sont une nettement meilleure
solution que des techniques plus classiques...
In article ,
Laurent Deniau wrote:C'est ce que j'ai cru pendant 15 ans. Aujourd'hui, base sur mon
experience, je pense que les multi-methodes sont plus simple a
enseigner et a apprehender que le single dispatch pour de multiples
raisons (qu'il serait long a expliquer ici mais directement lier au
probleme de design et de ce qu'il faut faire et de ce qu'il ne faut
pas faire).
Est-ce que tu pourrais detailler un peu ? En particulier donner des
exemples simples ou les multi-methodes sont une nettement meilleure
solution que des techniques plus classiques...
En théorie, la pratique est conforme à la théorie. En pratique...
Bin en
pratique, les interventions d'urgence sur du code en prod, ça arrive.
Ok, c'est Mal(tm), ok, c'est à éviter par tous les moyens possibles,
mais bon, faut être pragmatique : ça arrive.
En théorie, la pratique est conforme à la théorie. En pratique...
Bin en
pratique, les interventions d'urgence sur du code en prod, ça arrive.
Ok, c'est Mal(tm), ok, c'est à éviter par tous les moyens possibles,
mais bon, faut être pragmatique : ça arrive.
En théorie, la pratique est conforme à la théorie. En pratique...
Bin en
pratique, les interventions d'urgence sur du code en prod, ça arrive.
Ok, c'est Mal(tm), ok, c'est à éviter par tous les moyens possibles,
mais bon, faut être pragmatique : ça arrive.