Examen IBDI

					                                  Licence Informatique
 UE : Introduction à la Modélisation de Système en UML (LI342)
                     Mardi 18 Décembre 2007
Durée : 2 Heures
Notes de cours autorisées.
Toute réponse doit être justifiée.


Questions de cours (4 points)

Q1. Peut-on exprimer dans un diagramme de cas d’utilisation le fait qu’une fonctionnalité
s’exécute avant une autre ? Si oui, comment ? Sinon, pourquoi ?

Q2. Une classe UML A possède une opération op1(in a : integer, in b : string):bool dont le
code Java fait référence à un objet instance d’une classe UML B. A dépend-elle de B ?

Q3. Quels sont les moyens à votre disposition en UML pour spécifier les liens de cohérence
entre les différents niveaux d’abstraction d’un modèle UML ?

Q4. Considérons les règles de génération de code Java à partir d’UML et de reverse
engineering vues en cours. Si l’on génère le code Java du diagramme de classes UML ci-
dessous puis que l’on fait le reverse du code généré, le modèle UML obtenu est-il identique
au modèle initial ? Précisez votre réponse.


               a                     b
        A                                B
               1                     1




Exercice (16 points)

Le dispositif Vélib’ de la ville de Paris gère la location de vélos en libre-service. Les vélos
sont répartis dans des stations Vélib’ toutes connectées à un serveur central. Chaque station
comporte une borne et un ensemble de bornettes qui représentent les points d’attachement des
vélos.

Les usagers doivent s’abonner avant de pouvoir emprunter un vélo auprès d’une borne et de le
restituer à n’importe quelle autre borne. Dans le dispositif Vélib’, deux types d’abonnement
existent : courte durée (abonnement à la journée ou à la semaine) ou longue
durée (abonnement à l’année).

Le système informatique du dispositif Vélib’ est composé de deux systèmes : celui des
stations (nommé StationVélib), et celui du serveur (nommé CentralVélib).
Des étudiants de l’UPMC ayant suivi l’UE LI342 ont décidé de modéliser le système
StationVélib qui permet :

    de souscrire à un abonnement courte-durée (les demandes d’abonnement longue-durée
     ne peuvent se faire que par courrier). Une fois validé, l’abonnement est
     automatiquement transmis par la borne au serveur Vélib’.
    d’emprunter un vélo (il faut être abonné).
    de retirer directement à la bornette un vélo que l’on vient d’emprunter. Une fois que le
     vélo est retiré, un message est automatiquement transmis par la borne au serveur
     Vélib’ précisant que l’emprunt a été validé.
    de retourner un vélo emprunté dans une autre borne ou dans la même borne. Une fois
     que la restitution est validée, celle-ci est automatiquement transmise par la borne au
     serveur Vélib’.

De plus il est important de savoir qu’une bornette sans vélo est dite libre. Si un vélo y est
attaché et qu’elle n’a pas été choisie par un abonné, la bornette est verrouillée. Elle peut alors
être déverrouillée par la borne lorsqu’un abonné la choisie pour emprunter un vélo. Pour finir,
elle est libérée dès que l’abonné prend son vélo. Si l’abonné ne prend pas son vélo pendant
plus de 3 minutes, la borne est de nouveau verrouillée. En cas de problème électronique, la
borne peut devenir en panne. De temps en temps, le serveur CentralVélib lance un diagnostic
sur plusieurs de ses bornes. La borne doit alors vérifier l’état de toutes ses bornettes. Si plus
de 5 bornettes sont en panne, la borne répond au serveur qu’une opération de maintenance est
nécessaire. Les identifiants des bornettes concernées sont envoyées au serveur CentralVélib.

Questions




Figure 1. Diagramme de classes de l’application StationVelib.

Q1. Pour la réalisation de la première étape de la méthode LP6, l’équipe de développement a
proposé le diagramme de cas d’utilisation présenté dans la figure 1. Ce diagramme est-il
correct par rapport au cahier des charges ? (en terme d’acteurs, de cas d’utilisation et de leurs
liens).

Comme conception (étape 5 et 6 de la méthode), les développeurs ont proposé le diagramme
de classes conceptuel illustré dans la Figure 2. La classe ServeurVelibProxy assure toutes les
communications avec le serveur Central Vélib. La classe BorneVelib représente une borne. La
classe BornetteVélo représente une bornette.
Q2. Proposez un diagramme de séquence présentant l’emprunt d’un vélo par un abonné (cas
nominal sur un ensemble minimal de bornettes). Vous pourrez ajouter toute opération qui
n’apparaitrait pas dans le diagramme de la figure 2 et que vous jugerez nécessaire.

Q3. Précisez tous les paramètres et placez l’opération realiserDiagnosticLocal qui sera
appelée par l’instance de la classe ServeurVelibProxy lorsqu’elle recevra un message du
serveur demandant la réalisation d’un diagnostic (nous ne nous soucierons pas de la manière
dont cette instance recevra ce message). Précisez le code Java de cette opération.

Q4. Déplacez la classe ServeurVelibProxy dans un package GestionServeur et les autres
classes dans un package GestionStation. Vous ferez attention à respecter les règles de
conception vues en cours.




Figure 2. Diagramme de classes de StationVelib

Q5. Dans l’application actuelle, les différents états d’une bornette sont représentés sous la
forme d’un attribut pouvant prendre les valeurs (libre, verrouillé, déverrouillé, en panne) dans
la classe Bornette. On veut pouvoir ajouter de nouveaux états sans impacter la classe
Bornette. Proposez une solution utilisant le design pattern State fourni en annexe. Vous
prendrez soin de présenter le passage d’un état à un autre dans le code Java de vos opérations.

Q6. Identifiez une faute pouvant intervenir lors de l’emprunt d’un vélo par un abonné et
proposez un diagramme de séquence de test permettant mettre cette faute en évidence.
ANNEXE A : LE DESIGN PATTERN « State»


Objectif

Il permet à un objet d’altérer son comportement quand son état interne change.


Structure


                                                                                             State
                                                                 currentState
                                        Context
                                                                      1
                           +operation1()                                        +operation1(In contexte:Context)
                           +operation2()                                        +operation2(In contexte:Context)



              <<JavaCode>>
       currentState.operation1(this);
                                                              ConcreteS tateA                                ConcreteS tateB


                                                      +operation1(In contexte:Context)               +operation1(In contexte:Context)
                                                      +operation2(In contexte:Context)               +operation2(In contexte:Context)


                                                           <<JavaCode>>
                                        //Ceci est un exemple de changement d'état :
                                        // de ConcreteStateA versConcreteStateB

                                        contexte.setCurrentState(new ConcreteStateB());



Participants
   -      Context : Définit l’objet dont ont veut gérer l’état. L’attribut currentState définit l’état
          courant de l’objet. Cet attribut est lui-même un objet implémentant l’interface
          « State ».
   -      State : Définit une interface pour encapsuler le comportement correspondant à un état
          de l’objet de classe « Context ».
   -      ConcreteStateA, ConcreteStateB : Sous-classes de « State » définissant chacune un
          état concret ainsi que le comportement associé à cet état.

Fonctionnement

   -      « Context » délègue les invocations des opérations à l’objet « ConcreteState »
          représentant l’état courant, tout en lui fournissant sa référence.
   -      Le changement d’état d’un objet de classe « Context » est défini dans les opérations
          des sous-classes « ConcreteState ».

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:113
posted:5/22/2011
language:French
pages:4