On peut souvent lire dans les commentaires sur linuxfr que les langages objets ne servent à rien puisque la POO est un concept qui peut s'appliquer avec n'importe quel langage, et donc qu'on peut faire aussi bien sans un langage OO. J'ai essayé d'approfondir un peu le sujet, et de montrer que les choses ne sont pas aussi simples.
Cet article a récemment été publié sur K5. Je l'ai remanié un peu suites aux remarques reçues.
Aller plus loin
# En effet, les choses ne sont pas si simples.
Posté par Pat Le Nain . Évalué à 1.
Il est donc normal que ces langages soient plus efficaces que les langages classiques comme le C. Néanmoins, le mode de pensée objet (variables de classes et d'objets par ex) est tout à fait implémentable (et implémenté en c, cf GTK+) mais au prix d'une certaine rigidité de style et d'une certaine complexité (allez jetez un coup d'oeil sur le noyau objet de GTK+, il est bien fait mais faut suivre). Cela dit, on peut très bien coder OO de manière simple sans aller jusqu'à faire des monstres. D'ailleurs, les structures qui se baladent un peu partout ds les softs ne sont-elles pas des débuts d'objets ?
[^] # Re: En effet, les choses ne sont pas si simples.
Posté par Anonyme . Évalué à -1.
window->set_title("truc"); au lieu de
gtk_window_set_title(GTK_WINDOW(window), "truc");
C'est un exemple a deux francs et ya des fois ou c'est bien pire... Par exemple pourquoi tu peux pas iterer de la meme facon dans un G[Ptr]Array ou une Glist ?
C'est quand meme un tiers de 'boilerplate' code qui rends les choses difficiles (la rigidité dont tu parlais)...
Ce qui serait genial c'est un language qui puisse accepter de nouvelles constructions dynamiquement... Ca parrait peut etre debile, mais si il y avait simplement un moyen pour faire des alias, une sorte de #define plus intelligent et plus facile a ecrire... Ca serait mechament bien.
[^] # Re: En effet, les choses ne sont pas si simples.
Posté par Jar Jar Binks (site web personnel) . Évalué à 1.
# oui mais
Posté par Anonyme . Évalué à 0.
oop en C = casting etc.
cela dit un wrapper en C++ d'une API C c'est jamais cool car il faut une bonne connaissance de l'api C sous jacente et une API C quasi objet. gtkmm est un wrapper de qualité mais trés peu utilisé par rapport à gtk.
[^] # Re: oui mais
Posté par Blackknight (site web personnel, Mastodon) . Évalué à 1.
# A enfin un coder
Posté par Blackknight (site web personnel, Mastodon) . Évalué à 1.
j'ai eu la chance de discuter un jour par mail avec un extrémiste qui pensait aussi que l'on pouvait faire de l'objet avec le C. Dans le concept, il avait raison, dans la pratique, c'est genre de mec qui te colle allègrement des structures d'union contenant des pointeurs. Enfin, il a raison pourquoi se faire chier à utiliser le C++ alors que l'on peut essayer de tout redévelopper en C. Ceci dit et ça n'engage que moi, le C++ n'est pas exempt de trucs bizarres non objets mais c'est en grande partie dûe au C et à la compatibilité qu'il entretient avec ce dernier. Personnellement, je préfère le Java même si c'est lent (quoique ça s'améliore) et c'est surtout dû à son ensemble de classes toutes prêtes qui évitent pas mal de ré-inventer la roue.
Enfin, un jour j'ai entendu (dans un film mais j'étais jeune !!! ;-)) : "Tu codes de la merde, tu récupères de la merde." Ce qui est très vrai, on peut faire du C lisible et qui fonctionne très bien comme on peut faire du C++ ou Java absolument illisible, impossible à maintenir et dont les perfs sont pourries.
C'est comme les distribs, le langage informatique faut choisir celui qui plaît, c'est le plus important.
[^] # Re: A enfin un coder
Posté par Pat Le Nain . Évalué à 1.
-+- Moi in Mes Commentaires ;) -+-
[^] # Re: A enfin un coder
Posté par Chamelle Kolabo . Évalué à 1.
un article comme celui ci peux pousser a la reflexion .
http://www.erlang-fr.org/articles/bijan_parsia_001-fr.html(...)
[^] # Re: A enfin un coder
Posté par Pat Le Nain . Évalué à -1.
Je sais, je voulais pondre une fortune.
Au fait, mes chevilles vont très bien, merci ;)
[^] # Re: A enfin un coder
Posté par Anonyme . Évalué à 0.
C'est marrant en fait ca me fait penser que Java c'est plus une distribution qu'un language en fait... Arf enfin c'est une plate forme quoi.
# Mouais
Posté par Lorenzo B. . Évalué à 1.
J'ai jeté un oeil sur Ruby et celui-là m'incite vraiment à reconsidérer la POO. Tout y est objet et la syntaxe est claire.
Evidemment c'est un langage relativement neuf qui a pu faire le bilan de tout ce qui existait jusque là.
[^] # Re: Mouais
Posté par Guillaume Laurent (site web personnel) . Évalué à 1.
C'est bien joli mais ce genre d'attitude ne tient pas une fois confronte a la realite. Tout n'est pas objet, il y a plein de cas ou la representation objet ne sert a rien.
La POO est un outil, pas une fin en soi. Si tu l'utilises lorsqu'elle est utile, tu fera du bon boulot. Si tu l'utilises parce que "c'est bien" ou parce qu' "elle doit etre utilisee", plaf.
[^] # Re: Mouais
Posté par harbort . Évalué à 1.
Et d'ailleurs, le C n'est pas complètement structuré : il y a encore un 'goto' qui traine par là !
Et même les langages très conceptuels de l'IA (comme lisp ou prolog, mais y en a d'autres) ne sont pas 'purs' ... Alors pourquoi vouloir un langage pur mais inutilisable ?
Pour l'objet enfin, il me semble qu'Eiffel est 'pur' (c'est ce qu'on m'a dit, j'en ai jamais fait), mais vu les temps de compilations et l'efficacité du code généré, on peut douter de son utilité, à part apprendre à coder en objet ... un peu comme le Pascal pour les langages structurés (qui avait été développé à des fins éducatifs !).
[^] # Re: Mouais
Posté par Ababacar Octopuce . Évalué à 1.
Citons en vrac: Ocaml, SML, MosML, Concurrent Clean, Curry, Mercury, Oz, Lambda-Prolog, Haskell, etc.
Pour ce qui est de Eiffel, la lenteur du compilo et du code genere a effectivement ete un probleme, beaucoup moins depuis GNU SmallEiffel cela dit. Neanmoins, quand on fait un programme comme Word, qu'on va distribuer a des millions d'exemplaires, on peut peut-etre tolerer que sa compilation dure quelques heures, c'est pas tres grave. Du moment que, pendant le developpement, il est possible de faire des compilations partielles (c'est la cas d'Eiffel), ca va.
[^] # Re: Mouais
Posté par Philip Marlowe . Évalué à 1.
[^] # Re: Mouais
Posté par Blackknight (site web personnel, Mastodon) . Évalué à 1.
Cela m'amène aux contrats (je ne connais pas Eiffel donc il faut me dire si je me trompe dans la définition d'un contrat). En Java, L'héritage multiple n'existe pas et on utilise à la place le mécanisme des interfaces. Une interface est un contrat dans le sens où l'on définit dans une interface les prototypes des méthodes que seront à implémenter par les classes respectant l'interface. L'interface sert donc à déclarer un comportement. Je vous aurais bien trouvé un exemple mais je n'ai pas le temps ni le souvenir d'un cas d'école si ça revient, je post.
Tout ça pour dire que l'héritage multiple est quelque chose de dangereux car il est sujet aux dérives et c'est la principale raison qui l'a fait retirer de Java.
[^] # Re: Mouais
Posté par Ababacar Octopuce . Évalué à 1.
Eh bien non! Ca ne casse rien. De toute facon, s'il n'y avait pas d'heritage multiple, on serait quand meme oblige de definir une methode M. Alors devoir faire un choix ne change pas grand-chose. Par ailleurs, il est toujours possible de renommer des methodes heritees...
Quant aux contrats, tu te trompes effectivement: la programmation par contrat d'Eiffel est un mecanisme a base d'assertions logiques. Pour une methode M, tu peux specifier quelles sont les conditions pour l'appeler, et ce qu'elle peut te garantir sur ce qu'elle retourne (c'est le contrat qu'elle te propose). Ca permet ensuite d'eviter de faire un certain nombre de tests qu'on doit d'habitude se taper. Ce qui est interessant, c'est que quand on reecrit une methode dans une classe fille, on herite aussi de ses assertions et on peut les enrichir.
Les interfaces Java n'ont rien a voir avec un contrat. Litteralement, une interface est un type. Et les classes qui implementent une interface sont des classes de ce type. Ca permet de resoudre legerement le manque d'heritage multiple puisque si une classe ne peut avoir qu'une surclasse, elle peut en revanche avoir plusieurs types. L'idee, c'est que les concepteurs de Java considerent que quand on fait de l'heritage multiple, c'est generalement pour avoir plusieurs types, et non pas pour recuperer du code. Le probleme, c'est que quand c'est effectivement pour recuperer du code, on est dans la merde: on est oblige de reecrire des methodes qu'on aurait pu directement heriter (exemple: une applet multithreadee ne peut pas a la fois etendre Applet et Thread, ce qui correspond pourtant bien a la semantique de l'heritage multiple).
Donc s'il n'y a pas d'heritage multiple en Java, c'est surtout parce que ca emmerdait les concepteurs. Ils voulaient un langage tres simple, au risque de perdre de l'expressivite. C'est un choix... qui n'est pas celui d'Eiffel, Sather, Beta, Mjölner, etc, qui fonctionnent tres bien comme ca, merci pour eux.
[^] # Re: Mouais
Posté par Anonyme . Évalué à 0.
Fait un peu d'Eiffel et tu comprendras...
Quand à Java, s'ils ne l'ont pas implémenté c'est simplement une question de pognon: ça leur aurait pas raporté grand chose et ça leur aurait couté plus cher en temps de développement.
[^] # Re: Mouais
Posté par Anonyme . Évalué à 0.
[^] # Re: Mouais
Posté par Philip Marlowe . Évalué à 1.
[^] # Re: Mouais
Posté par Daniel GARRIVIER . Évalué à 1.
PS: Zut, je ne trouve plus mon lien Eiffel !
[^] # Re: Mouais
Posté par Ababacar Octopuce . Évalué à 1.
[^] # Re: Mouais
Posté par Blackknight (site web personnel, Mastodon) . Évalué à 1.
[^] # Re: Mouais
Posté par Anonyme . Évalué à 0.
J'ai codé du Lambda calcul en SmallTalk (ce qui m'a dégouté du st) et depuis je préfère la philosophie de tcl/tk :
"All is a string" ;)
[^] # Re: Mouais
Posté par Anonyme . Évalué à 0.
C'est bien beau tout ca mais c'est pas tjs qu'on peut dire : alors 5 mois de conceptions et 2 mois de codage, ca va chef???
Tu as 4 mois....Tu fais comme tu veux...faut surtout que ca marche a cette date, alors en effet, c'est pas top reutilisable, mais ca fonctionne, et quand il faut faire une modif : Alors ya tel et tel project de sortit, tu les utilise et globalement si tu avais fait une super conception, elle n'aurait servie a rien puisque tu pars from scratch avec des nouveaux outils....
Bref la POO....
[^] # Re: Mouais
Posté par Blackknight (site web personnel, Mastodon) . Évalué à 1.
[^] # Re: Mouais mais
Posté par Anonyme . Évalué à -1.
# Les processeurs ?
Posté par Anonyme . Évalué à 0.
Ex : Les chinois ne lisent pas dans le même sens que nous ni dans le même alphabet, pourtant la phrase : "bonjour, vous allez bien ?" pourra être traduite.
Si vous voulez, c'est pour faire beau.
La prog. objet existera quand les CPU seront objet.
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à -1.
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
Là où je suis d'accord, c'est sur le fait que n'importe quel langage tournera sur un proc avec des MOVE, des CMP, des PUSH/POP et des JMP (en gros). C'est le compilo (ou la VM) qui est chargé de traduire cet ensemble conceptuel formalisé qu'est le code source (il est beau celui-là ;) en une suite d'instructions machines. Si on suit ton raisonnement, on devrait tout écrire en assembleur, ça serait plus rapide.
Mais l'abstraction syntaxique est importante, c'est le seul moyen de pensée de l'être humain (on est pas des CPU).
[^] # Re: Les processeurs ?
Posté par Guillaume Laurent (site web personnel) . Évalué à 1.
http://www.kuro5hin.org/?op=comments&sid=2001/3/22/17509/3442&cid=9(...)
Et donc je te fais la meme reponse : t'as rien compris. :-)
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
Lorsqu'on te demande pourquoi, ne fais pas que répondre "parce que", sinontu passe pour un con.
Je me demande si tu en es un ?
[^] # Re: Les processeurs ?
Posté par Guillaume Laurent (site web personnel) . Évalué à 1.
Tout l'article tente d'expliquer pourquoi l'OO n'est pas que "pour faire beau", que repondre a quelqu'un qui arrive en disant "l'OO c'est que pour faire beau" ? A part en rire, je ne vois pas.
OK, en plus de dire "t'as rien compris", j'aurais du rajouter "relis l'article", mais bon, si la premiere fois ca n'a pas marche, est-ce vraiment utile de retenter une seconde passe ?
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
[^] # Re: Les processeurs ?
Posté par Guillaume Laurent (site web personnel) . Évalué à 1.
Par ailleurs je serais curieux de savoir en quoi mon article te semble vouloir imposer un tel diktat, d'autant que je critique les extremistes de l'OO au debut. Et j'ai deja repondu tout a l'heure a quelqu'un qui preferait Ruby pour son cote "tout OO" qu'il se trompait.
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
Moi je suis qu'un développeurs débutant (quelques année d'exp. quand même), et vus la quantitée de chose à apprendre, je le resterais probablement toutes ma vie.
Par contre, je pense qu'un des pas à franchir pour passer de la connerie à l'intelligence est de savoir écouter ce que les autres ont à dire et éventuellement de critiquer leurs opinions de manière constructive... Ce qui n'a pas l'air d'être le cas de tout le monde ...
Enfin, bon courage à tous quand même ...
[^] # Re: Les processeurs ?
Posté par Jak . Évalué à 1.
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
Pour reprendre ton analogie, j'aurais tendance a dire que le Langage Machine c'est l'Anglais. C'est le plus utilise, on peut tout traduire vers l'Anglais, mais ca n'implique pas que l'Anglais est la langue de reference et que les autres ne sont que des "abstract syntaxiques". Non, toutes les langues sont equivalentes, meme s'il existe un standard de fait. Conclusion, ce n'est pas parce que la CPU est le systeme implante sur nos machines (parce que c'est ce qu'il y a de plus simple a faire pour les electroniciens) que c'est aussi le plus expressif, le plus puissant et le "plus ultime".
[^] # Re: Les processeurs ?
Posté par MetalX . Évalué à 1.
Euh, temps de developpement, maintenance, reutilisabilite, portabilite,.... Tout ca , c'est aussi pour faire beau ?
[^] # Re: Les processeurs ?
Posté par Anonyme . Évalué à 0.
-------------------------------------
Jak, qui a la flemme de s'identifier
# C--
Posté par Ababacar Octopuce . Évalué à 1.
[^] # Re: C--
Posté par Guillaume Laurent (site web personnel) . Évalué à 1.
# langages fonctionnels
Posté par mickabouille . Évalué à 1.
Cela dit, ça n'est pas un problème. Tous les langages fonctionnels (ceux que je connais) utilisent des notions impératives (plus ou moins. caml peut être utilisé purement en impératif-et ocaml est objet!)
[^] # Re: langages fonctionnels
Posté par Ababacar Octopuce . Évalué à 1.
Le concept objet est orthogonal par rapport aux concepts imperatif/fonctionnel. La preuve en est qu'il existe des langages fonctionnels a objets.
> Tous les langages fonctionnels (ceux que je connais) utilisent des notions impératives
Ceux que tu connais comme tu dis :-)
En fait, il existe plein de langages fonctionnels purs, dont le plus important: Haskell (http://haskell.org(...) ).
> (plus ou moins. caml peut être utilisé purement en impératif-et ocaml est objet!)
Ocaml n'est pas un langage a objets.
C'est un langage fonctionnel, qui permet d'utiliser des objets, nuance. Un peu comme C++ permet d'utiliser des objets, mais te permet aussi de programmer uniquement en C.
[^] # Re: langages fonctionnels
Posté par Anonyme . Évalué à 0.
[^] # Re: langages fonctionnels
Posté par Ababacar Octopuce . Évalué à 1.
(Et j'aurais tendance a dire que ce qui est cool dans Haskell c'est aussi les classes de types.)
# Autre chose que du blabla
Posté par Anonyme . Évalué à 0.
http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html(...)
[^] # Re: Autre chose que du blabla
Posté par Guillaume Laurent (site web personnel) . Évalué à 1.
De nos jours pour du gros developpement, j'irais sous Java direct, sinon C++.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.