Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

La réutilisation dans la POO et ses limites actuelles :
Est-il possible d'y remédier ? Que faut-il faire ?

Le , par Arsene Newman

236PARTAGES

14  0 
Au début des années 1990, l’un des principaux concepts faisant l’éloge de la programmation orientée objet était la réutilisation. Aujourd’hui, Scott Westfall, programmeur et chef de projet, revient sur ce concept et sa situation actuelle dans un billet de blog.

« Il n’est pas rare de découvrir que plusieurs personnes au sein de votre équipe ont codé essentiellement la même fonctionnalité. Clairement, cela illustre un manque de réutilisation de code efficace ». C’est en ces termes que s’est prononcé Westfall. Mais qu’en est-il réellement de la réutilisation de code ?
Aux premiers abords, ce concept désigne la réutilisation de code, de classes et des modèles de conception existants au lieu d’en créer des nouveaux. Mais, pour Westfall c’est plus que cela : « Il s’agit plus de l’efficacité du code que de l’efficacité de la programmation ».

En outre, pour ce professionnel, une compréhension de cette situation passe inévitablement par répondre à certaines questions :

  • Pourquoi les développeurs ne réutilisent pas le code existant ? Le blogueur évoque certaines raisons comme :
    • déterminer les parties réutilisables d’un code est difficile ;
    • le manque de documentation : si les éléments réutilisables ne sont pas documentés, leur utilisation devient plus complexe ;
    • les développeurs ne prennent pas le temps de chercher du code réutilisable ;
    • un élément réutilisable peut altérer le modèle de conception, ce qui implique un rapport avantages/coûts défavorable.
    • l’écriture de code de manière non réutilisable. Ce dernier point nous renvoie directement à la seconde question.

  • Pourquoi les développeurs ne codent pas de manière à réutiliser le code ?
    • Ecrire un code réutilisable demande plus d’efforts.
    • Manque de temps : les développeurs manquent de temps pour écrire un code réutilisable, même si notre blogueur a une vision différente : « En réalité, beaucoup de développeurs arrivent à trouver du temps pour coder quelque chose pour leur propre utilisation, mais n’arrivent pas à en trouver pour ce cas de figure».
    • Bénéfices : à l’heure actuelle, le cycle de vie d’un code est généralement assez court, ainsi, les développeurs ne voient pas les bénéfices d’un code réutilisable.


Ajouter à cela, les propos de Westfall évoquent un autre facteur justifiant la situation actuelle : « même quand il y a une réutilisation du code décente, la réutilisation des modèles de conception est souvent négligée malgré le meilleur retour sur investissement qu’elle offre ». En effet, la réutilisation des modèles de conception offre beaucoup d’avantages, mais, en contrepartie, une bonne documentation et des templates de code sont nécessaires, ce qui la marginalise.

Faut-il abandonner la réutilisation à son sort actuel ? Non, malgré ces problèmes, la réutilisation est importante. Quand les choses sont faites correctement, cela n’accélère pas uniquement le développement, mais permet aussi de créer des fonctionnalités qui fonctionnent avec constance au sein d’une application ».

Alors, quelle est la solution pour y remédier ? Pour Westfall, une approche centrée sur l’architecture et sur sa maintenance en impliquant davantage les développeurs permettrait à ces derniers de les responsabiliser, de mieux reconnaître les éléments réutilisables de leur code et à penser plus à la réutilisation.

Enfin, Westfall évoque ce qui suit : « si une compagnie est suffisamment grande, vous pouvez dédiés du personnel à la collecte et à la gestion des éléments réutilisables. Je vois ces personnes-là comme étant plus des bibliothécaires que des architectes »

Source : Billet de blog de Scott Westfall
Et vous ?

Que pensez-vous de la réutilisation en POO ?

Faites-vous souvent appel à la réutilisation en POO ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Luckyluke34
Membre émérite https://www.developpez.com
Le 31/03/2014 à 12:08
La réutilisation, c'est bien, mais ce n'est pas aussi simple que repérer des blocs de code en doublon et les extraire dans de nouvelles méthodes/classes, ou se dire que ce truc là-bas ressemble vaguement à ce dont on a besoin et l'utiliser.

Réutiliser nécessite un gros travail d'abstraction, de découpage et de nommage. Il faut tirer l'essence d'un bloc de code pour mettre un nom précis et adéquat dessus et lui donner un contrat clair, éventuellement distinguer ses différentes responsabilités pour les extraire dans des éléments séparés... C'est une des choses les plus compliquées en programmation.

Même une fois qu'on a fait ça, réutiliser un composant ne sert à rien si on sait que celui-ci risque de changer pour des raisons totalement indépendantes de notre besoin actuel et de devenir incompatible, ou nous force à rentrer dans un moule qui va apporter de la complexité inutile ou des dépendances non désirées vers d'autres composants.

Honnêtement, je vois plus souvent du code réutilisé mal à propos, des abstractions mal nommées ou faisant 10 choses + le café, des frameworks dont on n'utilise que 2% des fonctionnalités qu'on se traine comme des boulets, que du code pas assez réutilisé.
8  0 
Avatar de blbird
Membre expérimenté https://www.developpez.com
Le 03/04/2014 à 17:31
Citation Envoyé par Traroth2 Voir le message
Bon, ce que je vais dire, c'est un peu de la provocation, mais il y a aussi un nombre de cas non négligea&ble où on a de la réutilisabilité inutile. On conçoit l'APi de la mort, on brainstorme comme des fous pour avoir un fonctionnement modulaire, des façades et tout le toutim. Mais le truc, c'est que ce que fait le composant n'a pas d'intérêt dans un autre contexte, et il n'est tout simplement jamais réutilisé. Concevoir du code pour qu'il soit réutilisable a un coût, comme tout. Il faut quand même se demander à un moment si la réutilisabilité a vraiment un intérêt.
Entièrement d'accord. J'ai déjà vu (surtout en Java), des "architectes" pondre des applicatifs J2EE en 5 ou 6 couches, sans qu'il n'y ait aucun intérêt, et je dis bien aucun, à ce nombre de couches. Résultat : pour modifier un comportement dans un écran, il fallait modifier 5 fichiers différents...

Posez-vous la question des architectures multi-couches, qui rajoute, quoi qu'on en dise, de la complexité au développement, au débogage, et même des fois à l'utilisation : combien de fois l'intérêt d'avoir rendu les couches indépendantes, à savoir la possibilité de changer l'une sans trop impacter les autres, a réellement été utilisé?

Tout est une affaire de juste milieu : adapter son développement aux besoins présents, certes, mais aussi futurs.
7  0 
Avatar de Zefling
Expert confirmé https://www.developpez.com
Le 31/03/2014 à 18:02
Rendre réutilisable du code peut parfois demande tellement temps que s'il n'est pas réutiliser plus de 3-4 fois, ça peut aller plus vite d'adapter, puis si besoin réel de refaire une refacto. Si on doit tout anticiper on ne s'en sort plus, le temps n'est pas infini...
6  0 
Avatar de DonQuiche
Expert confirmé https://www.developpez.com
Le 31/03/2014 à 18:45
Citation Envoyé par pcaboche Voir le message
La question à se poser, c'est plutôt : Quelles sont les techniques de réutilisation en POO ?
Dommage que la densité de trolls par ligne soit aussi élevée dans ton message car le fond était plutôt intéressant, la programmation fonctionnelle ayant en effet un très net avantage dans la réutilisabilité des algorithmes élémentaires. Mais reléguer le polymorphisme a un simple prétexte pour faire de jolis diagrammes, c'est quand même mépriser son intérêt dans les systèmes réels : la programmation fonctionnelle montre ses limites quand il te faut passer dix arguments ou recourir à des mécanismes tordus pour résoudre un problème où le polymorphisme est la bonne réponse.

Les deux paradigmes sont nécessaires et doivent cohabiter dans un même langage. C'est de plus en plus souvent le cas.
6  0 
Avatar de azias
Membre éclairé https://www.developpez.com
Le 01/04/2014 à 14:49
Comme pcaboche, pour moi la POO c'est surtout de l’encapsulation, moins la réutilisation qui est plutôt un concept de pratique de programmation en général.

Pour programmer de façon réutilisable je dirais que ça dépend surtout de la faculté à prévoir les utilisations futures. Il est assez simple de rendre une fonction ou une classe générique à outrance, elle n'en sera pas pour autant plus facilement (ré)utilisable. En revanche prévoir une forme qui sera facilement réutilisable dans des contextes variés nécessite, je pense, d'avoir une idée des contextes en question. Dans ces cas là, c'est surtout l'expérience du développeur qui va parler.

Une autre question plus problématique est celui de savoir ce qui existe, sinon aucune chance de le réutiliser. Dans le cadre d'un framework on sait ce qui existe en regardant et en cherchant dans la doc (si elle est mal faite on passe à côté de tout). Il faut bien reconnaître que la plupart du temps le code que nous écrivons est bien mal documenté. Et il nous manque une sorte de google pour le code pour nous dépêtrer de tout ça.
7  1 
Avatar de foetus
Expert éminent https://www.developpez.com
Le 02/04/2014 à 13:08
Citation Envoyé par la.lune Voir le message
Le problème se complexifie encore si tu dois créer plusieurs classes différentes qui ont toutes en commun l’ancienne classe quelle option tu optes: ((héritage/polymorphisme ) ou (copier/coller et tout casser après encore ))
Tiens je te donne du grain à moudre parce que je suis gentil

Tu oublies un truc qui est association/ agrégation/ composition.
Parce que l'héritage ne représente que 5 à 10% de ce concept.

Pourquoi tu ne crées pas un simple pointeur dans tes nouvelles classes, avec éventuellement de l'amitié

Il y a des livres qui explique tout cela, et il y a des règles presque mécaniques, qui évite au concepteur de se faire un nœud au cerveau

En te lisant tu ne sembles pas t'en rendre compte que l'héritage bouffe du CPU et de la mémoire

Citation Envoyé par la.lune Voir le message
Moi je vais l'ajouter à la classe mère, la recompiler elle seule et tout marche nickel dans toutes les classes filles, bonne réutilisation.
Toi qui m'a repris sur les librairies, mais tu ne sais pas que des fois on ne peut pas toucher à la classe mère: on casse le contrat
6  1 
Avatar de Traroth2
Membre chevronné https://www.developpez.com
Le 03/04/2014 à 10:57
Bon, ce que je vais dire, c'est un peu de la provocation, mais il y a aussi un nombre de cas non négligea&ble où on a de la réutilisabilité inutile. On conçoit l'APi de la mort, on brainstorme comme des fous pour avoir un fonctionnement modulaire, des façades et tout le toutim. Mais le truc, c'est que ce que fait le composant n'a pas d'intérêt dans un autre contexte, et il n'est tout simplement jamais réutilisé. Concevoir du code pour qu'il soit réutilisable a un coût, comme tout. Il faut quand même se demander à un moment si la réutilisabilité a vraiment un intérêt.
5  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 31/03/2014 à 17:18
Que pensez-vous de la réutilisation en POO ?
C'est un bon principe, mais il faut rester pragmatique ; si rendre le code réutilisable le rend trop complexe, ça ne vaut pas le coup.

Faites-vous souvent appel à la réutilisation en POO ?
Autant que possible, oui.

La plupart du temps, un bout de code non trivial est écrit pour un besoin précis, pas dans l'idée d'être réutilisé. C'est seulement après coup qu'on se rend compte qu'on a besoin de le réutiliser, généralement avec des petites variantes. Dans ces cas là, un petit coup de refactoring permet généralement d'éviter la duplication de code, en ajoutant des paramètres à une méthode ou des dépendances à une classe.

(ce débat tombe à pic, je suis justement en train de me prendre la tête sur un refactoring pour éviter de dupliquer un bout de logique métier... et je commence à me demander si ça en vaut la peine )
4  0 
Avatar de moldavi
Membre émérite https://www.developpez.com
Le 31/03/2014 à 23:13
Bonjour.

Citation Envoyé par Arsene Newman Voir le message

Enfin, Westfall évoque ce qui suit : « si une compagnie est suffisamment grande, ... »
Je crois que tout est dit ici. Le problème, ce ne sont pas les développeurs, ce sont les moyens, et encore.

En même temps je ne crois pas aux bibliothèques qui font le café. Chaque cas est particulier, et si une bibliothèque était capable de gérer tous les cas de figure avec les performances et la portabilité maximale, cela se saurait. Et on ne discuterait pas de cela ici.

Mais bon, responsabiliser le développeur qui travaille déjà 10 heures par jour, faut en vouloir. Le management n'a pas de limite visiblement.
4  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 02/04/2014 à 18:37
Citation Envoyé par la.lune Voir le message
On dirait qu'on ne lit pas ce que j'écris
C'est le syndrome TL;DR... Peut-être que si tes messages n'étaient pas des pavés qui s'étalent sur 3 écrans, les gens seraient plus enclins à les lire
5  1