PRINCIPES ET DÉFINITIONS DE BASE DIAGRAMME DE CLASSES
Le diagramme de classes est le point central dans un développement orienté objet. En analyse, il a pour objectif de décrire la structure des entités manipulées par les utilisateurs. En conception, le diagramme de classes représente la structure d’un code orienté objet ou, à un niveau de détail plus important, les modules du langage de développement. Comment le représenter ? Le diagramme de classes met en œuvre des classes, contenant des attributs et des opérations, et reliées par des associations ou des généralisations. Figure 3-1. Exemple de diagramme de classes .Une classe représente la description abstraite d’un ensemble d’objets possédant les mêmes caractéristiques. On peut parler également de type. Exemples : la classe Voiture, la classe Personne. Un objet est une entité aux frontières bien définies, possédant une identité et encapsulant un état et un comportement. Un objet est une instance (ou occurrence) d’une classe. Exemple : Pascal Roques est un objet instance de la classe Personne. Le livre que vous tenez entre vos mains est une instance de la classe Livre.
ATTRIBUT ET OPÉRATION
Un attribut représente un type d’information contenu dans une classe. Exemples : vitesse courante, cylindrée, numéro d’immatriculation, etc. sont des attributs de la classe Voiture. Une opération représente un élément de comportement (un service) contenu dans une classe. Nous ajouterons plutôt les opérations en conception objet, car cela fait partie des choix d’attribution des responsabilités aux objets.
ASSOCIATION
Une association représente une relation sémantique durable entre deux classes. Exemple : une personne peut posséder des voitures. La relation possède est une association entre les classes Personne et Voiture. Attention : même si le verbe qui nomme une association semble privilégier un sens de lecture, une association entre concepts dans un modèle du domaine est par défaut bidirectionnelle. Donc implicitement, l’exemple précédent inclut également le fait qu’une voiture est possédée par une personne. Comment les représenter ? Aux deux extrémités d’une association, on doit faire figurer une indication de multiplicité. Elle spécifie sous la forme d’un intervalle d’entiers positifs ou nuls le nombre d’objets qui peuvent participer à une relation avec un objet de l’autre classe dans le cadre d’une association. Exemple : une personne peut posséder plusieurs voitures (entre zéro et un nombre quelconque) ; une voiture est possédée par une seule personne.
GÉNÉRALISATION, SUPER-CLASSE, SOUS-CLASSE
Une super-classe est une classe plus générale reliée à une ou plusieurs autres classes plus spécialisées (sous-classes) par une relation de généralisation. Les sous-classes « héritent » des propriétés de leur super-classe et peuvent comporter des propriétés spécifiques supplémentaires. Exemple : les voitures, les bateaux et les avions sont des moyens de transport. Ils possèdent tous une marque, un modèle, une vitesse, etc. Par contre, seuls les bateaux ont un tirant d’eau et seuls les avions ont une altitude… Figure 3-2. Exemples de multiplicité d’association Agregat Element 1..* 0..* Composite Element 1 0..* Figure 3-3. Exemples d’agrégation et de composition Comment les représenter ? Une classe abstraite est simplement une classe qui ne s’instancie pas directement mais qui représente une pure abstraction afin de factoriser des propriétés communes. Elle se note en italique. C’est le cas de Moyen de Transport dans l’exemple précédent. PACKAGE Package : mécanisme général de regroupement d’éléments en UML, qui est principalement utilisé en analyse et conception objet pour regrouper des classes et des associations. Les packages sont des espaces de noms : deux éléments ne peuvent pas porter le même nom au sein du même package. Par contre, deux éléments appartenant à des packages différents peuvent porter le même nom. La structuration d’un modèle en packages est une activité délicate. Elle doit s’appuyer sur deux principes fondamentaux : cohérence et indépendance. Le premier principe consiste à regrouper les classes qui sont proches d’un point de vue sémantique. Un critère intéressant consiste à évaluer les durées de vie des instances de concept et à rechercher l’homogénéité. Le deuxième principe s’efforce de minimiser les relations entre packages, c’est-à-dire plus concrètement les relations entre classes de packages différents.
ÉTUDE D’UN SYSTÈME DE RÉSERVATION DE VOL
Cette étude de cas concerne un système simplifié de réservation de vols pour une agence de voyages. Les interviews des experts métier auxquelles on a procédé ont permis de résumer leur connaissance du domaine sous la forme des phrases suivantes : 1. Des compagnies aériennes proposent différents vols. 2. Un vol est ouvert à la réservation et refermé sur ordre de la compagnie. 3. Un client peut réserver un ou plusieurs vols, pour des passagers différents. 4. Une réservation concerne un seul vol et un seul passager. 5. Une réservation peut être annulée ou confirmée. 6. Un vol a un aéroport de départ et un aéroport d’arrivée. 7. Un vol a un jour et une heure de départ, et un jour et une heure d’arrivée. 8. Un vol peut comporter des escales dans des aéroports. 9. Une escale a une heure d’arrivée et une heure de départ. 10. Chaque aéroport dessert une ou plusieurs villes. Nous allons entreprendre progressivement la réalisation d’un modèle statique d’analyse (aussi appelé modèle du domaine) à partir de ces « morceaux de connaissance ».
Étape 1 – Modélisation des phrases 1 et 2
En premier lieu, nous allons modéliser la première phrase : 1. Des compagnies aériennes proposent différents vols. CompagnieAerienne et Vol sont des concepts importants du monde réel ; ils ont des propriétés et des comportements. Ce sont donc des classes candidates pour notre modélisation statique. Nous pouvons initier le diagramme de classes comme suit : La multiplicité « 1..* » du côté de la classe Vol a été préférée à une multiplicité « 0..* » car nous ne gérons que les compagnies aériennes qui proposent au moins un vol1. En revanche, la phrase ne nous donne pas d’indication sur la multiplicité du côté de la classe CompagnieAerienne. C’est là une première question qu’il faudra poser à l’expert métier. Par la suite, nous partirons du principe qu’un vol est proposé le plus souvent par une seule compagnie aérienne, mais qu’il peut également être partagé entre plusieurs affréteurs. Au passage, on notera que le terme « affréteur » est un bon candidat pour nommer le rôle joué par la classe CompagnieAérienne dans l’association avec Vol.