Objectifs

  • Se familiariser avec les classes déjà fournies, en commençant par la lecture de chemins (déjà créés) depuis des fichiers.

Prérequis

  • Vous avez bien suivi les consignes de la première étape et avez donc un dépôt GIT fonctionnel et un projet sous Eclipse (ou un autre IDE).

Consignes

Carte

Diagramme de classes

  • Examinez les classes Graph, Node, Arc et Path qui servent de base à la construction d'un graphe et des chemins.
    Les méthodes marquées deprecated ne sont pas implémentées : ce sera à vous de les écrire.
  • Quelle est la représentation choisie pour le graphe ? (cf. partie Représentation informatique du cours de Marie-José Huguet) ?
À rendre : diagramme de classes (1)
  • Pour le TP suivant, préparez un diagramme UML très synthétique des classes Graph, Node, Path, Arcs, et RoadInformation (uniquement avec les attributs importants).
  • Dessinez-le à la main ou avec un outil ad-hoc, par exemple yuml.me (ou autre).
  • Commencez maintenant, afin d'avoir une vision claire des relations entre les classes du package graph.

Les chemins

Afin de vous familiariser avec les classes représentant le graphe (Graph, Node et Arc), un premier travail consiste à terminer d'implémenter la classe Path.

Chemins
Ce qui existe déjà
  • Testez le programme en l'état (clic-droit sur src/MainRun as Java Application et choisissez de lancer MainWindow).
  • Une interface graphique aux petits oignons s'ouvre.
    En cas de soupçon de bug sur le code que nous vous fournissons : voir Signaler un bug.
  • N'essayez pas de charger de cartes trop grosses (avec plus d'un million de nœuds), ou alors voir Charger des cartes volumineuses.
  • Pour tester les chemins, FileOpen Path, il faut charger un fichier de chemin contenu dans le répertoire /mnt/commetud/3eme Annee MIC/Graphes-et-Algorithmes/Paths
    À chaque chemin correspond une carte :
    • path_be_1234_12345.path carte "be" (Belgique)
    • path_fr31_insa_bikini_canal.path carte "fr31" (Haute-Garonne)
    Examinez ce dépôt de cartes et chemins — les identifiants de carte sont indiqués.
  • Lorsque vous testez l'ouverture d'un fichier de chemin, il ne doit pas se passer grand chose. C'est normal.
À vous !
  • En vous répartissant le travail avec votre binôme, sur deux machines, vous avez à coder toutes les méthodes marquées deprecated de la class Path. Les commentaires expliquent ce que doit faire chaque méthode. (Enlever l'annotation @deprecated lorsque c'est fait.)
    • Allez voir dans src/test/PathTest, des tests unitaires correspondent aux méthodes à écrire.
      Rappelez-vous : clic-droit sur PathTestRun As Junit Test (et la plupart des tests échouent pour l'instant).
    • Quand vous aurez terminé, tous les tests de PathTest devront fonctionner.
    • Conseil : commencez par le plus simple, getLength() et getTravelTime().
    • Dessinez sur papier le graphe qui est construit au début de la classe PathTest et qui est utilisé pour les tests. Cela peut vous aider à comprendre les problèmes.
    createShortestPathFromNodes ne doit pas trouver un plus court chemin dans un graphe : la méthode reçoit déjà un chemin complet en argument, sous forme de liste de Nodes.
  • À chaque fois que vous terminez une méthode (dûment testée par JUnit) vous pouvez faire :
    • git add src/* pour signaler à git les modifications de vos fichiers java ;
    • git add -p src/* le même en mode interactif pour choisir les modifs à signaler.
    • git status pour voir ce qui est réellement pris en compte par git ;
    • git commit -m "Méthode FOO terminée." pour enregistrer localement les modifications ;
    • git push pour tout envoyer sur le serveur.
    • Votre binôme peut faire git pull
Si git vous ouvre un éditeur de texte peu fréquentable comme vim, voici comment quitter proprement :
Tapez Esc puis :wq puis entrée

Création d'un programme from scratch

  • La classe src/main/org/insa/base/Launch.java permet de lancer votre projet Java directement, sans passer par l'application graphique déjà fournie.
    • Il contient une fonction main incomplète. Les différentes étapes à compléter sont indiquées en commentaires dans le fichier.
    • Vous n'avez pas à écrire d'algorithme, il suffit d'invoquer les bonnes méthodes, qui existent déjà.
    • Parcourez les classes pour trouver toutes les informations qui vous manquent.
    • Le chemin correct des fichiers est /mnt/commetud/... et non pas /home/commetud/...
  • Pour tester : Run as Java Application et choisissez de lancer Launch.
  • Dans la suite du projet, vous aurez besoin d'une classe similaire pour effectuer vos tests de performance.
Questions de compréhension / réflexion :
  • Auriez-vous pu créer un programme de "Graphe" sans aucune interface graphique ?
  • Les types GraphReader et PathReader sont des interfaces/types abstraits. Quel est l'intérêt d'utiliser des types abstraits ici ?

Bilan

  • Les tests JUnit relatifs aux chemins sont satisfaits.
  • Vous pouvez ouvrir et visualiser un chemin contenu dans un fichier.
  • Vous vous demandez si le plus dur est fait.