User Tools

Site Tools


2015_2016:s2:td:td_domaine_partie_2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 11:11]
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. ​
 +
 +
 +=== Courrier ===
 +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é plus bas et une clef donnée à la construction du courrier.
 +**Le courrier ne contient pas le texte initial, ni la clef de cryptage. Elles sont seulement connues à la création du courrier.** On ne peut pas modifier l'​adresse ou le contenu d'un courrier.
 +
 +Exemple de test et de trace : 
 +<​code>​
 +Courrier c = new Courrier("​Avenue Fabron, Nice","​Bravo ", 3);
 +System.out.println("​Courrier adresse illisible " + c.getAdresse());​
 +System.out.println("​Courrier contenu illisible " + c.getContenu());​
 +</​code>​
 +<​code>​
 +  ===================TESTS Courrier ===================
 + ​COurrier adresse illisible rEV]FVuRQA\]}ZPV
 + ​COurrier contenu illisible qARE\
 +</​code>​
 +
 +=== Decrypteur ===
 +Pour lire le courrier il faut utiliser un décrypteur,​ c'est un outil électrique.
 +Quand il est allumé, si on lui présente un courrier, et on lui donne la clef, il nous donne l'​adresse en claire, sinon il renvoie l'​adresse telle que.
 +
 +<​code>​
 +Decrypteur decrypteur = new Decrypteur();​
 +System.out.println("​pas de lecture si non demarre " + decrypteur.read(c,​3));​
 +decrypteur.switchOn();​
 +System.out.println("​lecture efficiente " +  decrypteur.read(c,​3) + " : " +decrypteur.read(c,​3).equals(origine) );
 +</​code>​
 +
 +<​code>​
 +===================TESTS Decrypteur ===================
 +pas de lecture si non demarre rEV]FVuRQA\]}ZPV
 +lecture efficiente Avenue Fabron, Nice : true
 +</​code>​
 +
 +=== Facteur ===
 +Notre robot facteur peut  avoir un véhicule pour se déplacer et un décrypteur.
 +
 +
 +
 +=== Encrypteur ===
 +
 +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>​
  
 +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));​
2015_2016/s2/td/td_domaine_partie_2.txt · Last modified: 2016/02/20 14:33 by blay