Séances 9 (nouvelle version) — TP : Qualité du modèle et patrons de conception
Évaluation de la qualité du modèle
- amélioration de la qualité du modèle de l'application, notamment, vérification de la cohérence entre les diagrammes du modèle ainsi qu'avec le code.
Nous ne vous demandons pas de reprendre la modélisation de votre solution pour par exemple améliorer la cohésion fonctionnelle (comme expliquée dans la section 2.3 des diapositives du cours). Nous nous limitons aux questions de cohérence.
Vérifiez la cohérence entre les diagrammes du modèle, et plus particulièrement entre le diagramme de classes et les diagrammes de séquence : par exemple, vérifiez que les messages utilisent des associations qui existent et qui sont navigables dans le sens traversé.
Vérifiez la cohérence entre les diagrammes du modèle et le code, et plus spécialement entre les diagrammes de classes et de séquence, et le code.
Patrons de conception
-
application du patron de conception
«
» ( ) à l'étude de cas,
Étudiez un exemple JAVA (avec la
bibliothèque Flow) du patron de conception
- dans le projet csc4102-exemples, dans le répertoire du code des exemples, dans le paquetage seance8.patrondeconception.publiersouscrire,
- après compilation du code, exécutez la classe Main,
- et parcourez l'exemple avec les classes Main, Consommateur, et Publication.
Le patron de conception
Pour insérer le patron de conception pour la notification des demandes de modération des messages postés dans les réseaux sociaux :
-
soit vous commencez par la modélisation :
-
modifiez le diagramme de cas d'utilisation pour la
notification du nouveau message posté : d'une part le
cas d'utilisation
(« ») notifie l'acteur modérateur, et d'autre part, un nouvel argument est ajouté au cas d'utilisation « ajouter un utilisateur » pour donner le consommateur de notifications à utiliser pour être notifié; -
modifiez le diagramme de classes pour insérer le patron de
conception
: un nouvel attribut pour le consommateur dans la classe Utilisateur, un attribut de type SubmissionPublisher dans la classe qui représente un réseau social pour envoyer les notifications, etc. ; -
modifiez les diagrammes de séquence des cas d'utilisation
(« ») et (« ») pour ajouter l'enregistrement du consommateur au SubmissionPublisher du réseau social ; -
modifiez le diagramme de séquence du cas d'utilisation
(« ») pour ajouter la notification vers les modérateurs et modératrices dans le cas où le posteur n'est pas un modérateur (n'hésitez pas à utiliser un ou des fragments ref lorsqu'un diagramme de séquence se complexifie un peu trop) ;
-
modifiez le diagramme de cas d'utilisation pour la
notification du nouveau message posté : d'une part le
cas d'utilisation
-
soit vous commencez par la programmation :
- dans la classe qui représente un réseau social, nous proposons d'ajouter un « producteur » (classe SubmissionPublisher) pour les notifications de nouveaux messages postés ;
- dans la classe Utilisateur, nous proposons d'ajouter un « consommateur » (votre classe de consommation) pour enregistrer le consommateur lorsque l'utilisateur est ajouté à un réseau social (appel de la méthode SubmissionPublisher::subscribe) ;
- concernant le type des « publications » envoyées, nous proposons, dans un premier temps, qu'elles contiennent des chaînes de caractères donnant les informations sur le message à modérer : par exemple, avec le nom du réseau social et le contenu du message posté avec son horodatage ;
-
lors du cas d'utilisation
(« »), lorsque le posteur est un modérateur, l'objet (de l'intérieur du système) représentant le réseau social concerné par le nouveau message posté utilise la méthode SubmissionPublisher::submit pour envoyer une notification de nouveau message posté dans le réseau social : un appel à SubmissionPublisher::submit donne lieu à terme à un appel à ConsommateurNotification::onNext dans tous les consommateurs précédemment enregistrés. Dans notre étude de cas, nous proposons que onNext affiche le contenu de la publication reçue. -
les « consommateurs » sont à l'extérieur du
logiciel. Par ailleurs, les notifications sont asynchrones,
c'est-à-dire que l'on ne maîtrise pas l'instant d'appel de
la méthode ConsommateurNotification::onNext.
Donc, dans les méthodes de test, après l'appel de la méthode
du cas d'utilisation
(« »), il faut attendre un peu (par exemple avec Thread.sleep(100)) pour laisser le temps à la machine virtuelle de faire apparaître dans la console les publications reçues affichées par onNext ; - de manière similaire, ajoutez ce qu'il faut pour que le cas d'utilisation « modérer un message » provoque une notification ;
- enfin, pour que le logiciel soit complet, gérez les différentes stratégies de notification expliquées dans le cahier des charges.
Continuation du développement de l'application
Vous devez compléter votre logiciel pour qu'il possède toutes les fonctionnalités présentées dans le cahier des charges (cf. la section « Complétude du logiciel » du cahier des charges). Hormis la notification avec le patron de conception Publier/Souscrire, tout le logiciel peut être développé : pour la partie notification, si vous n'avez pas inséré le patron de conception Publier/Souscrire, utilisez un affichage à la console pour indiquer qu'un acteur est notifié.
Nous conseillons de commencer l'étude de ces éléments une fois les
cas d'utilisation
Comme vous avez gagné en autonomie, nous vous laissons organiser votre travail en présentiel et en hors présentiel tout au long des dernières séances. Bien sûr, n'hésitez pas à discuter de vos tâches et de votre solution avec vos responsables de groupe. Lors des travaux à venir, des modifications peuvent impacter la modélisation existante : diagramme de cas d'utilisation, pré-/post-conditions, tables de décision des tests de validation, diagramme de classes, diagrammes de séquence, etc. Pour les nouveaux cas d'utilisation, nous vous laissons décider ce que vous modélisez, la seule obligation étant de fournir les nouveaux élements suivants :
|
Mise à disposition du travail effectué dans le dépôt Git de GitLab
Systématiquement, avant de terminer une séance de travail, que ce soit en salle TP ou chez vous, mettez à jour votre dépôt local (au cas où vous ayez travaillé en parallèle), validez et poussez votre travail :
-
git fetch # charger les modifications non
encore connues localement
git pull origin develop # mettre à jour votre branche develop
et si conflit et besoin d'une fusion, git mergetool --tool=meld -
git status # connaître l'état de votre
arborescence
selon les besoins, pour préparer la zone de transit pour la validation du prochain instantané, git add, git mv, git checkout --, etc.
git commit -m "je dis ce que contient le nouvel instantané" # valider les modifications de la zone de transit
git push origin develop# pousser pour mettre à disposition - connectez-vous à GitLab et vérifiez que votre travail a été poussé.
À LA FIN DU TP DE LA SÉANCE
Avant de quitter le TP, veuillez s'il vous plaît remplir dans la page Partage de votre groupe le tableau d'avancement de votre binôme-projet :
- page Partage du groupe de TP 1 pour le suivi ;
- page Partage du groupe de TP 2 pour le suivi ;
- page Partage du groupe de TP 3 pour le suivi ;
- page Partage du groupe de TP 4 pour le suivi ;
- page Partage du groupe de TP 5 pour le suivi ;
- page Partage du groupe de TP 6 pour le suivi.
C'est aussi le moment de parcourir la grille d'auto-évaluation de la séance.