1- le diagramme de classes

________________________________________________________________________________________________
I. Introduction:

Q1: Définissez le diagramme de classes.

Le diagramme de classes est un diagramme statique de de la modélisation objet UML, il permet de montrer la structure interne d'un système en modélisant les concepts du domaine d'application.

En fait, le diagramme de classes décortique le système en plusieurs classes, Une classe est une description formelle d'un ensemble d'objets qui ont une même sémantique et caractéristiques communes.



Chaque classe possède un nom, un identifiant (une clé)  des propriétés (des attributs et des relations) et des opérations (des méthodes) et reliée à d'autres classes par des relations d'association, de généralisation et/ou de dépendance. 


le diagramme de classes est le diagramme le plus important de la modélisation objet, il est le seul obligatoire lors d'une telle modélisation.

II. Les classes:

      II.1. classe:

Q2: Définissez la notion de classe et celle d'une instance de classe. illustrez par un exemple.

Une classe est une représentation formelle d'un ensemble d'objet qui ont une même sémantique et de caractéristiques communes.

Un objet est une instance d’une classe. C’est une entité discrète dotée d’une identité, d’un état et d’un comportement que l’on peut invoquer.

Si l’on considère que Homme (au sens être humain) est un concept abstrait, on peut dire que la personne Myriam est une instance de Homme. Si Homme était une classe, Myriam en serait une instance : un objet.


Q3: Qu'est ce que les caractéristique d'une classe?

Une classe définit plusieurs objets dotés de caractéristiques communes. Les caractéristiques d’un objet permettent de spécifier son état et son comportement:

État d’un objet : Ce sont les attributs et les terminaisons d’associations, tous deux réunis sous le terme de propriétés, qui décrivent l’état d’un objet. Les attributs sont utilisés pour des valeurs de données pures, dépourvues d’identité, telles que les nombres et les chaînes de caractères.

Comportement d’un objet :
Les opérations ou les méthodes décrivent les éléments individuels d’un comportement que l’on peut invoquer. Ce sont des fonctions qui peuvent prendre des valeurs en entrée et modifier les attributs ou produire des résultats.

Les attributs, les terminaisons d’association et les méthodes constituent donc les caractéristiques d’une classe (et de ses instances).


Q4: Comment représenter graphiquement une classe?





Une classe est un classeur. Elle est représentée par un rectangle divisé en trois à cinq compartiments:

Représentation graphique d'une classe



Q5: Quelle est la syntaxe de base de la déclaration du nom d'une classe? Expliquez.
– Méta-langage des syntaxes –
[ ] :ce qui est à l’intérieur est optionnel ;
< > :ce qui est à l’intérieur est plus ou moins libre ; par exemple, la syntaxe de déclaration d’une variable comme compteur : int est <nom_variable> : <type> ;
’ ’ :les cotes sont utiles quand on veut utiliser un méta-caractère comme un caractère ; par exemple, pour désigner un crochet ([) il faut écrire ’[’ car [ est un méta-caractère ayant une signification spéciale ;
... :permet de désigner une suite de séquence de longueur non définie.

Explications:

Q5.1: Qu'est ce q'un paquetage?

Un paquetage est un regroupement d’éléments de modèle et de diagrammes. Il permet ainsi d’organiser des éléments de modélisation en groupes. Il peut contenir tout type d’élément de modèle : des classes, des cas d’utilisation, des interfaces, des diagrammes, … et même des paquetages imbriqués (décomposition hiérarchique).

la déclaration du nom d'une classe défini "le chemin d’accès" à une classe en spécifiant les paquetage dont cette classe est contenu.

Q5.2: Que signifie le mot clé "abstract" dans ce contexte?

Lorsque'on ajoute le mot-clef abstract à la déclaration du nom de cette classe; cela signifie que la classe en question est une classe abstraite.

Une classe est dite abstraite lorsqu’elle définit au moins une méthode abstraite ou lorsqu’une classe parent contient une méthode abstraite non encore réalisée.

Une méthode est dite abstraite lorsqu’on connaît son entête mais pas la manière dont elle peut être réalisée.

Q5.3: [QCM] le champs <auteur> et <date> sont respectivement utilisés pour :
          a. Indiquer le nom de l'auteur de la modélisation et la date de création.
          b. Indiquer le nom du concepteur et la date de mise à jour.
          c. Indiquer le nom de l'auteur de la modélisation et la date de la dernière mise à jour.

le choix correcte est c:  le champs <auteur> et <date> sont utilisés pour indiquer le nom de l'auteur de la classe et la date de la dernière mise à jour.


Q6: Quand une classe est dite interface? 

Une interface est une classe abstraite pure qui ne comporte que des méthodes abstraites.

Graphiquement, on ajoute un stéréotype <<interface>> devant le nom de la classe.



Q7: Qu'est ce qu'une classe active? 

Une classe est passive par défaut, elle sauvegarde les données et offre des services aux autres. Une classe active initie et contrôle le flux d’activités.

Graphiquement, une classe active est représentée comme une classe standard dont les lignes verticales du cadre, sur les côtés droit et gauche, sont doublées.



      II.2. attribut:

Q8: Quelle est la syntaxe de base de la déclaration d'attribut d'une classe? Expliquez.


Explication:

Q8.1: Donnez la définition de la notion de visibilité et précisez les différents niveaux de visibilité prédéfinis.

La visibilité déclare la possibilité pour un élément de modélisation de référencer un élément qui se trouve dans un espace de noms différents de celui de l’élément qui établit la référence.Il existe quatre visibilités prédéfinies:


Q8.2: Quel mécanisme en UML permet de définir des niveaux de visibilité?

C’est l'encapsulation qui permet de définir des niveaux de visibilité des éléments d’un conteneur.

L’encapsulation est un mécanisme consistant à rassembler les données et les méthodes au sein d’une structure en cachant l’implémentation de l’objet, c’est-à-dire en empêchant l’accès aux données par un autre moyen que les services proposés. Ces services accessibles (offerts) aux utilisateurs de l’objet définissent ce que l’on appel l’interface de l’objet (sa vue externe).

Q8.3: Qu'est ce qu'un attribut dérivé? Expliquez par un exemple.

Les attributs dérivés peuvent être calculés à partir d’autres attributs et de formules de calcul.

Les attributs dérivés sont symbolisés par l’ajout d’un « / » devant leur nom.

Explication:

Q8.3.1:Une personne est caractérisée par son nom, son prénom, son sexe et son âge. Donnez une représentation UML de la classe Personne
.

L'attribut âge est un attribut qui change de valeur au fil du temps pour un utilisateur précis, donc cet attribut ne peut être stocké comme un attribut normal, il doit donc être calculé à partir de la date de naissance.

l'attribut âge est un attribut dérivé qui est calculé à partir d'autre attribut (dateNaissance) et d'une formule de calcul ( date actuelle - date de naissance ).

Q8.4: Qu'est ce qu'un attribut de classe? Expliquez par un exemple.

Un attribut de classe (static en Java ou en C++) est un attribut de la classe qui garde une valeur unique et partagée par toutes les instances de la classe. Les instances ont accès à cet attribut mais n’en possèdent pas une copie. Un attribut de classe n’est donc pas une propriété d’une instance mais une propriété de la classe et l’accès à cet attribut ne nécessite pas l’existence d’une instance.

Graphiquement, un attribut de classe est souligné.

Q8.4.1: En plus des informations fournies précédemment, Une personne a un salaire qui est représenté par un nombre réel. Pour calculer les charges globales, on applique un coefficient fixe de 20% sur les salaires.
Enrichissez la représentation précédente pour prendre en compte ces nouveaux éléments.



Q8.5: Quelles sont les valeurs possibles pour un type d'attribut? Est-ce qu'un attribut peut avoir comme type une classe abstraite?

Le type d'un attribut (<type>) peut être un nom de classe, un nom d’interface ou un type de donné prédéfini (Integer, String, Float...).

Une classe abstraite ne peut être instanciée.

Q8.6: Donnez des exemples de multiplicité.
  • exactement un : 1 ou 1..1
  • plusieurs : * ou 0..*
  • au moins un : 1..*
  • de un à six : 1..6

      II.3. méthode:

Q9: Quelle est la syntaxe de base de la déclaration de méthode d'une classe? Expliquez.


 Explication:

Q9.1: Quel est la syntaxe de base de la déclaration de paramètre d'une méthode? Expliquez.


Q9.2: Quelles sont les valeurs que peut prendre le champs <direction>?



Q10: Qu'est ce qu'une méthode de classe 

Une méthode de classe ne peut manipuler que des attributs de classe et ses propres paramètres, elle est soulignée graphiquement.Cette méthode n’as pas accès aux attributs de la classes.


Q11: Dans une classe, une opération peut-elle apparaître plusieurs fois? si oui, cela est valable sous quelle condition? et que peut on dire de cette opération?

Dans une classe, une opération (même nom et même types de paramètres) doit être unique. Quand le nom d’une opération apparaît plusieurs fois avec des paramètres différents, on dit que l’opération est surchargée.

En revanche, il est impossible que deux opérations ne se distinguent que par leur valeur retournée.
 Résumé des syntaxes:


Exercice d'application:

Construction de la classe Personne Une personne est caractérisée par son nom, son prénom, son sexe et son âge. Les objets de classe Personne doivent pouvoir calculer leurs revenus et leurs charges. Les attributs de la classe sont privés; le nom, le prénom ainsi que l'âge de la personne doivent être accessibles par des opérations publiques.

 1. Donnez une représentation UML de la classe Personne.

 2. En plus des informations fournies précédemment,deux types de revenus sont envisagés: d'une part le salaire et d'autre part toutes les autres sources de revenus. les deux revenus sont représentés par des nombres réels. Pour calculer les charges globales, on applique un coefficient fixe de 20% sur les salaires et de 15% sur les autres revenus.
 Enrichissez la représentation précédente pour prendre en compte ces nouveaux éléments.

 3.Un objet de la classe Personne peut être créé à partir du nom et de la date de naissance. il est possible de changer le prénom d'une personne. par ailleurs, le calcul des charges ne se fait pas de la même manière lorsque la personne décède.
 Enrichissez encore la représentation précédente pour prendre en compte ces nouveaux éléments.

                                                                                                                           Corrigé >> 
                                                                                                                       Liste des exercices corrigés >>

III. Les relations entre classes:

Q12: Quels sont les différents types de relation qui peuvent exister entre deux classes?

Les relations entre classes sont de 3 types :
  1. Les relations d’association
  2. Les relations de généralisation/spécialisation
  3. Les relations de dépendances

      III.1. Association:

Q13: Définissez la notion d'association?

Une association est une relation entre deux classes (association binaire) ou plus (association n-aire), qui décrit les connexions structurelles entre leurs instances.
Deux façons de modéliser une association :

1/ Dans cette version, l’association apparaît clairement et constitue une entité distincte :

2/ Dans ce cas l’association se manifeste par la présence de deux attributs dans chacune des classes en relation.


Q14: Déterminez les éléments constitutifs d'une association. Expliquez sur un exemple.

Les terminaisons d'association ou les rôles: spécifient la fonction d'une classe pour une association donnée. Cette terminaison d'association a une visibilité, un nom, une multiplicité et une navigabilité.


Q15: Comment interpréter les multiplicités d’une association binaire? Expliquez par un exemple.


Une personne travaille pour une et une seule entreprise.
Une entreprise emploie une ou plusieurs personnes.


Q16: Comment interpréter les multiplicités d’une association n-aire? Expliquez par un exemple.

Dans une association n-aire, la multiplicité apparaissant sur le lien de chaque classe s’applique sur une instance de chacune des classes, à l’exclusion de la classe-association et de la classe considérée. Par exemple, si on prend une association ternaire entre les classes (A, B, C), la multiplicité de la terminaison C indique le nombre d’objets C qui peuvent apparaître dans l’association avec une paire particulière d’objets A et B.

~>Pour plusieurs instances de la classe C, il existe une paire particulière d’objets A et B.
~>Pour une et une seule instance de la classe B, il existe une paire particulière d’objets A et C.
~>Pour 0 à 3 instances de la classe A, il existe une paire particulière d’objets B et C.


Q17: Définissez la qualification et précisez son utilité par un exemple.

Qualification : permet de sélectionner un sous-ensemble d'objets, parmi l'ensemble des objets qui participent à une association.
La restriction de l'association est définie par une clé, qui permet de sélectionner les objets ciblé.


  • Le premier diagramme ne représente pas le fait qu'un compte peut appartenir à 0 à 2 personnes, ce diagramme peut être complété par un diagramme d'objet qui modélise ce cas particulier, une autre alternative consiste à utiliser les qualifications comme dans la deuxième figure.
  • Un compte dans une banque appartient à au plus deux personnes. Autrement dit, une instance du couple {Banque , compte} est en association avec zéro à deux instances de la classe Personne.
  • Mais une personne peut posséder plusieurs comptes dans plusieurs banques. C’est-à-dire qu’une instance de la classe Personne peut être associée à plusieurs (zéro compris) instances du couple {Banque , compte}.
  • Bien entendu, et dans tous les cas, un instance du couple {Personne , compte} est en association avec une instance unique de la classe Banque.

Q18: Définissez la notion de classe-association.

Parfois, une association doit posséder des propriétés. Par exemple, l’association Emploie entre une société et une personne possède comme propriétés le salaire et la date d’embauche. En effet, ces deux propriétés n’appartiennent ni à la société, qui peut employer plusieurs personnes, ni aux personnes, qui peuvent avoir plusieurs emplois. Il s’agit donc bien de propriétés de l’association Emploie. Les associations ne pouvant posséder de propriété, il faut introduire un nouveau concept pour modéliser cette situation : celui de classe-association.

Une classe-association est caractérisée par un trait discontinu entre la classe et l’association qu’elle représente.


Q19: Quels mécanismes offre UML pour représenter les relations d'inclusion d'un élément dans un ensemble?

Lorsque l’on souhaite modéliser une relation tout/partie où une classe constitue un élément plus grand (tout) composé d’éléments plus petit (partie), il faut utiliser une agrégation. Graphiquement représenté par un losange vide.

Une agrégation est une association qui représente une relation d’inclusion structurelle ou comportementale d’un élément dans un ensemble.

La composition, également appelée agrégation composite, décrit une contenance structurelle entre instances. Ainsi, la destruction de l’objet composite implique la destruction de ses composants. Graphiquement représenté par un losange plein.

La relation entre l'entreprise et les camions est une agrégation, la destruction de la classe entreprise n'implique pas la destruction des camions.
La relation entre les moteurs et les camions est une composition, la destruction de la classe camion implique  la destruction des moteurs.


Q20: Donnez deux autres exemples bien commentés.






      III.2. Généralisation:

Q21: Définissez la notion de généralisation.


La généralisation décrit une relation entre une classe générale (classe de base ou classe parent) et une classe spécialisée (sous-classe). La classe spécialisée est intégralement cohérente avec la classe de base, mais comporte des informations supplémentaires (attributs, opérations, associations). Un objet de la classe spécialisée peut être utilisé partout où un objet de la classe de base est autorisé.

Le symbole utilisé pour la relation d’héritage ou de généralisation est une flèche avec un trait plein dont la pointe est un triangle fermé désignant le cas le plus général.



Q22: Précisez les principaux propriétés de l'héritage.

Les propriétés principales de l’héritage sont :
  • La classe enfant possède toutes les caractéristiques des ses classes parents, mais elle ne peut accéder aux caractéristiques privées de cette dernière.
  • Une classe enfant peut redéfinir (même signature) une ou plusieurs méthodes de la classe parent. Sauf indication contraire, un objet utilise les opérations les plus spécialisées dans la hiérarchie des classes.
  • Toutes les associations de la classe parent s’appliquent aux classes dérivées.
  • Une instance d’une classe peut être utilisée partout où une instance de sa classe parent est attendue. Par exemple, en se basant sur le diagramme de la figure ci-dessous, toute opération acceptant un objet d’une classe Animal doit accepter un objet de la classe Chat.
  • Une classe peut avoir plusieurs parents, on parle alors d’héritage multiple. Le langage C++ est un des langages objet permettant son implémentation effective, le langage Java ne le permet pas.


      III.3. Dépendance:

Q23: Définissez la notion de dépendance.

Une dépendance est une relation unidirectionnelle exprimant une dépendance sémantique entre des éléments du modèle. Elle est représentée par un trait discontinu orienté. Elle indique que la modification de la cible peut impliquer une modification de la source. La dépendance est souvent stéréotypée pour mieux expliciter le lien sémantique entre les éléments du modèle.

On utilise souvent une dépendance quand une classe en utilise une autre comme argument dans la signature d’une opération. 



      III.4. Interface:

Q24: Comment peut-on représenté le fait qu'une classe réalise une interface?

Une interface doit être réalisée par au moins une classe et peut l’être par plusieurs. Graphiquement, cela est représenté par un trait discontinu terminé par une flèche triangulaire et le stéréotype « realize ». Une classe peut très bien réaliser plusieurs interfaces. Une classe (classe cliente de l’interface) peut dépendre d’une interface (interface requise). On représente cela par une relation de dépendance et le stéréotype« use ». Attention aux problèmes de conflits si une classe dépend d’une interface réalisée par plusieurs autres classes.

Exercices d'application:
Pour chaque exemple ci-dessous, indiquez si la relation présentée est une généralisation, une agrégation ou une association :
1. Un pays a une capitale
2. Une transaction boursière est un achat ou une vente
3. Les fichiers contiennent des enregistrements
4. Une personne utilise un langage de programmation dans un projet
5. Les modems et les claviers sont des périphériques d’entrées/sorties

                                                                                                                           Corrigé >> 
                                                                                                                       Liste des exercices corrigés >>
       III.5. Contrainte sur une association:

Q25: Exprimez l'utilité des contraintes dans un contexte UML et précisez comment sont-elles exprimées. Illustrez par des exemples.  
  • Les contraintes sont des expressions qui précisent le rôle ou la portée d'un élément de modélisation (elles permettent d'étendre ou préciser sa sémantique).
     
  • Sur une association, elles peuvent par exemple restreindre le nombre d'instances visées (ce sont alors des "expressions de navigation").
     
  • Les contraintes peuvent s'exprimer en langage naturel. Graphiquement, il s'agit d'un texte encadré d'accolades.
     





                                                                                      
_____________________________________________________________________________________________________________________________________
                                                                                                                                                    Sommaire UML                                                                                                                                 Suivant >>
                                                                                                                                                                                                                                                                                                                2-Diagramme d'objets
_____________________________________________________________________________________________________________________________________

1 commentaire: