Licence 2, Semestre 3 2012 Projet Programmation Orientée Objet BRIDOUX Florian KEITH Bruno DUPRE-PAWLAK Sandra 1
Sommaire I) Présentation du Projet. 1. Projet demandé 2. Projet réalisé II) Diagrammes de classe. III) Répartition. IV) Choix techniques. V) Test. VI) Conclusion. 2
I) Présentation du Projet. 1. Projet demandé Le projet concerne l'analyse d'un réseau social. Pour cela, on doit simuler un graphe par rapport aux données des utilisateurs, ce qu'ils aiment ou suivent. On distingue les Utilisateurs, qui peuvent suivre et être suivis, et les Pages, qui peuvent être aimées et sont administrées par un ou plusieurs Utilisateurs. Mais ces deux catégories ont des points en commun, on peut donc les représentés sous forme de Sommet. Les différents Sommets sont reliés par des Arcs, qui représentent donc le fait de «suivre» ou d' «aimer». Enfin, le graphe doit être affiché sous la forme d'une phrase du type : 2. Projet réalisé Le projet réalisé est divisé en plusieurs classes. La classe Sommet est une classe abstraite qui implémente la classe Serializable défini par Java. Cette classe défini de manière générale les Utilisateurs et les Pages. Ces deux objets possèdent donc un nom, une liste de Voisins Sortants et un rang. Les voisins sortants sont des Utilisateurs qui suivent ou aiment le Sommet en question. Pour les Utilisateurs, cette liste représentera les autres Utilisateurs qui le suivent, et pour les Pages, elle représentera les Utilisateurs qui l'aiment. Cette classe définie des méthodes simples tel que l'ajout, la suppression, le nombre de Voisins Sortants ainsi que la comparaison par ordre alphabétique et la comparaison par nombre de voisins sortants de deux sommets. La classe Utilisateur hérite de la classe Sommet. On lui ajoute un prénom et un âge, en plus de son nom et de sa liste de voisins sortants. Cette classe possède une méthode equals. La classe Page hérite de la classe Sommet. Elle possède donc en plus une liste d'utilisateurs qui représente les Administrateurs de cette Page. Une méthode d'ajout d Administrateur et une méthode equals ont été définies. La classe Graphe possède une liste de Sommet, ainsi que le nombre d'utilisateurs et le nombre de Pages que contient cette liste, et qui apparaîtront donc dans le Graphe. Une méthode d'ajout de Sommet dans la liste est agrémentée par deux autres méthodes : une pour l'ajout d'utilisateurs dans la liste, une autre pour l'ajout de Page. Ces méthodes permettent donc de tenir les compteur d'utilisateurs et de Pages à jour. Cette classe possède aussi des accesseurs particuliers. On y trouve un «getter» simple, un trié par nom, un autre trié par nombre de voisins sortants. Deux méthodes servent à supprimer un Sommet de la liste de sommets du Graphe dont l'une renvoie un booléen. Il est possible aussi de créer un arc, donc un lien, entre deux sommets. On peut aussi retrouver un sommet, et donner les informations le concernant. Certaines données peuvent être calculer comme l'âge moyen des Utilisateurs. Évidemment, on peut lire et enregistrer un fichier de Graphe grâce à cette classe. Ces classes possèdent des accesseurs, des mutateurs ainsi qu'une tostring. La classe Arc contient un point d'origine (String) une liste de nom de Sommet. Cette classe représente le lien entre le point d'origine et plusieurs sommets. Elle possèdent un constructeur et 3
une méthode tostring. Le classe nbvoisinsortantcomparator implémente la classe Comparator de Java. L'unique méthode de cette classe utilise la méthode nbvoisinsortantcompar de la classe Sommet et permet de comparer deux sommets via leur nombre de voisins sortants. La classe nomsommetcomparator implémente aussi la classe Comparator de Java. Sa méthode utilise la méthode compareralpha de la classe Sommet et permet donc de comparer deux sommets via la place de leur nom dans l'ordre alphabétique. La classe AucunUtilisateurException hérite de la classe Exception. Elle est utilisé dans la méthode de calcul de l'âge moyen des Utilisateurs dans la classe Graphe. Elle renvoie un message d'erreur en cas d'absence d'utilisateur. La classe FichierGrapheIncorrectException hérite de la classe Exception. Elle est utilisé dans la lecture du fichier dans la classe Graphe et renvoie un message d'erreur en cas de mauvaise lecture du fichier. Deux interfaces ont été créées pour le projet. La classe Interface Terminal possède une méthode displayoptions qui permet de lister les différentes options données à l'utilisateur du programme. La méthode visualiser donne les informations d'un Graphe selon le choix pris par l'utilisateur du programme. La méthode programme propose les choix en appelant displayoptions puis, grâce à un switch, exécute l'appel de l'utilisateur du programme. Enfin, la méthode demandeentier permet de vérifier que l'utilisateur a bien entrer un chiffre. Le package InterfaceGraphique possède plusieurs classes. La classe abstraite Fenetre hérite de la classe JFrame et implémente la classe ActionListener. ** La classe FenetreChargement hérite de la classe Fenetre. Cette classe sert à charger un Graphe. Elle possède deux attributs de type JButton pour charger un graphe ou annuler. Son constructeur appelle la méthode disable de la classe Test, ensuite, elle charge le graphe choisi et permet de le visualiser. Cette classe possède aussi une méthode actionperformed. ** La classe FenetreAjoutArc hérite de la classe Fenetre. Elle possède une méthode actionperformed. ** La classe FenetreAjoutPage hérite de la classe Fenetre. Elle possède une méthode actionperformed. ** La classe FenetreAjoutUser hérite de la classe Fenetre. Elle possède une méthode actionperformed. ** La classe FenetreSauvegarde hérite de la classe Fenetre. Elle possède une méthode actionperformed. ** La classe FenetreSuppr hérite de la classe Fenetre. Elle possède une méthode actionperformed. ** La classe FenetreVisualisation hérite de la classe Fenetre. Elle possède une méthode 4
actionperformed. ** La classe Menu hérite de la classe Fenetre. Elle a neuf attributs de type JButton qui permettent d'effectuer les différents choix de l'utilisateur (Créer/ Charger/ Sauvegarder/ Ajouter un utilisateur/ Ajouter une page / Ajouter un arc/ Supprimer un Sommet/ Voir/ Quitter) ainsi qu'un attribut de type JLabel. Le constructeur place les boutons et les définis. Une méthode actionperformed actionne le choix voulu par l'utilisateur du programme. La classe Test possède deux attributs : un Graphe et un Menu. ** La classe FenetreCreation hérite de la classe Fenetre. Elle possède deux attributs de type JButton. Son constructeur créait les deux boutons et sa méthode actionperformed permet de créer un graphe ou d'annuler l'action selon le choix de l'utilisateur du programme. 5
III) Répartition Une réunion de départ le 21 novembre 2012 nous a permis de mettre en place le projet, les attentes et compréhensions de chacun. Ainsi, le plan du projet et la répartition du travail a été décidé à ce moment. L'utilisation de SVN sous Eclipse est une façon efficace de travail en groupe. Celui-ci nous permet donc de partager nos travaux et nos avancées rapidement. Grâce à ce système, nous n'avons pas eu besoin de nous regrouper sur le sujet souvent. Une deuxième réunion eu lieu le 20 décembre 2012 pour se concerter sur les points finis et ceux restants. 21/11/12 20/12/12 KEITH Bruno Interface Fin de l'interface, création du Jeu de Test BRIDOUX Florian DUPRE Sandra Classes Graphe, Arc, AucunUtilisateurException, FichierGrapheIncorrectExcepti on, nomsommetcomparator, nbvoisinssortantscomparator Classes Sommet, Utilisateur et Page Diagrammes de Classe sous ArgoUML Rapport IV) Choix Techniques Le premier choix fut d'utiliser l'arraylist comme Collection. Ce type de liste nous permet de gérer efficacement les voisins sortants d'un Sommet, ainsi que les administrateurs d'une Page. La liste de Voisins Sortants d'un Sommet est une liste de Sommet. Un voisin sortant est donc représenté par un Sommet, car le voisin sortant d'un Utilisateur est un utilisateur qui le suit. Les Arcs sont seulement représentés par un point d'origine (un Sommet d'origine) et une liste de Sommet qui sont lié par ce point d'origine. VI) Conclusion