02-DecouvrirJava.html 70 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="generator" content="pandoc" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  7. <title>Decouvrir Java</title>
  8. <style type="text/css">
  9. code{white-space: pre-wrap;}
  10. span.smallcaps{font-variant: small-caps;}
  11. span.underline{text-decoration: underline;}
  12. div.column{display: inline-block; vertical-align: top; width: 50%;}
  13. </style>
  14. <style type="text/css">
  15. a.sourceLine { display: inline-block; line-height: 1.25; }
  16. a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
  17. a.sourceLine:empty { height: 1.2em; position: absolute; }
  18. .sourceCode { overflow: visible; }
  19. code.sourceCode { white-space: pre; position: relative; }
  20. div.sourceCode { margin: 1em 0; }
  21. pre.sourceCode { margin: 0; }
  22. @media screen {
  23. div.sourceCode { overflow: auto; }
  24. }
  25. @media print {
  26. code.sourceCode { white-space: pre-wrap; }
  27. a.sourceLine { text-indent: -1em; padding-left: 1em; }
  28. }
  29. pre.numberSource a.sourceLine
  30. { position: relative; }
  31. pre.numberSource a.sourceLine:empty
  32. { position: absolute; }
  33. pre.numberSource a.sourceLine::before
  34. { content: attr(data-line-number);
  35. position: absolute; left: -5em; text-align: right; vertical-align: baseline;
  36. border: none; pointer-events: all;
  37. -webkit-touch-callout: none; -webkit-user-select: none;
  38. -khtml-user-select: none; -moz-user-select: none;
  39. -ms-user-select: none; user-select: none;
  40. padding: 0 4px; width: 4em;
  41. color: #aaaaaa;
  42. }
  43. pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
  44. div.sourceCode
  45. { }
  46. @media screen {
  47. a.sourceLine::before { text-decoration: underline; }
  48. }
  49. code span.al { color: #ff0000; font-weight: bold; } /* Alert */
  50. code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
  51. code span.at { color: #7d9029; } /* Attribute */
  52. code span.bn { color: #40a070; } /* BaseN */
  53. code span.bu { } /* BuiltIn */
  54. code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
  55. code span.ch { color: #4070a0; } /* Char */
  56. code span.cn { color: #880000; } /* Constant */
  57. code span.co { color: #60a0b0; font-style: italic; } /* Comment */
  58. code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
  59. code span.do { color: #ba2121; font-style: italic; } /* Documentation */
  60. code span.dt { color: #902000; } /* DataType */
  61. code span.dv { color: #40a070; } /* DecVal */
  62. code span.er { color: #ff0000; font-weight: bold; } /* Error */
  63. code span.ex { } /* Extension */
  64. code span.fl { color: #40a070; } /* Float */
  65. code span.fu { color: #06287e; } /* Function */
  66. code span.im { } /* Import */
  67. code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
  68. code span.kw { color: #007020; font-weight: bold; } /* Keyword */
  69. code span.op { color: #666666; } /* Operator */
  70. code span.ot { color: #007020; } /* Other */
  71. code span.pp { color: #bc7a00; } /* Preprocessor */
  72. code span.sc { color: #4070a0; } /* SpecialChar */
  73. code span.ss { color: #bb6688; } /* SpecialString */
  74. code span.st { color: #4070a0; } /* String */
  75. code span.va { color: #19177c; } /* Variable */
  76. code span.vs { color: #4070a0; } /* VerbatimString */
  77. code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
  78. </style>
  79. <link rel="stylesheet" href="buttondown.css">
  80. <!--[if lt IE 9]>
  81. <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  82. <![endif]-->
  83. </head>
  84. <body>
  85. <h1 id="découvrir-java">Découvrir Java</h1>
  86. <h2 id="introduction">Introduction</h2>
  87. <p>Dans cette première partie, nous allons découvrir Java sous la forme de petits programmes. Nous n’allons pas tout de suite chercher à faire de programmes complexes, mais nous allons utiliser des mécanismes de la Programmation Orienté Objet et observer leurs effets.</p>
  88. <p>L’idée va être de se familiariser avec différents concepts: classes, instances, interfaces, héritage et même modèles de conception.</p>
  89. <p>Nous allons faire collaborer des objets entre eux afin d’observer des comportements selon la manière dont ils sont assemblés.</p>
  90. <h2 id="premiers-pas">Premiers pas</h2>
  91. <h3 id="bases-du-langage">Bases du langage</h3>
  92. <p>Dans cette partie, des exemples sont donnés pour chaque élément de base du langage.</p>
  93. <p>La documentation Java fournie par Oracle est disponible <a href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/index.html">ici</a>. Elle reprend l’ensemble des concepts abordés;</p>
  94. <h4 id="types-primitifs">Types primitifs</h4>
  95. <p>Dupliquer la classe <code>HelloWorld</code> en une classe <code>TypesPrimitifs</code> (essayez un copier-coller).</p>
  96. <p>Y insérer le code suivant:</p>
  97. <div class="sourceCode" id="cb1"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb1-1" data-line-number="1"><span class="dt">int</span> entier = <span class="dv">3</span>;</a>
  98. <a class="sourceLine" id="cb1-2" data-line-number="2"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>(<span class="st">&quot;entier: &quot;</span>);</a>
  99. <a class="sourceLine" id="cb1-3" data-line-number="3"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(entier);</a>
  100. <a class="sourceLine" id="cb1-4" data-line-number="4"></a>
  101. <a class="sourceLine" id="cb1-5" data-line-number="5"><span class="dt">boolean</span> test = <span class="kw">false</span>;</a>
  102. <a class="sourceLine" id="cb1-6" data-line-number="6"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>(<span class="st">&quot;booléen: &quot;</span>);</a>
  103. <a class="sourceLine" id="cb1-7" data-line-number="7"><span class="co">// Afficher cette valeur avec un System.out.println()</span></a>
  104. <a class="sourceLine" id="cb1-8" data-line-number="8"></a>
  105. <a class="sourceLine" id="cb1-9" data-line-number="9"><span class="dt">float</span> flottant = <span class="fl">2.8f</span>;</a>
  106. <a class="sourceLine" id="cb1-10" data-line-number="10"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>(<span class="st">&quot;flottant: &quot;</span>);</a>
  107. <a class="sourceLine" id="cb1-11" data-line-number="11"><span class="co">// Afficher cette valeur avec un System.out.println()</span></a>
  108. <a class="sourceLine" id="cb1-12" data-line-number="12"></a>
  109. <a class="sourceLine" id="cb1-13" data-line-number="13"><span class="co">//Voir le tableau ci-dessous</span></a></code></pre></div>
  110. <p>Déterminez pourquoi des erreurs de compilation apparaissent avec les types et certaines valeurs ci-dessous :</p>
  111. <table>
  112. <thead>
  113. <tr class="header">
  114. <th>Type</th>
  115. <th>Valeurs à tester</th>
  116. </tr>
  117. </thead>
  118. <tbody>
  119. <tr class="odd">
  120. <td>byte</td>
  121. <td>8 puis 127 puis 128 puis -128 puis -129</td>
  122. </tr>
  123. <tr class="even">
  124. <td>short</td>
  125. <td>-32768 puis -32769</td>
  126. </tr>
  127. <tr class="odd">
  128. <td>int</td>
  129. <td>déterminez les valeurs possibles à utiliser</td>
  130. </tr>
  131. <tr class="even">
  132. <td>long</td>
  133. <td>2L puis déterminez les valeurs possibles à utiliser</td>
  134. </tr>
  135. <tr class="odd">
  136. <td>float</td>
  137. <td>1.5f puis 1.5 puis déterminez les valeurs possibles à utiliser</td>
  138. </tr>
  139. <tr class="even">
  140. <td>double</td>
  141. <td>3.8 puis 9.7d</td>
  142. </tr>
  143. </tbody>
  144. </table>
  145. <div class="line-block">char | ’<br />
  146. String | “” puis “cd” |<br />
  147. boolean | false puis true|</div>
  148. <p>Pour chacun des types, trouvez quelle est la valeur par défaut.</p>
  149. <p>Si besoin, vous pouvez trouver plus d’information sur les types primitifs <a href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html">ici</a></p>
  150. <h4 id="tableaux">Tableaux</h4>
  151. <p>En Java, les types tableaux (<code>array</code>) sont indexés à partir de 0.</p>
  152. <p>Ils sont déclarés grâce à des crochets: <code>[]</code></p>
  153. <div class="sourceCode" id="cb2"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb2-1" data-line-number="1"><span class="dt">int</span>[] tableauEntiers;</a></code></pre></div>
  154. <p>Il est possible de créer des tableaux pour tous les types primitifs, mais aussi pour des objets (par exemple le type <code>String</code>).</p>
  155. <p>Pour créer un nouveau tableau, plusieurs possibilités.</p>
  156. <p><em>Créez une classe </em><code>Tableaux</code>* dans laquelle vous testerez les codes donnés ci-dessous.*</p>
  157. <p>La première, en initialisant le tableau puis chacun de ses éléments:</p>
  158. <div class="sourceCode" id="cb3"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb3-1" data-line-number="1">tableauEntiers = <span class="kw">new</span> <span class="dt">int</span>[<span class="dv">3</span>];</a>
  159. <a class="sourceLine" id="cb3-2" data-line-number="2">tableauEntiers[<span class="dv">0</span>] = <span class="dv">1</span> ; <span class="co">//premier élément</span></a>
  160. <a class="sourceLine" id="cb3-3" data-line-number="3">tableauEntiers[<span class="dv">1</span>] = <span class="dv">2</span> ; <span class="co">//second élément</span></a>
  161. <a class="sourceLine" id="cb3-4" data-line-number="4">tableauEntiers[<span class="dv">2</span>] = <span class="dv">3</span> ; <span class="co">//troisième élément</span></a>
  162. <a class="sourceLine" id="cb3-5" data-line-number="5"></a>
  163. <a class="sourceLine" id="cb3-6" data-line-number="6"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>(<span class="st">&quot;premier élément:&quot;</span>);</a>
  164. <a class="sourceLine" id="cb3-7" data-line-number="7"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(tableauEntiers[<span class="dv">0</span>]);</a>
  165. <a class="sourceLine" id="cb3-8" data-line-number="8"><span class="co">//...</span></a></code></pre></div>
  166. <p>La seconde, en initialisant le tableau puis en lui attribuant un ensemble de valeur:</p>
  167. <div class="sourceCode" id="cb4"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb4-1" data-line-number="1"><span class="dt">int</span>[] tableauEntiers = {<span class="dv">1</span>_<span class="dv">000</span>, <span class="dv">2</span>_<span class="dv">345</span>_<span class="dv">678</span>, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dv">500000</span>,</a>
  168. <a class="sourceLine" id="cb4-2" data-line-number="2"> <span class="dv">600</span>_<span class="dv">000</span>_<span class="dv">000</span>, <span class="dv">7</span>_<span class="dv">000</span>_<span class="dv">000</span>};</a>
  169. <a class="sourceLine" id="cb4-3" data-line-number="3"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">print</span>(<span class="st">&quot;premier élément:&quot;</span>);</a>
  170. <a class="sourceLine" id="cb4-4" data-line-number="4"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(tableauEntiers[<span class="dv">0</span>]);</a>
  171. <a class="sourceLine" id="cb4-5" data-line-number="5"><span class="co">//...</span></a></code></pre></div>
  172. <p>Plus d’informations sur les tableaux sont <a href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html">disponibles ici</a></p>
  173. <h5 id="exercice">Exercice</h5>
  174. <p>Définir un tableau à deux dimensions contenant quatre <code>String</code>.</p>
  175. <ul>
  176. <li>En première ligne: <code>&quot;Nom&quot;</code> et <code>&quot;Prénom&quot;</code></li>
  177. <li>En seconde ligne : <code>&quot;Myriam&quot;</code> et <code>&quot;Makeba&quot;</code></li>
  178. </ul>
  179. <p>Afficher chacune de ces valeurs séparéments.</p>
  180. <h4 id="opérateurs">Opérateurs</h4>
  181. <p>Nous allons expérimentez quelques éléments sur les opérateurs dans une nouvelle classe <code>Operateurs</code> (toujours dans le paquet <code>com.example.hello</code>).</p>
  182. <p>Pour une référence plus complète, vous pouvez trouver des informations <a href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html">ici</a></p>
  183. <h5 id="assignation">Assignation</h5>
  184. <p>L’assignation de valeur se fait grâce au signe <code>=</code> :</p>
  185. <ul>
  186. <li>int entier = 4;</li>
  187. <li>String chaine = “characters”;</li>
  188. </ul>
  189. <h5 id="opérations-arithmétiques">Opérations arithmétiques</h5>
  190. <p>Les opérations arithmétiques simples sont résumées ici:</p>
  191. <table>
  192. <thead>
  193. <tr class="header">
  194. <th>Opérateur</th>
  195. <th>Description</th>
  196. </tr>
  197. </thead>
  198. <tbody>
  199. <tr class="odd">
  200. <td>+</td>
  201. <td>Addition (ou pour le type <code>String</code> : concaténation)</td>
  202. </tr>
  203. <tr class="even">
  204. <td>-</td>
  205. <td>Soustraction</td>
  206. </tr>
  207. <tr class="odd">
  208. <td>*</td>
  209. <td>Multiplication</td>
  210. </tr>
  211. <tr class="even">
  212. <td>/</td>
  213. <td>Division</td>
  214. </tr>
  215. <tr class="odd">
  216. <td>%</td>
  217. <td>Modulo (reste de la division euclidienne)</td>
  218. </tr>
  219. </tbody>
  220. </table>
  221. <p><strong>Exercice</strong></p>
  222. <p>Testez les codes suivants et vérifiez leur validité (<em>est-ce que le résultat produit est bien le résultat attendu ?</em>)</p>
  223. <div class="sourceCode" id="cb5"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb5-1" data-line-number="1"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Hello&quot;</span> + <span class="st">&quot; &quot;</span> + <span class="st">&quot;World&quot;</span>);</a>
  224. <a class="sourceLine" id="cb5-2" data-line-number="2"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>( <span class="dv">1</span> + <span class="dv">3</span>);</a>
  225. <a class="sourceLine" id="cb5-3" data-line-number="3"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;1&quot;</span> + <span class="dv">3</span>);</a>
  226. <a class="sourceLine" id="cb5-4" data-line-number="4"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="fl">1.0</span> + <span class="dv">3</span>);</a>
  227. <a class="sourceLine" id="cb5-5" data-line-number="5"></a>
  228. <a class="sourceLine" id="cb5-6" data-line-number="6"><span class="dt">int</span> dividende = <span class="dv">24</span>;</a>
  229. <a class="sourceLine" id="cb5-7" data-line-number="7"><span class="dt">int</span> diviseur = <span class="dv">5</span>;</a>
  230. <a class="sourceLine" id="cb5-8" data-line-number="8"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Le résultat de &quot;</span> +</a>
  231. <a class="sourceLine" id="cb5-9" data-line-number="9"> dividende +<span class="st">&quot; % &quot;</span> + diviseur + <span class="st">&quot; est &quot;</span> + dividende % diviseur);</a>
  232. <a class="sourceLine" id="cb5-10" data-line-number="10"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Le résultat de &quot;</span> +</a>
  233. <a class="sourceLine" id="cb5-11" data-line-number="11"> dividende +<span class="st">&quot; / &quot;</span> + diviseur + <span class="st">&quot; est &quot;</span> + dividende / diviseur);</a>
  234. <a class="sourceLine" id="cb5-12" data-line-number="12"></a>
  235. <a class="sourceLine" id="cb5-13" data-line-number="13"><span class="dt">double</span> dividendeFlottant = <span class="fl">24.0</span>;</a>
  236. <a class="sourceLine" id="cb5-14" data-line-number="14"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Le résultat de &quot;</span> +</a>
  237. <a class="sourceLine" id="cb5-15" data-line-number="15"> dividendeFlottant +<span class="st">&quot; % &quot;</span> + diviseur + <span class="st">&quot; est &quot;</span> + dividendeFlottant % diviseur);</a>
  238. <a class="sourceLine" id="cb5-16" data-line-number="16"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Le résultat de &quot;</span> +</a>
  239. <a class="sourceLine" id="cb5-17" data-line-number="17"> dividendeFlottant +<span class="st">&quot; / &quot;</span> + diviseur + <span class="st">&quot; est &quot;</span> + dividendeFlottant / diviseur);</a></code></pre></div>
  240. <h5 id="comparaisons-et-opérations-booléennes">Comparaisons et opérations booléennes</h5>
  241. <p>Les opérateurs de comparaisons sont les suivants:</p>
  242. <table>
  243. <thead>
  244. <tr class="header">
  245. <th>Opérateur</th>
  246. <th>Description</th>
  247. </tr>
  248. </thead>
  249. <tbody>
  250. <tr class="odd">
  251. <td>==</td>
  252. <td>égal</td>
  253. </tr>
  254. <tr class="even">
  255. <td>!=</td>
  256. <td>non égal (différent de)</td>
  257. </tr>
  258. <tr class="odd">
  259. <td>&gt;</td>
  260. <td>supérieur</td>
  261. </tr>
  262. <tr class="even">
  263. <td>&gt;=</td>
  264. <td>supérieur ou égal</td>
  265. </tr>
  266. <tr class="odd">
  267. <td>&lt;</td>
  268. <td>inférieur</td>
  269. </tr>
  270. <tr class="even">
  271. <td>&lt;=</td>
  272. <td>inférieur ou égal</td>
  273. </tr>
  274. </tbody>
  275. </table>
  276. <p>Ils renvoient <strong>toujours</strong> une valeur booléenne (<code>boolean</code>).</p>
  277. <h6 id="exercice-1">Exercice</h6>
  278. <p>Testez les codes suivants et vérifiez leur validité (<em>est-ce que le résultat produit est bien le résultat attendu ?</em>)</p>
  279. <div class="sourceCode" id="cb6"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb6-1" data-line-number="1"><span class="dt">int</span> un = <span class="dv">1</span>;</a>
  280. <a class="sourceLine" id="cb6-2" data-line-number="2"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;1 == 2 : &quot;</span> + (<span class="dv">1</span> == <span class="dv">2</span>));</a>
  281. <a class="sourceLine" id="cb6-3" data-line-number="3"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;2 == 1 + 1 : &quot;</span> + (<span class="dv">2</span> == <span class="dv">1</span> + un));</a>
  282. <a class="sourceLine" id="cb6-4" data-line-number="4"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;1 != 2 : &quot;</span> + (<span class="dv">1</span> != <span class="dv">2</span>));</a>
  283. <a class="sourceLine" id="cb6-5" data-line-number="5"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;3 &gt; 3 : &quot;</span> + (<span class="dv">3</span> &gt; <span class="dv">3</span>));</a>
  284. <a class="sourceLine" id="cb6-6" data-line-number="6"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;3 &gt;= 3 : &quot;</span> + (<span class="dv">3</span> &gt;= <span class="dv">3</span>));</a>
  285. <a class="sourceLine" id="cb6-7" data-line-number="7"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;4 &lt; 4 : &quot;</span> + (<span class="dv">4</span> &lt; <span class="dv">4</span>));</a>
  286. <a class="sourceLine" id="cb6-8" data-line-number="8"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;4 &lt;= 4 : &quot;</span> + (<span class="dv">4</span> &lt;= <span class="dv">4</span>));</a></code></pre></div>
  287. <h5 id="opérations-booléennes">Opérations booléennes</h5>
  288. <p>Les opérations <code>ET</code>, <code>OU</code> et <code>NON</code> se font sur des valeurs booléennes:</p>
  289. <table>
  290. <thead>
  291. <tr class="header">
  292. <th>Opérateur</th>
  293. <th>Description</th>
  294. </tr>
  295. </thead>
  296. <tbody>
  297. <tr class="odd">
  298. <td><code>||</code></td>
  299. <td>OU</td>
  300. </tr>
  301. <tr class="even">
  302. <td><code>&amp;&amp;</code></td>
  303. <td>ET</td>
  304. </tr>
  305. <tr class="odd">
  306. <td><code>!</code></td>
  307. <td>NON</td>
  308. </tr>
  309. </tbody>
  310. </table>
  311. <h6 id="exercice-2">Exercice</h6>
  312. <p>Testez les codes suivants et vérifiez leur validité (<em>est-ce que le résultat produit est bien le résultat attendu ?</em>)</p>
  313. <div class="sourceCode" id="cb7"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb7-1" data-line-number="1"><span class="dt">int</span> un = <span class="dv">1</span>;</a>
  314. <a class="sourceLine" id="cb7-2" data-line-number="2"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;false || false : &quot;</span> + (<span class="kw">false</span> || <span class="kw">false</span>));</a>
  315. <a class="sourceLine" id="cb7-3" data-line-number="3"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;false || true : &quot;</span> + (<span class="kw">false</span> || <span class="kw">true</span>));</a>
  316. <a class="sourceLine" id="cb7-4" data-line-number="4"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;true || true : &quot;</span> + (<span class="kw">true</span> || <span class="kw">true</span>));</a>
  317. <a class="sourceLine" id="cb7-5" data-line-number="5"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;false &amp;&amp; true : &quot;</span> + (<span class="kw">false</span> &amp;&amp; <span class="kw">true</span>));</a>
  318. <a class="sourceLine" id="cb7-6" data-line-number="6"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;true &amp;&amp; true : &quot;</span> + (<span class="kw">true</span> &amp;&amp; <span class="kw">true</span>));</a>
  319. <a class="sourceLine" id="cb7-7" data-line-number="7"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;2 == 1 + un &amp;&amp; true : &quot;</span>+ (<span class="dv">2</span> == <span class="dv">1</span> + un || <span class="kw">true</span>));</a>
  320. <a class="sourceLine" id="cb7-8" data-line-number="8"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;NON (2 == 1 + un &amp;&amp; true) : &quot;</span>+ !(<span class="dv">2</span> == <span class="dv">1</span> + un || <span class="kw">true</span>));</a></code></pre></div>
  321. <h4 id="découverte-du-débogueur-eclipse">Découverte du débogueur Eclipse</h4>
  322. <p>Reprenez chacun des codes précédents et lancez-le en utilisant le déboggueur Eclipse (Menu <code>Run &gt; Debug</code> ou le bouton de la barre d’outils ayant l’icône correspondante)</p>
  323. <p>Acceptez le passage dans la <code>Perspective</code> correspondante au mode <code>Debug</code></p>
  324. <p>Ajoutez un point d’arrêt sur la première ligne de votre méthode <code>main</code> et relancez le débogueur.</p>
  325. <p>Visualisez les boutons <code>Step into</code>, <code>Step over</code>.</p>
  326. <ul>
  327. <li>Observez leurs effets</li>
  328. <li>À quoi servent-ils ?</li>
  329. </ul>
  330. <h3 id="objets-et-classes">Objets et classes</h3>
  331. <h4 id="programmation-orientée-objet">Programmation Orientée Objet</h4>
  332. <p>Java est un langage <em>Orienté Objet</em> (OO). Cela signifie que programmer consiste à définir des entités qui vont contenir des données et des comportements. Le programme indique comment ces entités vont interagir entre elles.</p>
  333. <p>Ces entités sont des <strong>objets</strong>.</p>
  334. <p><em>Note: On parle de Programmation Orientée Objet (POO). En anglais: OOP (Object Oriented Programing)</em></p>
  335. <h4 id="un-peu-de-vocabulaire">Un peu de vocabulaire</h4>
  336. <p>Pour créer un <strong>objet</strong>, il faut un modèle (un patron, un moule).</p>
  337. <p>Le modèle d’un <strong>objet</strong> est une <strong>classe</strong>.</p>
  338. <p>À partir de ce modèle, on en créera un exemplaire : un <strong>objet</strong> est une <strong>instance</strong> d’une <strong>classe</strong>.</p>
  339. <p>Parfois, on utilise le mot <strong>type</strong> pour désigner une <strong>classe</strong>. Par exemple, un objet de type <code>Integer</code> désigne une instance de la classe <code>Integer</code>.</p>
  340. <p>Chaque objet possède des <strong>membres</strong> :</p>
  341. <ul>
  342. <li>des informations : ses <strong>attributs</strong></li>
  343. <li>des comportements : ses <strong>méthodes</strong></li>
  344. </ul>
  345. <p>Une <strong>classe</strong> permet de définir ces <strong>membres</strong> (attributs et méthodes) pour tous les <strong>objets</strong> qui seront <strong>instanciés</strong> sur son modèle.</p>
  346. <p>Une méthode est l’équivalent d’une <strong>fonction</strong> en programmation procédurale; sauf que cette <em>fonction</em> permet de manipuler les attributs de l’objet, indépendamment de ceux d’un autre objet.</p>
  347. <h4 id="premières-classes">Premières classes</h4>
  348. <p>Dans un premier temps, il vous est proposé de créer une fonction mathématique permettant de multiplier deux nombres entiers.</p>
  349. <p>Le résultat de cette fonction sera stocké dans l’attribut <code>resultat</code> de l’objet</p>
  350. <h5 id="classe-multiplication">Classe Multiplication</h5>
  351. <p>Implémenter une méthode (que l’on nommera <code>calculer</code>) dans une classe nommée <code>Multiplication</code></p>
  352. <p>Voici un exemple à compléter:</p>
  353. <div class="sourceCode" id="cb8"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb8-1" data-line-number="1"><span class="kw">package</span><span class="im"> com.example.java;</span></a>
  354. <a class="sourceLine" id="cb8-2" data-line-number="2"></a>
  355. <a class="sourceLine" id="cb8-3" data-line-number="3"><span class="kw">public</span> <span class="kw">class</span> Multiplication {</a>
  356. <a class="sourceLine" id="cb8-4" data-line-number="4"> <span class="dt">int</span> resultat ;</a>
  357. <a class="sourceLine" id="cb8-5" data-line-number="5"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">calculer</span>(<span class="dt">int</span> a, <span class="dt">int</span> b){</a>
  358. <a class="sourceLine" id="cb8-6" data-line-number="6"> resultat = a * b;</a>
  359. <a class="sourceLine" id="cb8-7" data-line-number="7"> }</a>
  360. <a class="sourceLine" id="cb8-8" data-line-number="8">}</a></code></pre></div>
  361. <p><strong>Un peu d’UML :</strong> ci-dessous la représentation UML de cette classe</p>
  362. <figure>
  363. <img src="images/Multiplication.png" alt="Multiplication" /><figcaption>Multiplication</figcaption>
  364. </figure>
  365. <hr />
  366. <h5 id="classe-principale">Classe principale</h5>
  367. <p>Pour tester cette classe, nous allons créer une nouvelle classe <em>principale</em> (qui contient une méthode <code>main</code>) dans laquelle on fera appel à la classe <code>Multiplication</code>.</p>
  368. <p>Cette nouvelle classe se nommera <code>Calculer</code>:</p>
  369. <div class="sourceCode" id="cb9"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb9-1" data-line-number="1"><span class="kw">package</span><span class="im"> com.example.java ;</span></a>
  370. <a class="sourceLine" id="cb9-2" data-line-number="2"></a>
  371. <a class="sourceLine" id="cb9-3" data-line-number="3"><span class="kw">public</span> <span class="kw">class</span> Calculer {</a>
  372. <a class="sourceLine" id="cb9-4" data-line-number="4"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  373. <a class="sourceLine" id="cb9-5" data-line-number="5"> <span class="co">//Créer une instance de la nouvelle classe avec le mot clé `new`</span></a>
  374. <a class="sourceLine" id="cb9-6" data-line-number="6"> Multiplication premierCalcul = <span class="kw">new</span> <span class="fu">Multiplication</span>();</a>
  375. <a class="sourceLine" id="cb9-7" data-line-number="7"></a>
  376. <a class="sourceLine" id="cb9-8" data-line-number="8"> <span class="co">// Créer une variable nommée resultat</span></a>
  377. <a class="sourceLine" id="cb9-9" data-line-number="9"> premierCalcul.<span class="fu">calculer</span>(<span class="dv">3</span>, <span class="dv">5</span>); <span class="co">// appel de méthode</span></a>
  378. <a class="sourceLine" id="cb9-10" data-line-number="10"></a>
  379. <a class="sourceLine" id="cb9-11" data-line-number="11"> <span class="co">// Ecrire le résultat du calcul dans la sortie standard</span></a>
  380. <a class="sourceLine" id="cb9-12" data-line-number="12"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Le résultat de 3 multiplié par 5:&quot;</span>);</a>
  381. <a class="sourceLine" id="cb9-13" data-line-number="13"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(premierCalcul.<span class="fu">resultat</span>);</a>
  382. <a class="sourceLine" id="cb9-14" data-line-number="14"> }</a>
  383. <a class="sourceLine" id="cb9-15" data-line-number="15">}</a></code></pre></div>
  384. <h5 id="instantiation">Instantiation</h5>
  385. <p>Dans ce programme, nous avons utilisé le mot clef <code>new</code> qui permet d’<strong>instancier</strong> un objet à partir d’une classe:</p>
  386. <div class="sourceCode" id="cb10"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb10-1" data-line-number="1">Multiplication premierCalcul = <span class="kw">new</span> <span class="fu">Multiplication</span>();</a></code></pre></div>
  387. <p>Ce mot clef permet de faire appel au <strong>constructeur</strong> de la classe. Si aucun <strong>constructeur</strong> n’est explicitement déclaré dans une classe, le compilateur Java crée un constructeur par défaut, c’est-à-dire sans aucun paramètre.</p>
  388. <p>La ligne ci-dessus stocke un <strong>pointeur</strong> vers l’instance créée dans la variable <code>premierCalcul</code>.</p>
  389. <p>Cette variable est déclaré avec un type (la classe) <code>Multiplication</code>.</p>
  390. <h5 id="appel-de-méthode">Appel de méthode</h5>
  391. <p>L’appel d’une méthode est similaire à l’appel d’une fonction dans un autre langage, à la différence près que la méthode est rattachée à un objet.</p>
  392. <p>La ligne suivante permet donc d’appeler la méthode <code>calculer</code> qui est rattachée à l’instance <strong>pointée</strong> par la variable <code>premierCalcul</code>.</p>
  393. <div class="sourceCode" id="cb11"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb11-1" data-line-number="1">premierCalcul.<span class="fu">calculer</span>(<span class="dv">3</span>, <span class="dv">5</span>);</a></code></pre></div>
  394. <h5 id="test-du-programme">Test du programme</h5>
  395. <p>Exécuter votre programme depuis Eclipse</p>
  396. <p>Que constatez-vous ?</p>
  397. <h5 id="classe-addition">Classe Addition</h5>
  398. <p>Implémentez l’opération mathématique <em>Addition</em>. Elle permet d’additionner deux nombres entiers dans une classe nommée <code>Addition</code>, sur le même modèle que la classe <code>Multiplication</code>.</p>
  399. <p>Testez-les avec un code qui devrait ressembler à ceci (toujours dans la classe principale <code>Calculer</code>:</p>
  400. <div class="sourceCode" id="cb12"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb12-1" data-line-number="1">Addition secondCalcul = <span class="kw">new</span> <span class="fu">Addition</span>(); <span class="co">//Instanciation</span></a>
  401. <a class="sourceLine" id="cb12-2" data-line-number="2">secondCalcul.<span class="fu">calculer</span>(<span class="dv">3</span>, <span class="dv">5</span>); <span class="co">//appel de la</span></a>
  402. <a class="sourceLine" id="cb12-3" data-line-number="3"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Le résultat de 3 ajouté à 5:&quot;</span>);</a>
  403. <a class="sourceLine" id="cb12-4" data-line-number="4"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(secondCalcul.<span class="fu">resultat</span>);</a></code></pre></div>
  404. <p>Essayez d’appeler plusieurs fois la méthode additionner sur une même instance et observer l’effet sur l’attribut <code>resultat</code>.</p>
  405. <p>Faites de même sur plusieurs instances différentes (stockées dans des variables <code>troisiemeCalcul</code>, <code>quatriemeCalcul</code>, ou <code>calcul3</code>, <code>calcul4</code>, <code>calcul5</code>, etc).</p>
  406. <p>Que constatez-vous ? Qu’en déduisez-vous ?</p>
  407. <p>Une piste: est-ce que les attributs <code>resultat</code> des différentes instances ont la même valeur ? Quel est l’intérêt de ceci ?</p>
  408. <h4 id="utilisation-du-débogueur-eclipse">Utilisation du débogueur Eclipse</h4>
  409. <p>Reprenez chacun des codes précédents et lancez-le en utilisant le déboggueur Eclipse</p>
  410. <p>Ajoutez un point d’arrêt sur la première ligne de votre méthode <code>calculer</code> et relancez le débogueur.</p>
  411. <p>Visualisez les boutons <code>Step into</code>, <code>Step over</code> et <code>Step return</code>.</p>
  412. <ul>
  413. <li>À quoi peuvent-ils servir ?</li>
  414. <li>Expérimentez et observez</li>
  415. </ul>
  416. <p>Visualisez la zone <code>Variables</code> (en haut à droite)</p>
  417. <ul>
  418. <li>Observez ce qui y est affiché</li>
  419. <li>Dépliez l’arborescence qui y est affichée</li>
  420. </ul>
  421. <h3 id="lhéritage">L’héritage</h3>
  422. <p>Une des particularité de la POO est qu’une classe peut hériter d’une autre classe. Cela a plusieurs avantages, notamment celui de permettre la réutilisation de code déjà écrit.</p>
  423. <p>Ainsi, une classe peut hériter des comportements (méthodes) et données (attributs) d’une classe parente.</p>
  424. <h4 id="création-dune-classe-parente">Création d’une classe parente</h4>
  425. <p>Nous allons observer cela en modifiant le programme réalisé précédemment. Pour cela, nous allons créer une classe <code>Calcul</code> qui contiendra un attribut <code>resultat</code>. Cet attribut ne sera pas déclaré une seconde fois dans les classes qui en héritent.</p>
  426. <p>Fichier <code>Calcul.java</code> :</p>
  427. <div class="sourceCode" id="cb13"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb13-1" data-line-number="1"><span class="kw">package</span><span class="im"> com.example.java;</span></a>
  428. <a class="sourceLine" id="cb13-2" data-line-number="2"></a>
  429. <a class="sourceLine" id="cb13-3" data-line-number="3"><span class="kw">public</span> <span class="kw">class</span> Calcul {</a>
  430. <a class="sourceLine" id="cb13-4" data-line-number="4"> <span class="dt">int</span> resultat ;</a>
  431. <a class="sourceLine" id="cb13-5" data-line-number="5">}</a></code></pre></div>
  432. <h4 id="création-dune-classe-fille">Création d’une classe fille</h4>
  433. <p>Fichier <code>Multiplication.java</code> :</p>
  434. <div class="sourceCode" id="cb14"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb14-1" data-line-number="1"><span class="kw">package</span><span class="im"> com.example.java;</span></a>
  435. <a class="sourceLine" id="cb14-2" data-line-number="2"></a>
  436. <a class="sourceLine" id="cb14-3" data-line-number="3"><span class="kw">public</span> <span class="kw">class</span> Multiplication <span class="kw">extends</span> Calcul {</a>
  437. <a class="sourceLine" id="cb14-4" data-line-number="4"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">calculer</span>(<span class="dt">int</span> a, <span class="dt">int</span> b){</a>
  438. <a class="sourceLine" id="cb14-5" data-line-number="5"> resultat = a * b;</a>
  439. <a class="sourceLine" id="cb14-6" data-line-number="6"> }</a>
  440. <a class="sourceLine" id="cb14-7" data-line-number="7">}</a></code></pre></div>
  441. <p>En relançant le programme précédent, cela devrait continuer à fonctionner.</p>
  442. <h4 id="le-mot-clé-extends">Le mot clé extends</h4>
  443. <p>Nous observons l’utilisation du mot clé <code>extends</code> qui signifie que la classe <code>Multiplication</code> hérite de la classe <code>Calcul</code>.</p>
  444. <p>On peut dire ceci:</p>
  445. <ul>
  446. <li><code>Calcul</code> est la classe parente de la classe <code>Multiplication</code></li>
  447. <li><code>Multiplication</code> est une classe fille de la classe <code>Calcul</code></li>
  448. </ul>
  449. <p><strong>Un peu d’UML :</strong> voici un diagramme de classe qui représente cet héritage</p>
  450. <figure>
  451. <img src="images/Heritage-Calcul.png" alt="Héritage Calcul" /><figcaption>Héritage Calcul</figcaption>
  452. </figure>
  453. <p>On remarque ici que la classe <code>Calcul</code> hérite de la classe <code>Object</code>. La raison est simple: toute classe en Java hérite <strong>toujours</strong> de la classe <code>Object</code>. C’est logique, puisque tout est <em>objet</em> en Java.</p>
  454. <hr />
  455. <h4 id="addition-est-un-calcul">Addition est un Calcul</h4>
  456. <p>Adapter la classe <code>Addition</code> pour correspondre au diagramme suivant:</p>
  457. <figure>
  458. <img src="images/Heritage-Calcul-Addition.png" alt="Héritage Calcul Addition" /><figcaption>Héritage Calcul Addition</figcaption>
  459. </figure>
  460. <h4 id="appel-dune-méthode-de-la-classe-parente">Appel d’une méthode de la classe parente</h4>
  461. <p>Nous allons maintenant écrire une classe <code>Soustraction</code> qui va hériter de la classe <code>Addition</code> contenant la méthode suivante :</p>
  462. <ul>
  463. <li><code>calculer</code> permettant de soustraire deux nombres entiers .</li>
  464. </ul>
  465. <p>Il serait logique ici de dire que cette classe hérite d’<code>Addition</code> puisqu’une soustraction consiste à additionner au premier opérande l’opposé du second opérande : <code>resultat = a + (-b)</code></p>
  466. <p>Il est possible d’appeler une méthode de la classe parente (la classe de niveau <strong>supér</strong>ieur) grâce au mot clé <code>super</code>:</p>
  467. <div class="sourceCode" id="cb15"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb15-1" data-line-number="1"><span class="kw">super</span>.<span class="fu">calculer</span>(<span class="dv">3</span>, <span class="dv">-7</span>); <span class="co">//appel de la fonction de la classe parente</span></a></code></pre></div>
  468. <ol type="1">
  469. <li><strong>Ecrivez cette classe <code>Soustraction</code> et exécuter votre programme.</strong></li>
  470. <li><strong>Dessinez le diagramme UML correspondant.</strong></li>
  471. </ol>
  472. <h4 id="un-peu-dabstraction">Un peu d’abstraction</h4>
  473. <p>D’une manière générale, on peut considérer que <code>Multiplication</code>, <code>Addition</code> et <code>Soustraction</code> sont des calculs arithmétiques.</p>
  474. <p>Ces classes ont toutes en commun une méthode nommée <code>calculer</code>. D’ailleurs, lors des appels de ces méthodes on avait toujours quelque chose de cette forme:</p>
  475. <div class="sourceCode" id="cb16"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb16-1" data-line-number="1">uneInstanceDeCalcul.<span class="fu">calculer</span>(<span class="dv">3</span>, <span class="dv">5</span>);</a></code></pre></div>
  476. <p>Nous pouvons déclarer cette méthode directement dans la classe <code>Calcul</code> et nous allons la déclarer comme étant abstraite. <code>Calcul</code> sera une <strong>abstraction</strong> des autres opérations.</p>
  477. <p>Pour cela, nous allons d’abord modifier la classe <code>Calcul</code>:</p>
  478. <div class="sourceCode" id="cb17"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb17-1" data-line-number="1"><span class="kw">public</span> <span class="kw">abstract</span> <span class="kw">class</span> Calcul {</a>
  479. <a class="sourceLine" id="cb17-2" data-line-number="2"> <span class="dt">int</span> resultat ;</a>
  480. <a class="sourceLine" id="cb17-3" data-line-number="3"> <span class="kw">public</span> <span class="kw">abstract</span> <span class="dt">void</span> <span class="fu">calculer</span>(<span class="dt">int</span> a, <span class="dt">int</span> b);</a>
  481. <a class="sourceLine" id="cb17-4" data-line-number="4">}</a></code></pre></div>
  482. <p>Puis nous allons remplacer les types des variables par le type <code>Calcul</code> dans la classe <code>Calculer</code>:</p>
  483. <div class="sourceCode" id="cb18"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb18-1" data-line-number="1"><span class="kw">public</span> <span class="kw">class</span> Calculer {</a>
  484. <a class="sourceLine" id="cb18-2" data-line-number="2"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  485. <a class="sourceLine" id="cb18-3" data-line-number="3"> Calcul premierCalcul = <span class="kw">new</span> <span class="fu">Multiplication</span>();</a>
  486. <a class="sourceLine" id="cb18-4" data-line-number="4"> premierCalcul.<span class="fu">calculer</span>(<span class="dv">3</span>, <span class="dv">5</span>); <span class="co">// appel de méthode</span></a>
  487. <a class="sourceLine" id="cb18-5" data-line-number="5"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Le résultat de 3 multiplié par 5:&quot;</span>);</a>
  488. <a class="sourceLine" id="cb18-6" data-line-number="6"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(premierCalcul.<span class="fu">resultat</span>);</a>
  489. <a class="sourceLine" id="cb18-7" data-line-number="7"></a>
  490. <a class="sourceLine" id="cb18-8" data-line-number="8"> <span class="co">//...</span></a>
  491. <a class="sourceLine" id="cb18-9" data-line-number="9"> }</a>
  492. <a class="sourceLine" id="cb18-10" data-line-number="10">}</a></code></pre></div>
  493. <p>On constate ici que la compilation passe et que le programme se comporte exactement de la même manière.</p>
  494. <p>Alors quel est l’intérêt de procéder ainsi ? <em>Essayez de remplacer l’un des constructeurs des sous-classes de <code>Calcul</code> par l’un des autres et ré-exécutez le programme pour observer les effets.</em></p>
  495. <p>Le diagramme de classes ci-dessous représente cette classe abstraite, ajoutez-y la classe <code>Soustraction</code>:</p>
  496. <figure>
  497. <img src="images/Heritage-Calcul-Abstract.png" alt="Calcul abstrait" /><figcaption>Calcul abstrait</figcaption>
  498. </figure>
  499. <h5 id="généralisation-héritage">Généralisation, héritage</h5>
  500. <p>Dans l’exemple précédent, on fait une généralisation: <code>Calcul</code> généralise les classes <code>Multiplication</code>, <code>Addition</code> et <code>Soustraction</code>.</p>
  501. <p>A l’inverse, les classes <code>Multiplication</code>, <code>Addition</code> et <code>Soustraction</code> héritent de la classe <code>Calcul</code>: on dit aussi que ces classe spécialisent la classe <code>Calcul</code>. Elles sont spécialisées pour une opération donnée.</p>
  502. <hr />
  503. <p>Nous allons maintenant observer l’héritage dans la documentation de Java.</p>
  504. <h4 id="découverte-de-la-documentation-javadoc">Découverte de la documentation Javadoc</h4>
  505. <p>Ouvrez la documentation JAVA 8 qui se trouve ici : <a href="https://docs.oracle.com/javase/8/docs/api/index.html?overview-summary.html" class="uri">https://docs.oracle.com/javase/8/docs/api/index.html?overview-summary.html</a></p>
  506. <p>Les chaînes de caractères en Java sont gérées par la classe <code>String</code>.</p>
  507. <p>Essayez de trouver la classe <code>String</code> dans cette documentation.</p>
  508. <p>Faites un diagramme UML représentant cette classe (avec au moins sa classe parente).</p>
  509. <p>Toute classe Java hérite toujours de la classe Object. Cette classe contient deux méthodes intéressantes: <code>getClass()</code> et <code>toString()</code></p>
  510. <p>Nous allons expérimenter cela dans ce qui suit.</p>
  511. <h5 id="la-méthode-tostring">La méthode toString()</h5>
  512. <p>Nous allons partir de notre programme <code>Hello World</code> pour lui ajouter quelques fonctionnalités.</p>
  513. <p>Pour cela, nous allons dupliquer cette classe <strong>avec notre explorateur de fichier</strong> (sans utiliser les fonctions d’Eclipse) et en renommant le fichier <code>Exemple.java</code> (toujours dans le même répertoire).</p>
  514. <p>Une fois cela fait, essayez de compiler et de lancer le programme. Que constatez-vous ?</p>
  515. <p>Vous allez modifier le <code>main(String[])</code> en remplaçant le <code>system.out.println</code> comme suit:</p>
  516. <div class="sourceCode" id="cb19"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb19-1" data-line-number="1"><span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  517. <a class="sourceLine" id="cb19-2" data-line-number="2"> <span class="bu">Object</span> instance = <span class="kw">new</span> <span class="fu">Exemple</span>();</a>
  518. <a class="sourceLine" id="cb19-3" data-line-number="3"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(instance); <span class="co">// Affiche</span></a>
  519. <a class="sourceLine" id="cb19-4" data-line-number="4">}</a></code></pre></div>
  520. <p>Lancez le programme (en sélectionnant la classe <code>Exemple</code> comme classe à exécuter). Que constatez-vous ?</p>
  521. <p>Maintenant, vous allez modifier la classe en ajoutant une méthode nommée <code>toString()</code> :</p>
  522. <div class="sourceCode" id="cb20"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb20-1" data-line-number="1"> <span class="kw">public</span> <span class="bu">String</span> <span class="fu">toString</span>(){</a>
  523. <a class="sourceLine" id="cb20-2" data-line-number="2"> <span class="kw">return</span> <span class="st">&quot;Je suis Exemple:&quot;</span> + <span class="kw">super</span>.<span class="fu">toString</span>();</a>
  524. <a class="sourceLine" id="cb20-3" data-line-number="3"> }</a></code></pre></div>
  525. <p>Dans cet exemple, nous venons de concaténer deux chaînes de caractères. C’est l’opérateur <code>+</code> qui permet cela : l’instruction <code>&quot;ab&quot; + &quot;cd&quot;</code> renvoie la valeur <code>&quot;abcd&quot;</code>.</p>
  526. <p>Relancez le programme. Que constatez-vous ?</p>
  527. <p>À nouveau, vous allez modifier la classe en modifiant la méthode <code>toString()</code> :</p>
  528. <div class="sourceCode" id="cb21"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb21-1" data-line-number="1"> <span class="kw">public</span> <span class="bu">String</span> <span class="fu">toString</span>(){</a>
  529. <a class="sourceLine" id="cb21-2" data-line-number="2"> <span class="kw">return</span> <span class="st">&quot;Je suis Exemple (&quot;</span> + <span class="fu">getClass</span>() +<span class="st">&quot; ):&quot;</span>+ <span class="kw">super</span>.<span class="fu">toString</span>();</a>
  530. <a class="sourceLine" id="cb21-3" data-line-number="3"> }</a></code></pre></div>
  531. <p>Relancez le programme. Que constatez-vous ?</p>
  532. <p>Avez-vous des questions ? A quoi sert la méthode <code>toString()</code> ?</p>
  533. <h5 id="un-peu-duml">Un peu d’UML</h5>
  534. <p>Faites un diagramme UML représentant cette classe <code>Exemple</code> ainsi que la classe <code>Object</code>. Représentez également la classe <code>String</code> sur ce diagramme</p>
  535. <hr />
  536. <h2 id="représentation-textuelle-dune-personne">Représentation textuelle d’une Personne</h2>
  537. <p>Nous allons définir une classe personne comme suit:</p>
  538. <div class="sourceCode" id="cb22"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb22-1" data-line-number="1"><span class="kw">public</span> <span class="kw">class</span> Personne {</a>
  539. <a class="sourceLine" id="cb22-2" data-line-number="2"> <span class="bu">String</span> nom;</a>
  540. <a class="sourceLine" id="cb22-3" data-line-number="3"> <span class="bu">String</span> prenom;</a>
  541. <a class="sourceLine" id="cb22-4" data-line-number="4"> <span class="bu">String</span> dateNaissance;</a>
  542. <a class="sourceLine" id="cb22-5" data-line-number="5"> <span class="bu">String</span> adresseMail;</a>
  543. <a class="sourceLine" id="cb22-6" data-line-number="6"> <span class="bu">String</span> telephone;</a>
  544. <a class="sourceLine" id="cb22-7" data-line-number="7"></a>
  545. <a class="sourceLine" id="cb22-8" data-line-number="8"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  546. <a class="sourceLine" id="cb22-9" data-line-number="9"> Personne utilisateur = <span class="kw">new</span> <span class="fu">Personne</span>();</a>
  547. <a class="sourceLine" id="cb22-10" data-line-number="10"></a>
  548. <a class="sourceLine" id="cb22-11" data-line-number="11"> utilisateur.<span class="fu">nom</span> = <span class="st">&quot;McEnroe&quot;</span>;</a>
  549. <a class="sourceLine" id="cb22-12" data-line-number="12"> utilisateur.<span class="fu">prenom</span> = <span class="st">&quot;John&quot;</span>;</a>
  550. <a class="sourceLine" id="cb22-13" data-line-number="13"> utilisateur.<span class="fu">dateNaissance</span> = <span class="st">&quot;10/10/1960&quot;</span>;</a>
  551. <a class="sourceLine" id="cb22-14" data-line-number="14"> utilisateur.<span class="fu">adresseMail</span> = <span class="st">&quot;johnmcenroe@usa.tennis.com&quot;</span>;</a>
  552. <a class="sourceLine" id="cb22-15" data-line-number="15"> utilisateur.<span class="fu">telephone</span> = <span class="st">&quot;+001 203 204 205&quot;</span>;</a>
  553. <a class="sourceLine" id="cb22-16" data-line-number="16"></a>
  554. <a class="sourceLine" id="cb22-17" data-line-number="17"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur.<span class="fu">nom</span>);</a>
  555. <a class="sourceLine" id="cb22-18" data-line-number="18"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur.<span class="fu">prenom</span>);</a>
  556. <a class="sourceLine" id="cb22-19" data-line-number="19"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur);</a>
  557. <a class="sourceLine" id="cb22-20" data-line-number="20"> }</a>
  558. <a class="sourceLine" id="cb22-21" data-line-number="21">}</a></code></pre></div>
  559. <p>Exécutez ce programme. Que constatez-vous ?</p>
  560. <p>Les attributs de cette classe sont:</p>
  561. <ul>
  562. <li>nom</li>
  563. <li>prenom</li>
  564. <li>dateNaissance</li>
  565. <li>adresseMail</li>
  566. <li>telephone</li>
  567. </ul>
  568. <p>Aux attributs de cette classe, on va pouvoir rajouter des méthodes:</p>
  569. <div class="sourceCode" id="cb23"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb23-1" data-line-number="1"><span class="kw">public</span> <span class="kw">class</span> Personne {</a>
  570. <a class="sourceLine" id="cb23-2" data-line-number="2"> <span class="bu">String</span> nom;</a>
  571. <a class="sourceLine" id="cb23-3" data-line-number="3"> <span class="bu">String</span> prenom;</a>
  572. <a class="sourceLine" id="cb23-4" data-line-number="4"> <span class="bu">String</span> dateNaissance;</a>
  573. <a class="sourceLine" id="cb23-5" data-line-number="5"> <span class="bu">String</span> adresseMail;</a>
  574. <a class="sourceLine" id="cb23-6" data-line-number="6"> <span class="bu">String</span> telephone;</a>
  575. <a class="sourceLine" id="cb23-7" data-line-number="7"></a>
  576. <a class="sourceLine" id="cb23-8" data-line-number="8"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  577. <a class="sourceLine" id="cb23-9" data-line-number="9"> Personne utilisateur = <span class="kw">new</span> <span class="fu">Personne</span>();</a>
  578. <a class="sourceLine" id="cb23-10" data-line-number="10"></a>
  579. <a class="sourceLine" id="cb23-11" data-line-number="11"> utilisateur.<span class="fu">nom</span> = <span class="st">&quot;McEnroe&quot;</span>;</a>
  580. <a class="sourceLine" id="cb23-12" data-line-number="12"> utilisateur.<span class="fu">prenom</span> = <span class="st">&quot;John&quot;</span>;</a>
  581. <a class="sourceLine" id="cb23-13" data-line-number="13"> utilisateur.<span class="fu">dateNaissance</span> = <span class="st">&quot;10/10/1960&quot;</span>;</a>
  582. <a class="sourceLine" id="cb23-14" data-line-number="14"> utilisateur.<span class="fu">adresseMail</span> = <span class="st">&quot;johnmcenroe@usa.tennis.com&quot;</span>;</a>
  583. <a class="sourceLine" id="cb23-15" data-line-number="15"> utilisateur.<span class="fu">telephone</span> = <span class="st">&quot;+001 203 204 205&quot;</span>;</a>
  584. <a class="sourceLine" id="cb23-16" data-line-number="16"></a>
  585. <a class="sourceLine" id="cb23-17" data-line-number="17"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur.<span class="fu">nom</span>);</a>
  586. <a class="sourceLine" id="cb23-18" data-line-number="18"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur.<span class="fu">prenom</span>);</a>
  587. <a class="sourceLine" id="cb23-19" data-line-number="19"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur);</a>
  588. <a class="sourceLine" id="cb23-20" data-line-number="20"> }</a>
  589. <a class="sourceLine" id="cb23-21" data-line-number="21"> <span class="kw">public</span> <span class="bu">String</span> <span class="fu">getNomPrenom</span>(){</a>
  590. <a class="sourceLine" id="cb23-22" data-line-number="22"> <span class="kw">return</span> nom+<span class="st">&quot; &quot;</span>+prenom; <span class="co">//Concaténation des chaines nom, &quot; &quot; et prenom</span></a>
  591. <a class="sourceLine" id="cb23-23" data-line-number="23"> }</a>
  592. <a class="sourceLine" id="cb23-24" data-line-number="24"></a>
  593. <a class="sourceLine" id="cb23-25" data-line-number="25"> <span class="kw">public</span> <span class="bu">String</span> <span class="fu">getPrenomNom</span>(){</a>
  594. <a class="sourceLine" id="cb23-26" data-line-number="26"> <span class="kw">return</span> prenom+<span class="st">&quot; &quot;</span>+nom;</a>
  595. <a class="sourceLine" id="cb23-27" data-line-number="27"> }</a>
  596. <a class="sourceLine" id="cb23-28" data-line-number="28">}</a></code></pre></div>
  597. <p>Ces méthodes sont des méthodes d’instance: elles sont liées à un exemplaire de la classe Personne. On peut les utiliser en ajoutant à la fin de la méthode <code>main(String[])</code> les lignes suivantes:</p>
  598. <div class="sourceCode" id="cb24"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb24-1" data-line-number="1"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur.<span class="fu">getNomPrenom</span>());</a>
  599. <a class="sourceLine" id="cb24-2" data-line-number="2"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur.<span class="fu">getPrenomNom</span>());</a></code></pre></div>
  600. <p>Que constatez-vous ?</p>
  601. <p>Nous allons maintenant modifier l’affichage obtenu avec la ligne suivante du <code>main(String[])</code>:</p>
  602. <div class="sourceCode" id="cb25"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb25-1" data-line-number="1"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(utilisateur); <span class="co">// Dépend de la méthode toString()</span></a></code></pre></div>
  603. <p>Pour cela, nous surchargeons la méthode toString qui était déjà définie dans la classe Object:</p>
  604. <div class="sourceCode" id="cb26"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb26-1" data-line-number="1"><span class="kw">public</span> <span class="bu">String</span> <span class="fu">toString</span>(){</a>
  605. <a class="sourceLine" id="cb26-2" data-line-number="2"> <span class="kw">return</span> nom+<span class="st">&quot; &quot;</span>+prenom+<span class="st">&quot; &quot;</span>+dateNaissance+<span class="st">&quot; &quot;</span></a>
  606. <a class="sourceLine" id="cb26-3" data-line-number="3"> +adresseMail+<span class="st">&quot; &quot;</span>+telephone;</a>
  607. <a class="sourceLine" id="cb26-4" data-line-number="4">}</a></code></pre></div>
  608. <p>Que constatez-vous ?</p>
  609. <h3 id="représentation-textuelle-dun-calcul">Représentation textuelle d’un calcul</h3>
  610. <p>Vous allez maintenant reprendre les classes <code>Calcul</code> et ses sous-classes. Modifiez la méthode toString() de cette classe pour que le code suivant:</p>
  611. <div class="sourceCode" id="cb27"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb27-1" data-line-number="1">Calcul calcul = <span class="kw">new</span> <span class="fu">Multiplication</span>();</a>
  612. <a class="sourceLine" id="cb27-2" data-line-number="2">calcul.<span class="fu">calculer</span>(<span class="dv">4</span>,<span class="dv">8</span>);</a>
  613. <a class="sourceLine" id="cb27-3" data-line-number="3"><span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(calcul);</a></code></pre></div>
  614. <p>Produise <strong>exactement</strong> la sortie suivante une fois exécutée:</p>
  615. <pre><code>Le résultat de l&#39;opération Multiplication de 4 et 8 donne 32.</code></pre>
  616. <p>Vous avez la possibilité de rajouter de nouveaux attributs à vos classes afin de stocker (par exemple) les opérandes ou toute information utile.</p>
  617. <h2 id="manipulation-de-chaînes-de-caractères">Manipulation de chaînes de caractères</h2>
  618. <p>Dans la classe <code>Personne</code>, nous avons utilisé des chaînes de caractères avec l’opérateur <code>+</code> : nous avons concaténé des chaînes de caractères entre elles.</p>
  619. <p>Nous allons utiliser ici la classe <code>String</code> afin d’en découvrir quelques aspects importants.</p>
  620. <h3 id="quelques-expériences-étonnantes">Quelques expériences étonnantes</h3>
  621. <p>Exécuter le programme suivant:</p>
  622. <div class="sourceCode" id="cb29"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb29-1" data-line-number="1"></a>
  623. <a class="sourceLine" id="cb29-2" data-line-number="2"><span class="kw">public</span> <span class="kw">class</span> ExerciceChaine {</a>
  624. <a class="sourceLine" id="cb29-3" data-line-number="3"> <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  625. <a class="sourceLine" id="cb29-4" data-line-number="4"> <span class="bu">String</span> uneChaine = <span class="st">&quot;Bonjour&quot;</span> ;</a>
  626. <a class="sourceLine" id="cb29-5" data-line-number="5"> <span class="bu">String</span> autreChaine = <span class="st">&quot;Bonjour&quot;</span> ;</a>
  627. <a class="sourceLine" id="cb29-6" data-line-number="6"></a>
  628. <a class="sourceLine" id="cb29-7" data-line-number="7"> ExerciceChaine ec = <span class="kw">new</span> <span class="fu">ExerciceChaine</span>();</a>
  629. <a class="sourceLine" id="cb29-8" data-line-number="8"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;-- Deux chaines identiques&quot;</span>);</a>
  630. <a class="sourceLine" id="cb29-9" data-line-number="9"> ec.<span class="fu">testChaines</span>(uneChaine, autreChaine);</a>
  631. <a class="sourceLine" id="cb29-10" data-line-number="10"></a>
  632. <a class="sourceLine" id="cb29-11" data-line-number="11"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;-- Une nouvelle instance&quot;</span>);</a>
  633. <a class="sourceLine" id="cb29-12" data-line-number="12"> autreChaine = <span class="kw">new</span> <span class="bu">String</span>(<span class="st">&quot;Bonjour&quot;</span>);</a>
  634. <a class="sourceLine" id="cb29-13" data-line-number="13"> ec.<span class="fu">testChaines</span>(uneChaine, autreChaine);</a>
  635. <a class="sourceLine" id="cb29-14" data-line-number="14"></a>
  636. <a class="sourceLine" id="cb29-15" data-line-number="15"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;-- Une concaténation simple&quot;</span>);</a>
  637. <a class="sourceLine" id="cb29-16" data-line-number="16"> autreChaine = <span class="st">&quot;Bon&quot;</span> + <span class="st">&quot;jour&quot;</span> ;</a>
  638. <a class="sourceLine" id="cb29-17" data-line-number="17"> ec.<span class="fu">testChaines</span>(uneChaine, autreChaine);</a>
  639. <a class="sourceLine" id="cb29-18" data-line-number="18"></a>
  640. <a class="sourceLine" id="cb29-19" data-line-number="19"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;-- Une concaténation avec des variables différentes&quot;</span>);</a>
  641. <a class="sourceLine" id="cb29-20" data-line-number="20"> autreChaine = <span class="st">&quot;Bon&quot;</span> ;</a>
  642. <a class="sourceLine" id="cb29-21" data-line-number="21"> <span class="bu">String</span> troisiemeChaine = <span class="st">&quot;jour&quot;</span>;</a>
  643. <a class="sourceLine" id="cb29-22" data-line-number="22"> autreChaine = autreChaine + troisiemeChaine;</a>
  644. <a class="sourceLine" id="cb29-23" data-line-number="23"> ec.<span class="fu">testChaines</span>(uneChaine, autreChaine);</a>
  645. <a class="sourceLine" id="cb29-24" data-line-number="24"> }</a>
  646. <a class="sourceLine" id="cb29-25" data-line-number="25"> <span class="kw">public</span> <span class="dt">void</span> <span class="fu">testChaines</span>(<span class="bu">String</span> a, <span class="bu">String</span> b){</a>
  647. <a class="sourceLine" id="cb29-26" data-line-number="26"> <span class="kw">if</span>(a == b){</a>
  648. <a class="sourceLine" id="cb29-27" data-line-number="27"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Les chaînes &#39;&quot;</span>+ a + <span class="st">&quot;&#39; et &#39;&quot;</span>+b+ <span class="st">&quot;&#39; sont les mêmes&quot;);</span></a>
  649. <a class="sourceLine" id="cb29-28" data-line-number="28"> }</a>
  650. <a class="sourceLine" id="cb29-29" data-line-number="29"> <span class="kw">else</span>{</a>
  651. <a class="sourceLine" id="cb29-30" data-line-number="30"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Les chaînes &#39;&quot;</span>+ a + <span class="st">&quot;&#39; et &#39;&quot;</span>+b+ <span class="st">&quot;&#39; sont différentes&quot;</span>);</a>
  652. <a class="sourceLine" id="cb29-31" data-line-number="31"> }</a>
  653. <a class="sourceLine" id="cb29-32" data-line-number="32"> }</a>
  654. <a class="sourceLine" id="cb29-33" data-line-number="33">}</a></code></pre></div>
  655. <p>Remplacez la méthode <code>testChaines(String, String)</code> par la suivante:</p>
  656. <div class="sourceCode" id="cb30"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb30-1" data-line-number="1"><span class="kw">public</span> <span class="dt">void</span> <span class="fu">testChaines</span>(<span class="bu">String</span> a, <span class="bu">String</span> b){</a>
  657. <a class="sourceLine" id="cb30-2" data-line-number="2"> <span class="kw">if</span>(a.<span class="fu">equals</span>(b)){</a>
  658. <a class="sourceLine" id="cb30-3" data-line-number="3"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Les chaînes &#39;&quot;</span>+ a + <span class="st">&quot;&#39; et &#39;&quot;</span>+b+ <span class="st">&quot;&#39; sont les mêmes&quot;);</span></a>
  659. <a class="sourceLine" id="cb30-4" data-line-number="4"> }</a>
  660. <a class="sourceLine" id="cb30-5" data-line-number="5"> <span class="kw">else</span>{</a>
  661. <a class="sourceLine" id="cb30-6" data-line-number="6"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">&quot;Les chaînes &#39;&quot;</span>+ a + <span class="st">&quot;&#39; et &#39;&quot;</span>+b+ <span class="st">&quot;&#39; sont différentes&quot;</span>);</a>
  662. <a class="sourceLine" id="cb30-7" data-line-number="7"> }</a>
  663. <a class="sourceLine" id="cb30-8" data-line-number="8">}</a></code></pre></div>
  664. <p>Que constatez-vous ?</p>
  665. <p>Allez voir dans la Javadoc à quoi correspond la méthode <code>equals(Object)</code>.</p>
  666. <p>Pourquoi est-elle utile ?</p>
  667. <h3 id="quelques-méthodes-pour-utiliser-les-string">Quelques méthodes pour utiliser les String</h3>
  668. <p>Exécutez le programme suivant:</p>
  669. <div class="sourceCode" id="cb31"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb31-1" data-line-number="1"><span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(<span class="bu">String</span>[] args) {</a>
  670. <a class="sourceLine" id="cb31-2" data-line-number="2"> <span class="bu">String</span> chaine = <span class="st">&quot;Quelques caractères&quot;</span>;</a>
  671. <a class="sourceLine" id="cb31-3" data-line-number="3"></a>
  672. <a class="sourceLine" id="cb31-4" data-line-number="4"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">length</span>());</a>
  673. <a class="sourceLine" id="cb31-5" data-line-number="5"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">substring</span>(<span class="dv">2</span>));</a>
  674. <a class="sourceLine" id="cb31-6" data-line-number="6"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">substring</span>(<span class="dv">5</span>,<span class="dv">10</span>));</a>
  675. <a class="sourceLine" id="cb31-7" data-line-number="7"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">startsWith</span>(<span class="st">&quot;Que&quot;</span>));</a>
  676. <a class="sourceLine" id="cb31-8" data-line-number="8"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">startsWith</span>(<span class="st">&quot;que&quot;</span>));</a>
  677. <a class="sourceLine" id="cb31-9" data-line-number="9"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">endsWith</span>(<span class="st">&quot;res&quot;</span>));</a>
  678. <a class="sourceLine" id="cb31-10" data-line-number="10"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">endsWith</span>(<span class="st">&quot;re&quot;</span>));</a>
  679. <a class="sourceLine" id="cb31-11" data-line-number="11"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">indexOf</span>(<span class="st">&quot;ra&quot;</span>));</a>
  680. <a class="sourceLine" id="cb31-12" data-line-number="12"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">toLowerCase</span>());</a>
  681. <a class="sourceLine" id="cb31-13" data-line-number="13"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">toUpperCase</span>());</a>
  682. <a class="sourceLine" id="cb31-14" data-line-number="14">}</a></code></pre></div>
  683. <p>Aidez-vous de la Javadoc pour comprendre ce que font chacune de ces méthodes.</p>
  684. <p>En utilisant la chaîne &quot; Je suis une chaîne moi aussi &quot; (attention aux espaces en début et fin de chaîne), testez les effets des méthodes suivantes:</p>
  685. <ul>
  686. <li><code>lastIndexOf(String)</code></li>
  687. <li><code>trim()</code></li>
  688. <li><code>toString()</code></li>
  689. </ul>
  690. <p>Que constatez-vous ? Est-ce logique ?</p>
  691. <h3 id="parcours-dune-chaîne-et-boucles">Parcours d’une chaîne et boucles</h3>
  692. <p>Nous allons utiliser une boucle simple pour récupérer chaque caractère d’une chaîne.</p>
  693. <div class="sourceCode" id="cb32"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb32-1" data-line-number="1"><span class="kw">for</span> (<span class="dt">int</span> i = <span class="dv">0</span> ; i &lt; chaine.<span class="fu">length</span>(); i++) {</a>
  694. <a class="sourceLine" id="cb32-2" data-line-number="2"> <span class="bu">System</span>.<span class="fu">out</span>.<span class="fu">println</span>(chaine.<span class="fu">charAt</span>(i));</a>
  695. <a class="sourceLine" id="cb32-3" data-line-number="3">}</a></code></pre></div>
  696. <p>Analysez le code ci-dessus et posez des questions si vous ne le comprenez-pas.</p>
  697. <h4 id="exercice-palindrome">Exercice: palindrome</h4>
  698. <p>Ecrivez un programme qui détermine si une chaîne entrée au clavier est un palindrome (un mot qui se lit dans les deux sens).</p>
  699. <p><strong>Pour récupérer des chaînes de caractères entrés par un utilisateur voir l’annexe <code>RecuperationDeDonneesDansLaConsole</code></strong></p>
  700. <h2 id="créer-des-objets">Créer des objets</h2>
  701. <p>La création d’objet en Java se fait avec le mot clef <code>new</code>.</p>
  702. <p>L’opération effectuée avec <code>new</code> est appelée une instantiation: on crée une instance (c’est-à-dire un “exemplaire”) d’une classe.</p>
  703. <p>Cette instance est un exemplaire indépendant des autres objets de cette classe.</p>
  704. <h3 id="création-dune-nouvelle-classe">Création d’une nouvelle classe</h3>
  705. <p>Vous allez implémenter une classe nommée <code>Fleur</code> dans le paquet <code>com.example.java.nature</code></p>
  706. <p>Cette classe se fera sur le modèle suivant:</p>
  707. <figure>
  708. <img src="images/Fleur.png" alt="Diagramme de classe: Fleur" /><figcaption>Diagramme de classe: Fleur</figcaption>
  709. </figure>
  710. <p>Implémentez cette classe de sorte que <code>toString()</code> renvoie une valeur ressemblant à <code>nomDeLaFleur(3)</code> (avec <code>nom = &quot;nomDeLaFleur&quot;</code> et <code>identifiant = 3</code></p>
  711. <p>Instanciez cette classe à partir de la méthode <code>main(String[])</code> de <code>Exemple</code> et affichez cette instance avec un <code>System.out.println(String)</code>.</p>
  712. <p>Que constatez-vous ?</p>
  713. <p>Est-on limité par quelque chose ici ?</p>
  714. <h4 id="constructeur">Constructeur</h4>
  715. <p>Pour pouvoir créer cette classe, il existe un constructeur par défaut. Sauf qu’il ne permet pas de modifier les valeurs des attributs.</p>
  716. <p>Créer un nouveau constructeur sur le modèle suivant:</p>
  717. <div class="sourceCode" id="cb33"><pre class="sourceCode java"><code class="sourceCode java"><a class="sourceLine" id="cb33-1" data-line-number="1"><span class="kw">public</span> <span class="fu">Fleur</span>(<span class="bu">String</span> nom, <span class="dt">int</span> identifiant){</a>
  718. <a class="sourceLine" id="cb33-2" data-line-number="2"> <span class="kw">this</span>.<span class="fu">nom</span> = nom;</a>
  719. <a class="sourceLine" id="cb33-3" data-line-number="3"> <span class="kw">this</span>.<span class="fu">identifiant</span> = identifiant;</a>
  720. <a class="sourceLine" id="cb33-4" data-line-number="4">}</a></code></pre></div>
  721. <p>Essayez d’utiliser ce constructeur et d’afficher l’instance depuis la méthode <code>main(String[])</code></p>
  722. <p>Créez ainsi plusieurs instances de <code>Fleur</code> et affichez-les.</p>
  723. </body>
  724. </html>