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 | ||
2018_2019:s2:td:td_classe_code [2019/02/16 18:25] blay [Je sais passer du modèle d'une association au code] |
2018_2019:s2:td:td_classe_code [2019/02/25 09:06] blay [3) Je sais passer du modèle d'une classe avec un attribut et une méthode au code] |
||
---|---|---|---|
Line 5: | Line 5: | ||
**Objectifs :** | **Objectifs :** | ||
- Faire un lien direct entre la modélisation des classes et les codes correspondants. | - Faire un lien direct entre la modélisation des classes et les codes correspondants. | ||
- | + | <note important>Nous faisons le lien entre modèles et codes. | |
- | <note important>Nous faisons le lien entre modèles et codes. | + | Vous pouvez travailler les codes uniquement au niveau du papier (mais c'est peut-être dommage). |
- | Vous pouvez travailler les codes uniquement au niveau du papier. | + | |
Vous devez essentiellement comprendre les grands principes. | Vous devez essentiellement comprendre les grands principes. | ||
</note> | </note> | ||
+ | |||
+ | <alert type="success" icon="glyphicon glyphicon-time" dismiss="true"> | ||
+ | TD de 4 h.\\ | ||
+ | Il n'y a pas de rendus associé à ce TD, cependant il doit faire partie du carnet de bord. | ||
+ | Donc notez bien les points qui vous semblent difficiles, les remarques qu'il vous semble important de diffuser, etc. | ||
+ | </alert> | ||
+ | |||
+ | |||
===== Je comprends ===== | ===== Je comprends ===== | ||
Line 51: | Line 58: | ||
</note> | </note> | ||
+ | |||
+ | |||
+ | === Je visualise les codes à partir du modèle === | ||
+ | |||
+ | [[https://mbf-iut.i3s.unice.fr/doku.php?id=modelio#generer_les_codes|voir ici]] | ||
==== 2) Je sais passer du modèle d'une classe avec un attribut au code ==== | ==== 2) Je sais passer du modèle d'une classe avec un attribut au code ==== | ||
{{:2017_2018:s2:td:engine-1attr.png?200|}} | {{:2017_2018:s2:td:engine-1attr.png?200|}} | ||
+ | <accordion collapsed="true"> | ||
+ | <panel icon="glyphicon glyphicon-download" title="Les codes correspondants"> | ||
Le concept d'"Engin" modélisé ici sous la forme d'une classe contient à présent un attribut qui permet d'exprimer la puissance. Il sera représenté par le code suivant : | Le concept d'"Engin" modélisé ici sous la forme d'une classe contient à présent un attribut qui permet d'exprimer la puissance. Il sera représenté par le code suivant : | ||
Line 84: | Line 97: | ||
?> | ?> | ||
</code> | </code> | ||
+ | |||
+ | </panel> | ||
+ | </accordion> | ||
=== Complétons ce code === | === Complétons ce code === | ||
Pour pouvoir accéder à cet attribut nous allons à présent dans le code définir des //accesseurs//. | Pour pouvoir accéder à cet attribut nous allons à présent dans le code définir des //accesseurs//. | ||
+ | |||
+ | <accordion collapsed="true"> | ||
+ | <panel icon="glyphicon glyphicon-download" title="Ajout des accesseurs"> | ||
Le code de la classe Engin en java devient : | Le code de la classe Engin en java devient : | ||
Line 108: | Line 127: | ||
} | } | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
A partir de ce code, nous pouvons à présent créer une "instance" de la classe "Engine" et lui affecter une puissance de 2000. | A partir de ce code, nous pouvons à présent créer une "instance" de la classe "Engine" et lui affecter une puissance de 2000. | ||
Line 130: | Line 151: | ||
==== 3) Je sais passer du modèle d'une classe avec un attribut et une méthode au code ==== | ==== 3) Je sais passer du modèle d'une classe avec un attribut et une méthode au code ==== | ||
{{:2017_2018:s2:td:engine-stop.png?200|}} | {{:2017_2018:s2:td:engine-stop.png?200|}} | ||
+ | |||
+ | <accordion collapsed="true"> | ||
+ | <panel icon="glyphicon glyphicon-download" title="Les codes correspondants"> | ||
**Code généré en java** | **Code généré en java** | ||
Line 164: | Line 188: | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
Une proposition d'implémentation en java pour ''stop'' : | Une proposition d'implémentation en java pour ''stop'' : | ||
Line 252: | Line 278: | ||
{{:2017_2018:s2:td:14450576294_886eb4b940_b.jpg?300 |}} | {{:2017_2018:s2:td:14450576294_886eb4b940_b.jpg?300 |}} | ||
{{:2017_2018:s2:td:capture_d_e_cran_2018-02-11_a_01.14.10.png?500|}} | {{:2017_2018:s2:td:capture_d_e_cran_2018-02-11_a_01.14.10.png?500|}} | ||
+ | |||
+ | <accordion collapsed="true"> | ||
+ | <panel title="Les codes correspondants"> | ||
+ | |||
**Code java correspondant ** | **Code java correspondant ** | ||
Line 286: | Line 316: | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
Complétons la classe ''Engine'' pour manipuler les pilotes. | Complétons la classe ''Engine'' pour manipuler les pilotes. | ||
+ | <accordion collapsed="true"> | ||
+ | <panel title="Les codes correspondants"> | ||
+ | |||
<code java> | <code java> | ||
public class Engine { | public class Engine { | ||
Line 328: | Line 362: | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
+ | On ajoute des tests | ||
+ | <code java> | ||
+ | @Test | ||
+ | void testInitPilot() { | ||
+ | Engine defiance = new Engine(); | ||
+ | assertTrue(defiance.getPilots()!=null); | ||
+ | } | ||
+ | |||
+ | @Test | ||
+ | void testAddPilot() { | ||
+ | Engine defiance = new Engine(); | ||
+ | //Admiral Nammo | ||
+ | Pilot nammo = new Pilot(); | ||
+ | defiance.addPilotAtRank(nammo, 0); | ||
+ | //Get the pilots of defiance | ||
+ | Pilot[] pilots = defiance.getPilots(); | ||
+ | assertEquals(nammo, pilots[0]); | ||
+ | } | ||
+ | </code> | ||
Utilisons notre nouveau code en complétant le main | Utilisons notre nouveau code en complétant le main | ||
<code java> | <code java> | ||
Line 344: | Line 399: | ||
- | ==== Relation Bidirectionnelle ==== | + | ==== 5) Relation Bidirectionnelle ==== |
{{:2017_2018:s2:td:abf17ef0.png?500|}} | {{:2017_2018:s2:td:abf17ef0.png?500|}} | ||
Line 350: | Line 405: | ||
On peut naviguer à présent du pilote à l'engin et inversement. | On peut naviguer à présent du pilote à l'engin et inversement. | ||
La classe ''Pilot'' générée est donc modifiée. | La classe ''Pilot'' générée est donc modifiée. | ||
- | Remarquez que la mulitplicité de 1 cette fois-ci crée un attribut simple de type Engine | + | Remarquez que la multiplicité de 1 cette fois-ci crée un attribut simple de type Engine |
+ | |||
+ | <accordion collapsed="true"> | ||
+ | <panel title="Les codes correspondants"> | ||
<code java> | <code java> | ||
public class Pilot { | public class Pilot { | ||
- | |||
private Engine drivenEngine; | private Engine drivenEngine; | ||
} | } | ||
Line 374: | Line 431: | ||
} | } | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
Pour tester nous ajoutons à présent l'engin defiance comme celui conduit par l'amiral //nammo// | Pour tester nous ajoutons à présent l'engin defiance comme celui conduit par l'amiral //nammo// | ||
Line 381: | Line 440: | ||
</code> | </code> | ||
- | Nous décidons à présent que l'on ne veut pas que n'importe qui affecte un engin à un pilote (on passe la méthode setDrivenEngine en Protected) et que lorsque l'on affecte un pilote à un engin alors il en devient pilote. Nous modifions nos codes comme suit. | + | Nous décidons à présent que l'on ne veut pas que n'importe qui affecte un engin à un pilote (on passe la méthode setDrivenEngine en Protected) et que lorsque l'on affecte un pilote à un engin alors il en devient pilote. Nous modifions nos codes. |
+ | <accordion collapsed="true"> | ||
+ | <panel title="Les codes correspondants"> | ||
+ | |||
<code java> | <code java> | ||
Line 422: | Line 485: | ||
} | } | ||
+ | </code> | ||
- | + | <code java> | |
public class Pilot { | public class Pilot { | ||
Line 440: | Line 503: | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
+ | Nous testons ce code. | ||
+ | <code java> | ||
+ | @Test | ||
+ | void testSetDriver() { | ||
+ | Engine defiance = new Engine(); | ||
+ | Pilot nammo = new Pilot(); | ||
+ | defiance.addPilotAtRank(nammo, 0); | ||
+ | assertEquals(defiance, nammo.getDrivenEngine(),"The pilot of an engine drives it"); | ||
+ | } | ||
+ | </code> | ||
Nous utilisons ce code. | Nous utilisons ce code. | ||
<code java> | <code java> | ||
Line 453: | Line 528: | ||
</code> | </code> | ||
- | ===== A vous ===== | + | ===== 6) A vous : appliquez tout seul ce qui précède ===== |
{{:2017_2018:s2:td:capture_d_e_cran_2018-01-21_a_23.23.59.png?200|}} | {{:2017_2018:s2:td:capture_d_e_cran_2018-01-21_a_23.23.59.png?200|}} | ||
Line 479: | Line 554: | ||
- Quel code correspond au diagramme de classe UML ci-dessus ? | - Quel code correspond au diagramme de classe UML ci-dessus ? | ||
*/ | */ | ||
- | ===== Je sais passer du modèle d'une relation d'héritage au code ==== | + | ===== 7) Je sais passer du modèle d'une relation d'héritage au code ==== |
{{:2017_2018:s2:td:star-wars-the-old-republic-girl-warrior-lightsabers-battle-smoke-wallpaper-hd.jpg?300 |}} | {{:2017_2018:s2:td:star-wars-the-old-republic-girl-warrior-lightsabers-battle-smoke-wallpaper-hd.jpg?300 |}} | ||
{{:2017_2018:s2:td:weapons.png?400|}} | {{:2017_2018:s2:td:weapons.png?400|}} | ||
+ | |||
+ | <accordion collapsed="true"> | ||
+ | <panel title="Les codes correspondants au diagramme"> | ||
Line 519: | Line 597: | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
Je peux accéder au propriétaire d'une arme quelconque. | Je peux accéder au propriétaire d'une arme quelconque. | ||
Line 527: | Line 607: | ||
excaLight.setBelongsTo(Revan); | excaLight.setBelongsTo(Revan); | ||
</code> | </code> | ||
- | ===== A vous ==== | + | ===== 8) A vous ==== |
/* | /* | ||
Line 538: | Line 618: | ||
- Quel code correspond au diagramme de classe UML ci-dessus ? | - Quel code correspond au diagramme de classe UML ci-dessus ? | ||
- Imaginez que l'on veuille pouvoir demander à une ''Armada'' d'attaquer, quelle méthode devez-vous ajouter? | - Imaginez que l'on veuille pouvoir demander à une ''Armada'' d'attaquer, quelle méthode devez-vous ajouter? | ||
+ | - <accordion collapsed="true"> | ||
+ | <panel title="Voici le code de cette nouvelle méthode, si besoin"> | ||
+ | |||
- Voici le code de cette nouvelle méthode : | - Voici le code de cette nouvelle méthode : | ||
<code java> | <code java> | ||
Line 559: | Line 642: | ||
sithArmada.attack(); | sithArmada.attack(); | ||
</code> | </code> | ||
- | ===== Je sais passer du code au modèle ===== | + | |
+ | </panel> | ||
+ | </accordion> | ||
+ | ===== 9) Je sais passer du code au modèle ===== | ||
<code> | <code> | ||
Line 604: | Line 690: | ||
===== Complétez le diagramme de séquence ===== | ===== Complétez le diagramme de séquence ===== | ||
- | Compléter les deux diagrammes pour introduire : | + | Compléter les diagrammes de classes et séquence pour introduire : |
- les armadas attaquent. Chaque armada demande à ses engins d'attaquer. | - les armadas attaquent. Chaque armada demande à ses engins d'attaquer. | ||