J'ai beaucoup apprécié le fil "Avis sur les include files" où ont été
abordées entre autres des questions sur l'enseignement du C++ et les "bonnes
habitudes" à enseigner en TP, ce qui m'incite à poster ce message.
Voici la situation : je suis enseignant en IUT - DUT informatique (Bac+2 à
vocation professionnelle). Jusqu'à maintenant la programmation était
enseignée au travers du C++. Il est fortement question de changer ce choix
dans notre IUT pour remplacer C++ par Java (actuellement un enseignement de
Java existe, mais en seconde année seulement, donc avec déjà une pratique du
C++ et les bases de la POO).
J'aimerais vos avis sur ces deux questions :
- quels sont les arguments en faveur (ou en défaveur) du C++ (par rapport à
Java) pour enseigner la POO à des débutants complets en programmation ? (et
pour qui, pour reprendre une remarque apparue dans le fil auquel je faisais
référence, il n'y a plus en majorité "de passion ou de réelle envie de faire
de l'informatique"...)
- est-il raisonnable de lâcher sur le marché du travail des informaticiens
"Bac+2" qui n'aient jamais programmé en C++ ?
Note personnelle : je ne suis pas le chargé de cours concerné, j'ai une
tendance à préférer le C++ (par mon parcours et par mon activité quotidienne
en recherche), mais je n'aurai aucune réticence à faire pratiquer Java si je
suis convaincu que c'est un meilleur choix pour mes étudiants.
Merci d'avance pour vos contributions qui nourriront sûrement le débat que
nous devrions avoir au sein de l'équipe pédagogique.
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant,
à base de classe et d'objets qui instancies ces classes (Java, C++,
Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple
Non, je ne partage pas cette analyse. Dans les deux, tu as un modèle de type à base de classes, des instances (objet), le sous-typage se fait de manière déclarative sur les classes (je laisse de côté les templates/la généricité). Après, oui, C++ a par défaut une sémantique de valeur, Java une sémantique de poignée, et on a quelques autres différences (héritage multiple par exemple). Mais ça reste pour moi dans la même famille.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles, il faudrait trouver une conception architecturale qui passe dans l'un et pas du tout dans l'autre. Les modèles ou classes et objets sont manipulables de la même manière sont AMHA eux dans une classe différente (ils se disent souvent plus objet d'ailleurs).
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
On 2009-02-09, Pascal J. Bourguignon <pjb@informatimago.com> wrote:
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant,
à base de classe et d'objets qui instancies ces classes (Java, C++,
Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles
objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet
statique avec héritage multiple
Non, je ne partage pas cette analyse.
Dans les deux, tu as un modèle de type à base de classes, des
instances (objet), le sous-typage se fait de manière déclarative
sur les classes (je laisse de côté les templates/la généricité).
Après, oui, C++ a par défaut une sémantique de valeur, Java
une sémantique de poignée, et on a quelques autres différences
(héritage multiple par exemple). Mais ça reste pour moi dans
la même famille.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle,
serait d'essayer d'implémenter dans un langage X une sous classe d'une
classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles,
il faudrait trouver une conception architecturale qui passe dans
l'un et pas du tout dans l'autre.
Les modèles ou classes et objets sont manipulables de la même
manière sont AMHA eux dans une classe différente (ils se disent
souvent plus objet d'ailleurs).
Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple
Non, je ne partage pas cette analyse. Dans les deux, tu as un modèle de type à base de classes, des instances (objet), le sous-typage se fait de manière déclarative sur les classes (je laisse de côté les templates/la généricité). Après, oui, C++ a par défaut une sémantique de valeur, Java une sémantique de poignée, et on a quelques autres différences (héritage multiple par exemple). Mais ça reste pour moi dans la même famille.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles, il faudrait trouver une conception architecturale qui passe dans l'un et pas du tout dans l'autre. Les modèles ou classes et objets sont manipulables de la même manière sont AMHA eux dans une classe différente (ils se disent souvent plus objet d'ailleurs).
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
espie
In article , Pascal J. Bourguignon wrote:
Marc Boyer writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Ca va pas non ? vu du point de vue de smalltalk ou de self, C++, Java, et Ada, c'est essentiellement la meme chose...
In article <7cbptbyjrr.fsf@pbourguignon.anevia.com>,
Pascal J. Bourguignon <pjb@informatimago.com> wrote:
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant,
à base de classe et d'objets qui instancies ces classes (Java, C++,
Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Ca va pas non ? vu du point de vue de smalltalk ou de self, C++, Java, et Ada, c'est essentiellement la meme chose...
Wykaaa
Marc Boyer a écrit :
On 2009-02-09, Pascal J. Bourguignon wrote:
Marc Boyer writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple
Non, je ne partage pas cette analyse. Dans les deux, tu as un modèle de type à base de classes, des instances (objet), le sous-typage se fait de manière déclarative sur les classes (je laisse de côté les templates/la généricité). Après, oui, C++ a par défaut une sémantique de valeur, Java une sémantique de poignée, et on a quelques autres différences (héritage multiple par exemple). Mais ça reste pour moi dans la même famille.
Je suis tout à fait d'accord avec toi. La distinction entre les différents modèles objet se fait sur d'autres critères comme, par exemple, si on considère le typage et la classification : le typage du premier ordre "à la Liskov" avec le principe de substitution ou le typage du second ordre "à la Cook". Dans ce cas, on voit que Smalltalk permet ce genre de typage mais pas Java ou C++.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
L'objet, dans Ada, a été ajouté après coup (Ada 95 vs Ada 83). Ca se voit !
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles, il faudrait trouver une conception architecturale qui passe dans l'un et pas du tout dans l'autre. Les modèles ou classes et objets sont manipulables de la même manière sont AMHA eux dans une classe différente (ils se disent souvent plus objet d'ailleurs).
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
Marc Boyer a écrit :
On 2009-02-09, Pascal J. Bourguignon <pjb@informatimago.com> wrote:
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant,
à base de classe et d'objets qui instancies ces classes (Java, C++,
Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles
objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet
statique avec héritage multiple
Non, je ne partage pas cette analyse.
Dans les deux, tu as un modèle de type à base de classes, des
instances (objet), le sous-typage se fait de manière déclarative
sur les classes (je laisse de côté les templates/la généricité).
Après, oui, C++ a par défaut une sémantique de valeur, Java
une sémantique de poignée, et on a quelques autres différences
(héritage multiple par exemple). Mais ça reste pour moi dans
la même famille.
Je suis tout à fait d'accord avec toi. La distinction entre les
différents modèles objet se fait sur d'autres critères comme, par
exemple, si on considère le typage et la classification : le typage du
premier ordre "à la Liskov" avec le principe de substitution ou le
typage du second ordre "à la Cook". Dans ce cas, on voit que Smalltalk
permet ce genre de typage mais pas Java ou C++.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
L'objet, dans Ada, a été ajouté après coup (Ada 95 vs Ada 83). Ca se voit !
Le meilleur moyen de vérifier que ce ne sont pas le même modèle,
serait d'essayer d'implémenter dans un langage X une sous classe d'une
classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles,
il faudrait trouver une conception architecturale qui passe dans
l'un et pas du tout dans l'autre.
Les modèles ou classes et objets sont manipulables de la même
manière sont AMHA eux dans une classe différente (ils se disent
souvent plus objet d'ailleurs).
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y
compris les classes ce qui impose qu'on parle de métaclasse (typage du
second ordre).
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple
Non, je ne partage pas cette analyse. Dans les deux, tu as un modèle de type à base de classes, des instances (objet), le sous-typage se fait de manière déclarative sur les classes (je laisse de côté les templates/la généricité). Après, oui, C++ a par défaut une sémantique de valeur, Java une sémantique de poignée, et on a quelques autres différences (héritage multiple par exemple). Mais ça reste pour moi dans la même famille.
Je suis tout à fait d'accord avec toi. La distinction entre les différents modèles objet se fait sur d'autres critères comme, par exemple, si on considère le typage et la classification : le typage du premier ordre "à la Liskov" avec le principe de substitution ou le typage du second ordre "à la Cook". Dans ce cas, on voit que Smalltalk permet ce genre de typage mais pas Java ou C++.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
L'objet, dans Ada, a été ajouté après coup (Ada 95 vs Ada 83). Ca se voit !
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles, il faudrait trouver une conception architecturale qui passe dans l'un et pas du tout dans l'autre. Les modèles ou classes et objets sont manipulables de la même manière sont AMHA eux dans une classe différente (ils se disent souvent plus objet d'ailleurs).
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
espie
In article <49902083$0$4090$, Wykaaa wrote:
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
Je me sens oblige de mentionner le modele objet de perl, ou tout est un peu "en kit" En tout cas, suffisamment pour que, meme si le modele dominant est sous forme de classes, on puisse faire tres facilement des choses extremement exotiques, comme la foultitude de modules existants sur CPAN le prouvent.
Mais bon, a la base: - on peut synthetiser nom de methode et appels de methode au vol - le genial AUTOLOAD permet de faire ce qu'on veut cote delegation et fabrication de methodes. - le cote dynamique fait que les classes sont ouvertes. Tres possible de rajouter des methodes apres coup. - les types sont associes aux objets, on peut facilement changer un objet de classe (meme si c'est rarement utile). - pas d'infrastructure "particuliere" pour le constructeur. On peut faire ce qu'on veut. - possibilites de reflexivite extremement etendues, y compris controle de ce qui se passe a la compilation/au runtime.
... entre autres.
Personnellement, j'y ai retrouve la joie de faire du smalltalk, avec en plus un langage communiquant avec le monde exterieur.
In article <49902083$0$4090$ba4acef3@news.orange.fr>,
Wykaaa <wykaaa@yahoo.fr> wrote:
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y
compris les classes ce qui impose qu'on parle de métaclasse (typage du
second ordre).
Je me sens oblige de mentionner le modele objet de perl, ou tout est un
peu "en kit" En tout cas, suffisamment pour que, meme si le modele dominant
est sous forme de classes, on puisse faire tres facilement des choses
extremement exotiques, comme la foultitude de modules existants sur CPAN
le prouvent.
Mais bon, a la base:
- on peut synthetiser nom de methode et appels de methode au vol
- le genial AUTOLOAD permet de faire ce qu'on veut cote delegation et
fabrication de methodes.
- le cote dynamique fait que les classes sont ouvertes. Tres possible
de rajouter des methodes apres coup.
- les types sont associes aux objets, on peut facilement changer un
objet de classe (meme si c'est rarement utile).
- pas d'infrastructure "particuliere" pour le constructeur. On peut
faire ce qu'on veut.
- possibilites de reflexivite extremement etendues, y compris controle
de ce qui se passe a la compilation/au runtime.
... entre autres.
Personnellement, j'y ai retrouve la joie de faire du smalltalk, avec en
plus un langage communiquant avec le monde exterieur.
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
Je me sens oblige de mentionner le modele objet de perl, ou tout est un peu "en kit" En tout cas, suffisamment pour que, meme si le modele dominant est sous forme de classes, on puisse faire tres facilement des choses extremement exotiques, comme la foultitude de modules existants sur CPAN le prouvent.
Mais bon, a la base: - on peut synthetiser nom de methode et appels de methode au vol - le genial AUTOLOAD permet de faire ce qu'on veut cote delegation et fabrication de methodes. - le cote dynamique fait que les classes sont ouvertes. Tres possible de rajouter des methodes apres coup. - les types sont associes aux objets, on peut facilement changer un objet de classe (meme si c'est rarement utile). - pas d'infrastructure "particuliere" pour le constructeur. On peut faire ce qu'on veut. - possibilites de reflexivite extremement etendues, y compris controle de ce qui se passe a la compilation/au runtime.
... entre autres.
Personnellement, j'y ai retrouve la joie de faire du smalltalk, avec en plus un langage communiquant avec le monde exterieur.
Wykaaa
Pascal J. Bourguignon a écrit :
Marc Boyer writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple, et Ada un modèle objet statique avec héritage simple.
Il est abusif de dire que Java a un modèle objet dynamique.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X≠Y.
Ca vérifiera surtout la difficulté qu'il y a à faire communiquer plusieurs langages dans une même application !
Pascal J. Bourguignon a écrit :
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant,
à base de classe et d'objets qui instancies ces classes (Java, C++,
Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles
objets complètement différents.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet
statique avec héritage multiple, et Ada un modèle objet statique avec
héritage simple.
Il est abusif de dire que Java a un modèle objet dynamique.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle,
serait d'essayer d'implémenter dans un langage X une sous classe d'une
classe écrite dans un langage Y avec X≠Y.
Ca vérifiera surtout la difficulté qu'il y a à faire communiquer
plusieurs langages dans une même application !
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple, et Ada un modèle objet statique avec héritage simple.
Il est abusif de dire que Java a un modèle objet dynamique.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X≠Y.
Ca vérifiera surtout la difficulté qu'il y a à faire communiquer plusieurs langages dans une même application !
pjb
(Marc Espie) writes:
In article <49902083$0$4090$, Wykaaa wrote:
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
Je me sens oblige de mentionner le modele objet de perl, ou tout est un peu "en kit" En tout cas, suffisamment pour que, meme si le modele dominant est sous forme de classes, on puisse faire tres facilement des choses extremement exotiques, comme la foultitude de modules existants sur CPAN le prouvent. [...] Personnellement, j'y ai retrouve la joie de faire du smalltalk, avec en plus un langage communiquant avec le monde exterieur.
C'est vrai qu'un langage dynamique permet plus facilement de s'adapter et de s'interfacer avec des systèmes objets différents. En Common Lisp, CLOS peut être considéré comme un module indépendant, et on peut définir des systèmes objets différents (il en existe, par exemple, KR qui est basé sur les prototypes comme Javascript), et grâce au FFI, on peut aussi s'interfacer avec des systèmes d'objets comme celui du C++.
Mais ceci demande beaucoup plus de travail, et un travail qui est de plus trés dépendant du compilateur utilisé pour compiler les objets C++. On ne peut pas vraiment dire alors qu'il y ait une quelconque compatibilité entre CLOS (idem Smalltalk, Objective-C, Java, Ruby, Perl) d'une part et C++ d'autre part. On peut implémenter dans un langage le système objet de l'autre. Greenspun!
Le plus proche, ce sont des choses comme CORBA, qui imposent en fait leur propre modèle objet aux langages qui veulent s'interfacer.
-- __Pascal Bourguignon__
espie@lain.home (Marc Espie) writes:
In article <49902083$0$4090$ba4acef3@news.orange.fr>,
Wykaaa <wykaaa@yahoo.fr> wrote:
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y
compris les classes ce qui impose qu'on parle de métaclasse (typage du
second ordre).
Je me sens oblige de mentionner le modele objet de perl, ou tout est un
peu "en kit" En tout cas, suffisamment pour que, meme si le modele dominant
est sous forme de classes, on puisse faire tres facilement des choses
extremement exotiques, comme la foultitude de modules existants sur CPAN
le prouvent.
[...]
Personnellement, j'y ai retrouve la joie de faire du smalltalk, avec en
plus un langage communiquant avec le monde exterieur.
C'est vrai qu'un langage dynamique permet plus facilement de s'adapter
et de s'interfacer avec des systèmes objets différents. En Common
Lisp, CLOS peut être considéré comme un module indépendant, et on peut
définir des systèmes objets différents (il en existe, par exemple, KR
qui est basé sur les prototypes comme Javascript), et grâce au FFI, on
peut aussi s'interfacer avec des systèmes d'objets comme celui du C++.
Mais ceci demande beaucoup plus de travail, et un travail qui est de
plus trés dépendant du compilateur utilisé pour compiler les objets
C++. On ne peut pas vraiment dire alors qu'il y ait une quelconque
compatibilité entre CLOS (idem Smalltalk, Objective-C, Java, Ruby,
Perl) d'une part et C++ d'autre part. On peut implémenter dans un
langage le système objet de l'autre. Greenspun!
Le plus proche, ce sont des choses comme CORBA, qui imposent en fait
leur propre modèle objet aux langages qui veulent s'interfacer.
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
Je me sens oblige de mentionner le modele objet de perl, ou tout est un peu "en kit" En tout cas, suffisamment pour que, meme si le modele dominant est sous forme de classes, on puisse faire tres facilement des choses extremement exotiques, comme la foultitude de modules existants sur CPAN le prouvent. [...] Personnellement, j'y ai retrouve la joie de faire du smalltalk, avec en plus un langage communiquant avec le monde exterieur.
C'est vrai qu'un langage dynamique permet plus facilement de s'adapter et de s'interfacer avec des systèmes objets différents. En Common Lisp, CLOS peut être considéré comme un module indépendant, et on peut définir des systèmes objets différents (il en existe, par exemple, KR qui est basé sur les prototypes comme Javascript), et grâce au FFI, on peut aussi s'interfacer avec des systèmes d'objets comme celui du C++.
Mais ceci demande beaucoup plus de travail, et un travail qui est de plus trés dépendant du compilateur utilisé pour compiler les objets C++. On ne peut pas vraiment dire alors qu'il y ait une quelconque compatibilité entre CLOS (idem Smalltalk, Objective-C, Java, Ruby, Perl) d'une part et C++ d'autre part. On peut implémenter dans un langage le système objet de l'autre. Greenspun!
Le plus proche, ce sont des choses comme CORBA, qui imposent en fait leur propre modèle objet aux langages qui veulent s'interfacer.
-- __Pascal Bourguignon__
pjb
(Marc Espie) writes:
In article , Pascal J. Bourguignon wrote:
Marc Boyer writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Ca va pas non ? vu du point de vue de smalltalk ou de self, C++, Java, et Ada, c'est essentiellement la meme chose...
En Java, il y a l'introspection et la réflexion qui permettent d'ajouter ou modifier des classes et méthodes dynamiquement. Java, ou plus exactement, le système objet derrière Java est dans la catégorie de Smalltalk et CLOS.
-- __Pascal Bourguignon__
espie@lain.home (Marc Espie) writes:
In article <7cbptbyjrr.fsf@pbourguignon.anevia.com>,
Pascal J. Bourguignon <pjb@informatimago.com> wrote:
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant,
à base de classe et d'objets qui instancies ces classes (Java, C++,
Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Ca va pas non ? vu du point de vue de smalltalk ou de self, C++, Java, et Ada,
c'est essentiellement la meme chose...
En Java, il y a l'introspection et la réflexion qui permettent
d'ajouter ou modifier des classes et méthodes dynamiquement. Java, ou
plus exactement, le système objet derrière Java est dans la catégorie
de Smalltalk et CLOS.
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Ca va pas non ? vu du point de vue de smalltalk ou de self, C++, Java, et Ada, c'est essentiellement la meme chose...
En Java, il y a l'introspection et la réflexion qui permettent d'ajouter ou modifier des classes et méthodes dynamiquement. Java, ou plus exactement, le système objet derrière Java est dans la catégorie de Smalltalk et CLOS.
-- __Pascal Bourguignon__
Marc Boyer
On 2009-02-09, Wykaaa wrote:
Marc Boyer a écrit :
On 2009-02-09, Pascal J. Bourguignon wrote:
Marc Boyer writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple
Non, je ne partage pas cette analyse. Dans les deux, tu as un modèle de type à base de classes, des instances (objet), le sous-typage se fait de manière déclarative sur les classes (je laisse de côté les templates/la généricité). Après, oui, C++ a par défaut une sémantique de valeur, Java une sémantique de poignée, et on a quelques autres différences (héritage multiple par exemple). Mais ça reste pour moi dans la même famille.
Je suis tout à fait d'accord avec toi. La distinction entre les différents modèles objet se fait sur d'autres critères comme, par exemple, si on considère le typage et la classification : le typage du premier ordre "à la Liskov" avec le principe de substitution ou le typage du second ordre "à la Cook". Dans ce cas, on voit que Smalltalk permet ce genre de typage mais pas Java ou C++.
Je ne suis pas expert, mais c'est bien ce qu'il me semblait.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
L'objet, dans Ada, a été ajouté après coup (Ada 95 vs Ada 83). Ca se voit !
Oui, je connaissais relativement bien Ada 83, mais pas trop Ada 95, donc je ne peut pas trop argumenter techniquement.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles, il faudrait trouver une conception architecturale qui passe dans l'un et pas du tout dans l'autre. Les modèles ou classes et objets sont manipulables de la même manière sont AMHA eux dans une classe différente (ils se disent souvent plus objet d'ailleurs).
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
Et cela donne un modèle objet très différent, et vue de Smalltalk, C++ et Java sont dans la même famille (même si, dans une même famille, on focalise toujours sur les petites différences).
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
On 2009-02-09, Wykaaa <wykaaa@yahoo.fr> wrote:
Marc Boyer a écrit :
On 2009-02-09, Pascal J. Bourguignon <pjb@informatimago.com> wrote:
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant,
à base de classe et d'objets qui instancies ces classes (Java, C++,
Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles
objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet
statique avec héritage multiple
Non, je ne partage pas cette analyse.
Dans les deux, tu as un modèle de type à base de classes, des
instances (objet), le sous-typage se fait de manière déclarative
sur les classes (je laisse de côté les templates/la généricité).
Après, oui, C++ a par défaut une sémantique de valeur, Java
une sémantique de poignée, et on a quelques autres différences
(héritage multiple par exemple). Mais ça reste pour moi dans
la même famille.
Je suis tout à fait d'accord avec toi. La distinction entre les
différents modèles objet se fait sur d'autres critères comme, par
exemple, si on considère le typage et la classification : le typage du
premier ordre "à la Liskov" avec le principe de substitution ou le
typage du second ordre "à la Cook". Dans ce cas, on voit que Smalltalk
permet ce genre de typage mais pas Java ou C++.
Je ne suis pas expert, mais c'est bien ce qu'il me semblait.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
L'objet, dans Ada, a été ajouté après coup (Ada 95 vs Ada 83). Ca se voit !
Oui, je connaissais relativement bien Ada 83, mais pas trop Ada 95, donc
je ne peut pas trop argumenter techniquement.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle,
serait d'essayer d'implémenter dans un langage X une sous classe d'une
classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles,
il faudrait trouver une conception architecturale qui passe dans
l'un et pas du tout dans l'autre.
Les modèles ou classes et objets sont manipulables de la même
manière sont AMHA eux dans une classe différente (ils se disent
souvent plus objet d'ailleurs).
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y
compris les classes ce qui impose qu'on parle de métaclasse (typage du
second ordre).
Et cela donne un modèle objet très différent, et vue de Smalltalk,
C++ et Java sont dans la même famille (même si, dans une même famille,
on focalise toujours sur les petites différences).
Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu: il y AMHA un modèle dominant, à base de classe et d'objets qui instancies ces classes (Java, C++, Ada ?), tellement dominant que beaucoup croient que c'est le seul.
Seulement tu donnes en exemple trois langages avec trois modèles objets complètement différents.
Complètement, non, je ne pense pas.
Pour simplifier, Java a un modèle objet dynamique, C++ un modèle objet statique avec héritage multiple
Non, je ne partage pas cette analyse. Dans les deux, tu as un modèle de type à base de classes, des instances (objet), le sous-typage se fait de manière déclarative sur les classes (je laisse de côté les templates/la généricité). Après, oui, C++ a par défaut une sémantique de valeur, Java une sémantique de poignée, et on a quelques autres différences (héritage multiple par exemple). Mais ça reste pour moi dans la même famille.
Je suis tout à fait d'accord avec toi. La distinction entre les différents modèles objet se fait sur d'autres critères comme, par exemple, si on considère le typage et la classification : le typage du premier ordre "à la Liskov" avec le principe de substitution ou le typage du second ordre "à la Cook". Dans ce cas, on voit que Smalltalk permet ce genre de typage mais pas Java ou C++.
Je ne suis pas expert, mais c'est bien ce qu'il me semblait.
et Ada un modèle objet statique avec héritage simple.
Je ne connais pas bien.
L'objet, dans Ada, a été ajouté après coup (Ada 95 vs Ada 83). Ca se voit !
Oui, je connaissais relativement bien Ada 83, mais pas trop Ada 95, donc je ne peut pas trop argumenter techniquement.
Le meilleur moyen de vérifier que ce ne sont pas le même modèle, serait d'essayer d'implémenter dans un langage X une sous classe d'une classe écrite dans un langage Y avec X?Y.
Non, pour moi, pour montrer que ce ne sont pas les mêmes modèles, il faudrait trouver une conception architecturale qui passe dans l'un et pas du tout dans l'autre. Les modèles ou classes et objets sont manipulables de la même manière sont AMHA eux dans une classe différente (ils se disent souvent plus objet d'ailleurs).
Justement dans Smalltalk (ce n'est qu'un exemple) ou tout est objet, y compris les classes ce qui impose qu'on parle de métaclasse (typage du second ordre).
Et cela donne un modèle objet très différent, et vue de Smalltalk, C++ et Java sont dans la même famille (même si, dans une même famille, on focalise toujours sur les petites différences).
Marc Boyer -- Au XXIème siècle, notre projet de société s'est réduit à un projet économique...
Fabien LE LEZ
On Mon, 9 Feb 2009 08:49:39 +0000 (UTC), Marc Boyer :
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu
Peut-être le mot "modèle" est-il erroné.
Il me semble que l'idée qu'un objet a normalement une sémantique de valeur, et a un opérateur de copie sauf si on bricole pour l'enlever, est une différence fondamentale par rapport auxx langages dont les objets ont une sémantique d'identité.
On Mon, 9 Feb 2009 08:49:39 +0000 (UTC), Marc Boyer
<Marc.Boyer@cert.onera.fr.invalid>:
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins)
autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu
Peut-être le mot "modèle" est-il erroné.
Il me semble que l'idée qu'un objet a normalement une sémantique de
valeur, et a un opérateur de copie sauf si on bricole pour l'enlever,
est une différence fondamentale par rapport auxx langages dont les
objets ont une sémantique d'identité.
On Mon, 9 Feb 2009 08:49:39 +0000 (UTC), Marc Boyer :
Yep. En plus, ça peut permettre de rappeler qu'il y a (au moins) autant de modèles OO que de langages dits OO.
Je pense que tu exagères un peu
Peut-être le mot "modèle" est-il erroné.
Il me semble que l'idée qu'un objet a normalement une sémantique de valeur, et a un opérateur de copie sauf si on bricole pour l'enlever, est une différence fondamentale par rapport auxx langages dont les objets ont une sémantique d'identité.