# Diagramme de classe ```plantuml @startuml hide circle allowmixing skinparam classAttributeIconSize 0 skinparam classBackgroundColor #ffffb9 skinparam classBorderColor #800000 skinparam classArrowColor #800000 skinparam classFontColor #black skinparam classFontName Tahoma class Bateau { + string NomRomanise + int PremierChap + int PremierEp + string Description + string Caracteristique + Bateau(string nom, string nomRomanise, int premierChap, int premierEp,\n string description, string caracteristique, string image) + Bateau(string nom, string nomRomanise, Equipage affiliation, int premierChap,\n int premierEp, string description, string caracteristique, string image) } class Bestiaire { + string Origine + string Description + string Caracteristique + Bestiaire(string nom, string origine, string description,\n string caracteristiques, string image) } class Equipage { + string NomRomanise + string Region + int PremierChap + int PremierEp + bool Statut + string Description + Equipage(string nom, string nomRomanise, string region, int premierChap,\n int premierEp, bool statut, string description, string image) } class FruitDuDemon { + string NomRomanise + string Type + int PremierChap + int PremierEp + string Description + string Forces + string Faiblesses + FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp,\n string description, string forces, string faiblesses, string image) + FruitDuDemon(string nom, string nomRomanise, string type, int premierChap, int premierEp, string description,\n string forces, string faiblesses, string image, List utilisateur) } class Ile { + string NomRomanise + string Region + int PremierChap + int PremierEp + string Description + string Geographie + Ile(string nom, string nomRomanise, string region, int premierChap, \n int premierEp, string description, string geographie, string image) } class Personnage { + double Prime + string Epithete + int Age + double Taille + string Origine + string Biographie + string Citation + Personnage(string nom , double prime, string epithete, int age, dobule taille,\n string origine, string biographie,string citation, string image) } class ObjetOhara { + string Nom + string? Image ObjetOhara(string nom, string image) } class XML_Serializer { + XML_Serializer(string path) + void SetPersonnage(List listePerso) + void SetFDD(List listeFDD) + void SetBestiaire(List listeBest) + void SetEquipage(List listeEquip) + void SetIle(List listIle) + void SetBateau(List listeBateau) + IEnumerable GetBateaux() + IEnumerable GetBestiaires() + IEnumerable GetEquipages() + IEnumerable GetFruits() + IEnumerable GetIles() + IEnumerable GetPersonnages() } interface IDataManager { IEnumerable GetBateaux() IEnumerable GetBestiaires() IEnumerable GetEquipages() IEnumerable GetFruits() IEnumerable GetIles() IEnumerable GetPersonnages() void SetBateau(List listeBateaux); void SetBestiaire(List listeBest); void SetEquipage(List listeEquip); void SetFDD(List listeFDD); void SetIle(List listeIle); void SetPersonnage(List listePerso); } class Manager { + IDataManager DataManager + ObservableCollection Bateaux + ObservableCollection Personnages + ObservableCollection Fruits + ObservableCollection Iles + ObservableCollection Bestiaire + ObservableCollection Equipage + ObjetOhara? SelectedItem + Manager(IDataManager dataManager) + List GetPersonnages() + List GetFruits() + List GetEquipages() + List GetBateaux() + List GetBestiaires() + List GetIles() + List FiltrerFDD(string type) + List RecherObjetOhara(string text, List liste) + List GetFavoris() + void ModifierFavFDD(FruitDuDemon fdd, bool value) + void ModifierFavEquip(Equipage equip, bool value) + void ModifierFavBest(Bestiaire bestiaire, bool value) + void ModifierFavPerso(Personnage perso, bool value) + void ModifierFavIle(Ile ile, bool value) + void ModifierFavBateau(Bateau bateau, bool value) + void AjouterFDD(FruitDuDemon fruit) + void AjouterEquip(Equipage equip) + void AjouterBest(Bestiaire best) + void AjouterPerso(Personnage perso) + void AjouterIle(Ile ile) + void AjouterBataeu(Bateau bateau) + void SuppimerFDD(FruitDuDemon fruit) + void SuppimerEquip(Equipage Equipage) + void SuppimerBest(Bestiaire best) + void SuppimerPerso(Personnage perso) + void SuppimerIle(Ile ile) + void SuppimerBateau(Bateau bateau) } class StubManager { + StubPersonnage StubPersonnage + StubFruitDuDemon StubFruitDuDemon + StubEquipage StubEquipage + StubBateau StubBateau + StubBestiaire StubBestiaire + StubIle StubIle + StubManager() + IEnumerable GetPersonnages() + IEnumerable GetFruits() + IEnumerable GetEquipages() + IEnumerable GetBateaux() + IEnumerable GetBestiaires() + IEnumerable GetIles() + void SetBateau(List listeBateaux) + void SetBestiaire(List listeBest) + void SetEquipage(List listeEquip) + void SetFDD(List listeFDD) + void SetILe(List listeIle) + void SetPersonnage(List listePerso) } class StubBateau { + IEnumerable RecupererBateau() } class StubBestiaire { + IEnumerable RecupererBestiaire() } class StubEquipage { + IEnumerable RecupererEquipage() } class StubFruitDuDemon { + IEnumerable RecupererFruitDuDemon() } class StubIle { + IEnumerable RecupererIle() } class StubPersonnage { + IEnumerable RecupererPersonnage() } FruitDuDemon --> "+ Utilisateur" Personnage Personnage --> "+ Equipage" Equipage Personnage --> "+ Fruit" FruitDuDemon Bateau --> "+ Affiliation" Equipage Equipage --> "+ Capitaine" Personnage Equipage --> "+ Membre" Personnage Equipage --> "+ Allie" Equipage Ile --|> ObjetOhara FruitDuDemon --|> ObjetOhara Personnage --|> ObjetOhara Equipage --|> ObjetOhara Bateau --|> ObjetOhara Bestiaire --|> ObjetOhara StubManager --|> IDataManager XML_Serializer --|> IDataManager StubManager --> "+ StubIle" StubIle StubManager --> "+ StubFruitDuDemon" StubFruitDuDemon StubManager --> "+ StubPersonnage" StubPersonnage StubManager --> "+ StubEquipage" StubEquipage StubManager --> "+ StubBateau" StubBateau StubManager --> "+ StubBestiaire" StubBestiaire Manager --> "+ DataManager" IDataManager StubIle *--> "+ ile" Ile StubFruitDuDemon *--> "+ fdd" FruitDuDemon StubPersonnage *--> "+ perso" Personnage StubEquipage *--> "+ Lequipage" Equipage StubBateau *--> "+ bateau" Bateau StubBestiaire *--> "+ best" Bestiaire @enduml ``` # Description du diagramme de classe Ceci est le diagramme de classe de notre application Ohara se basant sur l'unviers de l'oeuvre. Il possède 7 classes : -Bateau -> Classe qui représente les différents bateaux avec leur nom, leur affiliation à un équipage (Implémentation de la classe Equipage), quand on les voit pour la première fois dans le manga et dans l'anime. -Bestiaire -> La classe Bestiaire représente toutes les races présents dans l'univers de One Piece avec leur nom, leur origine, une description ainsi que les caractéristiques de la race. -Equipage -> La classe Equipage représente les différents équipages de l'univers One Piece, c'est-à-dire les regroupements de pirates (personnages) qui se regroupent pour partir à l'aventure. On retrouve dans cette classe le nom de l'équipage, sa provenance (région), quand on le voit pour la première fois dans le manga et dans l'anime, son statut (est-ce que l'équipage est toujours actif ou non) ,une description de l'équipage ainsi qu'une liste des membres de l'équipage (Implémentation de la classe Personnage) et une liste des alliés de l'équipage (D'autre équipages) . -Fruit du démon -> La classe Fruit du démon regroupe tous les fruits présents dans l'oeuvre. Les fruits du démons sont des aliments qui, une fois ingéré par un personnage, confère à son utilisateur des pouvoirs spéciaux. Cependant une fois ingéré l'utilisateur perds sa faculté à nager. On retrouve dans cette classe son nom, le type de fruit (paramecia, logia, zoan), quand on le voit pour la première fois dans le manga et dans l'anime, une description du fruit en question, ses forces et ses faiblesses ainsi que son ou ses utilisateurs (Implémentation de la classe Personnage). -Ile -> La classe Ile regroupe toutes les îles de l'oeuvre One Piece. On y retrouve son nom, la région dans laquelle elle se situe, quand on la voit pour la première fois dans le manga et dans l'anime, une description de l'île et une description de la localisation de l'île (qu'est-ce qu'il se trouve à proximité par exemple). -Personnage -> La classe Personnage regroupe tous les personnages de l'oeuvre One Piece. On y retrouve le nom du personnage, la prime associé au personnage (chaque pirate ayant une prime pour sa capture car ils sont recherchés par l'Etat pour les différents crimes qu'ils ont pu commettre), l'âge du personnage, sa taille, son origine (région de naissance), une biographie associé au personnage pour pouvoir le présenter, et une citation associé au personnage qui le représente (exemple Luffy : "Le roi des pirates, ce sera moi !") ansi qu'un liste cotenant son ou ses équipages (Implémentation de la classe Equipage) et une liste de son ou ses Fruits du démon (Implémentation de FruitDuDemon). -ObjetOhara -> La classe ObjetOhara ne représente rien au sein de l'oeuvre One Piece. Elle sert seulement a regrouper le nom, l'image et l'attribut "EstFavori" dans une classe qui sont des éléments qui reviennent dans chaque classes du model, ce qui permet d'éviter la redondance. Nous avons regroupé le nom et l'image dans une classe "Objet Ohara" dont toutes les autres classes hérite pour éviter la redondance et donc supprimer un certain nombre de ligne et faciliter la démarche. Il possède aussi 6 stubs + le stub manager : -StubBateau -> Le StubBateau sert à implémenter des objets de la classe Bateau au sein de l'application. -StubBestiaire -> Le StubBestiaire sert à implémenter des objets de la classe Bestiaire au sein de l'application. -StubEquipage -> Le StubEquipage sert à implémenter des objets de la classe Equipage au sein de l'application. -StubFruitDuDemon -> Le StubFruitDuDemon sert à implémenter des objets de la classe FruitDuDemon au sein de l'application. -StubIle -> Le StubIle sert à implémenter des objets de la classe Ile au sein de l'application. -StubPersonnage -> Le StubPersonnage sert à implémenter des objets de la classe Personnage au sein de l'application. -StubManager -> Le StubManager sert à gérer les différents Stubs. Les Stubs sont reliés à chacunes des classes auxquelles ils correspondent (StubBateau à la classe Bateau, StubPersonnage à la classe Personnage, etc...). Ce sont des compositions car si les classes auxquelles ils sont reliés viennent à se faire détruire alors les stubs ne sont plus rien. Il regroupe aussi : - La classe Manager qui permet de faire le pont entre l'application et le model, en effet c'est cette classe qui permet de récupérer les données, de les stocker puis de les modifier si nécéssaire. On instancie cette classe au lancement de l'application, et c'est cette instance qui est utilisé dans le code behind de nos vues pour afficher les données, les modifiers, etc... En réseumé tout passe par le manager. - L'interface IDataManager qui sert justement d'interface pour la récupération des données, c'est à dire que grace à cette interface, que l'on utilise le XML_Serializer ou le StubManager pour récupérer les données, le code reste le même. - La classe XML_Serializer qui permet de sauvegarder nos données (Sérialization) sous formes de fichier .xml puis de les récupérer (Désérialization) lorsqu'on redémarre l'application par exemple. Ce diagramme de classe représente la structure de notre application. # Diagramme de classe en mettant en avant la partie persistance ```plantuml @startuml hide circle allowmixing skinparam classAttributeIconSize 0 skinparam classBackgroundColor #ffffb9 skinparam classBorderColor #800000 skinparam classArrowColor #800000 skinparam classFontColor #black skinparam classFontName Tahoma class XML_Serializer #LimeGreen { + XML_Serializer(string path) + void SetPersonnage(List listePerso) + void SetFDD(List listeFDD) + void SetBestiaire(List listeBest) + void SetEquipage(List listeEquip) + void SetIle(List listIle) + void SetBateau(List listeBateau) + IEnumerable GetBateaux() + IEnumerable GetBestiaires() + IEnumerable GetEquipages() + IEnumerable GetFruits() + IEnumerable GetIles() + IEnumerable GetPersonnages() } interface IDataManager #LimeGreen { IEnumerable GetBateaux() IEnumerable GetBestiaires() IEnumerable GetEquipages() IEnumerable GetFruits() IEnumerable GetIles() IEnumerable GetPersonnages() void SetBateau(List listeBateaux); void SetBestiaire(List listeBest); void SetEquipage(List listeEquip); void SetFDD(List listeFDD); void SetIle(List listeIle); void SetPersonnage(List listePerso); } class Manager #LimeGreen { + IDataManager DataManager + ObservableCollection Bateaux + ObservableCollection Personnages + ObservableCollection Fruits + ObservableCollection Iles + ObservableCollection Bestiaire + ObservableCollection Equipage + ObjetOhara? SelectedItem + Manager(IDataManager dataManager) + List GetPersonnages() + List GetFruits() + List GetEquipages() + List GetBateaux() + List GetBestiaires() + List GetIles() + List FiltrerFDD(string type) + List RecherObjetOhara(string text, List liste) + List GetFavoris() + void ModifierFavFDD(FruitDuDemon fdd, bool value) + void ModifierFavEquip(Equipage equip, bool value) + void ModifierFavBest(Bestiaire bestiaire, bool value) + void ModifierFavPerso(Personnage perso, bool value) + void ModifierFavIle(Ile ile, bool value) + void ModifierFavBateau(Bateau bateau, bool value) + void AjouterFDD(FruitDuDemon fruit) + void AjouterEquip(Equipage equip) + void AjouterBest(Bestiaire best) + void AjouterPerso(Personnage perso) + void AjouterIle(Ile ile) + void AjouterBataeu(Bateau bateau) + void SuppimerFDD(FruitDuDemon fruit) + void SuppimerEquip(Equipage Equipage) + void SuppimerBest(Bestiaire best) + void SuppimerPerso(Personnage perso) + void SuppimerIle(Ile ile) + void SuppimerBateau(Bateau bateau) } class StubManager #LimeGreen { + StubPersonnage StubPersonnage + StubFruitDuDemon StubFruitDuDemon + StubEquipage StubEquipage + StubBateau StubBateau + StubBestiaire StubBestiaire + StubIle StubIle + StubManager() + IEnumerable GetPersonnages() + IEnumerable GetFruits() + IEnumerable GetEquipages() + IEnumerable GetBateaux() + IEnumerable GetBestiaires() + IEnumerable GetIles() } StubManager --|> IDataManager XML_Serializer --|> IDataManager Manager --> "+ DataManager" IDataManager @enduml ``` # Description du diagramme de classe en mettant en avant la partie persistance Concernant la persistance de l'application, elle est gérée par la classe XML_Serializer, cette dernière est instancier en paramètre du constructeur de Manager au lancement de l'application. Elle comporte deux constructeurs un qui ne prend aucun paramètre sauvegardant les informations dans le dossier courrant de l'application et l'autre prenant en paramètre un chemin permettant de choisir où stocker les informations (Dans le cas de notre application les fichier son stocker dans le 'AppDataDirectory'). Au lancement de l'application le constructeur de la classe XML_Serializer est donc lancé et il va, si un fichiers .xml n'est pas présent ( il y a un fichier .xml par classe sauf la classe ObjetOhara), le créers à l'aide du StubManager et les méthodes SetPersonnage, SetBateau, etc...Sinon il ne fait rien car les fichiers sont déjà tous présent. Le manager va donc pouvoir ensuite utliser les différentes méthodes get du XML_Serializer pour récupérer les objets et les mettres dans ses collections (Fruits,Personnages,...). Enfin concernant la sauvegarde des informations, dès qu'un objet est modifié, créée ou supprimé à l'aide des méthodes du Manager, il va simplement rappeler la méthode Set de l'objet concerné ce qui est assez lourd mais fonctionnel # Diagramme de classes sur nos parties ajoutées # Description du diagramme de classes sur nos parties ajoutées # Diagramme de paquetage ![logo](img/diagramme_paquetage.png) # Description du diagramme de paquetage Le diagramme de paquetage regroupe nos 4 solutions, le Model, le TestProject, le TestUnitaire et Ohara(vue). A l'intérieur du Model nous avons regroupé tous les fichiersdans différents dossier pour pouvoir améliorer la visibilité de notre projet et pour ne pas se perdre dans les fichiers. On peut retrouver les dossier suivants : -Classes : Ici retrouve toutes les classes de notre application, -Stub : Ici on retrouve tout ce qui est lié au Stub de notre application, -Managers : Ici on retrouve le IDataManager et le Manager, -Serializer : Ici on retrouve tout ce qui est lié par rapport à la serialization. Pour continuer dans notre vue il y a le dossier Ressources qui regroupe les dossiers Styles et Images. Dans le dossier Image on retrouve toutes les images concernant l'application (images de personnages, logo, diagramme de paquetage, etc...). Dans le dossier Styles on retrouve les Styles de notre application. # Diagramme de paquetage avec persistance ![logo](img/diagramme_paquetage_persistance.png) # Description du diagramme de paquetage avec persistance # Diagramme de séquence ## Serialization ```plantuml @startuml actor Utilisateur participant Front participant Serializer participant Files collections Collections Utilisateur -> Front: Démarrage de l'application Front -> Serializer: Appel de la fonction de chargement Serializer -> Files: Récupération des données des fichiers Files --> Serializer: Retour des données des fichiers Serializer -> Collections: Chargement des données dans les collections Collections --> Serializer: Retour des données des stubs Serializer --> Front: Données utilisables par les vues @enduml ``` ## Description du diagramme de séquence de la Serialization Tout d'abord, l'utilisateur démarre l'application MAUI, ensuite le Front s'occupe d'appeler la fonction de chargement, puis le Serializer récupère les données dans les fichiers et charge les données dans des collections qui sont ensuite utilisables par les vues. ## ??? ## Description du diagramme de séquence de ??? # Diagramme d'architecture ![logo](img/diagramme_architecture.png) # Description du diagramme d'architecture