This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2017_2018:s3:concprogobjet:td:td1 [2017/08/11 18:18] blay [Analyse : 15mn] |
2017_2018:s3:concprogobjet:td:td1 [2017/09/20 10:30] rl ToDo unchecked: Complétez la classe de Test à présent et l'exécuter. |
||
---|---|---|---|
Line 90: | Line 90: | ||
==== Analyse : 15mn ==== | ==== Analyse : 15mn ==== | ||
- | - <todo> Sous [[:modelio|MODELIO]], commencez par créer un projet (Attention à bien sélectionner **Java Project**)</todo> | + | - <todo> Commencez par créer un projet (Attention à bien sélectionner **Java Project**)</todo> sous [[:modelio|MODELIO]] |
- <todo> Définissez un diagramme de classes de niveau Analyse.</todo> | - <todo> Définissez un diagramme de classes de niveau Analyse.</todo> | ||
- <todo> Définissez, par cas d'utilisation, un diagramme de séquence élémentaire mettant en jeu les objets de votre système **et compléter** votre diagramme de classes au fur et à mesure. Pour cela utilisez, évidemment des lignes de vie qui font référence à des classes et les messages qui vous permettent d'identifier les méthodes et mettre à jour vos diagrammes de classes.</todo> | - <todo> Définissez, par cas d'utilisation, un diagramme de séquence élémentaire mettant en jeu les objets de votre système **et compléter** votre diagramme de classes au fur et à mesure. Pour cela utilisez, évidemment des lignes de vie qui font référence à des classes et les messages qui vous permettent d'identifier les méthodes et mettre à jour vos diagrammes de classes.</todo> | ||
Line 103: | Line 103: | ||
- | - Compléter votre modèle à classes pour préparer l'implémentation : | + | - <todo> Compléter votre modèle à classes pour préparer l'implémentation : </todo> |
* Réfléchir au sens des relations | * Réfléchir au sens des relations | ||
* Vérifier les "couplages" | * Vérifier les "couplages" | ||
Line 116: | Line 116: | ||
- | - Créez un projet **MAVEN** | + | - Créez un projet **MAVEN** ( **voir comment faire ici [[https://mbf-iut.i3s.unice.fr/doku.php?id=eclipse#creer_un_projet_maven|avec eclipse]] [[https://mbf-iut.i3s.unice.fr/doku.php?id=intellij#creer_un_projet_maven|avec intelliJ]]** ) |
- Nom du projet : busV1 | - Nom du projet : busV1 | ||
- GroupID = fr.unice.iut.info.coo | - GroupID = fr.unice.iut.info.coo | ||
- ArtefactID = bus | - ArtefactID = bus | ||
- | - ( **voir comment faire ici [[https://mbf-iut.i3s.unice.fr/doku.php?id=eclipse#creer_un_projet_maven|avec eclipse]] [[https://mbf-iut.i3s.unice.fr/doku.php?id=intellij#creer_un_projet_maven|avec intelliJ]]** ) | ||
- La structure contient | - La structure contient | ||
- src -> main -> Java ... | - src -> main -> Java ... | ||
Line 167: | Line 166: | ||
- Corriger vos codes pour qu'ils soient "compilables" : | - Corriger vos codes pour qu'ils soient "compilables" : | ||
- Afin que les annotations de Modelio soient comprises, ajouter {{:javadesigner.jar|}} comme une library du projet | - Afin que les annotations de Modelio soient comprises, ajouter {{:javadesigner.jar|}} comme une library du projet | ||
- | * sous [[https://mbf-iut.i3s.unice.fr/doku.php?id=eclipse#ajouter_un_jar_externe|Eclipse]] : | + | * sous [[https://mbf-iut.i3s.unice.fr/doku.php?id=eclipse#ajouter_un_jar_externe|Eclipse]] |
* sous IntelliJ | * sous IntelliJ | ||
- déposer sous idea/libraries... puis sélectionner le .jar et l'enregistrer comme une librairie utilisée par le projet | - déposer sous idea/libraries... puis sélectionner le .jar et l'enregistrer comme une librairie utilisée par le projet | ||
Line 181: | Line 180: | ||
==== Mise en place du programme principal préliminaire (10mn) ==== | ==== Mise en place du programme principal préliminaire (10mn) ==== | ||
- | Voici ce que doit faire a minima votre programme principal, pour cela retourner dans le fichier de test et ajouter un cas de test : "testMonScenario.java" et modifier le //main// pour : | + | Voici ce que doit faire a minima votre programme principal, pour cela retourner dans le fichier de test et ajouter un cas de test : "testMonScenario.java" ou des tests pour : |
- créer un bus de nom "Nice-Circulation", | - créer un bus de nom "Nice-Circulation", | ||
- créer un message annonçant "une attente de 5mn" | - créer un message annonçant "une attente de 5mn" | ||
- créer un message annonçant "un accident" | - créer un message annonçant "un accident" | ||
- | - lire les messages, | + | - récupérer les messages sur le bus de nom "Nice-Circulation", |
- | - afficher le contenu des message. | + | - afficher le contenu des messages. |
Ce programme ne peut pas tourner puisque quasi rien n'est implémenté, par contre vous pouvez vous aider de votre IDE pour qu'au moins il soit "syntaxiquement" juste et créer les bonnes méthodes si elles n'existent pas déjà, ou les appeler! | Ce programme ne peut pas tourner puisque quasi rien n'est implémenté, par contre vous pouvez vous aider de votre IDE pour qu'au moins il soit "syntaxiquement" juste et créer les bonnes méthodes si elles n'existent pas déjà, ou les appeler! | ||
Line 196: | Line 196: | ||
==== Un projet sous "tests" (15mn) ==== | ==== Un projet sous "tests" (15mn) ==== | ||
- | Notre objectif est à présent de préparer les tests qui accompagneront notre développement. Pour cela, nous utiliserons l'environnement JUNIT. La structuration du projet en une partie principale et une partie test est, elle, exigée pour toute la suite de ce module. | + | Notre objectif est à présent de préparer les tests qui accompagneront notre développement. Pour cela, nous utiliserons l'environnement JUNIT. |
+ | La structuration du projet en une partie principale et une partie test est, elle, exigée pour toute la suite de ce module. | ||
+ | Vous avez déjà utilisé JUnit l'an dernier, il devrait s'agir uniquement de rappels. | ||
- | /* | + | <accordion collapsed="true"> |
- | - Ajoutez un nouveau dossier de sources nommé //tests// au même niveau d’arborescence que src | + | /* ---------------- |
- | * sur le projet, faire un //new source-folder//, et l'appeler //tests// {{ :2014_2015:s3:concprogobjet:td:newsourcefolder.png?direct&200 |}} | + | |
*/ | */ | ||
+ | <panel title="Eclipse" > | ||
+ | - Dans le menu contextuel de, par exemple la classe //Message//, cliquez sur //New – Others - Java - JUnit Test Case//((Cette partie du TD reprend en partie le tutoriel JUNIT : http://www.junit.fr/2011/11/20/tutoriel-eclipse-junit-mon-premier-test-automatique/)). {{ :2014_2015:s3:concprogobjet:td:junittestcase.png?direct&200 |}} Dans le panneau qui s'affiche {{ :2014_2015:s3:concprogobjet:td:messagetest.png?direct&200 |}} | ||
+ | * Sélectionnez le bouton radio //New JUnit 4 test//. | ||
+ | * Changez le dossier Source folder pour //bus/src/test/java//. | ||
+ | * Nommez la classe ''MessageTest''. | ||
+ | * Cochez les cases ''setUp()'' et ''tearDown()''. | ||
+ | * Enfin cliquez sur //Finish//. | ||
+ | * Eclipse va remarquer que la bibliothèque de //JUnit// est absente du projet et vous propose d’ajouter automatiquement cette dernière au projet. | ||
+ | * Dans le panneau qui apparaît, cliquez sur OK. | ||
+ | - Eclipse a maintenant créé automatiquement le squelette de la classe de test. Il ne reste plus alors qu’à remplir cette dernière. | ||
+ | - Dans le menu contextuel, cliquez sur //Run As – JUnit test//. | ||
+ | Enfin, le premier rapport de tests s’affiche ! | ||
+ | {{ :2014_2015:s3:concprogobjet:td:testok.png?direct&200 |}} | ||
+ | |||
+ | </panel> | ||
+ | |||
+ | |||
+ | <panel title="IntelliJ" > | ||
- Pour créer des tests sur votre classe //Message//, suivez les instructions sous https://www.jetbrains.com/help/idea/2016.2/creating-tests.html. La classe de test créée se trouve sous test/java/... | - Pour créer des tests sur votre classe //Message//, suivez les instructions sous https://www.jetbrains.com/help/idea/2016.2/creating-tests.html. La classe de test créée se trouve sous test/java/... | ||
* Cochez les cases ''setUp()'' ((est exécutée avant tout test)) et ''tearDown()'' ((est exécutée après tout test)). | * Cochez les cases ''setUp()'' ((est exécutée avant tout test)) et ''tearDown()'' ((est exécutée après tout test)). | ||
- | - IntelliJ a maintenant créé automatiquement le squelette de la classe de test. Il ne reste plus alors qu’à remplir cette dernière. | + | - IntelliJ a maintenant créé automatiquement le squelette de la classe de test. Il ne reste plus alors qu’à remplir cette dernière. |
- | - Par exemple | + | </panel> |
- | <code java> | + | </accordion> |
+ | |||
+ | |||
+ | - <todo> Complétez la classe de Test à présent et l'exécuter. </todo> Voir un exemple de code ci-dessous. | ||
+ | - <todo> Vérifier la couverture de votre code (menu contextuel, coverage as) si vous êtes sous Eclipse. Vous pouvez aussi les voir sous properties. </todo> | ||
+ | |||
+ | Voici un exemple de code de test. | ||
+ | |||
+ | <code java> | ||
protected Message mToTest; | protected Message mToTest; | ||
- | protected String content; | + | protected String contents; |
@Before | @Before | ||
public void setUp() throws Exception { | public void setUp() throws Exception { | ||
- | content = "mon message"; | + | contents = "mon message"; |
- | mToTest = new Message(content,b); | + | mToTest = new Message(contents); |
} | } | ||
@Test | @Test | ||
- | public void setContenu() throws Exception { | + | public void setContents() throws Exception { |
String nv = "newValue"; | String nv = "newValue"; | ||
mToTest.setContenu("newValue"); | mToTest.setContenu("newValue"); | ||
- | assertEquals(" message contents is as expected",nv,mToTest.getContenu()); | + | assertEquals(" message contents is as expected",nv,mToTest.getContents()); |
- | assertFalse(" message contents has been modified", mToTest.getContenu().equals(content)); | + | assertFalse(" message contents has been modified", mToTest.getContents().equals(content)); |
} | } | ||
- | </code> | + | </code> |
- | - Dans le menu contextuel, cliquez sur //Run As – JUnit test//. | + | |
- | Enfin, le premier rapport de tests s’affiche ! | + | |
==== Développement (20mn) ==== | ==== Développement (20mn) ==== | ||
Line 232: | Line 260: | ||
+ | Pensez à tester : | ||
+ | * Retrouver un bus de nom donné | ||
+ | <accordion collapsed="true"> | ||
+ | <panel title="Pour en savoir plus"> | ||
==== Pour aller plus loin ==== | ==== Pour aller plus loin ==== | ||
Un "bus à messages" s'appuie sur plusieurs design patterns 'Observeur/Observable" et plus précisément "Publish/Subscribe". Il existe aujourd'hui de nombreuses implémentations de ces systèmes permettant des communications asynchrones, où les consommateurs sont automatiquement notifiés de l'arrivée de message, où les consommateurs peuvent faire des demandes spécifiques, avec des systèmes de filtres complexes, etc. | Un "bus à messages" s'appuie sur plusieurs design patterns 'Observeur/Observable" et plus précisément "Publish/Subscribe". Il existe aujourd'hui de nombreuses implémentations de ces systèmes permettant des communications asynchrones, où les consommateurs sont automatiquement notifiés de l'arrivée de message, où les consommateurs peuvent faire des demandes spécifiques, avec des systèmes de filtres complexes, etc. | ||
- | + | </panel> | |
+ | </accordion> | ||
===== EVALUATION de CE TD ===== | ===== EVALUATION de CE TD ===== | ||
Line 247: | Line 279: | ||
- Les modèles sont cohérents avec le code. | - Les modèles sont cohérents avec le code. | ||
- | [[http://jalon.unice.fr/cours/blay/Cours-blay-20160929210709/BoiteDepot-blay-20160929210839376812?mode_etudiant=false|Jalon de dépôt pour Mme Fornarino : donner comme nom du dépot : Gr<NumeroGroupe><Noms des étudiants>]] | + | [[http://jalon.unice.fr/cours/blay/Cours-blay-20160929210709/BoiteDepot-blay-20160929210839376812?mode_etudiant=false|Jalon de dépôt pour Mme Blay-Fornarino : donner comme nom du dépot : Gr<NumeroGroupe><Noms des étudiants>]] Pour les groupes de Mme Blay-Fornarino date limite 26 septembre minuit |
===== Je sais ===== | ===== Je sais ===== | ||
Line 257: | Line 289: | ||
</box> | </box> | ||
+ | ===== Pour les avancés ===== | ||
+ | |||
+ | |||
+ | [[https://github.com/iluwatar/java-design-patterns/tree/master/producer-consumer/src/main/java/com/iluwatar/producer/consumer|Des exemples de code Producteur/Consommateur]] |