-
Title:
Comportamientos Heredados
-
Description:
-
Volvemos a la aplicación
Just Java solo un momento.
-
Vemos el método displayMessage
en la clase MainActivity.
-
Parece que las cosas
empiezan a cobrar sentido aquí.
-
Nos damos cuenta
de que intentámos crear
-
una variable que se llama
orderSummaryTextView.
-
El tipo de información
de esta variable es TextView.
-
Sin embargo, aún no entendemos
esta parte de aquí.
-
En la siguiente línea, invocamos
un método en este objeto TextView.
-
Usamos el mismo nombre
de variable declarado aquí arriba.
-
Lo llamamos
orderSummaryTextView.setText.
-
Luego pasamos un String
como entrada para el método.
-
Este mensaje (String) inicialmente
venía como parámetro de entrada.
-
del método displayMessage.
-
Vamos a analizar esta parte
del código que no entendemos aún.
-
Parece que findViewByld
es una invocación a un método,
-
porque precede a estos paréntesis
-
con lo que parece
un argumento de entrada.
-
Pero es extraño que no
se defina este método
-
en ninguna parte de la clase.
-
si hago doble clic en el nombre
y luego presiono el comando F
-
o control F, en Windows,
podemos buscar dentro del archivo.
-
Solo veo dos coincidencias
con findVIewBYld
-
y se usan de modo parecido.
-
Pero no veo ningún método
que se llame finViewByld.
-
A propósito, anteriormente
en la clase MainActivity
-
vimos una invocación a setContentView,
-
pero al buscarlo en el archivo no
está definido en MainActiivty tampoco.
-
¿Donde se definen estos métodos?
-
MainActivity es en realidad
un archivo bastante pequeño.
-
Solo tiene 90 líneas,
-
pero hay más sobre esta clase
de lo que aparenta a simple vista.
-
El código dice, extends
(extiende) AppCompatActivity.
-
Lo que significa que MainActivity
es una extensión de la funcionalidad
-
en la clase AppCompatActivity.
-
En el ordenador, si ves aquí,
ActionBarActivity está bien.
-
Es solo una versión más antigua.
-
Deberías usar la versión más reciente
que es AppCompatActivity.
-
AppCompatActivity da soporte
para compatibilizar versiones previas
-
en los aparatos antiguos de Android.
-
AppCompatActivity es parte de
la biblioteca de soporte de Android.
-
Nos permite usar los atributos
UI más recientes en Android
-
mientras que todavía funciona
en otros aparatos antiguos de Android.
-
Al extender la clase AppCompatActivitiy
-
conseguimos gratis
todas las funcionalidades,
-
metodos y estados de aqui,
dentro de MainActivity.
-
No tenemos que copiar
y pegar ningún código desde aquí
-
Simplemente extender esta clase.
-
Puedes obtener más información
en Google sobre AppCompatActivity.
-
Aquí está el documento de referencia
de la clase AppCompatActivity.
-
Como tengo instalada
la extensión de Chrome,
-
también puedo ver la fuente.
-
Y este es el código desde donde
se define la clase AppCompatActivity.
-
Puedes ver que hay un montón
de funcionalidades aquí,
-
pero la clave es que no tienes
que entender cómo se implementa.
-
Solo necesitas saber que cuando
extiendes AppCompatActivity
-
consigues gratis
todas estas funcionalidades.
-
A nivel superior. podemos
visualizarlo de esta manera
-
Esta es la definición
de clase para MainActivity.
-
Y digamos que hay definidos
algunos métodos aquí.
-
Si extendemos AppCompatActivity
podemos acceder al estado
-
y los métodos de AppCompactActivity.
-
Ahora no se han añadido
físicamente a la clase MainActivity
-
pero puedes imaginar que están allí,
-
porque tienes aún referencia
al estado así como a los métodos.
-
Y así es como el código se
refiere a cosas con setContenView
-
o findViewByld.
-
Porque heredamos esos métodos,
no los definimos en MainActivitiy.
-
MainActivity aparece como
una pantalla en el aparato,
-
pero no escribimos el código
para eso en MainActivity,
-
sino que lo heredamos también.
-
No tenemos el estado y los métodos
directamente de AppCompatActivity
-
en la clase, pero ahora sabemos
que están y referirnos a ellos.
-
Hablando de heredar cosas,
tiene ventajas y desventajas.
-
A veces queremos heredar
un comportamiento,
-
pero otras, sencillamente
modificarlo ligeramente.
-
Para cambiar un comportamiento
de esta clase heredada
-
se puede override
(sobreescrir) sus métodos.
-
Basta añadir este texto
@override encima del método.
-
y así el ordenador sabe
que no quieres la versión
-
del método de AppCompatActivity.
-
y que prefieres la versión
que has definido aquí.
-
Es un tema complicado
y requiere mucha práctica.
-
Pero hemos visto un ejemplo
de override un método
-
de la clase AppCompatActivity.
-
y ese método es onCreate.
-
Al override el método onCreate
en MainACtivity específicamos
-
nuestra propia implementación
de lo que sucederá al invocar el método.
-
No te preocupes sino
lo entiendes todo ahora.
-
Es solo una breve visión
de un montón de conceptos
-
sobre la programación
orientada a objetos.
-
Es normal que todavía
tengas un montón de preguntas
-
y necesites leer más sobre esto
para realmente entenderlo.
-
Otra forma de visualizar las relaciones
entre las clases de MainActivity
-
y AppCompactActivity es dibujar
un diagrama con jeraraquía de clases.
-
Este es diferente
a un diagrama jerárquico de vistas.
-
El diagrama de vistas muestra
un árbol con vistas en la pantalla.
-
Y el de clases muestra las relaciones
entre la diferentes clases de Java.
-
Tenemos AppCompatActivity
como una superclase.
-
Dado que MainActivity se extiende
desde AppCompatActivity,
-
se denomina subclase.
-
Por eso, siempre que veas
esta definición de clase,
-
todo lo que se extienda
se conoce como superclase.
-
Y esta será la subclase.
-
Así, si creamos otra actividad
que vamos a llamar DetailActivity
-
y la extiendes desde AppComptActivity,
-
está será la subclase
y esta la superclase.
-
Aquí hay otro ejemplo
de clases heredadas en Java.
-
Si piensas en las clases TextView,
ImageView o ButtonView,
-
todas tienen aspectos en común.
-
Todas tienen una determinada
altura y anchura en la pantalla.
-
Todavía no lo vimos, pero tienen
también un estado de visibilidad.
-
De modo que se pueden
definir como visibles o invisibles.
-
Hay también un par de otras
propiedades que comparten.
-
En lugar de escribir el código
para estas propiedades
-
dentro de la clase TextView
y luego copiarlo sobre las clases,
-
ImageView y ButtonView,
podemos hacer algo mejor.
-
Podemos crear una clase View
-
y extraer todas las propiedades
comunes entre estas vistas
-
para ponerlas dentro de la clase View.
-
De este modo, escribiremos
el código solo una vez.
-
Pero entonces ¿cómo relacionamos
las clases TextView y View ?
-
Si piensas en "heredar," vas bien.
-
En el archivoTextViewde Java
vamos a definir la clase TextView.
-
Así, heredaremos los datos
y métodos de la clase View.
-
Y no tendremos tanto código
en la clase TextView,
-
porque parte de la funcionalidad
ya está escrita en la clase View.
-
Para las clases ImageView
y Button se aplicaría lo mismo,
-
no hay que escribir tanto código.
-
En estos archivos solo tenemos
que escribir lo que es diferente
-
de ImageView en comparación
con la clase View.
-
Es como definir una función delta,
así, en la clase ImageView
-
solo tenemos que específicar
lo que la diferencia de la clase View.
-
Si no queremos heredar ciertos
comportamientos de la clase View
-
basta con actualizar y especificar
un nuevo comportamiento
-
dentro de la clase ImageView
o cualquiera de estas clases.
-
Te recuerdo la teminología,
que en este caso sería,
-
TextView la subclase
y View la superclase.
-
Si volvemos ahora
a la documentación de View Class,
-
ya entendemos esta parte.
-
Dice que TextView extiende View.
-
Ahora sabemos que significa
que heredamos el estado
-
y los métodos de la clase View.
-
Y más abajo, aquí hay
un diagrama de jerarquía.
-
Nos muestra que la clase TextView
se hereda de la clase View.
-
Y a su vez, la clase View
se hereda de la clase Object.
-
Mira alrededor y verás otras clases,
-
como la clase EditText, la cuál
se extiende desde la clase TextView.
-
Toma el comportamiento
de la clase TextView
-
para añadirle después
funcionalidades específicas.
-
EditText se extiende
por tanto desde TextView,;
-
TextView se extiende desde View;
y View se extiende desde Object.
-
Este es el diagrama
jerárquico de clases.
-
Hay un montón de cosas
y podría llevarnos horas.
-
Solo te mostraré una cosa
en la documentación de TextView.
-
Es el método SetVisibility.
-
Aqui está el métodoSetVisibility
dentro de la clase TextView.
-
Nos permite cambiar
si la vista es visible o invisible.
-
Si hago clic en el método,
me lleva a la clase View,
-
donde se describe
lo que hace el método.
-
El objeto TextView vemos
que tiene el método SetVisibility,
-
aunque lo heredó de la clase View.
-
Por tanto, esta funcionalidad
es gratis por la clase View.
-
Acabamos de cubrir
una tonelada de conceptos.
-
Lo normal, sería repartirlos en
un curso de informática en un semestre
-
Vamos a practicar un poco ahora
-
y espero que empezarás
a conectar todas las cosas.
-
Pero sabemos que necesitarás
mucho más tiempo y práctica
-
para que entiendas
totalmente estos conceptos.
-
Primer ejercicio, crearás
una nueva app para Android.
-
porque no queremos
estropear la app Just Java.
-
Después de crear
el proyecto, ejecuta la app.
-
Una vez creada la app
verás el archivo MainActivity.
-
El archivo MainActivity se extiende
desde AppCompatActivity.
-
Si se extiende desde ActionBarActivity
-
en tu versión de Android,
no pasa nada, esta bien.
-
Es solo una versión anterior
de AppCompatActivity.
-
Al eliminar este método
override revertiremos a la forma
-
como aparecía onCreate
en la clase AppCompatActity.
-
La presencia de este método
nos indica que queremos
-
un comportamiento diferente
para onCreate en MainActivity.
-
Al eliminarlo volvemos a
a su comportamiento inicial
-
en la clase AppCompatActivity.
-
Cuando ejecutes la app,
-
¿qué cambia en comparación
a la primera vez que la ejecutaste?
-
Anota la respuesta en la casilla de texto.