Objectifs :
Un taille haie est caractérisé par
TailleHaie
.main
et votre test peut ressembler à ce qui suit.public class TestOutils { public static void main(String[] args) { TailleHaie monTailleHaie = new TailleHaie(); System.out.println("Taille Haie crée : " + monTailleHaie); System.out.println("==> Test init : " + (monTailleHaie.getCadence() == 0) ); monTailleHaie.switchOn(); System.out.println("Cadence du Taille Haie en fonctionnement : " + monTailleHaie.getCadence()); System.out.println("==> Test fonctionnement : " + (monTailleHaie.getCadence() == 4500) ); monTailleHaie.switchOff(); System.out.println("Cadence du Taille Haie à l'arret : " + monTailleHaie.getCadence()); System.out.println("==> Test Arret : " + (monTailleHaie.getCadence() == 0) ); } }
Sinon utilisez de préférence des tests unitaires, comme dans l'exemple di-dessous.
import org.junit.Before; import org.junit.Test; public class TailleHaieTest { TailleHaie trimmer; @Before public void setUp() throws Exception { trimmer = new TailleHaie(); } @Test public void init() throws Exception { assertEquals("Taille haie a une cadence initiale de 0",0, trimmer.getCadence()); } @Test public void switchOn() throws Exception { trimmer.switchOn(); assertEquals("Taille haie a une cadence de 4500",4500, trimmer.getCadence()); } @Test public void switchOff() throws Exception { trimmer.switchOn(); trimmer.switchOff(); assertEquals("Taille haie éteinte",0, trimmer.getCadence()); } }
Sur le même modèle, une tondeuse est caractérisée par
System.out.println("=========================TESTS TONDEUSE==================="); Tondeuse maTondeuse = new Tondeuse(); System.out.println("Tondeuse crée : " + maTondeuse); System.out.println("==> Test init : " + (maTondeuse.getCadence() == 0) ); maTondeuse.switchOn(); System.out.println("Cadence de Tondeuse en fonctionnement : " + maTondeuse.getCadence()); System.out.println("==> Test fonctionnement : " + (maTondeuse.getCadence() == 1000) ); maTondeuse.switchOff(); System.out.println("Cadence de Tondeuse à l'arret : " + maTondeuse.getCadence()); System.out.println("==> Test Arret : " + (maTondeuse.getCadence() == 0) );
OutilElectrique
.TailleHaie
et Tondeuse
. La tondeuse a plusieurs vitesses de traction possibles : arret, lent, moyen ou rapide. Il est possible de changer la vitesse de la tondeuse. Au démarrage, sa vitesse est toujours à moyenne. Lorsque l'on éteint la tondeuse sa vitesse passe à arrêt.
enumerate literal
arret, … v = Vitesse.arret;
System.out.println("=========================TESTS TONDEUSE ETENDU ==================="); //La tondeuse a plusieurs vitesses de traction possibles : arret, lent, moyenne ou rapide. maTondeuse.switchOff(); System.out.println("Vitesse de Tondeuse à l'arret attendue "+ Vitesse.arret +"==>" + maTondeuse.getVitesse()); //Il est possible de changer la vitesse de la tondeuse. maTondeuse.switchOn(); System.out.println("Vitesse de Tondeuse au démarrage attendue "+ Vitesse.moyen +"==>" + maTondeuse.getVitesse()); maTondeuse.setVitesse(Vitesse.rapide); System.out.println("Vitesse de Tondeuse attendue "+ Vitesse.rapide +"==>" + maTondeuse.getVitesse()); //Au démarrage, sa vitesse est toujours à l'arrêt. Lorsque l'on éteint la tondeuse sa vitesse passe à arrêt. maTondeuse.switchOff(); System.out.println("Vitesse de Tondeuse à l'arret attendue "+ Vitesse.arret +"==>" + maTondeuse.getVitesse()); maTondeuse.setVitesse(Vitesse.rapide); maTondeuse.switchOn(); System.out.println("Vitesse de Tondeuse au démarrage attendue (alors que on a modifie sa vitesse "+ Vitesse.moyen +"==>" + maTondeuse.getVitesse()); maTondeuse.switchOff();
Il s'agit de développer à présent un robot “Jardinier”. On peut donner un outil à un jardinier, lui demander de travailler ou d'arrêter de travailler.
Jardinier
.=========================TESTS Jardinier =================== Bonjour Je suis R2-D2 : je n'ai pas d'outil Début du travail pour le jardinier : Donnez-moi un outil! On lui a donné la tondeuse : Je suis R2-D2, je tiens : Tondeuse [vitesse=arret, cadence=0] Debut du travail pour le jardinier : Je démarre : Tondeuse [vitesse=moyen, cadence=1000] Arret du travail pour le jardinier : Merci, la journée a été dure! La tondeuse doit être à l'arrêt : Tondeuse [vitesse=arret, cadence=0] Le jardinier n'a plus d'outil : Je suis R2-D2 : je n'ai pas d'outil
Pour vous aider :
public class Jardinier{ // Un constructeur qui prend le nom en parametre public Jardinier(String nom) { this.nom = nom; }
Jardinier monJardinier = new Jardinier("R2-D2");
String ToString()
par exemple : public String toString() { String s = "Je suis " + nom ; if (outil== null) s += " : je n'ai pas d'outil "; else s += ", je tiens : " + outil ; return s; }
A présent notre robot peut utiliser 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.
===================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
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”6). 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é.
===================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
Nous sommes très content de notre robot jardinier. Nous décidons de construire un robot facteur.
Il transporte des courriers.
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.
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”
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 :
String adresseOrigine = "Avenue Fabron, Nice"; Courrier mail = new Courrier(adresseOrigine,"Bravo ", 3); System.out.println("Courrier adresse illisible " + mail.getAdresse()); System.out.println("Courrier contenu illisible " + mail.getContenu());
===================TESTS Courrier =================== Courrier adresse illisible rEV]FVuRQA\]}ZPV Courrier contenu illisible qARE\
QUESTIONS
Encriptor
en recopiant “simplement” le code donné plus bas.getAdresse
est-ce un texte crypté? Courrier
? 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.
Exemple de tests et de trace :
Decryptor decryptor = new Decryptor(); System.out.println("pas de lecture si non demarre " + decryptor.readAddress(mail,3)); decryptor.switchOn(); System.out.println("lecture efficiente " + decryptor.readAddress(mail,3) + " : " + decryptor.readAddress(mail,3).equals(adresseOrigine) );
===================TESTS Decrypteur =================== pas de lecture si non demarre rEV]FVuRQA\]}ZPV lecture efficiente : Avenue Fabron, Nice : true
QUESTIONS
Decryptor
? Quelle est la relation entre Decryptor
et OutilElectrique
?Decryptor
a besoin de créer un Encyptor
à chaque appel en lecture en lui passant la bonne clef.Decryptor
.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 simple:
System.out.println("===================TESTS Facteur ==================="); Facteur facteur = new Facteur("Hermes"); //Une distribution simple facteur.distribue(mail,3); String adresse = facteur.lire(); System.out.println("Je dois aller à " + adresse); facteur.setVehicule(charriot); facteur.deplacer("XXYYY"); Courrier courrierDepose = facteur.depose(); System.out.println("Courrier" + courrierDepose +" deposé à l'adresse : " + adresse ); System.out.println("Je suis en [20,30]: " + charriot.getPosition());
Je dois aller à Avenue Fabron, Nice CourrieroutilsPK.Courrier@511d50c0 deposé à l'adresse : Avenue Fabron, Nice Je suis en [20,30]: [20,30] Je dois aller à Avenue Fabron, Nice Courrier deposé à l'adresse : Avenue Fabron, Nice Je suis en [20,30]: [20,30]
QUESTIONS
Facteur
? Facteur
et un Jardinier
?Facteur
adresse = facteur.lire(); System.out.println("Je dois aller à " + adresse);
Je dois aller à Rentre chez toi
Evidemment notre facteur ne distribue pas un seul courrier.
Exemple de tests et de trace :
System.out.println("===================TESTS Facteur ==================="); //3 courriers sont remis à notre facteur avec pour chacun la clef pour lire leur adresse. 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(mail,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);
===================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
QUESTIONS
Facteur
remplisse bien son rôle ? Facteur
Voici le code pour crypter il est basé sur : un code qui ne prend pas de clef, ici à la construction de l'“Encrypteur” on lui passe une clef qui est évidemment secrète.
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; } }
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));
TailleHaie.java
public class TailleHaie { private int cadence = 4500; //Accesseur en lecture public int getCadence() { return this.cadence; } public void switchOff() { cadence = 0; } public void switchOn() { cadence = 4500; } //Constructeur public TailleHaie(){ this.setCadence(0); } }
public abstract class OutilElectrique { private int cadence = 4500; public int getCadence() { return this.cadence; } protected void setCadence(int cadence){ this.cadence = cadence; } public OutilElectrique() { this.cadence = 0; } public boolean isOn(){ return cadence != 0; } public void switchOff() { cadence = 0; } public abstract void switchOn(); @Override public String toString() { return "OutilElectrique [cadence=" + cadence + "]"; } }Pour la classe qui étend :
public class TailleHaie extends OutilElectrique{ public void switchOn() { this.setCadence(4500); } //Constructeur public TailleHaie(){ this.setCadence(0); } }