User Tools

Site Tools


2018_2019:s3:concprogobjet:td:td4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
2018_2019:s3:concprogobjet:td:td4 [2018/10/06 23:20]
blay [Timer et TimerTask]
2018_2019:s3:concprogobjet:td:td4 [2018/10/17 10:34]
blay [Petit pas vers l'intégration]
Line 1: Line 1:
 ====== Open/Closed ... First Step ====== ====== Open/Closed ... First Step ======
 +<note warning>​Du temps sera pris sur la 1e ou la 2e séance sur ce TD (si nécessaire) pour faire des retours sur les précédents rendus.</​note>​
 Ce TD vise à :  Ce TD vise à : 
    - Renforcer votre compréhension de la notion d'​interface et à savoir les utiliser    - Renforcer votre compréhension de la notion d'​interface et à savoir les utiliser
Line 26: Line 26:
  
 Voici les codes associés. Voici les codes associés.
-{{:2017_2018:​s3:​concprogobjet:​td:​openclosedprinciplev0withtests2.jar|}}+{{:2018_2019:​s3:​concprogobjet:​td:​archive.zip|}}
  
  
Line 87: Line 87:
  
 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 :  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 : 
-   - vous le codiez,+   - 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''​)//​
    - 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"​.    - 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"​.
    - vous testiez vos codes.    - vous testiez vos codes.
Line 97: Line 97:
         * 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          * 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...         * Vous redéfinissez une fonction de sélection...
-===== Classe abstraite comme un moyen d'​intégration (facultatif) ===== 
  
-A la demande des étu, voici l'​exemple du cours sur les portes revisités sur l'​exemple des avions qui ont un prix qui change dynamiquement.+===== Facultatif =====
  
- +Ajouter la réservation ​de nuitées dans les hôtels.
-==== Utilisation ​de ces classes ==== +
-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)''​. Notez que le prix varie sans que le type de retour ne donne cette indication. +
- +
-Pour tester votre code vous pouvez par exemple réutiliser ​les codes suivants. +
- +
-Pour initialiser. +
-<​code>​ +
- @Before +
- public void setUp() throws Exception { +
- flights = new ArrayList<>​();​ +
- flight = new Flight(20, LocalDate.of(2017,​ 8, 1), LocalTime.of(8,​ 30), "​Nice",​ "​Paris"​);​ +
- flight1 = new Flight(10, LocalDate.of(2017,​ 8, 1), LocalTime.of(9,​ 30), "​Nice",​ "​Paris"​);​ +
- flight2 = new Flight(30, LocalDate.of(2017,​ 8, 1), LocalTime.of(10,​ 30), "​Nice",​ "​Paris"​);​ +
- flights.add(flight);​ +
- flights.add(flight1);​ +
- flights.add(flight2);​ +
- fs = new FlightService(flights);​ +
-+
-</​code>​ +
- +
-Pour le test lui-même. +
-<​code>​ +
-@Test +
- public void testFindMovingItem() { +
- Description d = new Description(LocalDate.of(2017,​ 8, 1), "​Nice",​ "​Paris",​ 2); +
- Flight f = (Flight) fs.findMovingItem(d);​ +
- // Test pour une nouvelle boucle for utilisant un forEach +
- IntStream.range(1,​ 5).forEach(i -> { +
- try { +
- // Pour visualiser que le prix change bien. +
- // Il est difficile de le definir spus la forme d'​Asset +
- // car on ne sait pas combien de fois le ratio a eu le temps de s'​appliquer +
- // L'​attente permet à la tache en arrière plan de s'​exécuter +
- 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);​ +
- }); +
-+
-</​code>​ +
- +
- +
- +
-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"​. +
- +
- +
-<​code>​ +
- public PayingItem findMovingItem(Description d) { +
- ArrayList<​Flight>​ matchingFlights = getFlights(d.getDepartDate(),​d.getDepartPlace(),​d.getArrivalPlace());​ +
- PayingItem x = PayingItemTools.cheapestItem((matchingFlights));​ +
- ChangingPriceTask timerTask = new ChangingPriceTask( (ChangingPayingItem) x, 5.0); +
- Timer timer = new Timer(true);​ +
- timer.scheduleAtFixedRate(timerTask,​ 0, 190); +
- return x; +
-+
-</​code>​+
  
 ==== 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 ​par reverse mais dans ce cas, ils sont "​propres"​ au sens où les informations essentielles y sont représentées et seulement celles-ci.+Les modèles peuvent correspondre à des diagrammes dessinés à la main, ou obtenus ​par reverse mais dans ce cas, ils sont "​propres"​ au sens où les informations essentielles y sont représentées et seulement celles-ci.
 http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20171020224642543829?​tab=deposit http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20171020224642543829?​tab=deposit
  
2018_2019/s3/concprogobjet/td/td4.txt · Last modified: 2018/11/14 14:27 by blay