YouTube

Got a YouTube account?

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

Spanish subtitles

← Comportamientos Heredados

Get Embed Code
13 Languages

Showing Revision 22 created 10/11/2015 by Frank Gaona.

  1. Volvemos a la aplicación
    Just Java solo un momento.
  2. Vemos el método displayMessage
    en la clase MainActivity.
  3. Parece que las cosas
    empiezan a cobrar sentido aquí.
  4. Nos damos cuenta
    de que intentámos crear
  5. una variable que se llama
    orderSummaryTextView.
  6. El tipo de información
    de esta variable es TextView.
  7. Sin embargo, aún no entendemos
    esta parte de aquí.
  8. En la siguiente línea, invocamos
    un método en este objeto TextView.
  9. Usamos el mismo nombre
    de variable declarado aquí arriba.
  10. Lo llamamos
    orderSummaryTextView.setText.
  11. Luego pasamos un String
    como entrada para el método.
  12. Este mensaje (String) inicialmente
    venía como parámetro de entrada.
  13. del método displayMessage.
  14. Vamos a analizar esta parte
    del código que no entendemos aún.
  15. Parece que findViewByld
    es una invocación a un método,
  16. porque precede a estos paréntesis
  17. con lo que parece
    un argumento de entrada.
  18. Pero es extraño que no
    se defina este método
  19. en ninguna parte de la clase.
  20. si hago doble clic en el nombre
    y luego presiono el comando F
  21. o control F, en Windows,
    podemos buscar dentro del archivo.
  22. Solo veo dos coincidencias
    con findVIewBYld
  23. y se usan de modo parecido.
  24. Pero no veo ningún método
    que se llame finViewByld.
  25. A propósito, anteriormente
    en la clase MainActivity
  26. vimos una invocación a setContentView,
  27. pero al buscarlo en el archivo no
    está definido en MainActiivty tampoco.
  28. ¿Donde se definen estos métodos?
  29. MainActivity es en realidad
    un archivo bastante pequeño.
  30. Solo tiene 90 líneas,
  31. pero hay más sobre esta clase
    de lo que aparenta a simple vista.
  32. El código dice, extends
    (extiende) AppCompatActivity.
  33. Lo que significa que MainActivity
    es una extensión de la funcionalidad
  34. en la clase AppCompatActivity.
  35. En el ordenador, si ves aquí,
    ActionBarActivity está bien.
  36. Es solo una versión más antigua.
  37. Deberías usar la versión más reciente
    que es AppCompatActivity.
  38. AppCompatActivity da soporte
    para compatibilizar versiones previas
  39. en los aparatos antiguos de Android.
  40. AppCompatActivity es parte de
    la biblioteca de soporte de Android.
  41. Nos permite usar los atributos
    UI más recientes en Android
  42. mientras que todavía funciona
    en otros aparatos antiguos de Android.
  43. Al extender la clase AppCompatActivitiy
  44. conseguimos gratis
    todas las funcionalidades,
  45. metodos y estados de aqui,
    dentro de MainActivity.
  46. No tenemos que copiar
    y pegar ningún código desde aquí
  47. Simplemente extender esta clase.
  48. Puedes obtener más información
    en Google sobre AppCompatActivity.
  49. Aquí está el documento de referencia
    de la clase AppCompatActivity.
  50. Como tengo instalada
    la extensión de Chrome,
  51. también puedo ver la fuente.
  52. Y este es el código desde donde
    se define la clase AppCompatActivity.
  53. Puedes ver que hay un montón
    de funcionalidades aquí,
  54. pero la clave es que no tienes
    que entender cómo se implementa.
  55. Solo necesitas saber que cuando
    extiendes AppCompatActivity
  56. consigues gratis
    todas estas funcionalidades.
  57. A nivel superior. podemos
    visualizarlo de esta manera
  58. Esta es la definición
    de clase para MainActivity.
  59. Y digamos que hay definidos
    algunos métodos aquí.
  60. Si extendemos AppCompatActivity
    podemos acceder al estado
  61. y los métodos de AppCompactActivity.
  62. Ahora no se han añadido
    físicamente a la clase MainActivity
  63. pero puedes imaginar que están allí,
  64. porque tienes aún referencia
    al estado así como a los métodos.
  65. Y así es como el código se
    refiere a cosas con setContenView
  66. o findViewByld.
  67. Porque heredamos esos métodos,
    no los definimos en MainActivitiy.
  68. MainActivity aparece como
    una pantalla en el aparato,
  69. pero no escribimos el código
    para eso en MainActivity,
  70. sino que lo heredamos también.
  71. No tenemos el estado y los métodos
    directamente de AppCompatActivity
  72. en la clase, pero ahora sabemos
    que están y referirnos a ellos.
  73. Hablando de heredar cosas,
    tiene ventajas y desventajas.
  74. A veces queremos heredar
    un comportamiento,
  75. pero otras, sencillamente
    modificarlo ligeramente.
  76. Para cambiar un comportamiento
    de esta clase heredada
  77. se puede override
    (sobreescrir) sus métodos.
  78. Basta añadir este texto
    @override encima del método.
  79. y así el ordenador sabe
    que no quieres la versión
  80. del método de AppCompatActivity.
  81. y que prefieres la versión
    que has definido aquí.
  82. Es un tema complicado
    y requiere mucha práctica.
  83. Pero hemos visto un ejemplo
    de override un método
  84. de la clase AppCompatActivity.
  85. y ese método es onCreate.
  86. Al override el método onCreate
    en MainACtivity específicamos
  87. nuestra propia implementación
    de lo que sucederá al invocar el método.
  88. No te preocupes sino
    lo entiendes todo ahora.
  89. Es solo una breve visión
    de un montón de conceptos
  90. sobre la programación
    orientada a objetos.
  91. Es normal que todavía
    tengas un montón de preguntas
  92. y necesites leer más sobre esto
    para realmente entenderlo.
  93. Otra forma de visualizar las relaciones
    entre las clases de MainActivity
  94. y AppCompactActivity es dibujar
    un diagrama con jeraraquía de clases.
  95. Este es diferente
    a un diagrama jerárquico de vistas.
  96. El diagrama de vistas muestra
    un árbol con vistas en la pantalla.
  97. Y el de clases muestra las relaciones
    entre la diferentes clases de Java.
  98. Tenemos AppCompatActivity
    como una superclase.
  99. Dado que MainActivity se extiende
    desde AppCompatActivity,
  100. se denomina subclase.
  101. Por eso, siempre que veas
    esta definición de clase,
  102. todo lo que se extienda
    se conoce como superclase.
  103. Y esta será la subclase.
  104. Así, si creamos otra actividad
    que vamos a llamar DetailActivity
  105. y la extiendes desde AppComptActivity,
  106. está será la subclase
    y esta la superclase.
  107. Aquí hay otro ejemplo
    de clases heredadas en Java.
  108. Si piensas en las clases TextView,
    ImageView o ButtonView,
  109. todas tienen aspectos en común.
  110. Todas tienen una determinada
    altura y anchura en la pantalla.
  111. Todavía no lo vimos, pero tienen
    también un estado de visibilidad.
  112. De modo que se pueden
    definir como visibles o invisibles.
  113. Hay también un par de otras
    propiedades que comparten.
  114. En lugar de escribir el código
    para estas propiedades
  115. dentro de la clase TextView
    y luego copiarlo sobre las clases,
  116. ImageView y ButtonView,
    podemos hacer algo mejor.
  117. Podemos crear una clase View
  118. y extraer todas las propiedades
    comunes entre estas vistas
  119. para ponerlas dentro de la clase View.
  120. De este modo, escribiremos
    el código solo una vez.
  121. Pero entonces ¿cómo relacionamos
    las clases TextView y View ?
  122. Si piensas en "heredar," vas bien.
  123. En el archivoTextViewde Java
    vamos a definir la clase TextView.
  124. Así, heredaremos los datos
    y métodos de la clase View.
  125. Y no tendremos tanto código
    en la clase TextView,
  126. porque parte de la funcionalidad
    ya está escrita en la clase View.
  127. Para las clases ImageView
    y Button se aplicaría lo mismo,
  128. no hay que escribir tanto código.
  129. En estos archivos solo tenemos
    que escribir lo que es diferente
  130. de ImageView en comparación
    con la clase View.
  131. Es como definir una función delta,
    así, en la clase ImageView
  132. solo tenemos que específicar
    lo que la diferencia de la clase View.
  133. Si no queremos heredar ciertos
    comportamientos de la clase View
  134. basta con actualizar y especificar
    un nuevo comportamiento
  135. dentro de la clase ImageView
    o cualquiera de estas clases.
  136. Te recuerdo la teminología,
    que en este caso sería,
  137. TextView la subclase
    y View la superclase.
  138. Si volvemos ahora
    a la documentación de View Class,
  139. ya entendemos esta parte.
  140. Dice que TextView extiende View.
  141. Ahora sabemos que significa
    que heredamos el estado
  142. y los métodos de la clase View.
  143. Y más abajo, aquí hay
    un diagrama de jerarquía.
  144. Nos muestra que la clase TextView
    se hereda de la clase View.
  145. Y a su vez, la clase View
    se hereda de la clase Object.
  146. Mira alrededor y verás otras clases,
  147. como la clase EditText, la cuál
    se extiende desde la clase TextView.
  148. Toma el comportamiento
    de la clase TextView
  149. para añadirle después
    funcionalidades específicas.
  150. EditText se extiende
    por tanto desde TextView,;
  151. TextView se extiende desde View;
    y View se extiende desde Object.
  152. Este es el diagrama
    jerárquico de clases.
  153. Hay un montón de cosas
    y podría llevarnos horas.
  154. Solo te mostraré una cosa
    en la documentación de TextView.
  155. Es el método SetVisibility.
  156. Aqui está el métodoSetVisibility
    dentro de la clase TextView.
  157. Nos permite cambiar
    si la vista es visible o invisible.
  158. Si hago clic en el método,
    me lleva a la clase View,
  159. donde se describe
    lo que hace el método.
  160. El objeto TextView vemos
    que tiene el método SetVisibility,
  161. aunque lo heredó de la clase View.
  162. Por tanto, esta funcionalidad
    es gratis por la clase View.
  163. Acabamos de cubrir
    una tonelada de conceptos.
  164. Lo normal, sería repartirlos en
    un curso de informática en un semestre
  165. Vamos a practicar un poco ahora
  166. y espero que empezarás
    a conectar todas las cosas.
  167. Pero sabemos que necesitarás
    mucho más tiempo y práctica
  168. para que entiendas
    totalmente estos conceptos.
  169. Primer ejercicio, crearás
    una nueva app para Android.
  170. porque no queremos
    estropear la app Just Java.
  171. Después de crear
    el proyecto, ejecuta la app.
  172. Una vez creada la app
    verás el archivo MainActivity.
  173. El archivo MainActivity se extiende
    desde AppCompatActivity.
  174. Si se extiende desde ActionBarActivity
  175. en tu versión de Android,
    no pasa nada, esta bien.
  176. Es solo una versión anterior
    de AppCompatActivity.
  177. Al eliminar este método
    override revertiremos a la forma
  178. como aparecía onCreate
    en la clase AppCompatActity.
  179. La presencia de este método
    nos indica que queremos
  180. un comportamiento diferente
    para onCreate en MainActivity.
  181. Al eliminarlo volvemos a
    a su comportamiento inicial
  182. en la clase AppCompatActivity.
  183. Cuando ejecutes la app,
  184. ¿qué cambia en comparación
    a la primera vez que la ejecutaste?
  185. Anota la respuesta en la casilla de texto.