1 00:00:02,029 --> 00:00:09,029 Hola a todos. Siento la desincronización entre mi voz y la imagen, pero no puedo hacer nada, mi ordenador es antiguo. 2 00:00:10,250 --> 00:00:19,410 Ejercicio 3 de mascotas. Estamos viendo el enunciado. Parte es importante del enunciado, que me está ayudando a construir la jerarquía de clases. 3 00:00:19,690 --> 00:00:26,989 Me dice que tengo una clase abstracta de la que salen tres clases que heredan de esa clase, los perros, los gatos y las aves. 4 00:00:26,989 --> 00:00:33,670 además añade que la clase aves es abstracta y que de aves se heredan loro y canario 5 00:00:33,670 --> 00:00:37,729 me indica los atributos que tienen cada una de las clases 6 00:00:37,729 --> 00:00:43,770 que en el caso de las abstractas, bueno en el caso de las super clases que van a heredar sus hijos 7 00:00:43,770 --> 00:00:46,049 independientemente que sean abstractas o no 8 00:00:46,049 --> 00:00:51,609 y los que tienen los hijos de los que no hereda nadie 9 00:00:51,609 --> 00:00:53,909 como perro que tiene que tener raza de pulgas 10 00:00:53,909 --> 00:00:55,609 o gato que tiene que tener 11 00:00:55,609 --> 00:00:57,630 color y pelo largo 12 00:00:57,630 --> 00:00:58,829 todos tienen 13 00:00:58,829 --> 00:01:01,590 un atributo, por ejemplo, aquí que se llama 14 00:01:01,590 --> 00:01:01,950 habla 15 00:01:01,950 --> 00:01:05,450 en cambio el oro y 16 00:01:05,450 --> 00:01:06,989 canario 17 00:01:06,989 --> 00:01:09,010 sí que también lo tienen ahí 18 00:01:09,010 --> 00:01:11,349 ah, lo mismo, es posible que solo lo tengas 19 00:01:11,349 --> 00:01:13,090 importante, que hay cuatro tipos de animales 20 00:01:13,090 --> 00:01:15,670 que hay que hacer una clase inventario 21 00:01:15,670 --> 00:01:17,849 que es para guardar todos los animales 22 00:01:17,849 --> 00:01:19,969 y que 23 00:01:19,969 --> 00:01:25,849 ese inventario tiene que ser una raíz privado y que tengo que hacer las 24 00:01:25,849 --> 00:01:29,390 siguientes cosas que no tienen por qué estar en un menú yo voy a hacer del 25 00:01:29,390 --> 00:01:35,750 tirón así que voy a empezar con mis clases 26 00:01:36,329 --> 00:01:43,469 mi programa en java tiene 336 28 clases los 27 00:01:43,469 --> 00:01:49,810 las clases que hemos visto aquí 1 2 3 4 5 6 que son ave canario gato 28 00:01:49,810 --> 00:01:55,030 inventario, loro y mascota, que son seis. Perdón, que me he cuidado una perro. Inventario 29 00:01:55,030 --> 00:02:01,810 sería la séptima clase y el programa la octava. Voy a empezar, cierro esto y empiezo 30 00:02:01,810 --> 00:02:07,890 por mascota. Mascota me está diciendo que es una clase abstracta, así que la defino 31 00:02:07,890 --> 00:02:13,069 como abstracta. Y para que sea abstracta tiene que tener al menos un método abstracto. Tiene 32 00:02:13,069 --> 00:02:18,129 dos, tiene muestra y habla. Son métodos en los que no están las llaves y no hemos definido 33 00:02:18,129 --> 00:02:24,969 la implementación y lo van a tener que hacer que hacer los hijos o hijas que hereden de mascota 34 00:02:24,969 --> 00:02:33,490 tiene todos estos atributos que son privados para que no se puedan ver en sus hijas o fuera de la 35 00:02:33,490 --> 00:02:40,129 clase mascota para que para usarlos haya que utilizar los getter y los setter y luego tiene 36 00:02:40,129 --> 00:02:48,469 el constructor. El constructor recibe los cuatro atributos. El nombre que es un string, 37 00:02:48,669 --> 00:02:53,110 la edad, el estado que es un string y la fecha de nacimiento que por ahora es un string. 38 00:02:54,310 --> 00:03:00,530 Y además yo he definido otros métodos como el cumpleaños o morir. El cumpleaños simplemente 39 00:03:00,530 --> 00:03:05,710 es un método que le aumenta uno cada vez que le llamas, aunque no lo hemos usado. Y 40 00:03:05,710 --> 00:03:10,610 Y morir, simplemente lo cambia a muerto el estado que es un string. 41 00:03:11,169 --> 00:03:16,569 Si me voy al enunciado, miren, aquí está el método muestra, el cumpleaños, morir y habla. 42 00:03:17,090 --> 00:03:21,469 Yo he definido así morir y cumpleaños, y muestra y habla están aquí que son abstractos. 43 00:03:21,469 --> 00:03:30,629 Y luego están los getter y los setter para que las hijas o desde fuera se puedan utilizar los atributos que son privados. 44 00:03:32,009 --> 00:03:34,270 Y no tiene ninguna importancia. 45 00:03:34,449 --> 00:03:35,069 Vale, seguimos. 46 00:03:35,069 --> 00:03:42,949 AVE, que la tenemos aquí a la derecha, hereda de la clase abstracta mascota y a su vez es abstracta. 47 00:03:43,389 --> 00:03:49,849 Entonces aquí viene abstract, es una clase, se llama AVE y hereda, así que extiende mascota. 48 00:03:50,030 --> 00:03:53,689 ¿Qué atributos tiene? Tiene dos, pico y vuela. 49 00:03:54,210 --> 00:03:57,870 Aquí está pico y aquí está vuela, que venían aquí indicados en el UML. 50 00:03:57,870 --> 00:04:07,250 además cualquier objeto que sea de la clase AB tendría estos cuatro atributos 51 00:04:07,250 --> 00:04:08,509 que estoy marcando en la derecha 52 00:04:08,509 --> 00:04:12,169 el nombre, la edad, el estado y la fecha de nacimiento de mascota 53 00:04:12,169 --> 00:04:14,150 porque lo extiende, lo hereda 54 00:04:14,150 --> 00:04:18,769 pero como es abstracta nunca vamos a poder crear objetos de tipo mascota 55 00:04:18,769 --> 00:04:22,709 lo heredarán sus hijos, el loro, la clase loro y la clase canario 56 00:04:22,709 --> 00:04:24,470 ¿cómo funciona? 57 00:04:27,870 --> 00:04:36,610 El constructor de abe recibe todos los argumentos y llama a super, que es el de mascota. 58 00:04:36,610 --> 00:04:40,449 Así que llama con los cuatro primeros, nombre, edad, estado y fecha de nacimiento. 59 00:04:41,029 --> 00:04:47,350 Muy importante que seáis ordenados y que igual que ven en un orden, sigan en un orden al superior, al super. 60 00:04:48,170 --> 00:04:51,490 Y dis.pico le asigna pico. 61 00:04:51,490 --> 00:05:04,870 Pero aquí se usa dis para distinguir entre el atributo del objeto de la clase mascota y el nombre de la variable que llega como argumento, que es pico también. 62 00:05:05,930 --> 00:05:10,189 Luego están los métodos abstractos que van a tener que definir sus hijos. 63 00:05:10,329 --> 00:05:16,029 Lo van a tener que definir loro y canario, que son los que extienden a aves. 64 00:05:16,670 --> 00:05:17,810 Esta muestra, hablar y volar. 65 00:05:17,810 --> 00:05:24,870 Y tiene getter y setter para todos los atributos nuevos como pico y vuela que están aquí. 66 00:05:25,310 --> 00:05:26,829 Bien, entonces voy a por el loro. 67 00:05:27,870 --> 00:05:33,750 El loro además tiene el atributo origen y habla. 68 00:05:34,250 --> 00:05:39,449 Así que cuando llamamos al constructor del loro, que recibe bastantes argumentos, 69 00:05:39,449 --> 00:05:47,649 los primeros cuatro son los que va a recibir la mascota. 70 00:05:47,810 --> 00:05:53,290 porque los he agregado de mascota, y los siguientes dos, como pico y vuela, los que tienen las aves. 71 00:05:53,769 --> 00:06:01,009 Entonces cuando llamamos al super, estamos llamando al super de aves, que recibe 1, 2, 3, 4, 5, 6, hasta pico y vuela. 72 00:06:01,009 --> 00:06:08,009 Y luego 10.origen a lo que venga aquí en origen, y 10.habla al habla que venga aquí como atributo. 73 00:06:08,810 --> 00:06:17,389 Cuando llamamos a este super, estamos llamando al super de aves, que si os fijáis, repito, tiene 6 argumentos. 74 00:06:17,389 --> 00:06:28,769 Si yo me voy a aves, el constructor de aves tiene, aquí los tenéis, nombre, edad, es el segundo, estado, fecha de nacimiento, el cuarto, pico y huela, el sexto. 75 00:06:29,310 --> 00:06:33,769 Y luego este llama al constructor de mascotas, que es de cuatro. 76 00:06:34,209 --> 00:06:34,850 Les vuelvo a Loro. 77 00:06:35,569 --> 00:06:45,730 Loro tiene origen y habla y él es la primera clase que os estoy enseñando donde define cómo se implementa el método muestra. 78 00:06:45,730 --> 00:06:48,389 entonces el método muestra va a mostrar por pantalla 79 00:06:48,389 --> 00:06:49,949 en este caso no devuelve un string 80 00:06:49,949 --> 00:06:51,569 simplemente lo saca por pantalla 81 00:06:51,569 --> 00:06:52,910 así que para 82 00:06:52,910 --> 00:06:55,550 cada uno de ellos pone 83 00:06:55,550 --> 00:06:56,810 nombre, edad, estado 84 00:06:56,810 --> 00:06:59,329 si yo aquí intentara hacer 85 00:06:59,329 --> 00:07:00,769 dis.nombre 86 00:07:00,769 --> 00:07:07,279 me da un error 87 00:07:07,279 --> 00:07:09,240 ¿por qué? porque la variable nombre 88 00:07:09,240 --> 00:07:10,959 que es de mascota es privada 89 00:07:10,959 --> 00:07:13,579 entonces yo aunque heredo de mascota no lo puedo usar 90 00:07:13,579 --> 00:07:14,600 si me pongo aquí encima 91 00:07:14,600 --> 00:07:18,079 me lo dice, fijaros acerca del ratón 92 00:07:18,079 --> 00:07:22,279 No puedo acceder a nombre 93 00:07:22,279 --> 00:07:25,040 Porque está privado en mascota 94 00:07:25,040 --> 00:07:26,339 Entonces para hacerlo 95 00:07:26,339 --> 00:07:27,800 Tengo que llamar a getNombre 96 00:07:27,800 --> 00:07:29,620 Tengo otra que es getPico 97 00:07:29,620 --> 00:07:31,040 Que es de aves 98 00:07:31,040 --> 00:07:33,180 Voy a poner en vez de getPico 99 00:07:33,180 --> 00:07:34,860 Voy a poner la variable pico 100 00:07:34,860 --> 00:07:35,839 Que la tiene aves 101 00:07:35,839 --> 00:07:38,720 Y me dice exactamente lo mismo pero para aves 102 00:07:38,720 --> 00:07:42,120 Que pico tiene un acceso privado 103 00:07:42,120 --> 00:07:42,939 En ave 104 00:07:42,939 --> 00:07:44,839 Porque es una variable privada 105 00:07:44,839 --> 00:07:46,199 Entonces por eso tengo que usar 106 00:07:46,199 --> 00:07:47,839 El constructor 107 00:07:47,839 --> 00:07:54,879 Lo dejo como estaba, con el getter de nombre y el getter de pico. Eso quería contarlo, sí. 108 00:07:56,019 --> 00:08:02,060 ¿Cómo implementa habla que no lo había hecho nadie hasta ahora? El loro dice hola hola y saluda, 109 00:08:02,060 --> 00:08:10,699 dice buenos días y volar convierte su estado a volando. Luego los getter y los setter son comunes. 110 00:08:10,699 --> 00:08:18,139 Bien, voy a canario, es muy parecido al loro porque extiende ave, tiene un atributo coloricante, 111 00:08:18,139 --> 00:08:26,939 por lo tanto cuando hace, cuando el constructor al final recibe el color que es un string y canta 112 00:08:26,939 --> 00:08:34,039 que es un boolean, igual que el loro llama al super de ave con sus seis variables hasta el pijo y 113 00:08:34,039 --> 00:08:42,279 Y luego asigna a su color, que se llama el atributo color, igual que el argumento que llega aquí. 114 00:08:42,480 --> 00:08:46,299 Entonces, para distinguir, el suyo propio del objeto es dis.color. 115 00:08:46,820 --> 00:08:48,940 Y el que llega como en un momento es color. 116 00:08:49,539 --> 00:08:50,960 Y aquí lo que hace es imprimir. 117 00:08:52,179 --> 00:08:55,399 Y el habla es diferente del loro, dice pio pio. 118 00:08:55,620 --> 00:08:58,200 Y el saluda dice hola, ¿cómo estás? 119 00:08:58,340 --> 00:08:59,340 Y luego éter y éter. 120 00:09:00,120 --> 00:09:01,600 Bien hecho, loro y canario. 121 00:09:01,779 --> 00:09:02,779 Me voy al perro. 122 00:09:02,779 --> 00:09:04,620 el perro extiende mascota 123 00:09:04,620 --> 00:09:07,139 y ya no es hasta esto, así que tiene que definir 124 00:09:07,139 --> 00:09:09,259 implementar los métodos 125 00:09:09,259 --> 00:09:10,580 que mascota no había hecho 126 00:09:10,580 --> 00:09:13,220 los métodos que no había hecho mascota 127 00:09:13,220 --> 00:09:14,360 era el muestra 128 00:09:14,360 --> 00:09:16,779 que lo hace específico para 129 00:09:16,779 --> 00:09:18,580 perro y 130 00:09:18,580 --> 00:09:20,700 el habla, que dice guau guau 131 00:09:20,700 --> 00:09:22,899 y lo que digo, el constructor 132 00:09:22,899 --> 00:09:25,120 le llega, aparte 133 00:09:25,120 --> 00:09:27,080 de los habituales, llega raza y 134 00:09:27,080 --> 00:09:28,899 pulgas, así que 135 00:09:28,899 --> 00:09:31,100 llama el super de mascota con los cuatro 136 00:09:31,100 --> 00:09:37,399 primeros y luego llama a raza y a pulgas no tiene más y el gato igual extiende a 137 00:09:37,399 --> 00:09:42,139 mascota tiene el color y el pelo largo que lo podemos ver aquí 138 00:09:42,139 --> 00:09:48,759 el gato color y pelo largo y tiene que definir muestra y habla 139 00:09:48,759 --> 00:09:54,100 y los define tiene su muestra y su habla que dice miau miau 140 00:09:54,100 --> 00:09:58,759 y ya sólo me queda el inventario que es el inventario es una raíz así que tiene 141 00:09:58,759 --> 00:10:05,379 que importar la librería para usar los ArrayList. Es una clase pública porque se va a usar 142 00:10:05,379 --> 00:10:09,980 luego en el programa de inventario y tiene una variable privada, un ArrayList. Así que 143 00:10:09,980 --> 00:10:18,340 para poder utilizarla hay que usar los métodos del inventario. Ahora, ¿qué tipo de mascota? 144 00:10:18,500 --> 00:10:24,899 Recibe una mascota y si es instancia de perro devuelve perro. Si es instancia de gato devuelve 145 00:10:24,899 --> 00:10:30,240 el string gato si la mascota es instancia del oro devuelve el oro y si es instancia del canario 146 00:10:30,240 --> 00:10:39,000 devuelve canario y aquí es como hace la lista de animales recorre todo el bucle desde cero hasta 147 00:10:40,019 --> 00:10:45,720 el tamaño del animal por debajo sin cogerlo y para cada una de las mascotas 148 00:10:45,720 --> 00:10:49,120 hace animales.get 149 00:10:49,120 --> 00:10:51,100 y puede 150 00:10:51,100 --> 00:10:53,059 no hacer el casting porque 151 00:10:53,059 --> 00:10:55,340 cuando se define, se define como 152 00:10:55,340 --> 00:10:57,240 una raíz 153 00:10:57,240 --> 00:10:58,559 de mascota 154 00:10:58,559 --> 00:11:03,419 vale, y para, guarda en un 155 00:11:03,419 --> 00:11:05,279 string que llamamos 156 00:11:05,279 --> 00:11:07,039 tipo, el tipo de mascota 157 00:11:07,039 --> 00:11:09,179 para cada m y el 158 00:11:09,179 --> 00:11:11,120 nombre, el nombre de la mascota, así que 159 00:11:11,120 --> 00:11:13,240 imprime el número de la mascota 160 00:11:13,240 --> 00:11:15,419 en la lista, dos puntos 161 00:11:15,419 --> 00:11:30,100 de qué tipo es y cuál es su nombre. Y luego, para mostrar un animal, recorre todo el índice y va poniendo mascota y el número del índice. 162 00:11:30,259 --> 00:11:38,700 Y luego obtiene el número de la mascota. La mascota sabe qué número ocupa de la lista. 163 00:11:38,700 --> 00:11:47,019 Entonces yo a una mascota, que es la mascota i, le pregunto get y el índice y me dice qué índice está ocupando. 164 00:11:50,929 --> 00:11:53,009 ¿A qué le he dicho mal? Un momento, que paro. 165 00:11:53,730 --> 00:12:00,090 Yo recorro el índice de 0 hasta el tamaño de la raíz y lo primero que hago es simplemente escribo mascota y el índice. 166 00:12:00,230 --> 00:12:07,950 Mascota 0, mascota 1, mascota 2. La primera vez hago mascota 0 y guardo en m la mascota que ocupa la posición 0. 167 00:12:07,950 --> 00:12:10,629 y luego le pido a esa mascota que se muestre 168 00:12:10,629 --> 00:12:16,110 y se va a mostrar independientemente de si es un loro, un canario, un gato o un perro 169 00:12:16,110 --> 00:12:18,070 cada uno se muestra de manera diferente 170 00:12:18,070 --> 00:12:23,389 aquí solo muestra cada uno de los animales 171 00:12:23,389 --> 00:12:27,610 y en cambio cuando llama a mostrar todos los animales 172 00:12:27,610 --> 00:12:31,190 llama a mostrar un animal de ese índice 173 00:12:31,190 --> 00:12:34,269 un poco raro, pero ahora lo veremos 174 00:12:34,269 --> 00:12:37,490 y luego como inserto un animal, retiro una mascota 175 00:12:37,490 --> 00:12:39,490 y lo añade 176 00:12:39,490 --> 00:12:42,110 y eliminar a un animal 177 00:12:42,110 --> 00:12:43,330 recibe el índice 178 00:12:43,330 --> 00:12:45,990 y 179 00:12:45,990 --> 00:12:50,830 si el índice es mayor que 0 180 00:12:50,830 --> 00:12:52,570 y el índice está dentro del array 181 00:12:52,570 --> 00:12:54,450 entonces utiliza 182 00:12:54,450 --> 00:12:56,669 el método remove del array list 183 00:12:56,669 --> 00:12:58,710 con el índice que le hemos dado 184 00:12:58,710 --> 00:13:00,049 entonces por ejemplo le llevo un 5 185 00:13:00,049 --> 00:13:03,029 y diría animales.remove 5 186 00:13:03,029 --> 00:13:04,309 siempre y cuando 5 187 00:13:04,309 --> 00:13:06,470 es mayor que 0 que lo es 188 00:13:06,470 --> 00:13:08,710 y 5 sean menor que el tamaño 189 00:13:08,710 --> 00:13:10,090 de la array, si la array tiene 190 00:13:10,090 --> 00:13:12,429 3 y le decimos remove 7 191 00:13:12,429 --> 00:13:14,370 no lo va a hacer, me devolvería un false 192 00:13:14,370 --> 00:13:16,549 y después de borrar devuelvo un true 193 00:13:16,549 --> 00:13:18,129 y lo último es 194 00:13:18,129 --> 00:13:20,470 animales.clear que elimina el inventario 195 00:13:20,470 --> 00:13:21,789 entonces vamos a ver como funciona 196 00:13:21,789 --> 00:13:24,049 yo aquí 197 00:13:24,049 --> 00:13:26,389 hago un new para perros 198 00:13:26,389 --> 00:13:28,070 gatos, loros y canarios 199 00:13:28,070 --> 00:13:30,929 y luego creo un inventario 200 00:13:30,929 --> 00:13:32,429 y añado cada uno de los 201 00:13:32,429 --> 00:13:34,549 inventarios, perdón, cada uno de los 202 00:13:34,549 --> 00:13:41,529 animales P1, P2, G1, G2, que son el perro 1, el perro 2, el gato 1, el gato 2. Luego muestro los 203 00:13:41,529 --> 00:13:48,730 animales que hay como lista y luego muestro un animal en concreto. En este caso yo he cogido 204 00:13:48,730 --> 00:13:56,450 el animal G1, que es el gato 1, y le pido al gato 1 muestra. Luego muestra todos los animales que... 205 00:13:56,450 --> 00:14:02,610 Ah, ¿por qué? Voy al enunciado, voy muy acelerada. Porque primero, el enunciado me pedía mostrar la 206 00:14:02,610 --> 00:14:07,730 lista de animales, solo tipo y nombre. Y eso lo hace con este método, mostrar lista de 207 00:14:07,730 --> 00:14:13,309 animales. Luego, mostrar todos los datos de un animal concreto. Y yo lo que hago es llamar 208 00:14:13,309 --> 00:14:19,409 a Luna, que es G1, y o G1, punta muestra. Luego, mostrar todos los datos de todos los 209 00:14:19,409 --> 00:14:27,750 animales. Eso lo hago con, llamando al inventario, mostrar todos los animales. Luego, inserto 210 00:14:27,750 --> 00:14:33,029 animales en el inventario. Para eso me he creado un loro, que es Ruby, que era el loro de mi hermano, 211 00:14:33,029 --> 00:14:39,330 que lo robaron y ahora tendría 41 años, y le hago inventario punto insertar animal. 212 00:14:39,330 --> 00:14:45,149 Y luego, tras añadir a Ruby, muestro la lista de animales para que veáis que lo he insertado. 213 00:14:45,149 --> 00:14:51,909 Lo penúltimo que hace es eliminar animales, que elimino el 1 y el 2, que ahora lo veremos. Muestro 214 00:14:51,909 --> 00:14:57,509 cómo queda la lista de animales para eliminar el 1 y el 2, y por último me dice vacía el inventario. 215 00:14:57,509 --> 00:15:02,230 Así que le llamo a vaciar inventario y muestro la lista tras vaciar inventario. 216 00:15:02,409 --> 00:15:03,289 Lo voy a ejecutar. 217 00:15:09,559 --> 00:15:18,470 Fijaros, he creado los animales, he creado el inventario, los he añadido y muestro la lista de animales. 218 00:15:19,710 --> 00:15:24,129 Era lo que me pedían en el enunciado, mostrar la lista de animales, solo tipo y nombre. 219 00:15:24,409 --> 00:15:28,110 Así que pone perro Bobby, perro Lulu, así imprime todos. 220 00:15:28,429 --> 00:15:31,169 Luego pide que mostremos los datos de un animal en concreto. 221 00:15:31,169 --> 00:15:34,230 Y yo lo que hago es G1.muestra 222 00:15:34,230 --> 00:15:39,090 Llamo a muestra de G1 que es el gato Luna 223 00:15:39,090 --> 00:15:42,149 Entonces cuando llamo a G1.muestra lo hace aquí 224 00:15:42,149 --> 00:15:44,950 Un animal en concreto, como he dicho aquí 225 00:15:44,950 --> 00:15:47,669 Es G1.muestra y es Luna 226 00:15:47,669 --> 00:15:48,830 Y pone sus datos 227 00:15:48,830 --> 00:15:51,690 Luego mostrar todos los animales 228 00:15:51,690 --> 00:15:54,110 Entonces mascota 0, mascota 1 229 00:15:54,110 --> 00:15:56,210 Y para cada uno lo muestra todos sus datos 230 00:15:56,210 --> 00:15:58,750 Ahí muestra todos 231 00:15:58,750 --> 00:16:00,370 y me piden 232 00:16:00,370 --> 00:16:03,549 que inserte animales 233 00:16:03,549 --> 00:16:05,629 así que yo voy a crear otra mascota 234 00:16:05,629 --> 00:16:06,570 que se llama Ruby 235 00:16:06,570 --> 00:16:09,169 y la inserto 236 00:16:09,169 --> 00:16:11,509 le he llamado L2 y la inserto 237 00:16:11,509 --> 00:16:12,750 como animal L2 238 00:16:12,750 --> 00:16:15,909 y saco un mensaje 239 00:16:15,909 --> 00:16:17,350 que pone, tras añadir a Ruby 240 00:16:17,350 --> 00:16:18,929 mostrar lista de animales 241 00:16:18,929 --> 00:16:21,429 llamo a insertar y luego 242 00:16:21,429 --> 00:16:22,710 se imprime tras añadir 243 00:16:22,710 --> 00:16:25,370 entonces tras añadir a Ruby, fijaros que 244 00:16:25,370 --> 00:16:27,690 Ruby es el último, lo he insertado por el final 245 00:16:27,690 --> 00:16:29,389 Loro, Rubik 246 00:16:29,389 --> 00:16:31,590 Ahora voy a eliminar un par de mascotas 247 00:16:31,590 --> 00:16:32,409 El 1 y el 2 248 00:16:32,409 --> 00:16:35,750 La primera vez que elimina, elimina el 1 que es Lulu 249 00:16:35,750 --> 00:16:37,570 Así que pasa de Bobby a Luna 250 00:16:37,570 --> 00:16:40,350 Ahora fijaros que el 2 ya no es Luna 251 00:16:40,350 --> 00:16:42,370 Sería Pecas que ha pasado de 3 a 2 252 00:16:42,370 --> 00:16:43,590 Así que no está Pecas 253 00:16:43,590 --> 00:16:46,909 Y luego fijaros que Rubik era el 6 254 00:16:46,909 --> 00:16:49,350 Cuando termino de borrar el 1 y el 2 255 00:16:49,350 --> 00:16:50,509 Ha pasado a ser el 4 256 00:16:50,509 --> 00:16:52,570 Y por último 257 00:16:52,570 --> 00:16:55,090 Voy a vaciar el inventario 258 00:16:55,090 --> 00:16:57,870 y tras vaciar el inventario 259 00:16:57,870 --> 00:16:59,730 la lista de animales está vacía 260 00:16:59,730 --> 00:17:03,009 y creo que ya está 261 00:17:03,009 --> 00:17:06,589 importante que en las clases abstractas 262 00:17:06,589 --> 00:17:07,849 no se pueda hacer un new 263 00:17:07,849 --> 00:17:09,690 si yo aquí intentara 264 00:17:09,690 --> 00:17:18,119 si yo intento hacer 265 00:17:18,119 --> 00:17:23,200 mascota 266 00:17:23,200 --> 00:17:25,259 la voy a llamar m1 267 00:17:25,259 --> 00:17:27,759 y voy a hacer un new 268 00:17:27,759 --> 00:17:31,900 de mascota 269 00:17:31,900 --> 00:17:36,559 me está dando un error 270 00:17:36,559 --> 00:17:37,759 si me pongo encima 271 00:17:37,759 --> 00:17:40,519 bueno, aparentemente no he puesto el punto y coma 272 00:17:40,519 --> 00:17:41,819 pero ahora me debe de dar un error 273 00:17:41,819 --> 00:17:45,079 fijaros, me dice que mascota es abstracta 274 00:17:45,079 --> 00:17:46,599 y que no puede ser instancial 275 00:17:46,599 --> 00:17:48,640 no puedo crear objetos de tipo mascota 276 00:17:48,640 --> 00:17:50,400 y tampoco lo voy a poder crear 277 00:17:50,400 --> 00:17:51,619 de aves 278 00:17:51,619 --> 00:17:55,299 que por cierto 279 00:17:55,299 --> 00:17:58,200 ave, ave, ave, eso es singular 280 00:17:58,200 --> 00:17:59,940 un error muy grande es ponerlo en plural 281 00:17:59,940 --> 00:18:01,200 y ya estaba haciéndolo en plural 282 00:18:01,200 --> 00:18:03,940 las clases se hacen singular 283 00:18:03,940 --> 00:18:05,539 intento crear un ave 284 00:18:05,539 --> 00:18:07,259 la voy a llamar a1 285 00:18:07,259 --> 00:18:09,859 con un new ave, aunque no he puesto todavía los valores 286 00:18:09,859 --> 00:18:11,859 y fijaros que cuando me pongo encima de la pista 287 00:18:11,859 --> 00:18:13,920 que me da el error, me dice que es abstracto 288 00:18:13,920 --> 00:18:15,500 y que no puede ser instanciada 289 00:18:15,500 --> 00:18:17,799 así que no podía crear 290 00:18:17,799 --> 00:18:19,019 ni un ave, ni una 291 00:18:19,019 --> 00:18:20,559 mascota 292 00:18:20,559 --> 00:18:23,180 pero si puedo 293 00:18:23,180 --> 00:18:26,880 una cosa interesante 294 00:18:26,880 --> 00:18:35,339 Yo puedo decir que tengo una mascota que es M1 y decirle que apunte al canario 1. 295 00:18:36,880 --> 00:18:38,460 Y eso sí puedo hacerlo. 296 00:18:38,619 --> 00:18:46,960 No he creado una mascota, sino que he definido una variable M1 de tipo mascota y le he dicho que apunte a canario, que es una mascota. 297 00:18:47,259 --> 00:18:48,200 Eso sí lo puedo hacer. 298 00:18:48,200 --> 00:19:16,809 Y de hecho eso lo estamos haciendo en el inventario cuando yo le digo que quiero mostrar todos los animales, me hace un bucle y dice mostrar un animal y le escribo un índice. 299 00:19:16,809 --> 00:19:19,609 en este caso el índice es 7 300 00:19:19,609 --> 00:19:21,210 entonces si el índice es 301 00:19:21,210 --> 00:19:22,769 por ejemplo 5 o lo que sea 302 00:19:22,769 --> 00:19:24,670 si el índice está dentro del rango 303 00:19:24,670 --> 00:19:26,349 imprime la palabra mascota 304 00:19:26,349 --> 00:19:28,269 el número del índice y luego 305 00:19:28,269 --> 00:19:31,049 en la variable m que es de tipo mascota 306 00:19:31,049 --> 00:19:32,089 guarda 307 00:19:32,089 --> 00:19:35,210 el objeto 308 00:19:35,210 --> 00:19:37,589 que está en la posición índice 309 00:19:37,589 --> 00:19:38,589 dentro del array 310 00:19:38,589 --> 00:19:41,130 puede ser un canario, un loro, un perro 311 00:19:41,130 --> 00:19:42,789 o un gato porque es lo único que tenemos 312 00:19:42,789 --> 00:19:44,829 y fijaros como lo guarda en mascota 313 00:19:44,829 --> 00:19:46,890 entonces no puedo hacer un nido de mascota 314 00:19:46,890 --> 00:19:48,430 pero si puedo guardar en mascota 315 00:19:48,430 --> 00:19:49,849 objetos 316 00:19:49,849 --> 00:19:53,509 que heredan de mascota 317 00:19:53,509 --> 00:19:56,390 y ya está todo 318 00:19:56,390 --> 00:19:57,069 gracias