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 | ||
2015_2016:s2:td:td_domaine_partie_2 [2016/02/20 08:31] blay |
2015_2016:s2:td:td_domaine_partie_2 [2016/02/20 10:13] blay [Un robot facteur] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Classes : modélisation et codage ====== | ====== Classes : modélisation et codage ====== | ||
- | <note warning>en cours</note> | ||
- | Objectif : Faire un lien direct entre la modélisation des classes et les codes correspondants. | ||
- | <note>Inspirés de http://www.fresnel.fr/perso/derrode/index.html</note> | + | **Objectifs :** |
+ | - Faire un lien direct entre la modélisation des classes et les codes correspondants. | ||
+ | - Savoir construire un petit modèle de classes et le mettre en oeuvre. | ||
+ | |||
+ | <note>Ce TD est évalué sur toute sa durée et plus spécifiquement sur le dernier exercice.</note> | ||
+ | |||
+ | |||
+ | ===== Classe : Code et modélisation ===== | ||
+ | <note tip> | ||
+ | Les notes de bas de page vous donnent des indications sur certaines actions. Il suffit de laisser la souris sur les renvois. | ||
+ | </note> | ||
+ | <note tip> | ||
+ | Les temps sont donnés à titre indicatif, ce TD doit aller assez vite, il est simple et vise seulement à bien poser le lien entre conception et développement. | ||
+ | </note> | ||
+ | |||
+ | <note>Exercices inspirés de http://www.fresnel.fr/perso/derrode/index.html (le site a disparu... et je n'en trouve plus trace...)</note> | ||
<html> | <html> | ||
<!-- | <!-- | ||
Line 15: | Line 28: | ||
--!> | --!> | ||
</html> | </html> | ||
- | ===== Classe : Code et modélisation ===== | ||
- | <note tip> | ||
- | Les notes de bas de page vous donnent des indications sur certaines actions. Il suffit de laisser la souris sur les renvois. | ||
- | </note> | ||
- | <note tip> | ||
- | Les temps sont donnés à titre indicatif, ce TD doit aller assez vite, il est simple et vise seulement à bien poser le lien entre conception et développement. | ||
- | </note> | ||
==== Classe ''TailleHaie'' (10mn) ==== | ==== Classe ''TailleHaie'' (10mn) ==== | ||
Line 139: | Line 145: | ||
- Et si nous voulions représenter plusieurs sortes de Robot, que ferions-nous? Et si tout robot était un Outil Electrique ? | - Et si nous voulions représenter plusieurs sortes de Robot, que ferions-nous? Et si tout robot était un Outil Electrique ? | ||
+ | ===== Allons plus loin ===== | ||
+ | <note warning>Cet exercice doit être réalisé autant que possible, **seul**. | ||
+ | Vous devez réussir à présent à analyser puis coder un "ptit" problème comme celui-ci. </note> | ||
+ | |||
+ | A présent notre robot peut utiliser un véhicule. | ||
+ | |||
+ | ==== Déplacement d'un véhicule ==== | ||
+ | |||
+ | Un ''véhicule'' a une ''position'' (X, Y en entier). | ||
+ | Il peut se déplacer sur l'axe des x ou des y. | ||
+ | Il peut être initialisé, ce qui le place en position (0,0). | ||
+ | |||
+ | Un ''charriot'' est un véhicule qui se déplace d'un delta de 10 à chaque demande de déplacement : s'il est en (0,0), déplacer le chariot sur X l'amène en (10,0), puis en déplacement sur XY l'amène en (20,10). | ||
+ | |||
+ | Une ''fusee'' est un véhicule qui se déplace d'un delta de 100 à chaque demande de déplacement. | ||
+ | |||
+ | <code> | ||
+ | ===================TESTS Vehicules =================== | ||
+ | Chariot => Vehicule [position=[0,0]] | ||
+ | Avance sur X, position attendue [10,0] : true | ||
+ | Avance sur Y, position attendue [10,10]: true | ||
+ | Fusee => Vehicule [position=[0,0]] | ||
+ | Avance sur position attendue [100,0] : true | ||
+ | Avance sur position attendue [100,100] : true | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Le robot conduit le véhicule ==== | ||
+ | On peut donner un véhicule au robot. Il l'initialise quand il le reçoit. | ||
+ | On peut demander au robot de se déplacer selon un schéma donné : "XYXX"((la méthode toCharArray() appliquée sur une String renvoie un tableau de "Char")). | ||
+ | Le robot déplacera alors le véhicule de X puis de Y puis de X puis de X. | ||
+ | |||
+ | Quand le robot arrête de travailler il ramène le véhicule en position initiale. | ||
+ | |||
+ | Voici un exemple de trace obtenue en testant ce qui est demandé. | ||
+ | |||
+ | <code> | ||
+ | |||
+ | ===================TESTS jardinier & Vehicules =================== | ||
+ | Pas de vehicule : Je suis R2-D2 : je n'ai pas d'outil je n'ai pas de vehicule | ||
+ | Avec un charriot : Je suis R2-D2 : je n'ai pas d'outil , j'ai ce vehicule Chariot => Vehicule [position=[0,0]] | ||
+ | Deplacement du jardinier en XYX, on attend (0,0),(10,0) (10,10) (20,10) | ||
+ | Nouvelle position attendue [20,10] : true | ||
+ | |||
+ | |||
+ | Avec une fusee : Je suis R2-D2 : je n'ai pas d'outil , j'ai ce vehicule Fusee => Vehicule [position=[0,0]] | ||
+ | Deplacement du jardinier en XYX, on attend (0,0),(100,0) (100,100) (200,100) | ||
+ | Nouvelle position attendue [200,100] : true | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ==== Un robot facteur ==== | ||
+ | |||
+ | Nous sommes très content de notre robot jardinier. | ||
+ | Nous décidons de construire un robot facteur. | ||
+ | |||
+ | Il transporte des courriers. | ||
+ | |||
+ | Un courrier est défini par une adresse et un contenu. | ||
+ | Pour des raisons de confidentialité, une fois créé, si on demande l'adresse ou le contenu du courrier, on obtient un texte illisible : Il est crypté. | ||
+ | |||
+ | Pour lire le courrier il faut utiliser un décrypteur. | ||
+ | Quand il est allumé, si on lui présente un courrier, il nous donne l'adresse en clair, sinon il renvoie l'adresse tel que. | ||
+ | |||
+ | Notre robot facteur peut avoir un véhicule pour se déplacer et un décrypteur. | ||
+ | |||
+ | |||
+ | Voici le code pour crypter il est basé sur : [[http://blog.idleman.fr/snippet-14-java-crypter-et-decrypter-une-chaine-de-caractere/|un code]] qui ne prend pas de clef, ici à la construction de l'"Encrypteur" on lui passe une clef qui est évidemment secrète. | ||
+ | |||
+ | <code java> | ||
+ | public class Encryptor { | ||
+ | |||
+ | private final int key; | ||
+ | | ||
+ | public Encryptor(int key) { | ||
+ | super(); | ||
+ | this.key = key; | ||
+ | } | ||
+ | |||
+ | |||
+ | public String encrypt(String password){ | ||
+ | String crypte=""; | ||
+ | for (int i=0; i<password.length();i++) { | ||
+ | int c=password.charAt(i)^(48 + key); | ||
+ | crypte=crypte+(char)c; | ||
+ | } | ||
+ | return crypte; | ||
+ | } | ||
+ | |||
+ | |||
+ | public String decrypt(String password){ | ||
+ | String aCrypter=""; | ||
+ | for (int i=0; i<password.length();i++) { | ||
+ | int c=password.charAt(i)^(48 + key); | ||
+ | aCrypter=aCrypter+(char)c; | ||
+ | } | ||
+ | return aCrypter; | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | </code> |