Conception détaillée
1. Travail à réaliser
- Objectif
-
Spécification détaillée des composants: leur structure (diagramme de classes de conception), ainsi que le comportement de chaque opération fournie par le composants. Le comportement peut-être décrit en utilisant les diagrammes d’activité, d’interaction, les machines d’état, ainsi que OCL.
- Moyens
-
Appliquez les concepts vus en cours: design patterns, principes GRASP, bonnes pratiques, etc.
2. Réponses aux exigences non-fonctionnelles
2.1. Concurrence
Chaque partie sera instanciée sur son propre thread ce qui évitera les problèmes de concurrence lors des parties.
Cependant, lors de la création et choix de lobby, de nombreux joueurs peuvent essayer de se connecter à la même partie au même moment.
Pour éviter les problèmes de concurrence possible à ce moment là, nous utiliserons des méthodes starvation-free
Cela permet d’éviter un blocage par mauvaise connexion et des comportements non souhaités dans les lobby.
2.2. Performance
Pour obtenir les meilleures performances possibles, nous implémenter des algorithmes performants utilisant des structures de données adaptées.
Les parties en elles même étant peu demandantes en termes de requêtes, dû au nombre limité d’actions possibles et de joueurs par partie, nous utiliserons l’outil wait/notify pour éviter une surutilisation des threads.
Cependant, il faut également mettre en place, en amont, un système filtrant les requêtes souhaitées pour ne pas réveiller un thread sans que ce soit nécessaire.
2.3. Interopérabilité
La mise en place d’Interfaces entre les composantes du logiciel permet de ne pas se soucier de leur implémentation. Ainsi, il est possible de changer rapidement de support pour le jeu en adaptant une composante du logiciel au support souhaité.
De même, les standardiser les formats de données par l’intermédiaire de classes abstraites et interfaces permet de garantir une plus grande compatibilité entre les composants.
2.4. Portabilité
L’aspect modulaire du projet, de par ses structures de données abstraites, permet de facilement adapter les implémentations à d’autres supports.
Cependant, pour éviter des transition difficiles entre les langages, nous utiliserons le moins possible les bibliothèques spécifiques à un langage.
2.5. Sécurité
2.5.1. Exigence de sécurité
Notre système doit être sécurisé, même si nous ne manipulons pas des données sensibles. Pour cela nous devons vérifier l’identité de l’utilisateur.
N’ayant pas à nous occuper de l’authentification de l’utilisateur nous admettons que le système s’occupant de cela est correct et lui-même sécurisé. Nous admettons également que, quelle que soit la plateforme utilisée (web, logiciel, application) le service d’authentification sera le même pour tous.
2.6. Maintenabilité
Par souci de maintenabilité, nous avons défini une structure modulaire se basant sur une définition abstraite des composants.
Notre code suivra également des règles communes de nomenclature et syntaxe tout en étant commenté et documenté.
Enfin à chaque procédure sera associé une suite de texte permettant de vérifier son bon fonctionnement au fil des différentes versions du projet.
2.7. Interface utilisateur
l’interface utilisateur doit être stable, efficace et cross plateforme. Nous avons donc choisi d’en faire une interface web. Cela permet l’utilisation de protocoles sécurisés et une stabilité de fonctionnement sur les divers supports des utilisateurs.
2.8. Interface logicielle
L’interaction avec le logiciel doit être simple, rapide et sécurisée. Notre interface logiciel utilise des données claires, structurées et documentées et fournit des méthodes pour les manipulées.
3. Patrons logiciels utilisés
3.1. Patron de conception "Facade"
Au vu des contraintes évoqués en amont, le projet sera implémenté selon le patron de conception facade. Chaque composant doit mettre à disposition une interface répondant aux critères communs. Les interactions entre les composants passent toutes par ces interfaces.
4. Choix techniques - Distribution des processus
Le système est réparti en trois processus principaux:
-
L’interface utilisateur
→ Sous forme de page web dont la gestion est laissée à un programme angular. Angular propose une interface interactive tout en se basant sur des langage commun tel que css et html, ce qui facilite son utilisation et sa maintenance. -
Application
→ C’est le programme principal. Il reçoit et distribut les informations. Il est développé en Java Spring Boot. Il crée et transmet les informations aux threads des parties. -
La base de données
→ Sa base sur la JPA pour proposer une base de données efficace et des interfaces simplifiant son utilisation.