WEBVTT
00:00:00.410 --> 00:00:02.880
Volvemos a la aplicación
Just Java solo un momento.
00:00:02.880 --> 00:00:06.270
Vemos el método displayMessage
en la clase MainActivity.
00:00:07.160 --> 00:00:09.630
Parece que las cosas
empiezan a cobrar sentido aquí.
00:00:09.630 --> 00:00:11.560
Nos damos cuenta
de que intentámos crear
00:00:11.560 --> 00:00:13.900
una variable que se llama
orderSummaryTextView.
00:00:13.900 --> 00:00:17.130
El tipo de información
de esta variable es TextView.
00:00:17.690 --> 00:00:20.070
Sin embargo, aún no entendemos
esta parte de aquí.
00:00:20.740 --> 00:00:24.230
En la siguiente línea, invocamos
un método en este objeto TextView.
00:00:24.650 --> 00:00:27.450
Usamos el mismo nombre
de variable declarado aquí arriba.
00:00:28.070 --> 00:00:31.130
Lo llamamos
orderSummaryTextView.setText.
00:00:31.640 --> 00:00:34.290
Luego pasamos un String
como entrada para el método.
00:00:35.300 --> 00:00:38.790
Este mensaje (String) inicialmente
venía como parámetro de entrada.
00:00:38.790 --> 00:00:41.030
del método displayMessage.
00:00:41.720 --> 00:00:45.250
Vamos a analizar esta parte
del código que no entendemos aún.
00:00:45.250 --> 00:00:48.210
Parece que findViewByld
es una invocación a un método,
00:00:48.210 --> 00:00:50.540
porque precede a estos paréntesis
00:00:50.540 --> 00:00:53.220
con lo que parece
un argumento de entrada.
00:00:53.530 --> 00:00:56.070
Pero es extraño que no
se defina este método
00:00:56.070 --> 00:00:58.198
en ninguna parte de la clase.
00:00:58.198 --> 00:01:01.885
si hago doble clic en el nombre
y luego presiono el comando F
00:01:02.355 --> 00:01:07.140
o control F, en Windows,
podemos buscar dentro del archivo.
00:01:07.140 --> 00:01:10.230
Solo veo dos coincidencias
con findVIewBYld
00:01:10.230 --> 00:01:12.310
y se usan de modo parecido.
00:01:12.310 --> 00:01:15.530
Pero no veo ningún método
que se llame finViewByld.
00:01:16.190 --> 00:01:19.640
A propósito, anteriormente
en la clase MainActivity
00:01:19.640 --> 00:01:21.920
vimos una invocación a setContentView,
00:01:22.600 --> 00:01:26.780
pero al buscarlo en el archivo no
está definido en MainActiivty tampoco.
00:01:27.290 --> 00:01:30.360
¿Donde se definen estos métodos?
00:01:31.010 --> 00:01:33.630
MainActivity es en realidad
un archivo bastante pequeño.
00:01:33.630 --> 00:01:35.790
Solo tiene 90 líneas,
00:01:35.790 --> 00:01:38.790
pero hay más sobre esta clase
de lo que aparenta a simple vista.
00:01:38.790 --> 00:01:42.200
El código dice, extends
(extiende) AppCompatActivity.
00:01:42.200 --> 00:01:46.860
Lo que significa que MainActivity
es una extensión de la funcionalidad
00:01:46.860 --> 00:01:49.360
en la clase AppCompatActivity.
00:01:49.370 --> 00:01:52.620
En el ordenador, si ves aquí,
ActionBarActivity está bien.
00:01:52.620 --> 00:01:55.820
Es solo una versión más antigua.
00:01:55.820 --> 00:01:58.810
Deberías usar la versión más reciente
que es AppCompatActivity.
00:01:58.810 --> 00:02:02.310
AppCompatActivity da soporte
para compatibilizar versiones previas
00:02:02.310 --> 00:02:04.470
en los aparatos antiguos de Android.
00:02:04.470 --> 00:02:07.860
AppCompatActivity es parte de
la biblioteca de soporte de Android.
00:02:07.860 --> 00:02:11.440
Nos permite usar los atributos
UI más recientes en Android
00:02:11.440 --> 00:02:15.020
mientras que todavía funciona
en otros aparatos antiguos de Android.
00:02:15.020 --> 00:02:17.560
Al extender la clase AppCompatActivitiy
00:02:17.560 --> 00:02:20.460
conseguimos gratis
todas las funcionalidades,
00:02:20.460 --> 00:02:24.240
metodos y estados de aqui,
dentro de MainActivity.
00:02:24.240 --> 00:02:26.850
No tenemos que copiar
y pegar ningún código desde aquí
00:02:26.850 --> 00:02:29.830
Simplemente extender esta clase.
00:02:29.830 --> 00:02:34.930
Puedes obtener más información
en Google sobre AppCompatActivity.
00:02:35.550 --> 00:02:39.030
Aquí está el documento de referencia
de la clase AppCompatActivity.
00:02:39.030 --> 00:02:41.920
Como tengo instalada
la extensión de Chrome,
00:02:41.920 --> 00:02:44.070
también puedo ver la fuente.
00:02:44.070 --> 00:02:47.520
Y este es el código desde donde
se define la clase AppCompatActivity.
00:02:47.520 --> 00:02:50.260
Puedes ver que hay un montón
de funcionalidades aquí,
00:02:50.260 --> 00:02:54.100
pero la clave es que no tienes
que entender cómo se implementa.
00:02:54.100 --> 00:02:58.350
Solo necesitas saber que cuando
extiendes AppCompatActivity
00:02:58.350 --> 00:03:00.780
consigues gratis
todas estas funcionalidades.
00:03:00.780 --> 00:03:03.270
A nivel superior. podemos
visualizarlo de esta manera
00:03:03.270 --> 00:03:05.650
Esta es la definición
de clase para MainActivity.
00:03:05.650 --> 00:03:08.000
Y digamos que hay definidos
algunos métodos aquí.
00:03:08.000 --> 00:03:12.150
Si extendemos AppCompatActivity
podemos acceder al estado
00:03:12.150 --> 00:03:14.490
y los métodos de AppCompactActivity.
00:03:14.490 --> 00:03:17.350
Ahora no se han añadido
físicamente a la clase MainActivity
00:03:17.350 --> 00:03:19.540
pero puedes imaginar que están allí,
00:03:19.540 --> 00:03:22.730
porque tienes aún referencia
al estado así como a los métodos.
00:03:22.730 --> 00:03:26.250
Y así es como el código se
refiere a cosas con setContenView
00:03:26.250 --> 00:03:27.810
o findViewByld.
00:03:27.810 --> 00:03:32.040
Porque heredamos esos métodos,
no los definimos en MainActivitiy.
00:03:32.040 --> 00:03:34.910
MainActivity aparece como
una pantalla en el aparato,
00:03:34.910 --> 00:03:37.520
pero no escribimos el código
para eso en MainActivity,
00:03:37.520 --> 00:03:39.450
sino que lo heredamos también.
00:03:39.450 --> 00:03:42.920
No tenemos el estado y los métodos
directamente de AppCompatActivity
00:03:42.920 --> 00:03:46.440
en la clase, pero ahora sabemos
que están y referirnos a ellos.
00:03:46.440 --> 00:03:50.240
Hablando de heredar cosas,
tiene ventajas y desventajas.
00:03:50.240 --> 00:03:52.600
A veces queremos heredar
un comportamiento,
00:03:52.600 --> 00:03:55.570
pero otras, sencillamente
modificarlo ligeramente.
00:03:55.570 --> 00:03:59.890
Para cambiar un comportamiento
de esta clase heredada
00:03:59.900 --> 00:04:02.040
se puede override
(sobreescrir) sus métodos.
00:04:02.040 --> 00:04:05.870
Basta añadir este texto
@override encima del método.
00:04:05.870 --> 00:04:08.750
y así el ordenador sabe
que no quieres la versión
00:04:08.750 --> 00:04:12.100
del método de AppCompatActivity.
00:04:12.100 --> 00:04:15.210
y que prefieres la versión
que has definido aquí.
00:04:15.210 --> 00:04:18.620
Es un tema complicado
y requiere mucha práctica.
00:04:18.620 --> 00:04:21.320
Pero hemos visto un ejemplo
de override un método
00:04:21.320 --> 00:04:23.640
de la clase AppCompatActivity.
00:04:23.640 --> 00:04:26.380
y ese método es onCreate.
00:04:26.380 --> 00:04:30.920
Al override el método onCreate
en MainACtivity específicamos
00:04:30.920 --> 00:04:34.940
nuestra propia implementación
de lo que sucederá al invocar el método.
00:04:34.940 --> 00:04:37.090
No te preocupes sino
lo entiendes todo ahora.
00:04:37.090 --> 00:04:40.084
Es solo una breve visión
de un montón de conceptos
00:04:40.084 --> 00:04:42.190
sobre la programación
orientada a objetos.
00:04:42.190 --> 00:04:45.850
Es normal que todavía
tengas un montón de preguntas
00:04:45.850 --> 00:04:50.390
y necesites leer más sobre esto
para realmente entenderlo.
00:04:50.390 --> 00:04:53.771
Otra forma de visualizar las relaciones
entre las clases de MainActivity
00:04:53.771 --> 00:04:57.800
y AppCompactActivity es dibujar
un diagrama con jeraraquía de clases.
00:04:57.800 --> 00:05:00.680
Este es diferente
a un diagrama jerárquico de vistas.
00:05:00.680 --> 00:05:05.190
El diagrama de vistas muestra
un árbol con vistas en la pantalla.
00:05:05.190 --> 00:05:09.610
Y el de clases muestra las relaciones
entre la diferentes clases de Java.
00:05:09.610 --> 00:05:12.650
Tenemos AppCompatActivity
como una superclase.
00:05:12.650 --> 00:05:16.008
Dado que MainActivity se extiende
desde AppCompatActivity,
00:05:16.008 --> 00:05:18.360
se denomina subclase.
00:05:18.360 --> 00:05:20.890
Por eso, siempre que veas
esta definición de clase,
00:05:20.890 --> 00:05:23.380
todo lo que se extienda
se conoce como superclase.
00:05:23.740 --> 00:05:25.710
Y esta será la subclase.
00:05:25.710 --> 00:05:28.790
Así, si creamos otra actividad
que vamos a llamar DetailActivity
00:05:28.790 --> 00:05:31.040
y la extiendes desde AppComptActivity,
00:05:31.040 --> 00:05:33.890
está será la subclase
y esta la superclase.
00:05:34.470 --> 00:05:37.580
Aquí hay otro ejemplo
de clases heredadas en Java.
00:05:37.580 --> 00:05:41.280
Si piensas en las clases TextView,
ImageView o ButtonView,
00:05:41.280 --> 00:05:44.460
todas tienen aspectos en común.
00:05:44.460 --> 00:05:48.070
Todas tienen una determinada
altura y anchura en la pantalla.
00:05:48.070 --> 00:05:51.330
Todavía no lo vimos, pero tienen
también un estado de visibilidad.
00:05:51.330 --> 00:05:54.510
De modo que se pueden
definir como visibles o invisibles.
00:05:54.510 --> 00:05:58.350
Hay también un par de otras
propiedades que comparten.
00:05:58.350 --> 00:06:00.840
En lugar de escribir el código
para estas propiedades
00:06:00.840 --> 00:06:03.760
dentro de la clase TextView
y luego copiarlo sobre las clases,
00:06:03.760 --> 00:06:07.010
ImageView y ButtonView,
podemos hacer algo mejor.
00:06:07.580 --> 00:06:09.980
Podemos crear una clase View
00:06:09.980 --> 00:06:13.540
y extraer todas las propiedades
comunes entre estas vistas
00:06:13.540 --> 00:06:16.390
para ponerlas dentro de la clase View.
00:06:16.390 --> 00:06:19.520
De este modo, escribiremos
el código solo una vez.
00:06:19.520 --> 00:06:23.370
Pero entonces ¿cómo relacionamos
las clases TextView y View ?
00:06:23.370 --> 00:06:26.130
Si piensas en "heredar," vas bien.
00:06:26.130 --> 00:06:29.938
En el archivoTextViewde Java
vamos a definir la clase TextView.
00:06:29.938 --> 00:06:33.570
Así, heredaremos los datos
y métodos de la clase View.
00:06:33.990 --> 00:06:37.520
Y no tendremos tanto código
en la clase TextView,
00:06:37.520 --> 00:06:41.450
porque parte de la funcionalidad
ya está escrita en la clase View.
00:06:41.450 --> 00:06:44.990
Para las clases ImageView
y Button se aplicaría lo mismo,
00:06:44.990 --> 00:06:46.630
no hay que escribir tanto código.
00:06:46.630 --> 00:06:49.780
En estos archivos solo tenemos
que escribir lo que es diferente
00:06:49.780 --> 00:06:52.790
de ImageView en comparación
con la clase View.
00:06:52.790 --> 00:06:57.090
Es como definir una función delta,
así, en la clase ImageView
00:06:57.090 --> 00:07:02.250
solo tenemos que específicar
lo que la diferencia de la clase View.
00:07:03.440 --> 00:07:06.650
Si no queremos heredar ciertos
comportamientos de la clase View
00:07:06.650 --> 00:07:09.670
basta con actualizar y especificar
un nuevo comportamiento
00:07:09.670 --> 00:07:12.820
dentro de la clase ImageView
o cualquiera de estas clases.
00:07:13.730 --> 00:07:16.990
Te recuerdo la teminología,
que en este caso sería,
00:07:16.990 --> 00:07:20.519
TextView la subclase
y View la superclase.
00:07:21.110 --> 00:07:24.230
Si volvemos ahora
a la documentación de View Class,
00:07:24.230 --> 00:07:27.210
ya entendemos esta parte.
00:07:27.210 --> 00:07:30.000
Dice que TextView extiende View.
00:07:30.000 --> 00:07:33.380
Ahora sabemos que significa
que heredamos el estado
00:07:33.380 --> 00:07:35.330
y los métodos de la clase View.
00:07:35.330 --> 00:07:38.246
Y más abajo, aquí hay
un diagrama de jerarquía.
00:07:38.246 --> 00:07:42.820
Nos muestra que la clase TextView
se hereda de la clase View.
00:07:43.310 --> 00:07:47.200
Y a su vez, la clase View
se hereda de la clase Object.
00:07:47.200 --> 00:07:50.060
Mira alrededor y verás otras clases,
00:07:50.060 --> 00:07:54.610
como la clase EditText, la cuál
se extiende desde la clase TextView.
00:07:54.610 --> 00:07:57.310
Toma el comportamiento
de la clase TextView
00:07:57.310 --> 00:08:00.900
para añadirle después
funcionalidades específicas.
00:08:01.290 --> 00:08:03.590
EditText se extiende
por tanto desde TextView,;
00:08:03.590 --> 00:08:07.330
TextView se extiende desde View;
y View se extiende desde Object.
00:08:07.330 --> 00:08:11.170
Este es el diagrama
jerárquico de clases.
00:08:11.170 --> 00:08:13.950
Hay un montón de cosas
y podría llevarnos horas.
00:08:13.960 --> 00:08:17.010
Solo te mostraré una cosa
en la documentación de TextView.
00:08:17.590 --> 00:08:19.990
Es el método SetVisibility.
00:08:20.820 --> 00:08:24.350
Aqui está el métodoSetVisibility
dentro de la clase TextView.
00:08:24.350 --> 00:08:27.510
Nos permite cambiar
si la vista es visible o invisible.
00:08:27.780 --> 00:08:33.050
Si hago clic en el método,
me lleva a la clase View,
00:08:33.050 --> 00:08:35.930
donde se describe
lo que hace el método.
00:08:35.930 --> 00:08:39.860
El objeto TextView vemos
que tiene el método SetVisibility,
00:08:39.860 --> 00:08:43.509
aunque lo heredó de la clase View.
00:08:43.509 --> 00:08:47.280
Por tanto, esta funcionalidad
es gratis por la clase View.
00:08:47.510 --> 00:08:50.930
Acabamos de cubrir
una tonelada de conceptos.
00:08:50.930 --> 00:08:55.720
Lo normal, sería repartirlos en
un curso de informática en un semestre
00:08:55.820 --> 00:08:58.260
Vamos a practicar un poco ahora
00:08:58.260 --> 00:09:00.860
y espero que empezarás
a conectar todas las cosas.
00:09:00.860 --> 00:09:03.550
Pero sabemos que necesitarás
mucho más tiempo y práctica
00:09:03.550 --> 00:09:06.610
para que entiendas
totalmente estos conceptos.
00:09:06.610 --> 00:09:09.450
Primer ejercicio, crearás
una nueva app para Android.
00:09:09.450 --> 00:09:12.730
porque no queremos
estropear la app Just Java.
00:09:13.070 --> 00:09:15.330
Después de crear
el proyecto, ejecuta la app.
00:09:15.800 --> 00:09:18.630
Una vez creada la app
verás el archivo MainActivity.
00:09:18.630 --> 00:09:22.530
El archivo MainActivity se extiende
desde AppCompatActivity.
00:09:22.530 --> 00:09:25.700
Si se extiende desde ActionBarActivity
00:09:25.700 --> 00:09:28.760
en tu versión de Android,
no pasa nada, esta bien.
00:09:28.760 --> 00:09:32.000
Es solo una versión anterior
de AppCompatActivity.
00:09:32.200 --> 00:09:35.420
Al eliminar este método
override revertiremos a la forma
00:09:35.420 --> 00:09:39.970
como aparecía onCreate
en la clase AppCompatActity.
00:09:39.970 --> 00:09:42.990
La presencia de este método
nos indica que queremos
00:09:42.990 --> 00:09:46.170
un comportamiento diferente
para onCreate en MainActivity.
00:09:46.170 --> 00:09:49.540
Al eliminarlo volvemos a
a su comportamiento inicial
00:09:49.540 --> 00:09:52.040
en la clase AppCompatActivity.
00:09:52.040 --> 00:09:53.480
Cuando ejecutes la app,
00:09:53.480 --> 00:09:56.660
¿qué cambia en comparación
a la primera vez que la ejecutaste?
00:09:56.660 --> 00:09:58.810
Anota la respuesta en la casilla de texto.