This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
2018_2019:s2:td:td_classe_code [2019/02/16 19:20] blay [5) Relation Bidirectionnelle] |
2018_2019:s2:td:td_classe_code [2019/02/27 15:25] (current) blay [Des modèles aux codes et vis-versa] |
||
---|---|---|---|
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> | ||
+ | |||
+ | |||
+ | <note tip>**ObjectAid** | ||
+ | sous Install new software > add > http://www.objectaid.com/update/current ... | ||
+ | |||
+ | Puis après avoir relancé Eclipse, sous New > Other > Object Aid..> Classes .... ensuite vous posé simplement les classes à visualiser sur votre diagramme. | ||
+ | </note> | ||
===== Je comprends ===== | ===== Je comprends ===== | ||
Line 60: | Line 71: | ||
{{: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 89: | Line 101: | ||
?> | ?> | ||
</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 113: | Line 131: | ||
} | } | ||
</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 135: | Line 155: | ||
==== 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 169: | Line 192: | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
Une proposition d'implémentation en java pour ''stop'' : | Une proposition d'implémentation en java pour ''stop'' : | ||
Line 257: | Line 282: | ||
{{: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 icon="glyphicon glyphicon-download" title="Les codes correspondants"> | ||
+ | |||
**Code java correspondant ** | **Code java correspondant ** | ||
Line 291: | Line 320: | ||
</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 icon="glyphicon glyphicon-download" title="Les codes correspondants"> | ||
+ | |||
<code java> | <code java> | ||
public class Engine { | public class Engine { | ||
Line 333: | Line 366: | ||
</code> | </code> | ||
+ | </panel> | ||
+ | </accordion> | ||
On ajoute des tests | On ajoute des tests | ||
<code java> | <code java> | ||
Line 375: | Line 410: | ||
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 multiplicité 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 icon="glyphicon glyphicon-download" title="Les codes correspondants"> | ||
<code java> | <code java> | ||
Line 397: | Line 435: | ||
} | } | ||
</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 404: | Line 444: | ||
</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 icon="glyphicon glyphicon-download" title="Les codes correspondants"> | ||
+ | |||
<code java> | <code java> | ||
Line 463: | Line 507: | ||
</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 476: | Line 532: | ||
</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 502: | Line 558: | ||
- 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 icon="glyphicon glyphicon-download" title="Les codes correspondants au diagramme"> | ||
Line 542: | Line 601: | ||
</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 550: | Line 611: | ||
excaLight.setBelongsTo(Revan); | excaLight.setBelongsTo(Revan); | ||
</code> | </code> | ||
- | ===== A vous ==== | + | ===== 8) A vous ==== |
/* | /* | ||
Line 561: | Line 622: | ||
- 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 icon="glyphicon glyphicon-download" 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 582: | Line 646: | ||
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 627: | Line 694: | ||
===== 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. | ||