Spécification des composants

Objectif

Découpage de la solution en composants (ou sous-systèmes), affectation des responsabilités aux composants et spécification des interfaces fournies et requises par ces composants

Moyens

Utilisez des diagrammes d’interaction (séquence, communication) pour décrire l’échange de messages entre les composants pour en déduire leurs interfaces.

1. Vue globale des composants

Diagramme de composants décrivant la solution proposée
Figure 1. Diagramme de composants décrivant la solution proposée

2. Composant A

Un autre exemple
Figure 2. Un autre exemple

2.1. Responsabilités du Composant A

  • Serveur :

Quelques exemples
  • Créé tous les objets relatifs au jeu : les joueurs, les cartes, les merveilles et les initialise.

  • Gère les connections au serveur et les pseudos

  • Lorsque tous les joueurs sont prêts, lance la partie et distribue au client ce dont il a besoin : Merveille, cartes au tour 1

  • À chaque tour, il reçoit la liste suivante : Le paquet de cartes non jouées, la carte jouée/déposée sur la merveille/défossée, le nombre d’argent à ajouter au joueur

  • Une fois que tout le monde a envoyé son jeu, envoie à chaque client : ses nouvelles cartes, les cartes jouées depuis le début de la partie de son voisin de gauche et de droite

  • Gère les tours de la partie

  • Définit le joueur gagnant

2.2. Interfaces fournies

2.2.1. Interface A

Utilisez la notation UML pour spécifier la signature de chaque operation de l’interface.

  • La syntaxe de la notation UML est différente de celle de Java !

  • Les types de base sont différents aussi ! Par exemple, int, float, bool ne sont pas des types UML.

  • Si les paramètres sont multivalués (par ex. ensemble, séquence, etc.) utilisez les cardinalités: names : String [1..4]

  • List<>, Set<>, etc. ne sont pas des types UML.

Diagram
Si nécessaire, utilisez le langage OCL pour spécifier les pré et post-conditions des opérations.
Listing 1. Contraintes sur les operations
context A::operationA(a: String, b: Integer): Boolean
pre: a.size() > 3
post:
-- Pas de postconditions

2.2.2. Interface B

Diagram
Listing 2. Contraintes sur les operations
context B::operationA(a: String, b: Integer): Boolean
pre: a.size() > 3
post:
-- Pas de postconditions

3. Composant B

Description de ses responsabilités et de ses interfaces

3.1. Interface C

Diagram

4. Interactions

  • Utilisez les diagrammes d’interaction de la notation UML pour valider les interfaces des composants.

  • Basez-vous sur les cas d’utilisation (spécification des exigences) pour illustrer les interactions entre les différents composants

  • En UML, les interactions se passent au niveau des instances.

  • Rappel:

    • Niveau classes: Classes, opérations, types, etc.

    • Niveau instances: Objets, appels d’opération, valeurs, etc.

Connexion au serveur
Figure 3. Connexion au serveur
Déroulement de l’initialisation du tour 1
Figure 4. Déroulement de l’initialisation du tour 1
Déroulement d’un tour, on suppose les clients déjà initialisés et le tour 4
Figure 5. Déroulement d’un tour, on suppose les clients déjà initialisés et le tour 4
Rejoindre une partie
Figure 6. Rejoindre une partie