"Miguel Moquillon" wrote:
Il me semble pourtant l'avoir écrit.
Un langage objet est un langage qui supporte les caractéristiques
centrales
du paradigme objet, et principalement:
- encapsulation,
- typage (Liskov ou Cook), qu'il soit statique, dynamique ou par
inférence,
- définition d'objets (que ce soit par classes ou par prototypes),
- communication par messages,
- polymorphisme,
- héritage (sous-typage ou classification, etc.),
- tout est objet.
JavaScript supporte tout ca :)
et attention sans avoir besoin de faire de gymnastique particulière,
il suffit juste de bien connaitre le langage.
pour le typage par exemple
souvent j'entends dire que JavaScript n'a pas de type,
alors que si si, il a bien des types
sauf qu'au contraire d'un langage basé sur les classes
qui aurait un typage statique et fort
JavaScript a un typage dynamique et faible
cad que n'importe quelle valeur de n'importe quel type peut etre assignée
à n'importe quelle variable et ce sans restriction,
mais en soit la variable a bien un type
je conseille fortement ces differents articles par Eric Lippert
sur le systeme de typage de JScript mis en relation avec JScript.NET
http://blogs.msdn.com/ericlippert/archive/2003/11/05/53336.aspx
http://blogs.msdn.com/ericlippert/archive/2003/11/06/53352.aspx
http://blogs.msdn.com/ericlippert/archive/2003/11/06/53367.aspx
http://blogs.msdn.com/ericlippert/archive/2003/11/10/53376.aspx
http://blogs.msdn.com/ericlippert/archive/2003/11/12/53377.aspx
http://blogs.msdn.com/ericlippert/archive/2003/11/14/53383.aspx
http://blogs.msdn.com/ericlippert/archive/2003/11/21/53399.aspx
et d'ailleurs tous les autres articles aussi :)
pour continuer juste sur le typage
la prochaine evolution du langage: ECMAScript 4
prevoit des annotation de type, mais surtout
permettra de verifier le type pendant l'execution du code
en plus d'une verification classique a la compilation (comme le typage
statique)
et on peut voir ici
http://weblogs.mozillazine.org/roadmap/archives/009255.html#comments
comment cette evolution des types est prevue
et vraiment sans vouloir mettre une grosse tape sur la tete
aux langages basés sur les classes (pas tous...), mais perso je prefere
de loin ce systeme de typage que celui "classiquement" utilisé
qui force bien souvent a faire du casting, downcasting, upcasting etc..
juste pour avoir le bon type afin que le compilo accepte de compiler.
Maintenant, ce que j'attends en plus d'un langage objet est aussi:
- conception par contrat (pré/post conditions + invariants),
- si typage statique, la covariance multiple et la généricité contrainte,
- les closures,
- et, si en plus le langage supporte la syntaxe language (sujet verbe
complément) comme avec SmallTalk ou Lisaac, alors je suis heureux :)
je comprends, mais personnellement j'ai une autre "preference"
Au lieu de la "conception par contrat" je prefere la conception dirigée
par les tests (Test Driven Development), les tests sont en quelque sorte
les "contrats" a respecter.
Quand on combine cela avec un langage dynamique qui travaille
au plus proche des objets (cad pas de metaclass, pas besoin de recompiler
pour avoir un type et/ou soustype legerement ou ompletement different),
je trouve ca tres puissant.
j'aime aussi pouvoir utiliser des fonctions comme des objets
http://w3future.com/html/stories/hop.xml
ou utiliser des fonctions de continuation plutot que des fonctions
reccursives
http://blogs.msdn.com/ericlippert/archive/2005/08/08/442706.aspx
aussi bien que les closures, les fonctions lambda etc.
mais LE truc qui me plait le plus avec JavaScript
c'est de pouvoir modifier les objets build-ins du langage
ceci combiné avecdu polymorphisme permet de faire
énormément de choses facilement
si tu veux un petit exemple observe les implementations
de la methode toSource dans un de mes projets
http://live.burrrn.com/browser/ECMA-262/core2/branches/core2_v1.0.x/src/buRRRn/core2
toSource n'existe pas dans le langage par defaut
mais a partir du moment où on l'implémente
sur les objets de base, on peut utiliser la methode
dans n'importe quel autre objet, et ce grace au polymorphisme
justement.
bon ce n'est qu'un exemple, et peut-etre meme mauvais,
mais juste pour dire que cette "manière" de faire peut rarement
s'appliquer dans des langages basés sur les classes qui ont le
plus souvent leurs objets de base defini comme abstrait.
A côté de ceci, sauf erreur de ma part, tu sembles faire la distinction
entre langage objet et langage orienté objet.
[snip]
certains le disent plaisamment. AMHA, la vrai dénomination, plus française
si jamais ça existe, devrait être "langage par objets".
on est d'accord donc, je pensais que toi tu faisais une différence :)
C'est vrai, je l'admet. Mais mes idées arrivent à changer, à plus ou moins
long terme selon si elles sont bien ou peu arrêtées
comme tout le monde, y compris moi-meme :)
zwetan