Introduction▲
Lorsque l'on parle de Programmation Orientée-Objets (ou POO), on pense souvent aux principes d'héritage, de surcharge et de polymorphisme. Ce sont certes les principes inhérents à la POO, cependant un tel modèle a ses limites. En effet, avec ces principes seuls, l'ajout de nouveaux comportements passe obligatoirement par la déclaration de sous-classes et la surcharge des méthodes existantes.
Ce que proposent les Design Patterns décrits dans cet article est tout autre: obtenir de nouveaux comportements par combinaison d'éléments existants et interchangeables plutôt que par simple héritage. C'est cela qui constitue l'approche modulaire de la programmation. Une telle approche se révèle à la fois très souple et très puissante, les possibilités d'extension étant quasiment illimitées.
Cet article a pour but de montrer les avantages de l'approche modulaire (ou combinatoire) par rapport à l'héritage simple. On présentera alors plusieurs Design Patterns (parmi lesquels quelques incontournables). Pour aggrémenter notre propos, les exemples choisis sont inspirés de l'univers du jeu vidéo (ex: armes et sorts d'un jeu de rôle, véhicules d'un jeu de courses, générateur de niveau pour un RTS, etc.).
La partie 1 présente les patterns qui sont à la base de l'approche modulaire de la programmation. La partie 2 présente les patterns qui facilitent la mise en oeuvre de cette approche modulaire (création et gestion d'objets, gestion mémoire, etc). La partie 3 est une discussion plus générale sur les Design Patterns et l'approche modulaire.
Mais avant cela, quelques explications s'imposent:
Les Design Patterns, c'est quoi ?▲
Les Design Patterns fonctionnent sur le principe suivant : à un problème donné, on apporte une solution précise et exposant à la fois le principe, la mise en oeuvre, les avantages, les inconvénients et des exemples d'application. Ainsi, la solution proposée est à la fois standard, réutilisable et combinable avec d'autres solutions (bien souvent complémentaires).
Les Design Patterns ont beaucoup de points commun avec le sexe:
-
lorsqu'on les utilise pour la première fois, on fait souvent des erreurs
-
au début, il faut s'y reprendre à plusieurs fois avant d'obtenir un
résultat correct
-
une fois qu'on y a goûté, on ne peut plus s'en passer
-
pour faciliter l'apprentissage, il est conseillé de pratiquer avec une
personne expérimentée
-
les maîtriser demande pas mal d'expérience
-
chacun est libre de trouver des techniques personnelles qu'il pourra
améliorer avec le temps (avant d'en faire profiter les autres...)
Justement, j'ai envie de vous faire profiter de ma connaissance des Design Patterns. Aussi nous allons voir comment les patterns vont nous aider à concevoir des applications modulables.
Les modules, c'est quoi ?▲
La définition de modules est double:
Définition 1 :
Les modules sont des éléments interchangeables, réutilisables et combinables
entre eux. Ces éléments réutilisables peuvent prendre des formes diverses:
classes, programmes exécutables, scripts, code source... Nous ne nous
intéresseront qu'aux classes.
Définition 2 :
Les modules permettent la séparation des différentes composantes de
l'application (ex: séparation données/traitements/affichage) afin de rendre
leur développement indépendant les uns des autres. Ici, la notion de "module"
rejoint la notion de "package".
Ces deux aspects seront abordés dans l'article.