Professional Documents
Culture Documents
Nous allons essayer d’illustrer la conception orientée objets par un exemple simple. Il
faut tout de même voir qu’un exemple simple est certes plus aisé à comprendre, mais devient
assez vite trivial, et peut dans cetains cas poser la question de l’utilité de la modélisation. On
se souviendra que les procédés de modélisation ont été mis au point pour parvenir à maîtriser
des problèmes complexes, et que les appliquer à des problèmes plus simples implique forcé-
ment l’énoncé de certaines évidences.
Ce qui est important dans cet exemple, c’est de montrer sur un exemple quasiment évi-
dent comment s’opère la modélisation. L’étape suivante consiste à réaliser soi-même une
modélisation simple. En suite de quoi, on pourra aborder des problèmes réalistes.
Nous nous proposons ici de modéliser un autoradio FM, avec touches de contrôle et
affichage alphanumérique de la station; cet autoradio possédera des mémoires de station, et
un système de recherche automatique.
Il faut insister sur le fait que le processus de modélisation ne constitue pas une science
exacte ! Le jour où ce processus constituera une démarche parfaitement systématique, il ne
sera plus nécessaire de faire appel à des ingénieurs : de bêtes PC feront aussi bien (ou mieux)
l’affaire. Fort heureusement, il ne semble pas que ce jour figure dans les perspectives immé-
diates. Par conséquence, deux modélisations faites à partir d’une même spécification par
deux équipes différentes aboutit normalement à deux designs pouvant être très différents.
Ceci ne signifie pas forcément que l’un soit meilleur que l’autre : les deux peuvent avoir des
avantages et des inconvénients, mais ce ne seront pas les mêmes.
La première étape que nous devons accomplir est d’écrire une spécification; comme on
peut penser qu’un autoradio est assez bien spécifié, nous allons directement sauter à la modé-
lisation. Dans le cas où une spécification est nécessaire, on se rappellera que le diagramme
des cas d’utilisation permet de structurer la spécification !
Les cas d’utilisation apparaissent très tôt dans le design. Dans le cas de notre autoradio,
il se trouve que le système est trop simple pour que ceux-ci nous apportent beaucoup.
Le package est initialement vide; nous allons le remplir en identifiant trois sous-systè-
mes dans notre autoradio (nous négligeons volontairement l’alimentation) : le sous-système
d’interactions avec l’utilisateur, le sous-système audio, le sous-système de réception HF
(figure20.3, page171).
L’étape suivant consiste à affiner nos composants. Nous ne le ferons pas pour tous les
sous-systèmes, car ce serait fastidieux. Nous allons nous concentrer sur l’interface utilisateur.
Nous pouvons "ouvrir" l’interface utilisateur en cliquant dessus, et y insérer les composants
(sous forme de classe, cette fois) qui nous paraissent appropriés (figure20.4, page172).
La système de stockage de stations va mémoriser une station par son nom et sa fré-
quence : l’affichage des stations va également utiliser le nom et la fréquence: ces deux para-
mètres ayant selon toute apparence une relation très forte entre eux, il convient d’en faire une
classe, qui ne figure pas encore dans notre modélisation.
En l’occurence, nous avons plutôt crée un composant Station, possédant deux proprié-
tés qu’il est possible de mettre (set) ou d’examiner (get).
De même, on ne détaille pas le module d’affichage, car on ne sait pas encore à quoi il
correspond (LCD à une ligne, LCD écran, CRT, etc...). La technique effective d’affichage ne
nous intéresse pas à ce niveau, mais c’est la fonction d’affichage dont nous avons besoin. La
technique gagne donc à être confinée dans la classe affichage, et d’y rester cachée.
L’élément de commande synchronise les activités de ces divers éléments: il paraît évi-
dent que ces seuls éléments ne suffisant pas à faire un autoradio, et que l’élément de com-
mande devrait vraisemblablement avoir des interfaces avec d’autres éléments. Ainsi, il paraît
assez naturel d’offrir à notre commande la possibilité de sélectionner une station; cette possi-
bilité n’est malheureusement pas implémentable telle quelle dans notre modèle, -du moins
pour l’instant-, car nous ne disposons pas des fonctionnalités des autres packages.
Pour être en mesure d’utiliser les autres packages, alors qu’ils ne sont pas encore
implémentés, il est nécessaire de définir les conventions par lesquelles on pourra collaborer
avec eux. Le package interface utilisateur n’a en principe pas besoin d’exporter d’interface,
car dans le cas de figure que nous avons choisi, il se trouve être le maître, ou coordinateur.
Donc, avec notre définition de l’interface utilisateur, nous avons mis la charrue avant
les boeufs : avant de définir le contenu d’un package, il faut définir les interfaces de tous les
packages composant le système ! Comme nous ne l’avions pas fait, nous sommes contraints
de revenir en arrière, sur la première phase de modélisation, en abandonnant provisoirement
ce que nous avions réalisé jusqu’ici. C’est une perte de temps, mais elle se passe à un stade
très précoce du projet : elle est donc moins critique qu’une erreur découverte au niveau du
codage.
Il se trouve que ces signaux ne nous intéressent pas directement, du moins du point de
vue de la modélisation que nous cherchons à réaliser. Cela ne veut pas dire qu’il n’est pas
nécessaire de documenter ! Au contraire : à ce niveau, il faut essayer de documenter tout ce
qui peut l’être, quitte à ajouter dans un commentaire que cette information est indicative. Ces
classes peuvent être définies au niveau du package principal. Nous obtenons de ce fait
l’interface suivant (figure20.9, page176) pour le package HF :
Nous avons défini des interfaces pour nos packages: nous pou-
vons dés lors compléter le package "InterfaceUtilisateur".