YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

French subtitles

← Hériter des comportements

Get Embed Code
13 Languages

Showing Revision 16 created 10/11/2015 by Tessa C..

  1. Retournons à l'appli JustJava
    pendant un instant.
  2. Regardons la classe MainActivity,
    et la méthode displayMessage.
  3. Ça commence à être un peu plus clair ici.
  4. Nous voyons déjà que nous créons
  5. une variable nommée
    orderSummaryTextView.
  6. Le type de données
    de cette variable était TextView.
  7. Mais on ne comprenait pas
    cette partie avant.
  8. Sur la prochaine ligne, nous considérons
    une méthode pour cet objet TextView.
  9. On utilise le même nom de variable
    qui est mentionné ci-dessus.
  10. On l'appelle orderSummaryTextView.setText.
  11. Et nous écrivons une chaîne de caractères
    en tant que méthode de saisie.
  12. Cette chaîne était initialement apparue
    en tant que paramètre de saisie
  13. pour la méthode d'affiche du message.
  14. Regardons cette partie du code,
    qu'on ne comprend pas, en plus de détails.
  15. Mais on dirait que findViewByld
    est un appel de méthode,
  16. car il précède cette parenthèse
    avec peut-être un paramètre d'entrée.
  17. Mais, c'est bizarre que cette méthode
    est définie nulle part dans cette classe.
  18. Si je double-clique sur ce nom
  19. et puis, je fais command F
    ou control F sur Windows,
  20. on peut faire des recherches
    dans ce fichier.
  21. J'ai trouvé que findViewByld
    apparaît seulement deux fois,
  22. et à chaque fois,
    c'est utilisé de façon semblable.
  23. Mais je ne vois pas
    de méthode nommée findViewByld.
  24. Justement, plus tôt
    dans la classe MainActivity,
  25. on voit un appel pour setContentView,
  26. mais si on le cherche dans ce fichier,
  27. ce n'est pas définit dans MainActivity.
  28. Donc, où est-ce que ces méthodes
    sont-elles définies ?
  29. Ben, MainActivity est en fait
    un fichier plutôt court.
  30. Il contient seulement 90 lignes,
  31. mais cette classe est plus compliquée
    qu'elle n'y paraît.
  32. Le code dit :
    « extends AppCompatActivity ».
  33. Ça signifie que MainActivity
    est une extension de la fonctionnalité
  34. dans la classe AppCompatActivity.
  35. Si, sur votre ordinateur,
    vous voyez ActionBarActivity ici,
  36. pas de souci,
    c'est juste une vieille version.
  37. La version qu'il faudrait utiliser,
    c'est AppCompatActivity.
  38. AppCompatActivity vous donne aussi
    du soutien pour la rétrocompatibilité
  39. pour les appareils Android plus ancien.
  40. AppCompatActivity apparaît
    dans l'Android Support Library.
  41. Ça nous permet
    d'utiliser les derniers caractéristiques
  42. de l'interface utilisateur sur Android,
  43. pendant qu'on travaille
    sur un appareil Android plus ancien.
  44. En étendant la classe AppCompatActivity,
  45. on obtient toutes les fonctionnalités,
    les états et les méthodes gratuitement
  46. à partir d'ici dans MainActivity.
  47. On n'a pas besoin de copier coller
    un code d'ici.
  48. On a juste besoin
    d'étendre la classe en question.
  49. Si ça vous intéresse,
    vous pouvez trouver plus d'informations
  50. sur AppCompatActivity
    en recherchant sur Google.
  51. Voici le document de référence
    pour la classe AppCompatActivity.
  52. Puisque j'ai l'extension Chrome installée,
  53. je peux aussi voir la source.
  54. Et voici le code pour l'endroit
  55. où la classe AppCompatActivity
    est définie.
  56. Il est clair qu'il existe
    beaucoup de fonctionnalités ici,
  57. mais il faut savoir qu'on n'a pas
    besoin de comprendre comment ça marche.
  58. On a juste besoin de savoir
    que quand on étend AppCompatActivity,
  59. toutes les fonctionnalités sont gratuites.
  60. Sur un autre plan,
    on peut le décrire de cette façon.
  61. Voici une définition de classe
    pour MainActivity.
  62. et par exemple, vous avez
    des méthodes définies ici.
  63. Quand on étend AppCompatActivity,
    on peut accéder à l'état
  64. et puis aux méthodes d'AppCompatActivity.
  65. Alors, ils ne sont pas ajoutés
    concrètement à la classe MainActivity,
  66. mais on peut imaginer qu'ils sont là,
  67. car on peut toujours faire allusion
    à l'état et aux méthodes.
  68. C'est comme ça
    que le code peut faire référence
  69. à des choses telles que setContentView
    ou findViewByld.
  70. On a hérité de ces méthodes,
  71. on ne les a pas définies
    dans MainActivity.
  72. MainActivity s'affiche
    comme un écran sur l'appareil,
  73. mais on n'a pas écrit de code
    pour ça dans MainActivity,
  74. on l'a aussi hérité.
  75. On n'obtient pas l'état et les méthodes
  76. d'AppCompatActivity
    directement dans la classe,
  77. mais on sait qu'ils sont là
    et qu'on peut s'y référer.
  78. Justement, pour ce qui est d'hériter,
    il y a de bons et de mauvais aspects.
  79. Parfois on veut hériter de comportements,
  80. mais dans d'autres situations,
    on va vouloir les modifier.
  81. Si vous voulez changer le comportement
    dans cette classe héritée,
  82. vous pouvez outrepasser
    certaines méthodes.
  83. On peut ajouter le texte @override
    par dessus la méthode
  84. pour que l'ordinateur sache
  85. qu'on ne veut pas cette version
    de la méthode d'AppCompatActivity,
  86. mais qu'on veut cette version
    qu'on a définit ici.
  87. C'est un sujet compliqué
    qui demande beaucoup d'entraînement.
  88. Mais on a vu un exemple
    pour outrepasser une méthode
  89. de la classe AppCompatActivity.
  90. Cette méthode est la méthode OnCreate.
  91. En outrepassant la méthode OnCreate
    dans MainActivity,
  92. on indique la mise en œuvre
    qu'on veut être exécuté
  93. quand cette méthode-là est effectuée.
  94. Ne vous inquiétez pas
    si vous ne comprenez pas.
  95. Je vous donne un petit résumé
    de concepts de programmation par objet.
  96. C'est normal
    que vous ayez des questions après,
  97. et que vous ayez besoin
    de consulter des livres
  98. pour vraiment comprendre ces sujets.
  99. Une autre façon
    pour visualiser les liens
  100. entre les classes MainActivity
    et AppCompatActivity
  101. est de dessiner un diagramme
    hiérarchique de classes.
  102. C'est différent d'un diagramme
    hiérarchique d'aperçus,
  103. car un diagramme des aperçus nous montre
  104. une arborescence
    de ce qui est montré sur l'écran.
  105. Le diagramme de classes
  106. montre les liens
    entre les différentes classes Java.
  107. AppCompatActivity est une super-classe.
  108. Puisque MainActivity provient
    d'AppCompatActivity,
  109. c'est une sous-classe.
  110. À chaque fois qu'on voit
    cette définition de classe,
  111. la partie qu'on étend
    est une super-classe.
  112. Là, c'est la sous-classe.
  113. Si on crée une autre activité,
    appelée DetailActivity
  114. et on avait étendu AppCompatActivity,
    là c'est la sous-classe,
  115. et là, la super-classe.
  116. Voici un autre exemple
    d'héritage de la classe Java.
  117. Si on y pense,
    TextView, ImageView et Button
  118. ont tous des aspects communs.
  119. Ces visualisations ou Views ont
    une largeur et une hauteur sur l'écran.
  120. On ne l'a pas encore appris,
  121. mais elles ont aussi
    un état de visibilité.
  122. Elles peuvent donc
    être invisibles ou visibles.
  123. Il y a aussi quelques autres propriétés
    qu'elles ont en commun.
  124. Au lieu d'écrire un code
    pour ces propriétés
  125. dans la classe TextView
  126. et puis de les recopier dans ImageView
    et dans la classe Button,
  127. il existe une meilleure façon.
  128. On peut créer une classe View.
  129. On peut extraire les propriétés
    qu'elles ont en commun,
  130. puis on les insère dans cette classe View,
    pour qu'on écrive le code une fois.
  131. Mais alors, comment peut-on montrer
  132. un lien entre la classe TextView
    et la classe View ?
  133. Si vous pensez à l'héritage,
    vous avez raison.
  134. Dans le fichier Java TextView,
    on va définir la classe TextView.
  135. Comme ça, on va hériter des données
    et des méthodes de la classe View.
  136. Comme ça, on n'aura pas besoin d'écrire
    autant de codes dans la classe TextView
  137. car une partie de la fonctionnalité
    existe déjà dans la classe View.
  138. Les mêmes choses sont valables
    pour les classes ImageView et Button,
  139. il n'y a pas besoin d'écrire
    autant de codes.
  140. Dans ces fichiers, il ne faut qu'écrire
  141. ce qui diffère dans ImageView
    par rapport à la classe View.
  142. C'est comme si on précisait un delta,
  143. pour que la classe ImageView
    doit seulement préciser la différence
  144. entre ImageView et la classe View.
  145. Si on ne veut pas hériter
    de certains comportements de View,
  146. on précise le nouveau comportement
    de la classe ImageView,
  147. ou des autres classes.
  148. Pour vous faire un rappel du vocabulaire,
  149. ici, TextView est la sous-classe,
    View est la super-classe.
  150. Retournons aux documents
    concernant la classe TextView :
  151. on comprend cette partie maintenant.
  152. Il dit que TextView extends View :
    TextView provient de View.
  153. Maintenant, on sait qu'on hérite
    l'état et les méthodes de la classe View.
  154. Et voici un diagramme
    hiérarchique de classes.
  155. Ça montre la classe TextView
    qui hérite de ViewClass.
  156. À son tour, la classe View
    hérite de la classe Objet.
  157. Si on regarde autour,
    on peut trouver d'autres classes,
  158. par exemple la classe EditText,
    qui provient de la classe TextView.
  159. Donc elle prend les comportements
    de la classe TextView,
  160. et puis, des fonctionnalités
    plus précises y sont ajoutées.
  161. Donc EditText provient de TextView.
  162. Et TextView provient de View,
    et View provient d'Objet.
  163. Et voilà un diagramme
    hiérarchique de classes.
  164. Il y a beaucoup d'éléments,
    et on peut le regarder pendant des heures.
  165. Mais, laissez-moi vous montrer une chose
    sur la page TextView.
  166. Je veux vous montrer la méthode
    pour SetVisibility.
  167. Voici la méthode Java pour SetVisibility
    dans la classe TextView.
  168. Ça contrôle si View
    est visible ou invisible.
  169. Si j'appuie sur cette méthode,
    j'arrive dans la classe View.
  170. Et puis, il y a une description
    expliquant ce que fait cette méthode.
  171. On voit qu'un objet TextView possède
    une méthode de visibilité prédéfinie.
  172. Mais, en fait,
    c'est hérité de la classe View.
  173. On obtient donc cette fonctionnalité
    gratuitement de la classe View.
  174. Bien, on vient d'étudier
    un tas de nouveaux concepts.
  175. Normalement, ça prendrait
    un semestre d'informatique à l'université.
  176. On va s'entraîner un peu maintenant,
  177. et j'espère que tout va devenir clair
    dans votre tête.
  178. Mais il faut savoir que ça va prendre
    beaucoup de temps et d'entraînement
  179. pour vraiment comprendre ces concepts.
  180. Bon, premier exercice, je veux
    que vous créez une nouvelle appli Android,
  181. car on ne veut pas
    endommager l'appli Just Java.
  182. Après avoir créé le projet,
    lancez l'appli.
  183. Après avoir créé l'appli,
    vous allez voir un fichier MainActivity.
  184. Ce fichier va provenir
    d'AppCompatActivity.
  185. Dans votre version d'Android Studio,
    ne vous inquiétez pas
  186. si MainActivity provient
    d'ActionBarActivity.
  187. Ce n'est qu'une version
    plus vieille d'AppCompatActivity.
  188. En enlevant cette méthode qui outrepasse,
    on va se baser sur la façon
  189. que la méthode OnCreate est apparue
    dans la classe AppCompatActivity.
  190. La présence de cette méthode montre
    qu'on veut un autre comportement
  191. dans MainActivity pour OnCreate.
  192. Donc en l'enlevant, on retourne
    au comportement initial
  193. dans la classe AppCompatActivity.
  194. Quand on lance l'appli,
  195. qu'est-ce qui a changé
    en comparaison avec la première fois
  196. que vous aviez lancé l'appli ?
  197. Écrivez votre réponse dans le champ.