User Tools

Site Tools


2017_2018:s3:concprogobjet:td:td5

This is an old revision of the document!


Open/Closed ... First Step

TD Très court en fait : 2h maximum, MAIS Faîtes le le mieux possible !

Partie : Généralisation

La société Amadeum a demandé à un étudiant de gérer les vols, à un autre de gérer les locations de voitures. Elle vous prend en stage et voici le sujet de stage : “Améliorer la gestion des items liés aux voyages”.

Voici la description plus détaillée du sujet.

L'étudiant recruté devra améliorer les fonctionnalités offertes en permettant dans une nouvelle classe de trier une liste de vols en fonction du prix et de pouvoir récupérer uniquement le vol le moins cher parmi un ensemble de vols.

Nous aimerions qu'il puisse également gérer les locations de voitures : trier des locations en fonction du prix et de pouvoir récupérer uniquement la location la moins chère parmi un ensemble de locations.

Il est important de prendre en compte que si les codes existants peuvent être modifiés, les tests associés doivent continuer à fonctionner ce code ayant déjà été intégré dans d'autres applications.

Votre défi : faire tout ce que demande votre employeur en étant “malin” et un bon développeur. Vous avez le droit de modifier les codes qui vous sont donnés.

Dans l'idéal nous aimerions avoir les mêmes fonctionnalités pour la gestion des nuits d'hôtels, seulement nous ne disposons pour ce problème que de codes partiels.

Voici les codes associés. openclosedprinciplev0withtests2.jar

Pour trier : Collections.sort… et des exemples par exemple: https://www.mkyong.com/java8/java-8-lambda-comparator-example/

Petit pas vers l'intégration

Amadeum a imaginé d'étendre ses compétences en offrant un service de préparation aux voyages “TravelOrganizer” “Low cost” qui, à partir d'une description, vous propose des voyages.

L'ingénieur en charge du projet a conçu le diagramme suivant et commme il est très content de vous, il s'attend à ce que :

  1. vous le codiez,
  2. vous récupériez tous les codes existants et que vous les intégriez pour offrir de nouveaux services, i.e. que vous pouvez à présent créer des “Trip” qui sont l'assemblage de “flights” et “CarRental”.
  3. vous testiez vos codes.

Classe abstraite comme un moyen d'intégration

Pour pouvoir utiliser un timer qui déclenche une action à temps fixe, vous pouvez utiliser la classe Timer. Celle-ci fait référence à la classe abstraite TimerTask.

Il est alors possible par la méthode scheduleAtFixedRate(TimerTask task, long delay, long period) d'exécuter une tâche spécifique de façon répété à temps fixe, en commençant après un temps spécifique.

Voici un exemple de code qui définit une classe qui étend TimerTask et chaque fois qu'elle est exécutée modifie le prix qui lui est associé. Une classe qui contient un “main” vous montre comment utiliser ce code. PayingItem correspond à une interface qui définit une unique méthode getPrice.

timer.jar

  1. Modéliser les classes correspondant à ces quelques lignes de codes
  2. Comprenez les relations entre ces classes en regardant le main et comprenez les codes.

A votre tour d'utiliser ces classes pour définir une méthode qui renvoie non plus un vol qui a un prix fixe mais un prix qui varie.

public PayingItem findMovingItem(Description d) {
	ArrayList<Flight> matchingFlights = getFlights(d.getDepartDate(),d.getDepartPlace(),d.getArrivalPlace());
	PayingItem x = PayingItemTools.lessExpensiveItem((matchingFlights));
	ChangingPriceTask timerTask = new ChangingPriceTask( (ChangingPayingItem) x, 5.0);
	Timer timer = new Timer(true);
	timer.scheduleAtFixedRate(timerTask, 0, 190);
	return x;
}
2017_2018/s3/concprogobjet/td/td5.1508530936.txt.gz · Last modified: 2017/10/20 22:22 by blay