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 20 created 11/18/2015 by Fran Ontanaya.

  1. Retournons un instant
    à l'appli JustJava.
  2. Regardons la méthode displayMessage
    de la classe MainActivity.
  3. Ça commence à être
    un peu plus clair ici.
  4. Nous voyons déjà que nous créons
    une variable nommée orderSummaryTextView.
  5. Le type de données de cette variable
    était TextView.
  6. Mais on ne comprenait pas
    cette partie avant.
  7. Sur la ligne suivante, nous appelons
    une méthode sur cet objet TextView.
  8. Nous utilisons le même nom de variable
    que celui que nous avons choisi ici.
  9. Nous la nommons donc
    orderSummaryTextView.setText.
  10. Nous insérons une chaîne de caractères
    comme entrée de méthode.
  11. Cette chaîne était initialement apparue
    comme paramètre d'entrée
  12. de la méthode d'affichage du message.
  13. Creusons un peu plus cette partie du code
    que nous ne comprenons pas.
  14. FindViewById ressemble
    à un appel de méthode
  15. Il précède ces parenthèses dont le code
    ressemble à un argument d'entrée.
  16. Mais étrangement, cette méthode
    n'apparaît nulle part dans la classe.
  17. Si je double-clique sur ce nom
    et que je tape commande F
  18. ou Contrôle F, sous Windows, je peux
    faire une recherche dans le fichier.
  19. Je ne trouve que deux occurrences
    de findViewById.
  20. Elles sont utilisées de façon similaire.
  21. Mais, je ne vois aucune méthode
    appelée findViewById.
  22. Justement, auparavant,
    dans la classe MainActivity,
  23. nous avons vu un appel de setContentView
    mais si on le recherche
  24. dans ce fichier, on le retrouve pas
    défini dans MainActivity.
  25. Alors, où ces méthodes
    sont-elles définies ?
  26. Eh bien, MainActivity
    est un fichier assez court.
  27. Il ne contient que 90 lignes environ.
  28. Pourtant cette classe contient
    plus d'informations qu'il n'y paraît.
  29. Le code dit :
    « extends AppCompatActivity ».
  30. Cela signifie que MainActivity
    est une extension
  31. de la fonctionnalité de la classe
    AppCompatActivity.
  32. Si vous voyez ActionBarActivity ici
    sur votre ordinateur, ne vous affolez pas.
  33. C'est juste que vous avez
    une version plus ancienne.
  34. La version la plus récente
    est AppCompatActivity.
  35. AppCompatActivity nous offre
    un soutien de rétrocompatibilité
  36. sur les appareils Android plus anciens.
  37. AppCompatActivity fait partie
    de la bibliothèque de soutien Android.
  38. Il permet d'user des dernières fonctions
    de l'interface utilisateur Android
  39. tout en travaillant
    sur des appareils Android plus anciens.
  40. L'extension de la classe
    AppCompatActivity
  41. fait obtenir toutes les fonctionnalités,
    tous les états
  42. et toutes les méthodes à partir d'ici
    dans MainActivity, gratuitement.
  43. Pas besoin de faire de copier-coller
    de code d'ici.
  44. Il suffit d'étendre cette classe.
  45. Si vous le désirez,
  46. vous pouvez trouver plus d'informations
    sur AppCompatActivity sur Google.
  47. Voici le document de référence
    de la classe AppCompatActivity.
  48. Comme j'ai l'extension
    Chrome installée,
  49. je peux aussi voir la source.
  50. Voici le code qui indique où la classe
    AppCompatActivity est définie.
  51. Vous observez de nombreuses
    fonctionnalités ici.
  52. Mais vous n'avez pas besoin
    de comprendre comment elles s'appliquent.
  53. Tout ce que vous devez savoir,
    c'est que l'extension d'AppCompatActivity,
  54. vous permet d'obtenir gratuitement
    toutes ses fonctionnalités.
  55. À un autre niveau, vous pouvez
    le visualiser ainsi.
  56. Voici une définition de classe
    pour MainActivity.
  57. et vous avez des méthodes
    définies ici.
  58. En étendant AppCompatActivity
    vous pouvez accéder à l'état
  59. puis aux méthodes d'AppCompatActivity.
  60. Ils ne sont pas ajoutés physiquement
    à la classe MainActivity.
  61. Mais, on sait qu'ils sont là
  62. parce qu'on peut toujours se référer
    à l'état et aux méthodes.
  63. C'est ainsi que notre code peut se référer
    à des objets tels que setContentView
  64. ou findViewById.
  65. Ayant hérité de ces méthodes, pas besoin
    de les définir dans MainActivity.
  66. MainActivity apparaît comme un écran
    sur l'appareil.
  67. Pourtant, nous n'avons pas écrit de code
    dans MainActivity, nous en avons hérité.
  68. Nous n'avons ni l'état, ni les méthodes
    d'AppCompatActivity
  69. directement dans la classe mais ils y sont
    et nous pouvons nous y référer.
  70. Hériter, ça a des avantages
    et des inconvénients.
  71. Parfois, nous voulons hériter
    d'un comportement.
  72. D'autres fois, nous voulons juste
    l'outrepasser légèrement.
  73. Si vous voulez changer le comportement
    d'une classe héritée,
  74. vous pouvez modifier certaines méthodes.
  75. On peut ajouter : « @override » au-dessus
    de la méthode pour que l'ordinateur sache
  76. que vous ne voulez pas la version
    de la méthode d'AppCompatActivity.
  77. Mais que vous préférez la version
    que vous avez définie ici.
  78. C'est un sujet délicat qui demande
    beaucoup d'entraînement.
  79. Mais nous avons vu un exemple
    pour outrepasser une méthode
  80. de la classe AppCompatActivity.
  81. C'est la méthode « on create ».
  82. En outrepassant la méthode on create
    dans MainActivity, on indique
  83. l'action qui doit être exécutée
    quand cette méthode est appelée.
  84. Ne vous affolez pas
    si vous ne comprenez pas.
  85. Je n'ai fait qu'un bref résumé
    des concepts de programmation
  86. orientée objets.
  87. Je m'attends à ce que vous ayez
    des questions en suspens
  88. et que vous ayez besoin de revoir
    ces thèmes
  89. avant de bien les comprendre.
  90. Une autre façon de voir les relations
    entre les classes MainActivity
  91. et AppCompatActivity , c'est de faire
    un diagramme de hiérarchie des classes.
  92. C'est différent d'un diagramme
    de hiérarchie des vues
  93. car ce dernier montre l'arborescence
    des vues qui apparaissent à l'écran.
  94. Le schéma de hiérarchie des classes
    montre la relation
  95. entre différentes classes Java.
  96. AppCompatActivity est une super-classe.
  97. Comme MainActivity est une extension
    d'AppCompatActivity,
  98. c'est une sous-classe.
  99. Donc, dès que vous voyez cette définition
    de classe quelle qu'en soit l'extension,
  100. c'est une super-classe.
  101. Voici une sous-classe.
  102. Si vous vouliez créer une autre activité
    nommée DetailActivity
  103. par extension d'AppCompatActivity,
    ce serait la sous-classe
  104. et la super-classe.
  105. Voici un autre exemple d'héritage
    de classe Java.
  106. Quand on y réfléchit,
    TextView, ImageVIew et ButtonView,
  107. ont des aspects communs.
  108. Toutes ces vues ont une largeur
    et une hauteur à l'écran.
  109. Nous ne l'avons pas encore étudié mais
    elles ont aussi un état de visibilité.
  110. On peut toutes les rendre invisibles
    ou visibles.
  111. Elles ont encore d'autres propriétés
    en commun.
  112. Au lieu d'écrire le code de ces propriétés
    dans la classe TextView,
  113. puis de le copier dans les classes
    ImageView et Button.
  114. On peut utiliser une astuce
  115. en créant une classe View.
  116. On peut extraire les propriétés communes
    de toutes ces vues,
  117. puis les insérer dans cette classe View
    et n'écrire ce code qu'une seule fois.
  118. Mais comment faire le lien
    entre la classe TextView
  119. et la classe View ?
  120. Si vous pensez à l'héritage,
    vous avez visé juste.
  121. Dans le fichier Java TextView, nous allons
    définir la classe TextView.
  122. Nous hériterons de toutes les données
    et toutes les méthodes de la classe View.
  123. Nous n'aurons donc pas besoin d'écrire
    beaucoup de code dans la classe TextView.
  124. Car une partie de la fonctionnalité
    est déjà rédigée dans la classe View.
  125. C'est la même chose pour
    les classes ImageView
  126. et Button. Pas besoin d'écrire
    autant de code.
  127. Dans ces fichiers, il suffit d'écrire
    les différences
  128. entre ImageView
    et la classe View.
  129. Je vois ça comme un delta,
    il suffit d'indiquer en quoi
  130. la classe ImageView
    diffère de la classe View.
  131. Si on ne veut pas hériter d'une partie
    des comportements de la classe View,
  132. il suffit d'indiquer le comportement
    souhaité dans la classe ImageView
  133. ou toute autre classe.
  134. Je vous rappelle les termes utilisés :
  135. Ici, TextView est la sous-classe,
    et View, la super-classe.
  136. Si on revient aux documents
  137. relatifs à la classe TextView,
    on les comprend mieux maintenant.
  138. On lit TextView provient de View.
  139. Nous savons maintenant
    que nous avons hérité cet état
  140. et ces méthodes de la classe View.
  141. Et voici un diagramme
    de hiérarchie des classes.
  142. Il montre que la classe TextView
    ihérite de la classe View.
  143. Et la classe View hérite
    de la classe Object.
  144. En regardant autour,
    vous trouverez d'autres classes,
  145. par exemple, la classe EditText
    qui provient de la classe TextView.
  146. Elle adopte donc le comportement
    de la classe TextView.
  147. Puis, des fonctionnalités plus précises
    y sont ajoutées.
  148. Donc EditText vient de TextView.
  149. Et TextView vient de View,
    et View vient d'Object.
  150. C'est donc le diagramme
    de hiérarchie des classes.
  151. Il y a beaucoup de choses à voir.
    On pourrait y passer des heures.
  152. J'aimerais vous montrer quelque chose
    sur la page de documentation TextView.
  153. Je veux vous montrer la méthode
    SetVisibility (régler la visibilité).
  154. Voici la méthode Java,
    SetVisibility, dans la classe TextView.
  155. Elle permet de rendre la vue
    visible ou non.
  156. Si je clique sur cette méthode,
    j'arrive à la classe View.
  157. Je trouve une description
    de ce que fait cette méthode.
  158. Un objet TextView a donc une méthode
    de visibilité prédéfinie.
  159. Mais elle a été héritée de la classe View.
  160. Nous avons obtenu cette fonctionnalité
    gratuitement de la classe View.
  161. Ok, nous venons de découvrir
    beaucoup de nouveaux concepts.
  162. En général, il faut un semestre de cours
    d'informatique pour étudier tout ça.
  163. Passons aux exercices pratiques.
  164. J'espère que tout ceci
    sera plus clair.
  165. Sachez que vous aurez
    vraiment besoin de temps
  166. et d'entraînement pour assimiler
    ces concepts.
  167. Ok, premier exercice : créez une nouvelle
    appli Android,
  168. car je préfère que votre appli
    JustJava ne soit pas désorganisée.
  169. Une fois le projet créé,
    lancez l'appli.
  170. Une fois l'appli créée, vous verrez
    un fichier MainActivity.
  171. Ce fichier MainActivity proviendra
    d'AppCompatActivity.
  172. Dans votre version d'Android Studio,
    si MainActivity provient
  173. d'ActionBarActivity,
    ça passe aussi.
  174. C'est une version plus ancienne
    d'AppCompatActivity.
  175. En enlevant la modification appliquée
    à cette méthode, on va retrouver
  176. comment la méthode onCreate est apparue
    dans la classe AppCompatActivity.
  177. La présence de cette méthode indique
    qu'on veut un autre comportement
  178. de la méthode onCreate
    dans MainActivity.
  179. En l'enlevant, on revient donc
    au comportement initial
  180. de la classe AppCompatActivity.
  181. Quand vous lancez l'appli,
  182. Quelle différence relevez-vous par rapport
    à votre premier lancement de l'appli ?
  183. Répondez
    dans ce champ.