This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
2014_2015:s2:td:td_associations [2015/05/01 10:11] blay created |
2014_2015:s2:td:td_associations [2015/05/01 17:58] blay [Des modèles aux classes : focus sur les associations] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Des modèles aux classes : focus sur les associations ====== | ====== Des modèles aux classes : focus sur les associations ====== | ||
+ | **Deus séances pour ce TD ** | ||
+ | **La semaine du 1 juin, nous réviserons en corrigeant l'examen de l'an dernier! Mais pour cela vous devrez avoir fait vous-même l'examen, puisque vous ferez la correction! ** | ||
+ | Nous allons dans ce TD nous intéresser à un exemple un peu plus complexe de classes fortement liées les unes aux autres. Attention, vous devez modéliser ce problème, l'implémenter et le tester. | ||
+ | Vous pouvez choisir de commencer par implémenter, mais nous vous le déconseillons vivement... Le problème parait simple, mais l'est-il vraiment? | ||
+ | |||
+ | //A la fin de cette feuille, vous avez quelques éléments utiles au niveau du code// | ||
+ | |||
+ | |||
+ | On désire gérer des **processus.**\\ | ||
+ | Un processus se définit par un suite d'**étape**s. | ||
+ | * //Démarrer le processus// revient à //démarrer// la première étape. | ||
+ | * //Avancer dans le processus// consiste à //arrêter// l'étape courante et à démarrer l'étape suivante. | ||
+ | * //Arrêter le processus// consiste à arrêter l'étape courante et à considérer le processus comme terminé, i.e. il ne peut plus avancer, par contre on peut le redémarrer. | ||
+ | * Le //temps pris par un processus// pour s'exécuter correspond à la somme des temps pris par chaque étape. | ||
+ | |||
+ | |||
+ | |||
+ | Un **modèle de processus** se définit comme une suite de modèles d'étapes. | ||
+ | Un **modèle d'étape** est défini par un intitulé par exemple "Aller dans le jardin magique", un temps prévu par exemple "3s". | ||
+ | Le temps moyen prévu par un processus est la somme des temps prévus par chacun des modèles d'étapes. | ||
+ | |||
+ | A partir d'un modèle de processus on crée un processus. | ||
+ | A partir d'un modèle d'étape on crée un étape. | ||
+ | |||
+ | Afficher une étape revient à afficher l'intitulé du modèle d'étape qui lui est associé. | ||
+ | On peut comparer le temps réalisé par une étape avec le temps prévu. | ||
+ | On peut comparer le temps réalisé par un processus avec le temps prévu par son modèle. | ||
+ | |||
+ | On peut savoir parmi les processus correspondant à un modèle celui qui a fait le meilleur temps, c'est pour cela que nous associons le nom d'une personne à un processus. | ||
+ | |||
+ | |||
+ | <note tip>Vous devez "deviner" les méthodes non explicitées mais pourtant absolument nécessaires sur les étapes par exemple.</note> | ||
+ | |||
+ | |||
+ | **Organisez vous comme bon vous semble pour modéliser, implémenter et tester l'ensemble de cette application!** | ||
+ | |||
+ | |||
+ | Surtout pensez aux tests unitaires, ils sont essentiels ici. | ||
+ | |||
+ | Voici un exemple de traces correspondant à un test de validation (pas à un test unitaire!) | ||
+ | <code> | ||
+ | Voici votre défi | ||
+ | Aller dans le jardin Magique en 5000s | ||
+ | Trouver le trésor du Dragon en 5000s | ||
+ | Tuer le dragon en 5000s | ||
+ | Ramener le tresor au chateau des Neiges en 5000s | ||
+ | A vous de jouer | ||
+ | Aller dans le jardin Magique==> Taper quand fini | ||
+ | |||
+ | 4081.0/5000 | ||
+ | Trouver le trésor du Dragon==> Taper quand fini | ||
+ | |||
+ | 478.0/5000 | ||
+ | Tuer le dragon==> Taper quand fini | ||
+ | |||
+ | 570.0/5000 | ||
+ | Voici votre temps : 5129 | ||
+ | -->5129 | ||
+ | Meilleur temps :5129 | ||
+ | Voulez-vous rejouer Y/N | ||
+ | Y | ||
+ | A vous de jouer | ||
+ | Aller dans le jardin Magique==> Taper quand fini | ||
+ | |||
+ | 1652.0/5000 | ||
+ | Trouver le trésor du Dragon==> Taper quand fini | ||
+ | |||
+ | 580.0/5000 | ||
+ | Tuer le dragon==> Taper quand fini | ||
+ | |||
+ | 1447.0/5000 | ||
+ | Voici votre temps : 3679 | ||
+ | -->5129 | ||
+ | -->3679 | ||
+ | Meilleur temps :3679 | ||
+ | Voulez-vous rejouer Y/N | ||
+ | Y | ||
+ | A vous de jouer | ||
+ | Aller dans le jardin Magique==> Taper quand fini | ||
+ | |||
+ | 698.0/5000 | ||
+ | Trouver le trésor du Dragon==> Taper quand fini | ||
+ | |||
+ | 851.0/5000 | ||
+ | Tuer le dragon==> Taper quand fini | ||
+ | |||
+ | 992.0/5000 | ||
+ | Voici votre temps : 2541 | ||
+ | -->5129 | ||
+ | -->3679 | ||
+ | -->2541 | ||
+ | Meilleur temps :2541 | ||
+ | Voulez-vous rejouer Y/N | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ===== Boîte à outils ===== | ||
+ | |||
+ | Pour obtenir le temps en java : | ||
+ | <code java> | ||
+ | //Pour avoir le temps courant | ||
+ | long endTime = System.currentTimeMillis(); | ||
+ | |||
+ | //Faire la différence entre deux temps! | ||
+ | long tempsCourant = (endTime - startTime); | ||
+ | </code> | ||
+ | |||
+ | <code java> | ||
+ | public void testTempsProcessus() throws InterruptedException { | ||
+ | long nbDeMilliSecondes = 100; | ||
+ | .... | ||
+ | // Attendre | ||
+ | Thread.sleep(nbDeMilliSecondes); | ||
+ | </code> | ||
+ | |||
+ | Pour capturer une string au clavier | ||
+ | |||
+ | <code java> | ||
+ | Scanner s = new Scanner(System.in); | ||
+ | String str = s.nextLine(); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | <html> | ||
+ | <!-- | ||
===== Code et associations "simples" ===== | ===== Code et associations "simples" ===== | ||
Line 13: | Line 138: | ||
</note> | </note> | ||
+ | |||
+ | |||
+ | ==== Lire un diagramme de classes : l'importance des associations ==== | ||
+ | |||
+ | - Analyser le diagramme suivant : | ||
+ | |||
+ | |||
+ | |||
+ | , extrait du site http://www.uml-sysml.org/uml/lanalyse-et-la-conception-architecturale | ||
+ | {{ :2014_2015:s2:td:identificationclassester.jpg?200 |}} | ||
+ | |||
+ | |||
==== Association orientée : Multiplicité 1 ==== | ==== Association orientée : Multiplicité 1 ==== | ||
Line 24: | Line 161: | ||
- Modifiez vos codes en conséquence. [[https://mbf-iut.i3s.unice.fr/doku.php?id=2013_2014:s2:td:td_classes-code-associations:codes&#codeetape_2|Les codes]] | - Modifiez vos codes en conséquence. [[https://mbf-iut.i3s.unice.fr/doku.php?id=2013_2014:s2:td:td_classes-code-associations:codes&#codeetape_2|Les codes]] | ||
- Ecrivez des tests !! et Tester votre programme[[ https://mbf-iut.i3s.unice.fr/doku.php?id=2013_2014:s2:td:td_classes-code-associations:codes&#testsetape_2|les tests]] | - Ecrivez des tests !! et Tester votre programme[[ https://mbf-iut.i3s.unice.fr/doku.php?id=2013_2014:s2:td:td_classes-code-associations:codes&#testsetape_2|les tests]] | ||
- | |||
==== Association orientée : Multiplicité 0..* ==== | ==== Association orientée : Multiplicité 0..* ==== | ||
{{ :2013_2014:s2:td:cours-vacataire.png?nolink |}} | {{ :2013_2014:s2:td:cours-vacataire.png?nolink |}} | ||
Line 73: | Line 209: | ||
* On veut connaitre quel est l'enseignant responsable d'un module en fonction d'une année. | * On veut connaitre quel est l'enseignant responsable d'un module en fonction d'une année. | ||
- | <html> | + | |
- | <!-- | + | |
==== Fabriques et Propriétés statiques ==== | ==== Fabriques et Propriétés statiques ==== | ||
Line 93: | Line 228: | ||
<note tip>Hasmap et chaines de caractères et fonctions d'accès..</note> | <note tip>Hasmap et chaines de caractères et fonctions d'accès..</note> | ||
- | --!> | ||
- | </html> | ||
- | |||
- | <html> | ||
- | <!-- | ||
==== Compositions ==== | ==== Compositions ==== | ||
Line 106: | Line 236: | ||
- Implémentez? | - Implémentez? | ||
- | --!> | + | |
- | </html> | + | |
Line 123: | Line 252: | ||
</box> | </box> | ||
+ | --!> | ||
+ | </html> |