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:49] blay |
2015_2016:s2:td:td_domaine_partie_2 [2016/02/20 10:20] blay [Un robot facteur] |
||
---|---|---|---|
Line 5: | Line 5: | ||
- Savoir construire un petit modèle de classes et le mettre en oeuvre. | - Savoir construire un petit modèle de classes et le mettre en oeuvre. | ||
- | <note>Inspirés de http://www.fresnel.fr/perso/derrode/index.html</note> | + | <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 17: | 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 147: | Line 151: | ||
A présent notre robot peut utiliser un véhicule. | 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). | Un ''véhicule'' a une ''position'' (X, Y en entier). | ||
Line 156: | Line 162: | ||
Une ''fusee'' est un véhicule qui se déplace d'un delta de 100 à chaque demande de déplacement. | 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 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". Le robot déplacera alors le véhicule de X puis de Y puis de X puis de X. | + | 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. | Quand le robot arrête de travailler il ramène le véhicule en position initiale. | ||
Line 164: | Line 184: | ||
<code> | <code> | ||
- | =========================TESTS Jardinier & Vehicule =================== | + | |
- | ===================TESTS Vehicules =================== | + | |
- | Chariot => Vehicule [position=[0,0]] | + | |
- | Avance sur X : Chariot => Vehicule [position=[10,0]] | + | |
- | Avance sur Y : Chariot => Vehicule [position=[10,10]] | + | |
- | Fusee => Vehicule [position=[0,0]] | + | |
- | Avance sur X : Fusee => Vehicule [position=[1000,0]] | + | |
- | Avance sur Y : Fusee => Vehicule [position=[1000,1000]] | + | |
===================TESTS jardinier & Vehicules =================== | ===================TESTS jardinier & Vehicules =================== | ||
Pas de vehicule : Je suis R2-D2 : je n'ai pas d'outil je n'ai pas de vehicule | 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]] | 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) | Deplacement du jardinier en XYX, on attend (0,0),(10,0) (10,10) (20,10) | ||
- | [0,0] | + | Nouvelle position attendue [20,10] : true |
- | [10,0] | + | |
- | [10,10] | + | |
- | [20,10] | + | Avec une fusee : Je suis R2-D2 : je n'ai pas d'outil , j'ai ce vehicule Fusee => Vehicule [position=[0,0]] |
- | Debut du travail pour le jardinier : Je démarre : Tondeuse [vitesse=moyen, cadence=1000] | + | Deplacement du jardinier en XYX, on attend (0,0),(100,0) (100,100) (200,100) |
- | Position du charriot attendue en (0,0): [0,0] | + | Nouvelle position attendue [200,100] : true |
- | Deplacement du jardinier en YYX on l'attend en (10,20) avec la tondeuse | + | |
- | Je suis R2-D2, je tiens : Tondeuse [vitesse=moyen, cadence=1000], j'ai ce vehicule Chariot => Vehicule [position=[10,20]] | + | </code> |
- | Arret du travail pour le jardinier : Merci, la journée a été dure! | + | |
- | Je suis R2-D2 : je n'ai pas d'outil , j'ai ce vehicule Chariot => Vehicule [position=[0,0]] | + | ==== 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é en utilisant un encrypteur donnée plus bas et une clef donnée à la construction du courrier. | ||
+ | |||
+ | |||
+ | |||
+ | 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> | </code> | ||
+ | Exemple de tests de l'encryptor | ||
+ | Encryptor d = new Encryptor(2); | ||
+ | String origine = "Avenue Fabron, Nice"; | ||
+ | String sCryptee = d.encrypt(origine); | ||
+ | System.out.println("Pas lisible " + sCryptee); | ||
+ | String r = d.decrypt(sCryptee); | ||
+ | System.out.println(r + " : " + r.equals(origine)); |