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
2018_2019:s3:concprogobjet:td:td4 [2018/10/06 23:18]
blay [Petit pas vers l'intégration]
2018_2019:s3:concprogobjet:td:td4 [2018/11/14 14:27]
blay [RENDU]
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 votre demande, voici l'​exemple du cours sur les portes revisités sur l'​exemple des avions qui ont un prix qui change dynamiquement.+===== Facultatif =====
  
-==== Timer et TimerTask ==== +Ajouter ​la réservation ​de nuitées dans les hôtels.
- +
-Pour pouvoir utiliser un timer qui déclenche une action à temps fixe, vous pouvez utiliser ​la classe ''​[[https://​docs.oracle.com/​javase/​7/​docs/​api/​java/​util/​Timer.html|Timer]]''​. +
-Celle-ci fait référence à la classe abstraite ''​[[https://​docs.oracle.com/​javase/​7/​docs/​api/​java/​util/​TimerTask.html|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''​. +
-{{:​2017_2018:​s3:​concprogobjet:​td:​timer.jar|Code à charger }} +
- +
-  - Modéliser ​les classes correspondant à ces quelques lignes de codes  +
-  - Comprenez les relations entre ces classes en regardant le ''​main''​ et comprenez les codes. +
- +
-==== 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
  
 +Pour les S3A date limite de rendu vendredi 16 novembre à 19h
2018_2019/s3/concprogobjet/td/td4.txt · Last modified: 2018/11/14 14:27 by blay