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
2015_2016:s2:td:td_domaine_partie_2 [2016/02/20 09:44]
blay [Le robot conduit le véhicule]
2015_2016:s2:td:td_domaine_partie_2 [2016/02/20 14:33] (current)
blay [Un robot facteur]
Line 203: Line 203:
 Nous décidons de construire un robot facteur. Nous décidons de construire un robot facteur.
  
-Il transporte des courriers. Un courrier est défini par une adresse et un contenu. +Il transporte des courriers. ​
-Pour des raisons de confidentialité 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.+
  
-Notre robot facteur peut  avoir un véhicule ​pour se déplacer et un décrypteur.+Suivez l'​énoncé pas à pas. Il est écrit ainsi pour vous aider. 
 +Des exemples de tests sont donnés pour vous aider, en particulier à définir les méthodes associées à vos classes.
  
  
 +
 +
 +
 +=== 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.
 +
 +Voici le modèle correspondant à la classe "​Encryptor"​
 +
 +{{ :​2015_2016:​s2:​td:​capture_d_e_cran_2016-02-20_a_14.22.00.png?​direct&​200 |}}
 +
 +**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 tests 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>​
 +
 +
 +**QUESTIONS**
 +  - Commencer par créer la classe ''​Encriptor''​ en recopiant "​simplement"​ le code donné plus bas.
 +  - Dans l'​ordre que vous voulez, répondez à ces deux questions, et tester votre code.
 +      - Quel est le modèle de la classe ''​Courrier''? ​
 +      - Quel est son 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.
 +Donc à chaque lecture, un ''​Encryptor''​ est créé avec la clef en paramètre.
 +
 +Exemple de tests et de trace : 
 +<​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>​
 +
 +**QUESTIONS**
 +  - Quelles sont les méthodes de la classe ''​Decrypteur''​ ?
 +  - Implémenter la classe ''​Decrypteur''​.
 +
 +=== Facteur ===
 +Notre robot facteur peut  avoir un véhicule pour se déplacer et un décrypteur pour lire le courrier. Quand on lui remet un courrier, on lui donne la clef pour lire le courrier.
 +
 +
 +Exemple de tests et de trace : 
 +<​code>​
 +System.out.println("​===================TESTS Facteur ==================="​);​
 +Courrier c2 = new Courrier("​Petit Prince Planete","​Je veux etre ton ami ",2);
 +Courrier c3 = new Courrier("​Pere Noel","​Je voudrais un robot voyageur ",5);
 +
 +Facteur facteur = new Facteur("​Hermes"​);​
 +facteur.distribue(c,​3);​
 +facteur.distribue(c2,​2);​
 +facteur.distribue(c3,​2);​
 +
 +String adresse = facteur.lire();​
 +System.out.println("​Je dois aller à " + adresse);
 +facteur.setVehicule(charriot);​
 +facteur.deplacer("​XXYYY"​);​
 +Courrier courrier = facteur.depose();​
 +System.out.println("​Courrier deposé à l'​adresse : " + adresse );
 +System.out.println("​Je suis en  [20,30]: " + charriot.getPosition());​
 +
 +adresse = facteur.lire();​
 +System.out.println("​Je dois aller à :" + adresse);
 +System.out.println("​Je prends ma fusee"​);​
 +facteur.setVehicule(fusee);​
 +facteur.deplacer("​XYXYXYXYXYXYXY"​);​
 +courrier = facteur.depose();​
 +System.out.println("​Courrier depose à l'​adresse " + adresse);
 +System.out.println("​Je suis en [700,700] : " + fusee.getPosition());​
 +
 +adresse = facteur.lire();​
 +System.out.println("​Je dois aller à : " + adresse);
 +System.out.println("​Je ne comprends pas, même pas capable de me donner la bonne clef!"​);​
 +facteur.depose();​
 +System.out.println("​Courrier perdu ");
 +System.out.println("​Je suis toujours en [700,700] : " + fusee.getPosition());​
 +
 +adresse = facteur.lire();​
 +System.out.println("​J'​ai fini :  " + adresse);
 +</​code>​
 +<​code>​
 +===================TESTS Facteur ===================
 +Je dois aller à Avenue Fabron, Nice
 +Courrier deposé à l'​adresse : Avenue Fabron, Nice
 +Je suis en  [20,30]: [20,30]
 +Je dois aller à : Petit Prince Planete
 +Je prends ma fusee
 +Courrier depose à l'​adresse Petit Prince Planete
 +Je suis en [700,700] : [700,700]
 +Je dois aller à :​Wbub'​Ihbk
 +Je ne comprends pas, même pas capable de me donner la bonne clef!
 +Courrier perdu 
 +Je suis toujours en [700,700] : [700,700]
 +J'ai fini :  Rentre chez toi
 +</​code>​
 +
 +**QUESTIONS**
 +  - Quel est le modèle de la classe ''​Facteur''?​ Qu'ont en commun un ''​Facteur''​ et un ''​Jardinier''?​
 +  - Quelles sont les méthodes que doit avoir un Facteur?
 +  - Implémenter la classe ''​Facteur''​
 +
 +=== 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.1455957854.txt.gz · Last modified: 2016/02/20 09:44 by blay