Upload
yacine-redy-souirdi
View
359
Download
12
Embed Size (px)
Citation preview
Nous remercions notre professeur du module : ‘Programmation Orienté Objet’ M.abdelazziz
Hibaoui, qui grâce à lui nous avons acquis de nouvelles compétences en programmation objet,
développement Java ; compétences indispensables lors de la conception de ce projet.
Dans le cadre de notre projet de fin de module : « Programmation Orienté Objet» il nous a
fallu développer une application permettant de faire « la simulation de l'exécution d'un
algorithme de construction d'un arbre couvrant ». À cette fin, Nous avons tout d’abord
réalisé une application permettant de représenter un graphe à l’aide d’outils graphiques.
Par la suite, nous avons recherchés plusieurs algorithmes sur internet afin de déterminer quel
est l’algorithme le plus apte à répondre au problème de la construction un arbre dans un
graphe.
Dans un premier temps, nous présenterons l’analyse du projet, les objectifs et le cahier des
charges initial.
Ensuite nous définirons comment nous avons organisés notre travail, et enfin nous présentons
l’algorithme que nous avons choisit
1. Etude et Analyse du Projet :
1.1) Objectifs initiaux :
L’objectif initial de notre projet consiste à concevoir une application permettant de construire un arbre couvrant dans un graphe en se basant sur un algorithme quelconque.
Le point capital dans la réalisation de ce projet concerne la partie algorithmique. Notre application devra implémenter un algorithme capable de répondre à la problématique, en optimisant au maximum ses performances (nombres de messages envoyés, la durée de construction…).
Enfin, il sera nécessaire de concevoir une application permettant de créer un graphe, en plus elle devra proposer une interface simple et intuitive, ainsi qu’une aide interactive pour guider les utilisateurs novices.
1.2) Analyse UML :
L’analyse UML nous a permis de déterminer les différents modules à concevoir et les
différentes fonctionnalités à mettre en place. De plus, définir à l’avance le comportement de
l’application lors de l’utilisation de telle ou telle fonctionnalité permet une programmation
mieux organisée.
Diagramme de cas d’utilisation :
Représentation du système « Editeur de graphe » :
Diagramme de classe :
Voici notre digramme de classe qui contient les classes principales utilisés dans ce projet
(Graph, Vertex, Edge, ToGML, Dessiner).
Digramme d’états/Transition :
1.3) Approche ergonomique :
Au cours de l’étude du projet, nous avons pensé que définir à l’avance les contraintes
concernant l’ergonomie de l’application permettrait de mieux orienter notre programmation.
En effet il nous fallait développer une interface graphique à la fois complète et la plus
intuitive possible pour l’utilisateur.
2. Organisation du projet :
2.1) Organisation du travail :
L’élaboration de notre projet s’est effectuée suivant le schéma suivant :
Nous avons dans un premier temps procédé à une réflexion sur la façon de créer
l’application, par exemple de quelle façon nous devions modéliser un graphe.
Nous nous sommes également documentés sur les algorithmes de construction d’un
arbre couvrant qui pourraient nous aider à répondre à la problématique.
Nous avons en parallèle procédé à l’analyse du sujet afin de concevoir les diagrammes
UML.
Enfin nous avons commencé la programmation de notre application en nous aidant des
différents concepts appris au concept appris au cours de notre formation concernant la
programmation objet en java.
Concernant la répartition des taches, nous avons bien évidemment essayé de nous
partager au mieux le travail. Cela s’est concrétisé tout d’abord par une séparation
intelligente des taches, que ce soit pendant la phase d’analyse que pendant la phase de
programmation, en faite la répartition était encore plus poussée : par exemple, un
binôme pouvaient travailler sur un algorithme pendant que les autres s’occupaient de
la programmation graphique et ainsi de suite .C’est de cette manière que nous avons
optimisé notre organisation, car chaque membre du groupe pouvait travailler sur un
module sans bloquer ses camarades.
En parallèle, il était important de nous concerter régulièrement afin de faire le point
sur le travail accompli, et ainsi d’assurer un maximum de cohésion.
Nous avons en outre emprunté quelques principes d’organisation à la méthode de
travail appelée « extrême programming ».
Une Communication informelle permanente entre membre de l’équipe.
La mise en place de tests unitaires, symbolisée par nos jeux d’essais,
qui ont pour objectif de vérifier la validité des algorithmes tout au long
du processus de développement.
Une appropriation collective du groupe : chaque développeur peut faire des
modifications dans toutes les portions du code, même celles qu’il n’a pas
écrites.
2.2) Choix des outils de travail :
Voici les différents logicielles ou sites internet que nous avons utilisé durant la réalisation de
ce projet.
Utilisation du langage de programmation objet Java, qui est un langage qui convient
parfaitement à l’élaboration du projet.
Afin de programmer cette application avec le langage Java , nous avons choisi
l’environnement de développement intégré Netbeans qui permet de créer des projets en
langage Java.
3. Présentation De l’algorithme étudié :
3.1) Algorithme De Kruskal :
Definition :L’algorithme de Kruskal est un algorithme de recherche d’arbre recouvrant de poids minimum(ARPM) ou arbre couvrant minimum(ACM) dans un graphe connexe non-orienté.
3.2) Présentation de l’Algorithme :
KRUSKAL (G,w)1 E := ø2 pour chaque sommet v de G3 faire CRÉER-ENSEMBLE (v)4 trier les arêtes de G par ordre croissant de poids w5 pour chaque arête (u,v) de G prise par ordre de poids croissant6 faire si ENSEMBLE-REPRÉSENTATIF (u) ≠ ENSEMBLE-REPRÉSENTATIF (v)7 alors ajouter l'arête (u,v) à l'ensemble E8 UNION (u,v)9 retourner E
w est une fonction qui associe à chaque arête du graphe G une valeur qui est son poids.
Les fonctions ENSEMBLE-REPRÉSENTATIF et UNION sont les deux opérations d'une
structureUnion-Find (qui, respectivement, renvoie un élément représentatif d'un ensemble et
fusionne deux ensembles).
La complexité de l'algorithme est Θ(A log S) avec A le nombre d'arêtes et S le nombre de
sommets du graphe G. On remarquera que lors du déroulement de l'algorithme, l'ACM n'est
pas nécessairement connexe, il ne le sera qu'à la fin.
3.3) Principe de l’algorithme de Kruskal :
L’algorithme de Kruskal fonctionne de la façon suivante :
1. On part d'un graphe vide G'
2. On dresse la liste des arcs de G, triés par poids croissant
3. On parcourt ensuite la liste triée :
si la liste ne contient plus d'élément, on a terminé et l'algorithme s'arrête
si les deux points de l'arc ont déjà été visités, on ignore l'arc et on examine les
arcs suivants
sinon, on ajoute l'arc à l'arbre en construction, on ajoute les points de l'arc à la
liste des points visités et on examine les arcs suivants .
3.4) Exemple Explicatif :
La stratégie de cet algorithme consiste à construire l’arbre en question comme suit : on part
d’une solution vide. On choisit, à chaque fois, une arête de G de poids minimum et qui ne crée
pas de cycle. Soit E l'ensemble des sommets de G. On utilisera un ensemble d'arêtes T qui
sera en sortie l'arbre couvrant minimal et un ensemble d'arêtes F qui représentera les arêtes
qui peuvent être choisies.
T = { };F = E ;tant que |T| < n - 1 fairetrouver une arête e de F de poids minimalF = F - esi T + e est acycliquealors T = T + efinsifin tant que
Exemple :
L’élaboration de ce projet, autant que le résultat final, est dans l’ensemble une réussite. La
problématique du sujet a été complètement résolue avec succès grâce à l’algorithme de
Kruskal. Cependant, certains objectifs n’ont pas pus être traités faute de temps.
Au cours de l’analyse et de la programmation nous avons régulièrement remis en question nos
travaux en nous demandant si les solutions trouvées été optimales, et si elles ne pourraient pas
être améliorées. Nous avons ainsi conçu une application répondant aux objectifs que nous
nous étions fixés, et respectant les concepts de programmation vus durant le cours de la P.O.O
Au final, ce projet fut un travail vraiment enrichissant, tant par l’expérience qu’il nous a
apporté concernant la conduite d’un projet, de la gestion du travail en groupe, que par les
compétences nouvelles qu’il nous a apporté en matière de programmation.
1)Webographie :
THEORIE DES GRAPHEShttp://pcaboche.developpez.com/article/prolog/algo-graphes/?page=page_3#L4.1
Présentation de l’algorithme de Kruskal http://www.techno-science.net/?onglet=glossaire&definition=6472http://fr.wikipedia.org/wiki/Algorithme_de_kruskal#Description_du_probl.C3.A8me
Programmation Java
http://raphaello.univ-fcomte.fr/Ig/Java2D/Java2D.htm
Information sur la classe Graphics2D permettant de dessiner en Java
http://java.sun.com/docs/books/tutorial/uiswing/index.html
Exemples d’utilisations des éléments graphiques Swing
http://java.developpez.com
Communauté de développeurs java
Générique :
http://www.wikipedia.com Encyclopédie collaborative en ligne 2) Capture d’écran :Voici quelques captures d’écran de l’application :
La Fenêtre d’accueil de notre interface :
On choisit par exemple le menu Fichier, qui ouvre un menu déroulant ceci nous donne la possibilité de
choisir entre : Nouveau (créer un nouveau graphe)
Ouvrir (importer un graphe en format GML)
Enregistrer (sauvegarde)
Et bien sur quitter (pour sortir de l’application)
Si on choisit Nouveau cette fenêtre apparait :
Bien sur après la création de notre graphe on choisit le poids :
Ça donne ce graphe par exemple :
On choisissant Ouvrir :
Enregistrer :
Pour la suppression d’un sommet ou d’un vertex :
Ça donne ça :