Table of Contents

Approfondissements

Dans ce TD nous avons pour objectif de mieux comprendre la relation entre la modélisation et le code, et ceci en utilisant tous les éléments de modélisation.

Reverse : La classe ''Point'' (10 mn)

  1. Etant données les spécifications suivantes en omettant tous les accesseurs dessiner la classe Point correspondante. Vous pouvez aussi procéder par reverse engineering (classe Point)
Je sais faire le lien entre une classe java et une classe modélisée en UML.
Et si nous voulions à présent travaillez avec des points en coordonnées polaires, que ferions-nous?

Utilisation d'une classe : Chemin et Trajet (30mn)

  1. Modéliser les concepts de Chemin et de Trajet.
    • Un chemin ne sait pas de quel trajet il fait éventuellement parti.
  2. Codez-les.
Comme vu en cours ce matin, conclusion du cours, IL N'Y A PAS D'ATTRIBUTS DEPART et ARRIVEE dans le modèle de la classe CHEMIN
Dans cet exercice, faîtes particulièrement attention aux rôles et à la navigation dans les associations.
Je sais représenter des associations entre classes et je comprends leur correspondance en java.

La classe ''Polygone'' (15mn)

Un polygone est composé d'une suite de points.

  1. Modéliser la classe Polygone en UML.
  2. Il est possible de créer un Polygone comme un ensemble vide de Points ou en passant un tableau de Points. Dans VP, vous pouvez ajouter des constructeurs.
  3. Générer le code. Quelle structure de données utilisez-vous pour représenter la suite de points? Regardez le code généré … Evidemment il n'est pas possible de modifier la classe Point fournie par java. Vous ne devez donc pas la générer.
  4. Tester votre classe, par exemple en ajoutant une méthode ToString.
Même acquis que précédemment et prise en compte des structures (Tableau, ArrayList pour représenter des “suites”).

La classe ''Polygone'': V2 (10mn)

  1. Etendez votre modélisation de la classe Polygone en UML.
  2. Générer le code.
  3. Tester votre classe.
  4. Que retenez-vous de cet exercice? Quand se fait le choix de la structure?
Le choix de l'implémentation dépend de ce que l'on fait des objets.

Votre application : SpyMe

Attention cette fois-ci, la description de l'étude de cas n'est pas complètement structurée; la structure des classes en particulier exige une analyse “globale” de l'étude de cas.

On décide de produire une nouvelle application telle que :

Pouvez-vous étendre votre application pour donner la vitesse moyenne entre deux points donnés d'un parcours?

Questions

Evidemment vous commencez par identifier les cas d'utilisation de haut niveau. Mais ensuite vous pouvez travailler comme bon vous semble.

Pour vous aider

Si vous avez du mal à identifier les "objets" de l'application ...

Obtenir le moment présent
import java.util.Date;
................
 //obtenir la date courante
 Date date = new Date();

Gestion du temps

Si vous voulez représenter la gestion du temps (mais vous pouvez vous en passer), voici une approche très simple :

Thread.sleep(10000);  //1000 milliseconds is one second.

Saisir des entiers ou des boolean au clavier

import java.util.Scanner;
 
.....................
Scanner sc = new Scanner(System.in);
int y = sc.nextInt();
boolean encore = sc.nextBoolean();

Vision Globale

Attention, votre code ne correspond probablement pas à cela !!

public Parcours creerParcours(Membre m) throws InterruptedException{		
		System.out.println("Creation de parcours ");
	...
	....
                PointDate pCourant = saisirPointDate();	;
		Parcours parcours = new Parcours(pCourant);
		boolean encore = true;
		while (encore){
			pCourant = saisirPointDate();		
			parcours.addPoint(pCourant);
			System.out.println("Distance parcourue : " + parcours.distance());
			System.out.println("Durée depuis le départ : " + parcours.duree() + " soit :" + parcours.duree()/1000 + " secondes" );
		....
			System.out.println("On continue ? (true or false)");
			encore = sc.nextBoolean();
			Thread.sleep(intervalle);  //1000 milliseconds is one second.
		}
		return parcours;	
	}
 
	private PointDate saisirPointDate() {
		PointDate pCourant;
		int x;
		int y;
		System.out.println(" X ");
		x = sc.nextInt();
		System.out.println(" Y ");
		y = sc.nextInt();
		//obtenir la date courante
		Date date = new Date();
		pCourant = new PointDate(x,y,date);
		return pCourant;
	}