Table of Contents

De la modélisation au code : FINALE

Attention pour la semaine prochaine!

Dans ce TD :

nous avons pour objectif de partir de la modélisation et d'arriver au codage en 4h !

La classe "Journey" (30mn)

  1. Modéliser le concept de Trajet, y compris les autres concepts dont vous pouvez avoir besoin.
  2. Codez-les.
Je sais représenter des associations entre classes et je comprends leur correspondance en java.

Votre application : SpyMe (2H20)

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 :

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 :

		 try {
			Thread.sleep(10000);//1000 milliseconds is one second.
		  } catch (InterruptedException e) {
			e.printStackTrace();
		  }

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 : si vous avez besoin d'aides

Vision Globale

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

	Scanner sc = new Scanner(System.in);
        int interval = 1000;
 
	public Journey createJourney(Member m) throws InterruptedException{		
		System.out.println("Creating a journey ");
        DatedPoint currentPoint = enterDatedPoint();	;
		Journey path = new Journey(currentPoint);
		boolean again = true;
		while (again){
			currentPoint = enterDatedPoint();		
			path.addPoint(currentPoint);
			System.out.println("Distance  : " + path.distance());
			System.out.println("Duration since departure : " + path.duration() + " soit :" + path.duration()/1000 + " secondes" );
			System.out.println("We continue ? (true or false)");
			again = sc.nextBoolean();
			Thread.sleep(interval);  //1000 milliseconds is one second.
		}
		return path;	
	}
 
	private DatedPoint enterDatedPoint() {
		DatedPoint currentPoint;
		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();
		currentPoint = new DatedPoint(x,y,date);
		return currentPoint;
	}
 

Autres exemples

//To improve taking into account the displacement
	public Date whenWasYouHere(Point point) {
		DatedPoint closestPoint = points[0];
		double distanceMin = point.distance(closestPoint);
		for (int i =1; i<nextPlace;i++) {
			double distance = point.distance(points[i]);
			if (distance < distanceMin) {
				distanceMin = distance;
				closestPoint = points[i];
			}
		}
		return closestPoint.getDate();
	}
 
 
	//To improve taking into account the displacement
	public DatedPoint whereWereYou(Date date) {
		long time = date.getTime();
		DatedPoint closestPoint = points[0];
		long durationMin = Math.abs(closestPoint.getDate().getTime()-time);
		for (int i =1; i<nextPlace;i++) {
			long duration = Math.abs(points[i].getDate().getTime()-time);
			if (duration < durationMin) {
				durationMin = duration;
				closestPoint = points[i];
			}
		}
		return closestPoint;
	}

Et des exemples de tests …

@Test
	void testClosestPoint() throws InterruptedException {
		Date currentDate1 = new Date();
		DatedPoint currentPoint1 = new DatedPoint(5,5,currentDate1)	;
		Thread.sleep(1000); 
		Date currentDate2 = new Date();
		DatedPoint currentPoint2 = new DatedPoint(7,7,currentDate2)	;
		Thread.sleep(1000); 
		DatedPoint currentPoint3 = new DatedPoint(10,10,new Date())	;
		Thread.sleep(1000); 
		Date currentDate3 = new Date();
		Journey path = new Journey(currentPoint1);
		path.addPoint(currentPoint2);
		path.addPoint(currentPoint3);
		assertEquals(currentPoint1.getDate(), path.whenWasYouHere(currentPoint1));
		assertEquals(currentPoint2.getDate(), path.whenWasYouHere(currentPoint2));
		assertEquals(currentPoint3.getDate(), path.whenWasYouHere(currentPoint3));
		assertEquals(currentPoint3.getDate(), path.whenWasYouHere(new DatedPoint(12,12,new Date())));
		assertEquals(currentPoint1.getDate(), path.whenWasYouHere(new DatedPoint(4,4,new Date())));
		assertEquals(currentPoint2.getDate(), path.whenWasYouHere(new DatedPoint(8,8,new Date())));
 
		}
 
 
	@Test
	void testWhereWereYou() throws InterruptedException {
		Date currentDate1 = new Date();
		DatedPoint currentPoint1 = new DatedPoint(5,5,currentDate1)	;
		Thread.sleep(1000); 
		Date currentDate2 = new Date();
		DatedPoint currentPoint2 = new DatedPoint(7,7,currentDate2)	;
		Thread.sleep(1000); 
		DatedPoint currentPoint3 = new DatedPoint(10,10,new Date())	;
		Thread.sleep(1000); 
		Date currentDate3 = new Date();
		Journey path = new Journey(currentPoint1);
		path.addPoint(currentPoint2);
		path.addPoint(currentPoint3);
		assertEquals(currentPoint1, path.whereWereYou(currentDate1));
		assertEquals(currentPoint2, path.whereWereYou(currentDate2));
		assertEquals(currentPoint3, path.whereWereYou(currentDate3));
		assertEquals(currentPoint3, path.whereWereYou(new Date()));
		assertEquals(currentPoint1, path.whereWereYou(new Date(currentDate1.getTime()-1000)) );
		}

Rendu pour ce devoir

  1. Les rendus se font sous jalon avant <color red>11 mars 9h/color>
  2. Le rendu respecte ce qui suit :
    1. il se fait à 2 maximum
    2. le titre est composé de FIN<NumeroDuGroupe>_NomEtudiant__NomEtudiant (e.g. DS1_Doe_Smith ou UC2_Harry)
    3. Un document qui comprend :
      1. votre diagramme de cas d'utilisation
      2. votre diagramme de séquence
      3. votre diagramme de classes cohérent relativement à l'ensemble de l'étude de cas et donc complété relativement au diagramme de séquence
      4. les codes sources (là où vous en êtes)
      5. les tests si vous en avez, sinon le main de test

Erreurs