This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
2018_2019:s3:concprogobjet:td:td4 [2018/10/06 23:21] blay [Classe abstraite comme un moyen d'intégration (facultatif)] |
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 98: | Line 98: | ||
* Vous redéfinissez une fonction de sélection... | * Vous redéfinissez une fonction de sélection... | ||
- | ==== Utilisation de ces classes ==== | + | ===== Facultatif ===== |
- | 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. | + | Ajouter la réservation de nuitées dans les hôtels. |
- | + | ||
- | 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 | ||