La programmation orientée objet (POO) s'est progressivement imposée à partir des
années 1980 et est devenue, dans les années 1990, le principal paradigme utilisé
pour le développement des logiciels.
Elle proposait une nouvelle manière d'organiser les programmes en les structurant
autour d'objets collaborant entre eux.
À cette époque, la POO suscitait de grands espoirs. Elle devait notamment permettre :
- de mieux organiser les logiciels grâce à une répartition claire des responsabilités ;
- de favoriser la réutilisation du code ;
- de faciliter l'évolution et la maintenance des applications ;
- de modéliser les problèmes sous forme d'objets proches des concepts du domaine étudié.
Au fil des années, l'expérience acquise sur de grands projets a cependant montré
que certains mécanismes de la POO étaient plus efficaces que d'autres.
En particulier, l'héritage, qui occupait une place centrale dans les premiers
langages orientés objet, peut conduire à des hiérarchies de classes difficiles
à faire évoluer lorsqu'il est utilisé de manière excessive.
À l'inverse, d'autres principes, comme l'encapsulation, les interfaces,
le polymorphisme ou la composition, se sont révélés particulièrement efficaces
et occupent aujourd'hui une place essentielle dans la conception des logiciels.
La programmation orientée objet reste ainsi l'un des paradigmes les plus utilisés,
mais les pratiques ont évolué avec l'expérience des développeurs.
Une approche moderne de la programmation orientée objet
L'expérience acquise sur de nombreux projets a conduit les développeurs à privilégier
certains principes de conception qui facilitent l'évolution et la maintenance des logiciels.
Parmi les plus importants figurent :
- La composition plutôt que l'héritage : il est souvent préférable de
construire un objet en assemblant plusieurs composants plutôt qu'en multipliant
les niveaux d'héritage.
- Les interfaces pour représenter les comportements communs :
le polymorphisme est aujourd'hui le plus souvent obtenu à l'aide d'interfaces,
qui offrent une plus grande souplesse que les hiérarchies de classes.
- Des classes ayant une responsabilité claire : chaque classe doit
remplir un rôle bien défini et collaborer avec les autres à travers des
interfaces simples.
L'objectif de la programmation orientée objet n'est donc pas seulement de
représenter les objets du monde réel, mais surtout de concevoir des logiciels
modulaires, faciles à comprendre, à tester et à faire évoluer.
C'est cette approche moderne et pragmatique que nous adopterons tout au long de
ce cours.