Diagrammes de classes
La vue structurelle du modèle UML est la vue la plus utilisée pour spécifier une application. L’objectif de cette vue est de modéliser la structure des différentes classes d’une application orientée objet ainsi que leurs relations. Conçu à l’origine, au cours des années 1990, pour faciliter la construction d’applications orientées objet (OO), le langage UML a ensuite fortement évolué jusqu’à sa version 2.1 actuelle. Néanmoins, UML reste toujours très OO. Les concepts qu’il propose pour modéliser la vue structurelle sont donc les concepts de classe et d’objet. UML définit cependant sa propre sémantique OO, laquelle ressemble à la sémantique des langages de programmation objet Java ou C++. Il est donc important de considérer UML comme un langage à part entière, et non comme une couche graphique permettant de dessiner des applications Java ou C++.En UML, une interface définit un contrat que doivent respecter les classes qui réalisent l’interface. Une interface est identifiée par son nom. Les objets instances des classes qui réalisent des interfaces sont aussi des instances des interfaces. Une classe peut réaliser plusieurs interfaces, et une interface peut être réalisée par plusieurs classes. Une interface se représente de deux façons : soit à l’aide d’un rectangle contenant le nom de l’interface, au-dessus duquel se trouve la chaîne de caractères «interface», soit à l’aide d’un cercle, au-dessous duquel se trouve le nom de l’interface (voir figure 2.2).Si le sens d’un paramètre de l’opération est in, l’objet appelant l’opération doit fournir la valeur du paramètre. Si le sens d’un paramètre de l’opération est out, l’objet responsable de l’opération doit fournir la valeur du paramètre. Si le sens d’un paramètre de l’opéra- tion est inout, l’objet appelant l’opération doit fournir la valeur du paramètre, mais celle- ci peut être modifiée par l’objet responsable de l’opération.
Un seul paramètre peut avoir return comme sens, et il n’est alors pas nécessaire de préciser le nom de ce paramètre. Si une opération possède un paramètre dont le sens est return, cela signifie que l’objet responsable de l’opération rend cette valeur comme résultat de l’opération. L’apport de la direction return par rapport à la direction out est de faci- liter la combinaison de fonction. Il est important de souligner que les opérations UML ne définissent pas le comportement qui sera réalisé lors de l’invocation de l’opération. Nous verrons dans la suite du cours comment ce comportement est intégré dans le modèle. objets instances des sous-classes sont des objets instances des superclasses. En d’autres termes, si une classe A hérite d’une classe B, l’ensemble des objets instances de A est inclus dans l’ensemble des objets instances de B.
Afin que les classes d’un package puissent hériter des classes d’un autre package ou y être associées (voir section suivante), il faut préciser une relation d’import entre ces deux packages. La relation d’import est monodirectionnelle, c’est-à-dire qu’elle comporte un package source et un package cible. Les classes du package source peuvent avoir accès aux classes du package cible. Nous revenons sur cette sémantique au chapitre 4 de ce cours, mais nous pouvons déjà mentionner que nous considérons comme interdits les cycles de relations d’import entre plusieurs packages.Le langage UML définit le concept d’association entre deux classes. Ce concept très intéressant, qui ne fait pas partie des concepts élémentaires du paradigme objet, permet de préciser les relations qui peuvent exister entre plusieurs objets. La figure 2.10 présente l’association nommée habite, qui associe les classes Personne et Adresse. Cette association signifie que les objets instances de la classe Personne et les objets instances de la classe Adresse peuvent être reliés. En d’autres termes, cela signifie que des personnes habitent à des adresses. La figure 2.10 présente l’association nommée habite, qui associe les classes Personne et Adresse. Cette association signifie que les objets instances de la classe Personne et les objets instances de la classe Adresse peuvent être reliés. En d’autres termes, cela signifie que des personnes habitent à des adresses.