2018_2019:s3:concprogobjet:td:td4
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
2018_2019:s3:concprogobjet:td:td4 [2018/10/06 07:20] – [Open/Closed ... First Step] blay | 2018_2019:s3:concprogobjet:td:td4 [2018/10/17 08:34] – [Petit pas vers l'intégration] blay | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Open/Closed ... First Step ====== | ====== Open/Closed ... First Step ====== | ||
+ | <note warning> | ||
Ce TD vise à : | Ce TD vise à : | ||
- Renforcer votre compréhension de la notion d' | - Renforcer votre compréhension de la notion d' | ||
- Vérifier que vous savez lire des modèles UML réalisés par d' | - Vérifier que vous savez lire des modèles UML réalisés par d' | ||
- | - Vous donnez | + | - Vous donner |
- | ===== Partie : Généralisation ===== | + | |
+ | Un ensemble de codes et conseils vous sont donnés vous permettant de faire " | ||
+ | ===== 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. | La société //Amadeum// a demandé à un étudiant de gérer les vols, à un autre de gérer les locations de voitures. | ||
Line 12: | Line 14: | ||
Voici la description plus détaillée du sujet. | Voici la description plus détaillée du sujet. | ||
< | < | ||
- | 1- L' | + | 1- L' |
2- Nous aimerions qu'il puisse également gérer les locations de voitures | 2- Nous aimerions qu'il puisse également gérer les locations de voitures | ||
- | |||
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' | 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' | ||
Line 22: | Line 23: | ||
**Votre défi** | **Votre défi** | ||
- | <note warning> | ||
- | Dans l' | ||
- | </ | ||
Voici les codes associés. | Voici les codes associés. | ||
- | {{:2017_2018: | + | {{:2018_2019: |
- | <note tip>Pour trier : | ||
- | Collections.sort... et des exemples par exemple: https:// | ||
- | </ | ||
Attention, cette fois-ci vous devez chercher seul à résoudre le problème, mais voici quelques pistes : | Attention, cette fois-ci vous devez chercher seul à résoudre le problème, mais voici quelques pistes : | ||
Line 38: | Line 33: | ||
- Avez-vous compris ce qui est attendu de vous ? Vous n'avez pas droit à la question, " | - Avez-vous compris ce qui est attendu de vous ? Vous n'avez pas droit à la question, " | ||
- Avez-vous bien identifié tous les éléments? Le couplage? Vous vous rappelez du principe ouvert/ | - Avez-vous bien identifié tous les éléments? Le couplage? Vous vous rappelez du principe ouvert/ | ||
- | | + | - 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? |
- | ===== Petit pas vers l' | + | |
+ | < | ||
- | Amadeum a imaginé d' | + | import java.util.ArrayList; |
+ | import java.util.Comparator; | ||
+ | import java.util.List; | ||
- | {{: | + | public |
+ | protected List< | ||
+ | public Service(List< | ||
+ | this.payingItemList = payingItemList; | ||
+ | } | ||
- | L' | + | protected |
- | - vous le codiez, | + | return payingItemList; |
- | - 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 " | + | } |
- | - vous testiez vos codes. | + | |
+ | public List< | ||
+ | payingItemList.sort(Comparator.comparing(PayingItem:: | ||
+ | return payingItemList; | ||
+ | } | ||
+ | |||
+ | public T lessExpensiveItem(){ | ||
+ | sortedByPrice(); | ||
+ | return payingItemList.get(0); | ||
+ | } | ||
+ | |||
- | Pour vous aider : | + | public |
- | * Un voyage ('' | + | payingItemList.add(payingItem); |
- | * '' | + | |
- | * Attention, vous avez peut etre un probleme pour le '' | + | |
- | * 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 proportionnel (indépendamment de la durée); | + | |
- | * Vous louez toutes les voitures, ce qui n'est pas très réaliste, mais ce n'est qu'un TD... | + | |
- | * Vous redéfinissez une fonction de tri dans le service qui utilise une fonction de calcul de prix à partir du prix de la voiture et de la durée. | + | |
- | * Un exemple de code pour createATrip | + | |
- | <code java> | + | |
- | public | + | |
- | Trip trip = new Trip(d); | + | |
- | services.forEach(service -> | + | |
- | {trip.addItem(service.find(d));} ); | + | |
- | return trip; | + | |
} | } | ||
+ | |||
+ | } | ||
</ | </ | ||
- | ===== Classe abstraite comme un moyen d' | ||
- | A votre demande, voici l' | + | et pour l'utiliser par exemple |
+ | < | ||
+ | public class CarRentalService extends Service< | ||
+ | </ | ||
- | ==== Timer et TimerTask | + | 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' |
+ | {{ : | ||
+ | )). | ||
+ | ===== Petit pas vers l' | ||
- | Pour pouvoir utiliser | + | Amadeum a imaginé d' |
- | Celle-ci | + | Ce travail a été fait sans rien savoir de ce qui précède. Donc vous allez devoir vous adapter. |
- | Il est alors possible par la méthode '' | + | {{ : |
- | d' | + | |
- | Voici un exemple de code qui définit une classe qui étend | ||
- | {{: | ||
- | - Modéliser les classes correspondant à ces quelques lignes | + | L' |
- | - Comprenez les relations entre ces classes en regardant | + | |
+ | - vous récupériez tous les codes existants | ||
+ | - vous testiez vos codes. | ||
- | ==== Utilisation de ces classes ==== | + | Pour vous aider : |
- | A votre tour d'utiliser ces classes pour définir une méthode | + | * Un voyage ('' |
+ | * '' | ||
+ | * Attention, vous avez peut etre un probleme pour le '' | ||
+ | * Comme il s'agit d'un simple TD, vous pouvez ne louer que la voiture la moins chère en partant du principe | ||
+ | * Vous redéfinissez une fonction | ||
- | Pour tester votre code vous pouvez par exemple réutiliser les codes suivants. | + | ===== Facultatif ===== |
- | Pour initialiser. | + | Ajouter |
- | < | + | |
- | @Before | + | |
- | public void setUp() throws Exception { | + | |
- | flights = new ArrayList<> | + | |
- | flight = new Flight(20, LocalDate.of(2017, | + | |
- | flight1 = new Flight(10, LocalDate.of(2017, | + | |
- | flight2 = new Flight(30, LocalDate.of(2017, | + | |
- | flights.add(flight); | + | |
- | flights.add(flight1); | + | |
- | flights.add(flight2); | + | |
- | fs = new FlightService(flights); | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | Pour le test lui-même. | + | |
- | < | + | |
- | @Test | + | |
- | public void testFindMovingItem() { | + | |
- | Description d = new Description(LocalDate.of(2017, | + | |
- | Flight f = (Flight) fs.findMovingItem(d); | + | |
- | // Test pour une nouvelle boucle for utilisant un forEach | + | |
- | IntStream.range(1, | + | |
- | try { | + | |
- | // Pour visualiser que le prix change bien. | + | |
- | // Il est difficile de le definir spus la forme d' | + | |
- | // car on ne sait pas combien | + | |
- | // L' | + | |
- | System.out.println(i + " : ===> Price :" + f.getPrice()); | + | |
- | Thread.sleep(200); | + | |
- | System.out.println(i + " : ===> Price has changed :" + f.getPrice()); | + | |
- | } catch (InterruptedException ex) { | + | |
- | ex.printStackTrace(); | + | |
- | } | + | |
- | System.out.println(i); | + | |
- | }); | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | + | ||
- | Si vous avez du mal, voici le code, mais éviter de le regarder sans avoir au moins essayé de le faire seul "à votre propre sauce" | + | |
- | + | ||
- | + | ||
- | < | + | |
- | public PayingItem findMovingItem(Description d) { | + | |
- | ArrayList< | + | |
- | PayingItem x = PayingItemTools.cheapestItem((matchingFlights)); | + | |
- | ChangingPriceTask timerTask = new ChangingPriceTask( (ChangingPayingItem) x, 5.0); | + | |
- | Timer timer = new Timer(true); | + | |
- | timer.scheduleAtFixedRate(timerTask, | + | |
- | return x; | + | |
- | } | + | |
- | </ | + | |
==== RENDU ==== | ==== RENDU ==== | ||
Code + modèles et remarques éventuelles. | Code + modèles et remarques éventuelles. | ||
- | Les modèles peuvent correspondre à des diagrammes dessinés à la main, ou obtenu | + | Les modèles peuvent correspondre à des diagrammes dessinés à la main, ou obtenus |
http:// | http:// | ||
2018_2019/s3/concprogobjet/td/td4.txt · Last modified: 2018/11/14 13:27 by blay