▸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.