Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Pourquoi ne faut-il plus utiliser l'héritage de classe ?

JavascriptL'invention de la programmation orienté objet a été un pas de géant pour l'industrie logiciel. Tout le monde est d'accord là dessus. Un des concepts clés de la POO est l'héritage. Il est par exemple utilisé partout dans le Framework .NET.

Bernie est un développeur dont la santé mentale a probablement été altérée par l'abus de programmation en JavaScript. Il a également publié sur son site un article qui s'intitule : "Inheritance is evil, and must be destroyed".

Dans cet article, il tente de démontrer qu'il faut arrêter d'utiliser l'héritage. Un des exemples qu'il cite est qu'il n'est pas possible de réutiliser le code de deux classes différentes (dans les langages modernes sans héritage multiple). Il explique que le Design Pattern Strategy permet de le faire très facilement.

Les exemples de Bernie sont cependant basés sur du code en JavaScript qui, je le rappelle, est un langage fonctionnel très puissant, mais complètement handicapé au niveau objet (hein Cyril ? ;-) ).

Ces même exemple ne manquent par contre pas d'humour :

dj.darkPowers.crushTownspeople();

Bref, cet article présente un point de vue peu rependu, mais très intéressant à lire : http://www.berniecode.com/writing/inheritance/.

Publié jeudi 11 octobre 2007 14:03 par RaptorXP
Classé sous : , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

"L'invention de la programmation orienté objet a été un pas de géant pour l'industrie logiciel. Tout le monde est d'accord là dessus."

Ben non, tout le monde n'est pas d'accord. Que cette mode se soit imposée est indéniable mais la qualifier de "pas de géant" est un raccourci abusif.

"Un des concepts clés de la POO est l'héritage. Il est par exemple utilisé partout dans le Framework .NET"

Voila qui démontrerait ce "pas de géant" ?

Niet et encore niet, je continue à penser que c'est en comparant 2 binaires tendant vers un même résultat qu'on peut dire s'il y a eu progrès ou non. La POO mesurée ainsi fait pale figure.

jeudi 11 octobre 2007 18:05 by brunews

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

js pourte java mais a part ca c'est handicape...

exemple : t'as deux classes (class pas interfaces), et tu veux de l'heritage multiple... bah java il peut pas... javascript lui il peut...

jeudi 11 octobre 2007 18:45 by coucou747

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

LOL C'est marrant, au moment de rédiger mon post, j'avais écrit : "Tout le monde est d'accord là dessus (sauf peut être Brunews)."

Je parle d'un pas de géant dans la mesure ou ca permet de gérer plus facilement de gros projets. Le framework .NET c'était qu'un exemple, mais les gros projets natifs sont écrit en C++ plutôt qu'en C ;-)

jeudi 11 octobre 2007 19:03 by RaptorXP

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

coucou747> Cela dit l'héritage multiple a été volontairement interdit dans les langages récents à cause des problèmes que ça cause (héritage en diament par exemple)

jeudi 11 octobre 2007 19:06 by RaptorXP

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Oullla, attention !!! Les exemples du sont en ActionScript qui, comme JavaScript, est un langage dérivé de EcmaScript. ActionScript permet de faire de l'héritage via le mot clé extends. JavaScript n'a pas d'héritage puisque le mot clé extends est juste un mot clé résérvé au cas où.

"JavaScript est un langage fonctionnel très puissant" :)

"mais complètement handicapé au niveau objet " tu veux me facher ? le concept Object de JavaScript est certes déroutant mais bien plus poussé que C#, Java, ... en JS on a pas la rigueur des types qu'impose ces langages, on est libre ! on peut redéfinir une méthode ou un prototype comme on le souhaite, l'héritage multiple ? aucun problème ! Pas envie d'avoir une méthode d'un de mes objets de base lors de l'héritage multiple ? aucun problème on le supprime, etc...

C'est pas pour rien que les langages dynamiques sont à la mode en ce moment, ruby, Python, JavaScript, ...

Certes il ne faut pas en abuser, mais JavaScript est beaucoup plus puissant que tu ne le crois au niveau objet.

Au moins quand j'ai un bug dans les toolkits ou Ms Ajax, je peux directement le corrigé (ca arrive souvent) alors que quand j'ai un bug dans asp.net (ce qui est déjà plus rare) je peux pas faire grand chose ...

jeudi 11 octobre 2007 19:12 by cyril

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Oui, moi c'est justement cette liberté qui me perturbe, j'aime bien pouvoir me faire rappeler à l'ordre par mon compilateur.

Si tu fait une faute de frappe dans le nom d'une méthode, dans un endroit de ton code qui n'est presque jamais appellé, tu ne t'en rendra peut être jamais compte (ou trop tard). Avec un compilateur ça n'arrive pas ^^.

C'est à la fois la force et la faiblesse de JS.

jeudi 11 octobre 2007 20:18 by RaptorXP

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

c'est pas parce-qu'extends n'est pas utilise qu'il n'y a pas d'heritage...

jeudi 11 octobre 2007 20:22 by coucou747

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

C'est comme tout, si on sait pas coder ... ;-)

mais comme avec tout language on peut faire des méthodes de test et ces erreurs vont vite ressortir.

Au début je faisais quelques erreurs de syntaxe, faute de frappe & co, mais après j'ai vite compris que ca me faisait perdre du temps et maintenant c'est rare que je me trompe, il faut s'habituer à l'absence de l'intellissense ce qui n'est pas évident, mais ce n'est pas un frein.

jeudi 11 octobre 2007 20:25 by cyril

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

La POO est un pas de géant dans la mesure que ça a amené un certain ordre dans ce monde du logiciel qui relève des fois plus de l'art que de la science.

Et pour Brunews, il est difficile de comparer deux binaires côte à côte. La vitesse est loin d'être le seul facteur. Moi, je préfère plus que la codebase soit bien architecturé, simple, intuitive, extensible,...même si on perd quelques secondes en fin de compte.

jeudi 11 octobre 2007 21:34 by badrbadr

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Ce qu'on peut appeler le nivellement par le bas.

jeudi 11 octobre 2007 21:48 by brunews

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

@Brunews : si la POO est effectivement un pas de géant pour l'industrie, ce n'est pas tant une question de mode, qu'une question de temps de développement. Il est incontestable qu'un projet développé "à l'ancienne" sera plus rapide, plus optimisé, que l'on gagnera quelques secondes sur les traitements. Mais quelques secondes de gagnées sur un traitement est effectivement beaucoup moins intéressant pour l'industrie que quelques semaines de développement gagnées. Les projets sont mieux organisés, mieux hiérarchisés, leurs "modules" réutilisables rapidement, leur lecture et compréhension largement facilitées (on vire les anciens codeurs, les nouveaux seront bien vite dans le bain). Si tant est que ce soit, évidemment, corrctement codé, ça, ça ne change pas ;-)

C'est sans doute un nivellement par le bas pour un certain type de qualité...mais les qualités recherchées par l'industrie sont généralement tout autre, et là, la POO a largement l'avantage.

Et je n'ai pas dit que c'était bien, hein :-) C'est un simple constat.

D'ailleurs, la mode des langages tels que Ruby, Python, js...vient bien de là : on peut grâce à eux monter très rapidement des projets industriellement (financièrement) viables. Les compétences qu'ils réclament sont vite acquises, un bon codeur s'adaptera très vite, et ils lui mâchent le travail.

Bah, c'est comme ça :-) Il y aura toujours des gens pour préférer administrer un réseau uniquement via un shell austère, et d'autres qui utiliseront les jolis boutons et graphiques mis à leur disposition par une interface friendly-user très accueillante et pas avare d'aides diverses. On tendra toujours vers le 2d cas, de plus en plus.

samedi 13 octobre 2007 11:48 by malalam

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Je ne crois pas que JavaScript soit "mauvais" en POO. C'est sans doute même le langage qui gère la POO de la meilleure manière qui soit, de mon avis au moins.

Pour ce qui est de dire "JavaScript n'a pas d'Intelisense, pas d'IDE digne de ce nom, ...", c'est ridicule. Avant, on programmait sans, on s'en plaignait pas. Et je tiens à dire qu'il m'est arrivé de nombreuses fois d'écrire des codes de milliers de ligne en JavaScript sans commettre d'erreur de frappe où autre. Tout est une question d'habitude.

Mais libre à tous d'aimer ou pas, que ce soit la POO, la POP (Prototype-Oriented Programming, http://en.wikipedia.org/wiki/Prototype-based_programming), ou même les langages non-POO. Tout est question de gout.

Or des gouts et des couleurs on ne discute pas.

samedi 13 octobre 2007 12:49 by FREMYCOMPANY

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Oui, c'est un peu tardif mais je commente quand même ^^

Je me sens obligé de dire : j'hallucine !

Moi je dis vive l'indentation, vive la coloration syntaxique, vive la complétion automatique, et vive la POO !

Je vois même pas l'intérêt de s'embêter a programmer sans ... à part épater ses copains en gagnant 3 millionième de secondes sur un code de 1 seconde ou faire un executable de 1 ko pour stocker plus de programmes sur son disque de 1 To ?

ya beau y avoir une question de gouts, je vois pas qui pourrait se plaindre de gagner du temps de programmation ... Pourquoi réinventer la roue quand d'autres roulent en moto ?

mardi 16 octobre 2007 18:49 by dbug

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Ben justemment je roule en moto, bien belle, très puissante et toute neuve.

Doit surement y avoir une relation de cause à effet avec le fait qu'on est peu nombreux (même très peu) à pouvoir encore produire du vrai code.

C'est un but dans la vie de savoir faire ce que tout un chacun pourra faire en 15 jours de formation ? C'est vrai qu'il y a de quoi halluciner en lisant cela.

mardi 16 octobre 2007 19:15 by brunews

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Boah, c'est quoi du vrai code? Des poke et des peek (ouais ouais...je sais...on voit tout de suite quelle bécane me rend nostaligie) ?

Le but d'une boîte, c'est d'avoir un code fonctionnel, bisn structuré...et vite fait!

Sur le plan personnel, t'enlèves le vite fait oarce qu'on s'en fout un peu plus. Moi, la POO, je trouve ça élégant. Enfin, la bonne POO. C'est juste une autre manière de coder. Les codeurs assembleurs vont dénigrer les hard coder C. Les hard coder C vont dénigrer les codeurs Delphi. Les codeurs Delphi vont appeler PHP, Python ou ROR des toy languages.

L'inventeur du 1er système d'exploitation doit se foutre de la gueule des derniers noyaux Linux, ou de Vista.

Ultima 1 est mieux qu'Oblivion.

Bon, j'vais retourner coder sur mon boulier, moi...:-)

Non sans déc', déjà, je mets au défi n'importe quel débutant, après 15 jours de formation, de coder ce que je code MEME en POO (surtout en POO, en fait).  

Les codes d'avant, quand personne n'était né sauf Brunews (je blague hein) étaient beaux. Je me souviens encore avec émoi de mes hebdogiciel  et de leurs pages remplies de codes (j'ai un certain âge, mais je ne peux pas remonter plus loin, désolé!). Il n'empêche, aujourd'hui, ça a changé, mais un beau code, ça reste un beau code. Il y a des nouveaux langages, de nouvelles techniques...et alors? Faut savoir évoluer. Respect pour ceux qui codent à l'ancienne encore, parce qu'ils aiement ça et qu'il y a encore une place pour ça. Si tant est qu'ils aient aussi du respect pour ceux qui codent avec les outils d'aujourd'hui, répondant aux exigeances des sociétés d'aujourd'hui. Parce que sinon, on peut remonter loin, pour trouver les vrais anciens seuls méritant d'être respectés...très très loin...

samedi 20 octobre 2007 00:39 by malalam

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Le titre est trop "polémique" pour ne pas répondre. Bien joué Flavien, tu m'as eu :p.

Pourquoi l'objet ? Pourquoi la compilation ? Pourquoi les langages dynamiques ou statiques ?

J'aime séparer les problématiques.

Je pense que le but d'une majorité de gens c'est de pouvoir implémenter le plus de fonctionnalités possibles sans faire de bug et de pouvoir le maintenir par la suite.

La programmation objet (et non le similo javascript) apporte bien plus que juste pouvoir rattacher des méthodes à des classes.

L'héritage, l'isolation des différentes portées, l'encapsulation, les property, le polymorphisme, etc.

C'est pas juste un truc pour se prendre la tête c'est pour aller plus loin dans la factorisation du code et banir le copier-coller !!

Bruno, quand tu fais des VTables, appelle ça comme tu veux mais c'est pour faire du polymorphisme.

Je réfute complétement l'argument du "une fois qu'on est un pro, c'est bon on fait plus de bugs" (Cyril et Brunews c'est pour vous :p).

Qui de vous deux mettrait sa main à couper que sur 100.000 lignes de C ou de js, il ne s'est pas loupé un fois sur un mauvais cast, sur une inversion de type, sur un oubli de désallocation ?

De plus, seul dans l'informatique, on ne développe pas grand chose. Les grands projets sont menés à bien par de grandes équipes.

Avoir 100% de pros c'est pas trop possible..

En .Net, c'est simple, on ne peut pas générer de tels bugs. Evidemment ça a un coût.

Pour moi, les langages type VB ancienne génération ou js, ce sont des voitures avec une boite automatique. Ca permet de bien conduire, de pas se prendre la tête et la plupart du temps ça nous même là où on veut très facilement. En plus, pas besoin d'être un pro de la mécanique ! Par contre, la tenue de route en prend un coup, la conduite est floue et on roule sans aucune idée de la consommation. Si on veut éviter ces problèmes, il faut être un pro.

Le C/C++, c'est l'inverse, c'est une formule 1, tout est réglé aux petis oignons, tout est maitrisé et mesuré mais la moindre poussière et c'est la casse moteur en pleine course.

Dans ces deux exemples très opposés, je leur trouve un défaut commun, une syntaxe trop laxiste. Même en C ! Bien que l'on doive tout typer, on peut transtyper tout et n'importe quoi ce qui permet à la fois d'être très proche de la machine mais également de laisser passer beaucoup d'erreur outre la compilation.

(je hais le bug du: if (i=1) ...)

.Net, avec un ticket d'entrée certes un peu supérieur à des langages de type script, vous propose d'aller bien plus loin.

Ah la la, que de problèmes avec ce fameux chemin de la facilité !

Voilà, j'ai apporté mon humble avis, bon week-end à tous et vive le typage et la POO

samedi 20 octobre 2007 15:37 by Mitsu

# re: Pourquoi ne faut-il plus utiliser l'héritage de classe ?

Pour ne plus faire de bug, faudrait arrêter de coder. Tant que les logiciels seront faits par des humains il y en aura, c'est valable pour tout le monde.

Pour info malalam, il n'y a pas un iota de POO dans les noyaux Windows, ça n'aurait d'ailleurs aucun sens. Ceci ne se conçoit qu'en user mode. Je ne pratique pas Linux mais ça m'étonnerait qu'il en aille autrement.

Faut aussi s'entendre, je ne dis pas que la POO soit inutile, mais il reste à savoir pour qui. Pour les grosses boites se faisant faire un composant par ci, un autre par là et un troisième dans un lieu exotique coutant encore moins cher, alors certes que c'est utile mais pour le gars qui sera la 500eme roue de la charrue 'grand projet' dont le taf consiste en monObjet.samethode(), bof bof le pas de géant. Faudra pas craindre de courber souvent l'échine quand on se sait remplaçable du jour au lendemain.

samedi 20 octobre 2007 19:57 by brunews
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01