This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2015_2016:s2:td:td_classes-code-avancees [2016/03/05 19:07] blay [La classe ''Polygone'' (15mn)] |
2015_2016:s2:td:td_classes-code-avancees [2016/03/11 17:09] (current) bain [Questions] |
||
---|---|---|---|
Line 22: | Line 22: | ||
- Codez-les. | - Codez-les. | ||
+ | <note warning>Comme vu en cours ce matin, conclusion du cours, IL N'Y A PAS D'ATTRIBUTS ''DEPART'' et ''ARRIVEE'' dans le modèle de la classe CHEMIN</note> | ||
<note important>Dans cet exercice, faîtes particulièrement attention aux rôles et à la navigation dans les associations. | <note important>Dans cet exercice, faîtes particulièrement attention aux rôles et à la navigation dans les associations. | ||
</note> | </note> | ||
Line 34: | Line 35: | ||
- Tester votre classe, par exemple en ajoutant une méthode ''ToString''. | - Tester votre classe, par exemple en ajoutant une méthode ''ToString''. | ||
- | <note tip>Même acquis que précédemment et prise en compte des structures (Tableau, ArrayList pour représenter des "suites".</note> | + | <note tip>Même acquis que précédemment et prise en compte des structures (Tableau, ArrayList pour représenter des "suites").</note> |
- | ==== La classe ''Polygone'': V2 ==== | + | ==== La classe ''Polygone'': V2 (10mn) ==== |
* Pour remplir le tableau de points, on a besoin d'une première méthode ''addPoint'' qui ajoutera un point à ceux déjà présents. | * Pour remplir le tableau de points, on a besoin d'une première méthode ''addPoint'' qui ajoutera un point à ceux déjà présents. | ||
- Etendez votre modélisation de la classe ''Polygone'' en UML. | - Etendez votre modélisation de la classe ''Polygone'' en UML. | ||
Line 42: | Line 43: | ||
- Que retenez-vous de cet exercice? Quand se fait le choix de la structure? | - Que retenez-vous de cet exercice? Quand se fait le choix de la structure? | ||
+ | <note tip>Le choix de l'implémentation dépend de ce que l'on fait des objets.</note> | ||
- | + | ===== Votre application : SpyMe ===== | |
- | ==== Votre application : SpyMe ==== | + | |
<note warning>Attention cette fois-ci, la description de l'étude de cas n'est pas complètement structurée; la structure des classes en particulier exige une analyse "globale" de l'étude de cas.</note> | <note warning>Attention cette fois-ci, la description de l'étude de cas n'est pas complètement structurée; la structure des classes en particulier exige une analyse "globale" de l'étude de cas.</note> | ||
Line 52: | Line 53: | ||
* Un internaute peut s'inscrire à l'application en utilisant son compte facebook ou twitter ou un formulaire dédié. | * Un internaute peut s'inscrire à l'application en utilisant son compte facebook ou twitter ou un formulaire dédié. | ||
* Un membre peut enregistrer son parcours : | * Un membre peut enregistrer son parcours : | ||
- | - il déclare sur son téléphone qu'il commence à enregistrer un parcours, | + | - il déclare sur son téléphone qu'il commence à enregistrer un parcours; |
- | - toutes les 10 secondes, un nouveau point est automatiquement créé en demandant au GPS du téléphone la position avec l'heure associée, le point est ajouté au parcours en cours, | + | - toutes les 10 secondes, un nouveau point est automatiquement créé en demandant au GPS du téléphone sa position et l'heure actuelle; le point est ajouté au parcours en cours; Les coordonnées GPS sont des coordonnées sur une sphère et pas des coordonnées cartésiennes, cependant dans le cadre de ce TD, travaillez "simplement" avec des coordonnées cartésiennes; |
- | - il signale la fin du parcours qui est automatiquement enregistré dans notre base de parcours. | + | - le membre signale la fin du parcours qui est automatiquement enregistré dans sa base de parcours. |
- | * un membre peut visualiser les parcours passés : par la distance parcourue, la durée, la vitesse moyenne, la date (jour et heure), le type d'entrainement, ... | + | * Un membre peut visualiser les parcours passés : par la distance parcourue, la durée, la vitesse moyenne, la date (jour et heure), le type d'entrainement, ... |
+ | * En sélectionnant un parcours, un membre peut visualiser un parcours en utilisant googleMAP. | ||
* Un membre peut préciser qu'il veut enregistrer un parcours d'entrainement; dans ce cas, avant le départ, il précise le mode d'entrainement. Pour chaque mode, un temps de relevé des points différent est prévu : marche rapide (2mn), course à pied (10s), vélos (5s), foot (10s), ... | * Un membre peut préciser qu'il veut enregistrer un parcours d'entrainement; dans ce cas, avant le départ, il précise le mode d'entrainement. Pour chaque mode, un temps de relevé des points différent est prévu : marche rapide (2mn), course à pied (10s), vélos (5s), foot (10s), ... | ||
* Un membre peut créer son propre mode d'entrainement en précisant les temps de consultation etc. | * Un membre peut créer son propre mode d'entrainement en précisant les temps de consultation etc. | ||
- | * Un membre qui a précisé son compte twitter, peut demander en début de parcours, que chaque relevé de point soit automatiquement twitter avec le message "Je suis en position ...". | + | * Un membre qui a précisé son compte twitter, peut demander en début de parcours, que chaque relevé de point soit automatiquement "tweetté" avec le message "Je suis en position ...". |
- | === Questions === | + | |
- | Evidemment vous commencez par identifier les cas d'utilisation de haut niveau. Mais ensuite vous pouvez travailler sur tous les points en "même temps". | + | Pouvez-vous étendre votre application pour donner la vitesse moyenne entre deux points donnés d'un parcours? |
+ | |||
+ | ==== Questions ==== | ||
+ | Evidemment vous commencez par identifier les cas d'utilisation de haut niveau. Mais ensuite vous pouvez travailler comme bon vous semble. | ||
* Définir le diagramme de cas d'utilisation | * Définir le diagramme de cas d'utilisation | ||
- | * "Prévoyez" les tests correspondant aux scénarii suivants (soit dans l'outil, soit sur papier en : | + | * "Prévoyez" les tests correspondant aux scénarii suivants (soit dans l'outil, soit sur papier) : |
- "Bipbip" s'inscrit en utilisant son compte "Facebook"; | - "Bipbip" s'inscrit en utilisant son compte "Facebook"; | ||
- "Xavier-Bertrand" s'inscrit en saisissant son nom et déclare son compte twitter; | - "Xavier-Bertrand" s'inscrit en saisissant son nom et déclare son compte twitter; | ||
- "Bipbip" demande l'enregistrement de son parcours lundi. | - "Bipbip" demande l'enregistrement de son parcours lundi. | ||
- "Bipbip" demande également l'enregistrement de son parcours et précise qu'il s'agit d'un entrainement à la course. | - "Bipbip" demande également l'enregistrement de son parcours et précise qu'il s'agit d'un entrainement à la course. | ||
- | - "Bipbip" demande à voir ses parcours triés par la durée : il a courru lundi pendant 20mn et mercredi 30mn. | + | - "Bipbip" demande à voir ses parcours triés par la durée : il a couru lundi pendant 20mn et mercredi 30mn. |
- "Bipbip" demande à voir ses parcours triés par la vitesse moyenne: il a courru lundi à 11km/h et mercredi 10km/h. | - "Bipbip" demande à voir ses parcours triés par la vitesse moyenne: il a courru lundi à 11km/h et mercredi 10km/h. | ||
- "Xavier-Bertrand" déclare un nouveau mode d'entrainement : le Marathon, les relevés ne se font que toutes les minutes. | - "Xavier-Bertrand" déclare un nouveau mode d'entrainement : le Marathon, les relevés ne se font que toutes les minutes. | ||
Line 76: | Line 81: | ||
- | === Pour vous aider === | + | ==== Pour vous aider ==== |
- | == Si vous avez du mal à identifier les "objets" de l'application ... == | + | === Si vous avez du mal à identifier les "objets" de l'application ... === |
{{ :2015_2016:s2:td:courseapiedpk.scenariopointdevuepartiel.jpg?direct&200 |}} | {{ :2015_2016:s2:td:courseapiedpk.scenariopointdevuepartiel.jpg?direct&200 |}} | ||
+ | * Avez-vous besoin d'information supplémentaires sur la notion de Point? Comment faire? | ||
+ | * De quelles informations avez-vous besoin pour construire un Parcours? | ||
+ | * | ||
- | == Gestion du temps == | + | == Obtenir le moment présent == |
+ | |||
+ | <code java> | ||
+ | import java.util.Date; | ||
+ | ................ | ||
+ | //obtenir la date courante | ||
+ | Date date = new Date(); | ||
+ | </code> | ||
+ | |||
+ | === Gestion du temps === | ||
Si vous voulez représenter la gestion du temps (mais vous pouvez vous en passer), voici une approche très simple : | Si vous voulez représenter la gestion du temps (mais vous pouvez vous en passer), voici une approche très simple : | ||
Line 90: | Line 107: | ||
</code> | </code> | ||
- | == Saisir des entiers ou des boolean au clavier == | + | === Saisir des entiers ou des boolean au clavier === |
<code java> | <code java> | ||
import java.util.Scanner; | import java.util.Scanner; | ||
Line 100: | Line 117: | ||
</code> | </code> | ||
- | == Vision Globale == | + | === Vision Globale === |
Attention, votre code ne correspond probablement pas à cela !! | Attention, votre code ne correspond probablement pas à cela !! | ||
+ | |||
<code java> | <code java> | ||
- | public Parcours creerParcours() throws InterruptedException{ | + | public Parcours creerParcours(Membre m) throws InterruptedException{ |
- | Scanner sc = new Scanner(System.in); | + | System.out.println("Creation de parcours "); |
- | PointDate pCourant = null; | + | ... |
- | Parcours parcours = new Parcours(); | + | .... |
- | System.out.println("On commence ? (true or false)"); | + | PointDate pCourant = saisirPointDate(); ; |
- | boolean encore = sc.nextBoolean();; | + | Parcours parcours = new Parcours(pCourant); |
- | int x = 0; | + | boolean encore = true; |
- | int y = 0; | + | |
while (encore){ | while (encore){ | ||
- | System.out.println(" X "); | + | pCourant = saisirPointDate(); |
- | x = sc.nextInt(); | + | |
- | System.out.println(" Y "); | + | |
- | y = sc.nextInt(); | + | |
- | //obtenir la date courante | + | |
- | Date date = new Date(); | + | |
- | pCourant = new PointDate(x,y,date); | + | |
parcours.addPoint(pCourant); | parcours.addPoint(pCourant); | ||
+ | System.out.println("Distance parcourue : " + parcours.distance()); | ||
+ | System.out.println("Durée depuis le départ : " + parcours.duree() + " soit :" + parcours.duree()/1000 + " secondes" ); | ||
+ | .... | ||
System.out.println("On continue ? (true or false)"); | System.out.println("On continue ? (true or false)"); | ||
encore = sc.nextBoolean(); | encore = sc.nextBoolean(); | ||
- | Thread.sleep(10000); //1000 milliseconds is one second. | + | Thread.sleep(intervalle); //1000 milliseconds is one second. |
} | } | ||
return parcours; | return parcours; | ||
} | } | ||
- | </code> | + | |
+ | private PointDate saisirPointDate() { | ||
+ | PointDate pCourant; | ||
+ | int x; | ||
+ | int y; | ||
+ | System.out.println(" X "); | ||
+ | x = sc.nextInt(); | ||
+ | System.out.println(" Y "); | ||
+ | y = sc.nextInt(); | ||
+ | //obtenir la date courante | ||
+ | Date date = new Date(); | ||
+ | pCourant = new PointDate(x,y,date); | ||
+ | return pCourant; | ||
+ | } | ||
+ | </code> | ||
- | <html> | ||
- | <!-- | ||
- | ==== Faîtes tout seul! ==== | ||
- | |||
- | * Vous commencerez par modéliser puis vous vous intéresserez aux codes : | ||
- | * Nous avons besoin de manipuler des triangles. Un triangle c'est un polygone, évidemment. | ||
- | * On veut pouvoir créer un triangle en donnant ses trois sommets : new Triangle (p1, p2, p3) | ||
- | * On veut pouvoir savoir si un triangle est équilatérale. | ||
- | * Pour cela vous aurez besoin de calculer la distance d'un point relativement à un autre. | ||
- | * On ne peut pas ajouter un point à un triangle. | ||
- | --!> | ||
- | </html> |