Introduction

Dans la deuxième partie de ce livre, nous avons analysé un certain nombre de techniques de programmation dont le but est d'améliorer la maintenabilité (en particulier la lisibilité) du code et de le rendre performant. Ces considérations s'appliquent souvent à l'intérieur d'un module d'une application.

Dans cette partie, nous allons étudier des techniques pour améliorer la modularité de l'application, à savoir comment faire pour que les différents modules de l'application soient les plus indépendants possible, peut-être même réutilisables dans une autre application.

Une grande partie de ce travail consiste à construire des types abstraits dont la définition sera explicitée plus en profondeur dans le chapitre 27.

La plupart des types abstraits d'une application sont spécifiques au domaine de celle-ci. La définition exacte de ces types abstraits dépend donc intimement de la façon dont l'application manipule ces objets. Il est par exemple impossible de définir un type abstrait personne réutilisable dans toutes les applications qui manipulent des personnes. La raison est simple : différentes applications manipulent différents aspects d'une personne. Un application de bio-informatique ne s'intéresse probablement pas au nombre de voitures appartenant à une personne, pas plus qu'une application de gestion ne s'intéresse à son héritage génétique.

Certains types abstraits sont par contre très généralement utilisés. Il s'agit surtout de conteneurs, à savoir d'objets dont le but est de contenir d'autres objets, organisés de sorte que l'accès à ces derniers soit le plus efficace possible. Aujourd'hui, un programmeur a rarement besoin de programmer ces conteneurs, car ils sont fournis avec l'implémentation du langage de programmation sous la forme de bibliothèques. Pourtant, afin d'être un bon consommateur de ces conteneurs, il est essentiel de comprendre comment ils sont programmés, l'efficacité de leurs opérations et plus généralement ce qu'il est possible de faire au niveau de la performance, étant donnée l'interface du conteneur proposée.

Une autre grande partie de la programmation modulaire consiste à organiser l'application de manière à éviter des interdépendances entre différents modules. Cet aspect de la programmation modulaire sera également analysé dans cette partie.

Irene DURAND
2011-10-14