User Tools

Site Tools


2017_2018:s3:concprogobjet:td:td7

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
Last revision Both sides next revision
2017_2018:s3:concprogobjet:td:td7 [2017/11/15 22:15]
blay [Pièce équipée]
2017_2018:s3:concprogobjet:td:td7 [2017/12/06 08:12]
blay [Capteurs logiciels à état]
Line 3: Line 3:
  
 ====== Digital Home : application des DP ====== ====== Digital Home : application des DP ======
-<note warning>​DRAFT</​note>​+
 Objectifs de ce TD :  Objectifs de ce TD : 
   - Appréhender une petite application dans sa totalité   - Appréhender une petite application dans sa totalité
Line 59: Line 59:
  
 QUESTION (5 mn):  QUESTION (5 mn): 
-  * Récupérer le code "​bouchon"​ du capteur Physique. **VOUS n'avez pas le droit de le modifier !!** +  * Récupérer le code "​bouchon"​ du {{:​2017_2018:​s3:​concprogobjet:​td:​physicalsensor.jar|capteur Physique}}. **VOUS n'avez pas le droit de le modifier !!** ; vérifiez que les tests passent bien avant de passer à la suite.
 <note tip>​Attention de manière générale on ne fait pas des tests sur des "​string"​ pour tester l'​état des objets. ​ <note tip>​Attention de manière générale on ne fait pas des tests sur des "​string"​ pour tester l'​état des objets. ​
  
Line 66: Line 66:
  
 Les capteurs "​logiciels"​ sont des capteurs qu'il faut interroger pour obtenir la valeur correspondant par exemple à une température ou un éclairage. ​ A un capteur logiciel nous associons un capteur physique. Les capteurs "​logiciels"​ sont des capteurs qu'il faut interroger pour obtenir la valeur correspondant par exemple à une température ou un éclairage. ​ A un capteur logiciel nous associons un capteur physique.
-A votre convenance un capteur logiciel peut modifier la valeur lue dans le capteur physique pour lui associer une unité //e.g. getValue pour un capteur de température retournera la valeur plus "Celsius".//+A votre convenance un capteur logiciel peut modifier la valeur lue dans le capteur physique pour lui associer une unité //e.g. getValue pour un capteur de température retournera la valeur plus "°C", "18 °C".//
  
 Attention, un capteur logiciel renvoie des valeurs sous la forme d'une String. Attention, un capteur logiciel renvoie des valeurs sous la forme d'une String.
-S'il y a une erreur d'​accès ​ au capteur physique quelqu'​elle soit, on voit avoir en réponse "bad value"​.+S'il y a une erreur d'​accès ​ au capteur physique quelqu'​elle soit, on doit avoir en réponse "bad value"​.
  
 QUESTION (15 mn):  QUESTION (15 mn): 
Line 76: Line 76:
    - Tester vos capteurs logiciels.    - Tester vos capteurs logiciels.
  
- 
- 
-Voici le diagramme de classe concernant cette partie, pour vous aider éventuellement. 
- 
-{{ :​2015_2016:​s3:​concprogobjet:​td:​iut.capteurs.jpg?​direct&​300 |}} 
  
 ===== Capteurs logiciels à état ===== ===== Capteurs logiciels à état =====
Line 103: Line 98:
  
  StateLazy sl;  StateLazy sl;
- PhysicalSensor ​ps = new PhysicalSensor("​mySensorLux"​);+ Sensor ​ps = ....;
   
  @Before  @Before
Line 124: Line 119:
  
 QUESTION (15 mn):  QUESTION (15 mn): 
-   - Mettez à jour votre diagramme de classe si besoin. +   - Mettez à jour votre diagramme de classe si besoin ​en identifiant bien les éléments de design pattern
-   ​- ​Définir ​la classe ''​CapteurOnOffLazy''​+   ​- ​Définissez ​la classe ''​CapteurOnOffLazy''​ 
 +   - Testez votre classe, voici des exemples si cela peut vous aider. 
 +<code java> 
 + @Before 
 + public void setUp() throws Exception { 
 +   ps = new PhysicalSensor("​mySensorLux"​);​ 
 +       sOnOffLazy = new SensorOnOff(ps);​ 
 +       sOnOffLazy.setValue("​18"​);​ 
 +
 + 
 + @After 
 + public void tearDown() throws Exception { 
 +
 + 
 + @Test 
 + public void testStateInit() { 
 + assertEquals("​Off at the beginning","​off",​sOnOffLazy.getValue());​ 
 +
 +  
 + @Test 
 + public void testStateOn() throws IOException,​ NonAccessibleSensorException { 
 + sOnOffLazy.on();​ 
 + assertEquals("​On","​18",​sOnOffLazy.getValue());​ 
 + sOnOffLazy.setValue("​20"​);​ 
 + assertEquals("​On","​20",​sOnOffLazy.getValue());​ 
 +
 +  
 + @Test 
 + public void testStateOnOff() throws IOException,​ NonAccessibleSensorException { 
 + sOnOffLazy.on();​ 
 + assertEquals("​On","​18",​sOnOffLazy.getValue());​ 
 + sOnOffLazy.off();​ 
 + assertEquals("​off",​sOnOffLazy.getValue());​ 
 +
 +  
 +  
 +  
 +  
 + @Test 
 + public void testStateLazy() throws IOException,​ NonAccessibleSensorException,​ InterruptedException { 
 + sOnOffLazy.lazy();​ 
 + assertEquals("​18",​sOnOffLazy.getValue());​ 
 + sOnOffLazy.setValue("​20"​);​ 
 + assertEquals("​Lasy access : value non modified",​ "​18",​ sOnOffLazy.getValue());​ 
 +     Thread.sleep(150);​ 
 + assertEquals("​wake up : value modified",​ "​20", ​ sOnOffLazy.getValue() ); 
 + assertEquals("​value modified",​ "​20", ​ sOnOffLazy.getValue() ); 
 +
 +  
 +</​code>​ 
  
 QUESTION (10 mn): //​(Facultatif)//​ QUESTION (10 mn): //​(Facultatif)//​
    * On veut définir des capteurs à un seul bouton (appel de la méthode press).    * On veut définir des capteurs à un seul bouton (appel de la méthode press).
       * L'​état de départ est off.        * L'​état de départ est off. 
-      * Dans l'​état //Off//, si on appuie une fois, on est //On//.  +      * Dans l'​état //Off//, si on appuie une fois (2 appels à off), on est //On//.  
-      * Dans l'​état //On// si on appuie 2 fois on est //Lazy//.  +      * Dans l'​état //On// si on appuie 2 fois (2 appels à on) on est //Lazy//.  
-      * Dans l'​état //Lazy// si on appuie 2 fois on est //Off//.+      * Dans l'​état //Lazy// si on appuie 2 fois (2 appels à lasy) on est //Off//.
    - Mettez à jour votre diagramme de classe si besoin.    - Mettez à jour votre diagramme de classe si besoin.
    - Définir la classe ''​CapteurOneButton''​    - Définir la classe ''​CapteurOneButton''​
Line 145: Line 190:
  
 QUESTION (10 mn):  QUESTION (10 mn): 
-   ​- ​Compléter ​ou corriger ​si besoin votre diagramme de classe ​**sur cette partie**+   ​- ​Complétez ​ou corrigez ​si besoin votre diagramme de classe. 
-   ​- ​Définir ​la classe ''​Piece''​ +   ​- ​Implémentez ​la classe ''​Piece''​ 
-   ​- ​Créer ​un jeu de tests vous permettant de tester votre classe ''​Piece''​. ​+   ​- ​Créez ​un jeu de tests vous permettant de tester votre classe ''​Piece''​. ​
  
-Exemple de trace :+Exemple de l'​appel d'​affichage suite à l'​appel à ''​toString''​ sur une pièce:
 <​code>​ <​code>​
 Salon Salon
Line 157: Line 202:
 ===== Maison numérique ===== ===== Maison numérique =====
  
-Une maison numérique est une composition de lieux dont certaines ​parties sont des composions ​de lieux (l'​étage est composé de la partie enfant et du bureau) et d'​autres sont des pièces (bureaux, chambres, ..).+Une maison numérique est une composition de parties ​dont certains ​parties sont elles-même ​des compositions ​de parties ​(l'​étage est composé de la partie enfant et du bureau) et d'​autres sont des pièces (bureaux, chambres, ..).
  
-Il doit être possible d'​interroger une partie de la maison pour connaitre tous les capteurs qu'​elle contient : Pour une pièce, les capteurs qui lui sont associés, pour une partie, ses propres capteurs (par exemple, le thermostat de l'​étage) + les capteurs des parties qui la compose.+Il doit être possible d'​interroger une partie de la maison pour connaitre tous les capteurs qu'​elle contient : Pour une pièce, les capteurs qui lui sont associés, pour une partie ​composite, ses propres capteurs (par exemple, le thermostat de l'​étage) + les capteurs des parties qui la compose.
  
  
  
 +Voici la maison que vous devez modéliser : 
 +  - Un RDC, un étage et un extérieur.
 +  - Un étage avec 2 chambres, chacune avec son thermometre et un thermostat global à l'​étage ​
 +  - etc.
 +{{ :​2015_2016:​s3:​concprogobjet:​td:​maisonnumerique.png?​direct&​300 |}}
  
 QUESTION (25 mn):  QUESTION (25 mn): 
-  * Modéliser ​la classe ''​MaisonNumerique''​ et **tout** ce qui est nécessaire pour répondre aux exigences.+  * Modélisez ​la classe ''​MaisonNumerique''​ et **tout** ce qui est nécessaire pour répondre aux exigences.
   * Avez-vous utilisé un ou des DP? Si oui, annotez vos classes avec des "​stéréotypes"​ permettant d'​identifier les différents rôles joués par vos classes.   * Avez-vous utilisé un ou des DP? Si oui, annotez vos classes avec des "​stéréotypes"​ permettant d'​identifier les différents rôles joués par vos classes.
-  * Implémenter ​et tester ​la.+  * Implémentez ​et testez ​la
 +  * Implémentez la maison donnée ci-après, et vérifiez que vous êtes bien capable de la représenter.
  
 <note tip>Oui oui, l'​énoncé n'est pas mâché... Il est possible que vous deviez réécrire des codes, mais maintenant ce n'est plus un problème n'​est-ce pas?  <note tip>Oui oui, l'​énoncé n'est pas mâché... Il est possible que vous deviez réécrire des codes, mais maintenant ce n'est plus un problème n'​est-ce pas? 
Line 175: Line 226:
  
  
-Voici la maison ​que vous devez modéliser :  + 
-  - Un RDCUn étage et un extérieur+Voici une nouvelle ​maison, ​décrite ​un peu différemment
-  - Un étage avec 2 chambres, chacune avec son thermometre et un thermostat global à l'​étage ​ + 
-  - etc+<​code>​ 
-{{ :​2015_2016:​s3:​concprogobjet:​td:​maisonnumerique.png?​direct&​300 |}}+maison = new Maison(); 
 +rdc = new PartieMaison("​RDC"​);​ 
 +cuisine = new Piece("​Cusine"​);​ 
 +sam = new Piece("​Salle e manger"​);​ 
 + 
 +parentalPart = new PartieMaison("​Partie Parentale"​);​ 
 +chambreParents = new Piece("​parents"​);​ 
 +sdbParent = new Piece("​salle de bain des parents"​);​ 
 +parentalPart.addLieu(chambreParents);​ 
 +parentalPart.addLieu(sdbParent);​ 
 +parentalPart.addSensor(thermostatParental);​ 
 + 
 +rdc.addLieu(cuisine);​ 
 +rdc.addLieu(sam);​ 
 +rdc.addLieu(parentalPart);​ 
 + 
 + 
 +etage = new PartieMaison("​Etage"​);​ 
 +chambre1 = new Piece("​Chambre1"​);​ 
 +chambre2 = new Piece("​Chambre2"​);​ 
 +etage.addLieu(chambre2);​ 
 +etage.addLieu(chambre1);​ 
 + 
 +exterieur = new PartieMaison("​Exterieur"​);​ 
 +exterieur.addSensor(externeDetecteurLumiere);​ 
 +maison.addLieu(rdc);​ 
 +maison.addLieu(etage);​ 
 +maison.addLieu(exterieur);​ 
 + 
 +</​code>​
 ===== Tableaux de Contrôle ===== ===== Tableaux de Contrôle =====
  
Line 395: Line 475:
  
 <box round rgb(150,​290,​190) rgb(198,​226,​150) 75%|Rendu en fonction du groupe de TD >  <box round rgb(150,​290,​190) rgb(198,​226,​150) 75%|Rendu en fonction du groupe de TD > 
-  * Mettez un mail à votre encadreur pour Mme Lecat ou [[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20151205174816497430?​mode_etudiant=false|par dépôt ​sur Jalon]] pour Mme Blay-Fornarino avec une archive à vos Noms, qui contient : +  *  [[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20161122213044309075?​mode_etudiant=true&​tab=deposit|Dépôt ​sur Jalon]] pour Mme Blay-Fornarino avec une archive à vos Noms, qui contient : 
   * Un document contenant ​   * Un document contenant ​
-             * votre modèle de classe final intégré dans un document pour que nous n'​ayons pas à ouvrir différents modèles dans différentes versions de l'​outil,​ +             * votre **modèle de classe final** intégré dans un document pour que nous n'​ayons pas à ouvrir différents modèles dans différentes versions de l'​outil,​
-             * les évolutions du modèle+
              * des explications sur les raisons de ce modèle (dont vous êtes très fiers) et les leçons apprises.              * des explications sur les raisons de ce modèle (dont vous êtes très fiers) et les leçons apprises.
   * Les codes et les tests. ​   * Les codes et les tests. ​
2017_2018/s3/concprogobjet/td/td7.txt · Last modified: 2017/12/06 10:42 by blay