Développement du modèle statique
Le diagramme de classes a toujours été le diagramme le plus important dans toutes les méthodes orientées objet. C’est également celui qui contient la plus grande gamme de notations et de variantes. UML a réussi à unifier le vocabu- laire et les concepts sans perdre la richesse et les apports des différentes méthodes existantes.Le développement du modèle statique constitue la deuxième activité de l’étape d’analyse. Elle se situe sur la branche gauche du cycle en Y et succède au découpage en catégories. Les diagrammes de classes établis sommairement dans les DCP (diagrammes des classes participantes du chapitre 4), puis réorganisés lors du découpage en catégories (chapitre 6), vont être détaillés, complétés, et optimisés.Il s’agit d’une activité itérative, fortement couplée avec la modélisation dyna- mique, décrite au chapitre suivant. Pour les besoins du livre, nous avons présenté ces deux activités de façon séquentielle, mais dans la réalité elles sont effectuées quasiment en parallèle.Les classes identifiées lors de l’étude des cas d’utilisation (chapitre 4), puis réparties dans les catégories (chapitre 6), sont simplement des classes candi- dates pour l’analyse objet. Il convient désormais de les examiner de manière détaillée, d’en éliminer certaines, ou au contraire d’en ajouter d’autres. Cette activité de validation est itérative ; l’affinement des associations, ainsi que l’ajout des attributs et des opérations, vont nous fournir de précieuses infor- mations.
Dans la catégorie Commandes, nous avons isolé une classe EnCoursDeCmd à laquelle la classe Commande délègue le suivi réel des dates d’enlèvement et de livraison, ainsi que des dates de départ et d’arrivée dans les agences. Nous sommes amenés de la même façon à séparer le SuiviMission de la Mission, pour traiter tous les aspects liés au suivi en temps réel des événements.Nous avons identifié au chapitre 4 (voir la figure 4-16) l’association décrit entre Commande et Colis. En fait, une commande contient initialement la description de chacun des colis prévus, puis au cours d’une mission, chaque colis réel est identifié et rattaché à une commande. Il faut donc distinguer deux classes différentes : DescriptionColis et Colis, qui ne comportent ni les mêmes responsabilités, ni les mêmes états. N’oublions pas qu’en analyse, les associations représentent des relations conceptuelles entre les classes. On peut également dire qu’elles impliquent des responsabilités en termes de navigation. La navigation dans un modèle statique représente la capacité à obtenir des informations en parcourant les associations entre les classes. L’exemple de la figure 7-2 indique que l’on peut demander à une Commande quelles sont les DescriptionColis qui lui sont rattachées et réciproquement à toute DescriptionColis à quelle Commande elle est rattachée. On peut donc considérer les associations comme porteuses d’une partie fondamentale de la structure statique des classes, en ce sens qu’il est de la nature d’une Commande d’être reliée à des DescriptionColis.
En revanche, ces responsabilités ne préjugent pas de la structure des classes en conception. C’est en effet durant l’étape de conception détaillée (voir chapitre 11), qu’on effectue les choix d’implémentation du modèle structurel, avec des objectifs d’optimisation et de modularité.Il n’incombe pas à une Commande de savoir quel Repartiteur est en train de la sélectionner pour l’affecter à une Mission. Il s’agit d’une relation purement dynamique entre un acteur Repartiteur et un objet Commande. L’association ne doit donc pas figurer dans le modèle statique, mais être exprimée par une construction dynamique, comme l’envoi de messages.Un EnCoursDeCmd concerne une Commande, une Commande concerne un Client. Il serait inu- tile d’ajouter une association entre EnCoursDeCmd et Client pour préciser qu’un EnCoursDeCmd concerne un et un seul Client. En effet, implicitement, un parcours enchaînant plusieurs associa- tions combine les multiplicités successives, en multipliant respectivement entre elles les bornes minimales et les bornes maximales. En voici un exemple .