User Tools

Site Tools


2019_2020:s3:concprogobjet:td:td4

De la conception au code et vice-versa

Ce TD vise à :

  1. Renforcer votre compréhension de la notion d'interface et à savoir les utiliser
  2. Vérifier que vous savez lire des modèles UML réalisés par d'autres et à les suivre.
  3. Vous donner quelques éléments de gestion des listes un peu avancé : les codes vous sont alors donnés, à vous de comprendre.

Un ensemble de codes et conseils vous sont donnés vous permettant de faire “seul” ce TD.

Attention RENDU A FAIRE A LA FIN DE LA SEANCE DE TD EN SEMAINE du 14 Octobre voir ici

Partie : Généralisation & Généricité

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.

1- L'étudiant recruté devra améliorer les fonctionnalités offertes en permettant, de trier la liste des vols en fonction du prix et de pouvoir récupérer uniquement le vol le moins cher.

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

Voici les codes associés. archive.zip

Attention, cette fois-ci vous devez chercher seul à résoudre le problème, mais voici quelques pistes :

  1. De quelles informations avez-vous besoin pour commencer à travailler? 1) Que faîtes-vous pour cela ? 2)
  2. Avez-vous compris ce qui est attendu de vous ? Vous n'avez pas droit à la question, “qu'est-ce que je fais? ” … sous toutes ses formes!3).
  3. Avez-vous bien identifié tous les éléments? Le couplage? Vous vous rappelez du principe ouvert/fermé? de la ségrégation des interfaces?
    1. Qui a-t-il de commun entre les fonctionnalités demandées ? Qui a-t-il de commun entre un vol et une location de voitures? Qui a-t-il de commun entre les services existants? Que pouvez-vous faire pour généraliser?
  4. OK vous pouvez implémenter puisque vous avez une bonne idée de votre “modèle” de l'application4).

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. Ce travail a été fait sans rien savoir de ce qui précède. Donc vous allez devoir vous adapter.

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 (La classe CarRentalService doit implémenter Service, mais il n'est pas exigé que ce soit une implémentation directe de Service)
  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 “CarRentals”.
  3. vous testiez vos codes.

Pour vous aider :

  • Un voyage (Trip) correspond à un vol (le moins cher qui vous amène à destination le jour voulu), une location de voiture pour la durée de votre séjour.
  • Find renvoie l'Item le moins cher : Par exemple, un vol ou une location de voiture qui correspond à la description (même date, durée attendue, point de départ, point d'arrivée).
  • Attention, vous avez peut etre un probleme pour le find dans CarRentalService. En effet, pour obtenir des CarRental actuellement il est nécessaire de réserver la voiture (book). Or vous ne voulez récupérer qu'une seule location de voiture, et la moins chère, d'où les solutions possibles suivantes :
    • Comme il s'agit d'un simple TD, vous pouvez ne louer que la voiture la moins chère en partant du principe que le prix sera
    • Vous redéfinissez une fonction de sélection…

Dans le cadre de ce TD, au minimum (et on ne vous en demande pas plus) :

  1. un voyage correspond à un vol et une location de voiture (bien sûr dans un cas réel, il y aurait un vol de retour, des nuits d'hôtel, …)
  2. vous pouvez ne travailler qu'avec une compagnie aérienne (bien sûr dans un cas réel, on chercherait les vols les moins chers d'un ensemble de compagnie aérienne);
  3. vous pouvez ne travailler qu'avec une compagnie de location de voiture

etc.

Facultatif

Ajouter la réservation de nuitées dans les hôtels.

RENDU

Le RENDU SE FAIT à la fin de la 2e séance de TD.

1)
Comprendre la structure des codes
2)
Modéliser les classes données (diagramme de classes), éventuellement directement par reverse.
3)
Reprenez la description détaillée ci-dessus et dessinez/écrivez votre compréhension des questions en faisant référence à vos classes
4)
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public  class Service<T extends PayingItem>{
	protected List<T> payingItemList = new ArrayList<>();

	public Service(List<T> payingItemList) {
		this.payingItemList = payingItemList;
	}

	protected  List<T> getpayingItemList(){
		return payingItemList;
	}
	
	public List<T> sortedByPrice() {
		payingItemList.sort(Comparator.comparing(PayingItem::getPrice));
		return payingItemList;
	}
	
	public T lessExpensiveItem(){
			sortedByPrice();
			return payingItemList.get(0);
	}
	

	public void add(T payingItem) {
		payingItemList.add(payingItem);
	}

}
et pour l'utiliser par exemple :
public class CarRentalService extends Service<CarRental> {
Si besoin voici une visualisation de la solution (on voit mal cependant la relation entre Service générique et réalisé. A noter que pour cela j'ai utilisé l'outil : ObjectAid
2019_2020/s3/concprogobjet/td/td4.txt · Last modified: 2019/10/16 15:32 by blay