La programmation orientée objet, c’est de la flûte

Je parlais l’autre jour avec un ami chef de projet dans l’informatique. Avant d’être chef de projet il avait été lui-même développeur ; il avait les cheveux longs, il portait des baskets et mettait systématiquement une chemise par dessus ses T-Shirts. Aujourd’hui, il met des costumes et il est toujours au contact de développeurs dont certains sont du genre forcenés[1]. Cet ami me disait que la POO c’était un peu de la flûte car même chez les développeurs les plus hard core qu’il ait pu croiser, il n’en a jamais vu un qui travaillait en pure POO avec héritage, polymorphisme et tout ce qui va avec (maux de têtes, bouton de stress…).

L’eldorado du développement

Pourtant, la POO, c’est l’eldorado du developpement, la modernité incarnée, le truc moderne qui remise la programmation procédurale [2] au rang d’antiquité. Certains affirment que la programmation procédurale serait au developpement ce qu’Indochine est à la musique : un truc has been qui a eu son heure de gloire dans les années 80. Et pourtant… Indochine a fait son come back. Il y a même des gens qui vont voir leur concerts [3].

Ami lecteur, ne t’y trompes pas, ce billet n’est pas une réhabilitation en règle d’Indochine [4] mais bel et bien un plaidoyer en faveur de la programmation procédurale.

Le full object : un peu surdimensionné pour des projets web

Je ne nie pas que dans certains projets énormes type SI de banque, d’assurance ou de finance il faille un truc très solide et très cher du genre java J2E architecture haine-tiers afin pouvoir rassurer les clients et les actionnaires en tenant un discours du genre :

Notre progiciel de gestion d’information de thunes est l’un des plus performant du marché. Basé sur un architecture n-tiers, il est bien évidemment programmé en pur objet, à tel point qu’il faut que nous engagions des ingénieurs ayant fait un post-doc à Harvard pour effectuer une connexion avec notre base de données multidimensionnelle. Pour deux connexions, c’est 2 ingénieurs. Ils sont bien évidemment payés une fortune, c’est pourquoi notre logiciel est si cher mais tellement performant.

Pour les projets web, la POO me paraît être un peu sur-dimensionnée. Evidemment quand on touche à Rails, on fait de l’objet, dans WordPress il y a de l’objet, dans la moindre librairie javascript il y a de l’objet. Pourtant lorsqu’on utilise Rails, WordPress ou Mootools, on définit rarement des classes avec héritage, prototype, polymorphisme et tout l’arsenal de guerre qui va avec. On ne fait qu’utiliser des objets prédéfinis. Pour le reste, je dis vive la bonne vieille fonction – tout particulièrement côté client. Je m’explique.

Côté client : à n’utiliser que lorsque c’est nécessaire

Le javascript est un langage créé par Brendan Eich pour la sortie de Netscape 2. L’objectif de Eich lorsqu’il crée ce langage est d’offrir aux développeurs web – lesquels n’étaient pas réputés pour être des bêtes de code – un moyen simple d’ajouter un peu d’interactivité à leurs pages web. L’idée était de leur offrir la possibilité de copier des scripts d’autres pages et de coller en les adaptant sur leurs propres pages.

C’est pour cette raison que lorsque je vois sur une page web un comportements un peu sympa genre accordéon et que je voie dans le code que le gars s’est amusé à faire objet pour afficher / masquer un div dans une page là où une simple fonction aurait suffit, ça me fait mal aux yeux.

Utiliser un objet au lieu d’une fonction pour afficher/masquer un élement sur une page, c’est un peu comme si on voulait écraser une mouche avec un tank lorsqu’un simple torchon suffit.

Pour conclure, je citerai l’introduction d’un livre sur le javascript :

Ce livre ne traite que des langages et des fonctionnalités avec lesquelles je travaille. Le javascript orienté objet, par exemple, est délibérément absent de ce livre car je n’ai jamais vu la nécessité de l’utiliser.

Qui est le blaireau qui peut bien commencer son livre comme ça ? C’est Peter Paul Koch, un des gourous du javascript dans son livre ppk on javascript [5].

  1. Ils travaillent toute la journée sur linux, les fous
  2. À base de fonction, ou de procédures
  3. Les fous
  4. Personne n’est assez doué pour y arriver
  5. Que je vous conseille vivement, quelque soit votre avis sur la Poo !

Réagissez

Si ce billet vous a plu ou si vous voulez apporter des précisions, ou si vous n’êtes pas d’accord avec ce que je raconte, c’est ici qu’il faut vous manifester. Je me réserve toutefois le droit de supprimer toute contribution insultante ou qui n’aurait rien à voir avec la choucroute.

  1. Mouais, pour du javascript de base c’est vrai que faire de l’objet c’est sûrement écraser de mouches avec un marteau piqueur (alors que rien ne veut la bonne vieille charentaise), par contre pour tout le reste j’avoue que je ne connais et n’utilise que la prog objet. Dans rails justement, tout est objet, et je n’aurais pas idée d’essayer de faire des fonctions sans objets (c’est sans doute même impossible). Quant à l’héritage, le polymorphisme et compagnie, ben… quand on a une structure objet, c’est plutôt des manières de simplifier / clarifier le code qu’autre chose.
    Pour les développeurs que ton ami chef de projet à pu croisé, c’est un peu étonnant qu’il n’en ai jamais vu pratiquer un langage purement objet. En java par exemple, je vois mal comment se passer de tout ça.

    PS : je ne suis pas un dévleoppeur hard-core, je porte surtout des pull par dessus mes tee-shirts ! Et puis j’ai arrêté le dev pur pour aller vers le web il y a maintenant 2 ans. Par contre rails est en train de me redonner l’envie de développer.

  2. Tu abuses… J’allais commencer mon TP de POO pour mercredi avant de lire ça.

    Je vais m’y mettre quand même, parce que programmer un jeu de Pierre Feuille ciseaux avec des stratégies de fous implémentée dans des fichiers différents d’un package différent avec une interface c’est passionnant.

    Plus sérieusement, la POO c’est utile quand d’autre vont utiliser tes objets, quand t’es juste un égoiste qui ne code que pour soi c’est vrai que ça sert pas à grand chose.

    Mais écrire de la doc c’est tellement amusant.

  3. canardo >> C’était là où je voulais en venir malgré le titre un peu ras des paquerettes. La prog objet c’est certainement très efficace sur un projet où 30 développeurs travaillent en même temps mais pour du « dev » côté client (c-à-d du javascript), c’est un peu absurde. Ceci dit, pour pousser un peu plus loin, développer un site web en objet, ce n’est pas non plus une nécessité. C’est plus élégant certes, mais je ne sais pas si c’est plus rapide. Avec ruby on rails, ce qui fait que tu développes à la vitesse de la lumière, ce n’est pas tellement l’orientation objet du bouzin, c’est plutôt le fait que c’est un framework. Ok tu me répondras qu’un framework sans objet, c’est difficile… Certes certes.

    sitenreveuhéxétéralepseudolepluslongdumonde >> Horreur ! Je viens de me rendre compte que j’étais rien qu’un sale égoïste !

  4. J’ai appris à jouer de la flute en CM2… la flute, c’est quand même un bel objet, non ? :p

  5. br1o >> De la flûte ou du pipeau ? 😉

  6. d’ailleurs dans les livres sur le php, à part quand ils utilisent des class, ils développent avec des fonction et un peu d’objet pour le mysql.
    De plus les fonction ont la même utilité que l’objet, réutilisation du code, et le remplissent sans démérité.
    J’ai entendu oüi dire qu’en vitesse d’execution on ne gagne rien non plus.
    Maintenant certains relance la discution sur des langages exotique au web, comme java qui est objet et justement non procédural, alors que les langage de script sont procédural ?

  7. Super sujet, enfin un truc intéressant sur un blog , non de dious !

    Ben faut pas dire ça, l’objet dans un langage est idiot car à part faire de l’événementiel ben cela restera procédurale pour des siècles et des siècles.

    Par contre de minuscule programmes s’exécutant sur x machines, pour le coup l’objet retrouve toute sa splendeur et son utilité.

    Et ce genre d’environnement ne cour pas les rues, un peut dans les technos Web 2, beaucoup dans le futur des environnements massivement partagé en 3D.

    Imaginez un monde virtuel peuplé d’objet 3D comportant tous un tout petite programme rendant l’objet autonome dans l’espace virtuel. Et bien cette technologie existe déjà et vous pouvez la croiser dans Second life.

    Donc non ce n’est pas de la flûte, mais tout est à faire, car du java c’est trop lourd, du php aussi car il faut aussi de minuscule interpréteur ultra rapide pour exécuter les codes embarqués dans les objets 3D, qui eux doivent réagir très vite pour pour pouvoir ce déplacer dans ces univers.

    Pas super ça comme technologie ?
    A vos neurones, car là en matière de programmation ben c’est l’éclate totale !

  8. Merci artsys !
    Quand je dis j’aime pas l’objet, c’est juste pour chauffer les esprits et récolter des commentaires 😉 Parce même en javascript, quand tu veux faire un page nickel et W3C compliant, il vaut toujours mieux utiliser des listeners pour déclencher des fonctions. Et si ça c’est pas de l’objet, alors je veux bien passer le restant de ma vie à faire du java !

    Mais pour la 3D – et tout ce qui est jeu d’une manière générale – la POO est évidemment plus adaptée. Maintenant pour 2 – 3 trucs simples sur une interface web, je ne suis pas convaincu.

  9. Moi je suis d’accord avec Gregoire : quand tu veux un toggle pour afficher/masquer une DIV, c’est pas la peine d’utiliser prototype (alors qu’on a jQuery :p )

  10. Dana la série discussion sans aucun intérêt…
    Pitoyable.
    Quant à discuter de savoir si on devient un grand garçon quand on porte un costume au lieu d’un t-shirt au dessus d’une chemise, encore plus pitoyable.
    Sinon, je suis preneur quant au nom du chef de projet qui met des costumes aujourd’hui, ça me fera gagner du temps dans d’éventuels entretiens d’embauche à venir.
    jean-baptiste.

  11. Merci jean-baptiste pour ton commentaire constructif et plein de second degré.

  12. Eh ben voilà, je me sens un peu moins seul avec cette idée que le concept objet, héritage, polymorphisme etc.. c’est pas mal, mais surtout adapté à la création de jeux ou autres applications graphiques.
    Dans l’informatique de gestion, étendre une classe facture au cas où on en trouverait qui ont des cheveux ou un moteur diesel, j’ai toujours pas bien saisi l’intérêt. Etant en formation, car je reprends l’info après une loooongue interruption, nous faisons le back office d’un site de e commerce (enfin.. version light), pour se faire les dents sur Java.
    Ben si j’ai utilisé un objet (hormis ceux qui sont imposés pour développer, évidemment), c’est bien pour faire plaisir aux formateurs.
    Dans ce cas d’espèce, ça me paraît être une couche supplémentaire histoire de faire des vecteurs d’objets de machins de trucs, et d’avoir les yeux qui brillent devant « la puissance de l’objet ».
    Y a JDBC, y a des SELECT, on peut faire des fonctions, eh bien ça me parait suffisant pour le CRUD de toutes les tables du mondes. Le seul truc pas mal est la gestion des exceptions qu’on peut mettre dans les setter, pour le reste, c’est bel et bien un magnifique orchestre de pipeaux. (Qui, par ailleurs, permet de rendre le code imbitable à souhait).
    Je ne suis pas nostalgique du COBOL et du GAP pour autant, mais j’ai le sentiment que toutes ces méthodes, surcouches n tieresques bien fumeuses, cachent souvent des opérations commerciales juteuses, avec plein de consultants au verbiage ronflant.
    J’espère changer d’avis au fil de ma formation.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *