« Programmation Orientée Objet » et croyances
Public privilégié : développeurs (débutants notamment).
Je ne prétends aucunement être un exemple en terme de conception objet. Cet article a simplement pour objectif d'avertir toute personne s'apprêtant à faire des recherches à propos du paradigme OO sur le web qu'une bonne partie des explications qu'il y trouvera risque de l'induire en erreur.
La programmation orientée objet. En voilà un sujet à la mode. Malheureusement, nombre de commentaires que l'on peut lire sur le web à propos du paradigme orienté objet sont faux ou inexacts. Si bien que lorsque j'ai commencé à me poser mes premières questions sur l'orienté objet il y a maintenant quelques années, je suis tombé dans la confusion la plus totale.
La POO : une manière de concevoir et de se représenter son programme.
Un problème qui revient fréquemment dans les explications sur la programmation objet, c'est que beaucoup pensent qu'il s'agit simplement de coder en utilisant des mécanismes techniques qui appartiendraient au modèle objet. Toutefois, un paradigme n'est pas quelque chose de défini sur le plan technique. Certes, les langages de programmation apportent plus ou moins d'outils techniques facilitant la pratique de ce paradigme. Mais voilà : ces outils ne sont que des outils, et l'utilisation du paradigme objet ne se résume pas à mettre un bout de code dans un constructeur et stocker des informations dans des attributs.
Non, le paradigme objet commence bien avant, car il s'agit avant tout d'une approche qui relève de la conception. Il s'agit de voir son application comme un assemblages d'entités qui possèdent des propriétés ainsi que des comportements.
Il s'agit également de séparer l'implémentation (la façon dont on fournit un service) de l'interface (la façon dont le service est utilisé).
Je vous ai sélectionné quelques idées fausses que l'on retrouve fréquemment sur la toile. Les voici, chacune accompagnée d'un petit commentaire :
« La POO permet de produire un code plus "propre". »
Pour produire un code "propre", il faut un programmeur qui connaisse bien les mécanismes techniques du langage qu'il utilise. Que l'on utilise le paradigme orienté objet ou non.
« La POO permet de séparer la présentation du contenu. »
La séparation de la présentation et du contenu ne dépend en aucun cas du paradigme utilisé. Je ne vois pas grand chose à ajouter à cette affirmation tant le lien que certains voient avec le paradigme OO m'est incompréhensible… cette séparation résulte simplement de la séparation des modules chargés du traitement et de l'affichage, que ces modules soient conçus selon le modèle objet ou non.
« La POO permet de produire un code plus maintenable, évolutif ou réutilisable. »
Un code maintenable, évolutif et réutilisable nécessite essentiellement une organisation claire et normalisée, une documentation de qualité ainsi qu'une conception bien pensée. Déléguer les tâches aux bons modules, utiliser des conventions (nommage, ordre des paramètres…) et commenter les sections de code en décrivant leur comportement constituent les principales « bonnes pratiques » à mettre en œuvre pour attendre ces objectifs.
Je vous ai trouvé un exemple assez intéressant de « démystification ». Il s'agit d'une question posée innocemment dans un topic du Site du Zéro, et la réponse apportée par galactose me paraît très intéressante. Si vous voulez aller plus loin, vous pouvez d'ailleurs parcourir ce sujet où certains intervenants démontent des idées préconçues (les interventions de `Haku notamment, celle-ci par exemple).