17
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

Rapport Projet Java

Embed Size (px)

Citation preview

Page 1: Rapport Projet Java

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

Page 2: Rapport Projet Java

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 » :

Page 3: Rapport Projet Java

Diagramme de classe :

Voici notre digramme de classe qui contient les classes principales utilisés dans ce projet

(Graph, Vertex, Edge, ToGML, Dessiner).

Page 4: Rapport Projet Java
Page 5: Rapport Projet Java

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.

Page 6: Rapport Projet Java

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.

Page 7: Rapport Projet Java

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.

Page 8: Rapport Projet Java

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 :

Page 9: Rapport Projet Java

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

Page 10: Rapport Projet Java

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)

Page 11: Rapport Projet Java

Enregistrer (sauvegarde)

Et bien sur quitter (pour sortir de l’application)

Si on choisit Nouveau cette fenêtre apparait :

Page 12: Rapport Projet Java

Bien sur après la création de notre graphe on choisit le poids :

Ça donne ce graphe par exemple :

Page 13: Rapport Projet Java

On choisissant Ouvrir :

Enregistrer :

Pour la suppression d’un sommet ou d’un vertex :

Page 14: Rapport Projet Java

Ça donne ça :

Page 15: Rapport Projet Java