1 00:00:00,240 --> 00:00:07,240 vale ya estamos en marcha pues nada comentarme si tenéis alguna cosita como siempre antes de 2 00:00:07,240 --> 00:00:11,820 arrancar alguna duda que tengáis que queréis aclarar a ver si podemos resolverla entre todos 3 00:00:11,820 --> 00:00:28,059 nada en principio vale mañana empezamos un nuevo tema el tema 5 todavía todavía son conceptos bueno 4 00:00:28,059 --> 00:00:33,500 no sé si se va haciendo duro por lo menos a los que estáis empezando a programar este año algunos 5 00:00:33,500 --> 00:00:39,299 Ya os conozco del año pasado, entonces estos primeros temas supongo que los llevaréis razonablemente bien. 6 00:00:39,859 --> 00:00:42,920 Los que estáis probando de nuevas, pues no sé si os estará costando más o menos. 7 00:00:43,780 --> 00:00:47,880 El tema 5 todavía no introduce cosas muy nuevas. 8 00:00:48,640 --> 00:00:56,020 Todavía estamos aterrizando en los conceptos de programación orientado a objetos y aplicados al lenguaje de programación Java. 9 00:00:56,020 --> 00:01:02,700 Y como desde el día 1 ya estábamos utilizando las clases y los objetos, 10 00:01:02,700 --> 00:01:08,140 entonces ahora estamos durante todos estos temas formalmente asentando esos conocimientos 11 00:01:08,140 --> 00:01:14,760 entonces ya os digo que todavía el tema 5 pues seguimos un poco hablando de cosas con las que 12 00:01:14,760 --> 00:01:20,900 venimos trabajando desde el día 1 bueno pues no vendrán seguramente para nada mal el repaso de 13 00:01:20,900 --> 00:01:27,719 ello pero pero no tiene cosas nuevas no ya no sé si es el tema 6 o a partir del tema 7 ya dejamos 14 00:01:27,719 --> 00:01:30,799 de trabajar sobre las cosas que todo programa Java 15 00:01:30,799 --> 00:01:33,719 tiene, pues todos tienen clases, en todas hay estructuras de control 16 00:01:33,719 --> 00:01:36,400 de bucle o de condición o de selección 17 00:01:36,400 --> 00:01:40,120 y ya pues bueno, pues hablaremos de ficheros 18 00:01:40,120 --> 00:01:42,299 pues unos programas tendrán ficheros y otros no 19 00:01:42,299 --> 00:01:45,859 es una herramienta muy utilizada, siempre en todos los lenguajes de programación 20 00:01:45,859 --> 00:01:48,640 leer y escribir en ficheros, pero no necesariamente 21 00:01:48,640 --> 00:01:51,599 de hecho hemos hecho hasta ahora programas en los que no hemos escrito 22 00:01:51,599 --> 00:01:53,620 en ninguno fichero, ni hemos leído de ficheros 23 00:01:53,620 --> 00:01:57,120 bueno, pues conoceremos esa herramienta y aquello sí que será 24 00:01:57,120 --> 00:02:00,060 digamos una cosa adicional nueva que veremos en ese tema 25 00:02:00,060 --> 00:02:02,540 y no habremos hablado con anterioridad de ello 26 00:02:02,540 --> 00:02:04,819 pero ya os digo, el tema que viene todavía 27 00:02:04,819 --> 00:02:08,659 seguiremos profundizando en cosas de clases, programación orientada a objetos 28 00:02:08,659 --> 00:02:11,699 conceptos, bueno, pues igual algunas cosas las repetiremos 29 00:02:11,699 --> 00:02:14,960 de otras tutorías, pero bueno, no viene mal yo creo 30 00:02:14,960 --> 00:02:16,939 mañana cerramos la 31 00:02:16,939 --> 00:02:20,580 tarea del tema 4, la semana que viene 32 00:02:20,580 --> 00:02:23,120 que ya es la última que tenemos antes de navidades 33 00:02:23,120 --> 00:02:26,300 si no tenéis nada pendiente, bueno, pues podemos 34 00:02:26,300 --> 00:02:30,259 dedicar para dejar totalmente cerrado este tema que tenemos ahora mismo abierto 35 00:02:30,259 --> 00:02:33,180 hacer la tarea y alguna otra cosita 36 00:02:33,180 --> 00:02:38,539 que nos surja y ya bueno, pues ya a partir de la semana 37 00:02:38,539 --> 00:02:42,340 que viene ya os digo, ya luego tendremos un par de semanas en las cuales podréis descansar 38 00:02:42,340 --> 00:02:45,360 un poco, por lo menos de mis charlas aquí en las tutorías 39 00:02:45,360 --> 00:02:49,340 otra cosa es que si tenéis algún ratillo lo dedicáis a hacer algún programilla 40 00:02:49,340 --> 00:02:54,240 bueno, dicho esto, en el guión que tengo yo aquí 41 00:02:54,240 --> 00:02:56,240 que no sigue fielmente 42 00:02:56,240 --> 00:02:58,379 justo los contenidos del tema, aunque más o menos 43 00:02:58,379 --> 00:02:59,759 pues vamos hablando de lo mismo 44 00:02:59,759 --> 00:03:02,300 para hablaros durante el tema 4 45 00:03:02,300 --> 00:03:04,180 pues estuve contando unas cuantas 46 00:03:04,180 --> 00:03:05,419 cosas la semana pasada 47 00:03:05,419 --> 00:03:08,060 y bueno, mi intención es seguir contándoos 48 00:03:08,060 --> 00:03:10,099 otras poquitas durante el día de hoy 49 00:03:10,099 --> 00:03:12,280 así que vamos a ponernos manos a la obra 50 00:03:12,280 --> 00:03:15,770 a ver, teníamos aquí un 51 00:03:15,770 --> 00:03:17,610 proyecto que era tema 4, podemos 52 00:03:17,610 --> 00:03:19,710 reutilizarlo para seguir trabajando con él 53 00:03:19,710 --> 00:03:22,710 con dos clases 54 00:03:22,710 --> 00:03:34,099 bueno, habíamos definido por aquí una clase persona 55 00:03:34,099 --> 00:03:35,620 que tiene por ahí varias cosillas 56 00:03:35,620 --> 00:03:47,560 Estuvimos hablando el otro día de la sobrecarga de métodos, si os acordáis, que era dar el mismo nombre a un método y podíamos diferenciarlos en función del número de parámetros que recibía. 57 00:03:48,819 --> 00:04:05,159 Y de esta forma, cuando utilizábamos un método saludar u otro, el programa era capaz de entender si queríamos que ejecutara este código o este otro en función del número de parámetros y del tipo de los parámetros que recibía durante la llamada. 58 00:04:05,159 --> 00:04:16,139 Supongo que por aquí tendremos llamadas, diferentes llamadas a saludar. Bueno, pues ya sé que se quedó eso ya perdido. Igual hoy volvemos a hablar otro ratito de todo eso. 59 00:04:17,240 --> 00:04:33,959 Otra cosa de la que estuvimos hablando el otro día era, habíamos empezado a hablar de diferentes etiquetas que podemos poner a los métodos o a los parámetros. Y aquí tenemos tres de ellas. Creo que habíamos arrancado hablando de las etiquetas que tiene, por ejemplo, el método main, que también son válidas para otras. 60 00:04:33,959 --> 00:04:38,220 Vamos a repasarlas. De esta, por lo menos, seguro que no habíamos hablado. 61 00:04:39,600 --> 00:04:46,160 La etiqueta public tiene varias alternativas, que son excluyentes. 62 00:04:46,319 --> 00:04:58,550 Podemos utilizar la etiqueta bien public, bien protective, bien privada, private, o no poner nada. 63 00:05:01,500 --> 00:05:03,019 Es decir, sería el valor por defecto. 64 00:05:03,019 --> 00:05:32,430 sería, bueno, justo en el método main no me lo permite, o sí, incluso si me compila el método main si no lo pongo, aunque el método main siempre suele ir con justo estas etiquetas, la de public, si no ponemos nada es equivalente a el tipo de etiqueta package, de paquete, mira cuando organizamos el código de un programa, os he enseñado en varias ocasiones como se guarda aquí en el sistema de archivos, 65 00:05:32,430 --> 00:05:39,319 Eclipse en particular tiene una zona de trabajo 66 00:05:39,319 --> 00:05:42,480 y a partir de esta zona de trabajo crea un directorio 67 00:05:42,480 --> 00:05:45,639 para cada uno de los proyectos que estamos construyendo 68 00:05:45,639 --> 00:05:48,540 si os fijáis estos proyectos, no sé si habremos borrado alguno 69 00:05:48,540 --> 00:05:51,600 coinciden con los que tenemos aquí activos en Eclipse 70 00:05:51,600 --> 00:05:53,279 cada vez que creamos un nuevo proyecto 71 00:05:53,279 --> 00:05:57,680 construye un nuevo directorio 72 00:05:57,680 --> 00:05:59,439 justo colgando el Workspace 73 00:05:59,439 --> 00:06:03,259 justo en particular estamos trabajando sobre el proyecto 74 00:06:03,259 --> 00:06:04,600 ¿he dado a grabar? 75 00:06:05,920 --> 00:06:19,040 Sí, está grabando. Justo ahora mismo estamos trabajando sobre el proyecto del tema 4 y os decía que tenemos la información distribuida del proyecto en dos carpetas. 76 00:06:19,040 --> 00:06:23,220 la carpeta bin, que es donde están los puntos class con el base code compilado 77 00:06:23,220 --> 00:06:26,779 de nuestras clases, este proyecto está compuesto de dos clases 78 00:06:26,779 --> 00:06:30,399 la clase inicio java y personaje.java 79 00:06:30,399 --> 00:06:34,959 con lo cual tenemos aquí dos ficheritos con código compilado 80 00:06:34,959 --> 00:06:38,160 el base code de esas dos clases, y luego 81 00:06:38,160 --> 00:06:43,379 el código source, por aquí, que estos ficheritos 82 00:06:43,379 --> 00:06:47,000 son justo los que tenemos abiertos ahora mismo aquí en Eclipse, que si vamos de uno a otro 83 00:06:47,000 --> 00:06:51,699 lo podemos ir viendo, pues justo está abriendo los ficheros que están colgando en la carpeta source. 84 00:06:52,620 --> 00:07:00,000 Fijaros como aquí hemos dicho que este código se meta en un paquete que es el paquete de por defecto. 85 00:07:01,540 --> 00:07:07,319 Resulta que es posible organizar, bueno, estos programitas que estamos haciendo son muy sencillos, 86 00:07:07,420 --> 00:07:12,560 los metemos todos juntitos, digamos, en un mismo cajón, en un mismo paquete y ya está, 87 00:07:12,560 --> 00:07:14,819 y tiramos para lo que estamos haciendo hasta ahora. 88 00:07:15,439 --> 00:07:17,420 Pero suponed que estamos haciendo un proyecto grande, 89 00:07:17,560 --> 00:07:19,259 imaginaos que es el proyecto de un banco, 90 00:07:20,100 --> 00:07:24,060 y, bueno, pues a lo mejor el conjunto de ese proyecto 91 00:07:24,060 --> 00:07:26,360 ya implica tener, yo qué sé qué decir, 92 00:07:26,480 --> 00:07:29,199 por poner un número vamos a decir 80 ficheros.java. 93 00:07:30,040 --> 00:07:34,279 Entonces, si del tirón ponemos los 80 ficheros.java 94 00:07:34,279 --> 00:07:37,439 en un único directorio, a lo mejor es un poco caótico. 95 00:07:37,720 --> 00:07:38,540 Entonces, ¿qué podemos hacer? 96 00:07:38,660 --> 00:07:41,839 Pues mira, vamos a hacer una organización del código 97 00:07:41,839 --> 00:07:46,680 y de los ficheros .java que soportan cada una de las funcionalidades, 98 00:07:46,800 --> 00:07:49,079 vamos a identificar las funcionalidades. 99 00:07:49,300 --> 00:07:53,699 Entonces podemos decir, pues el banco tiene una línea de trabajo, 100 00:07:53,819 --> 00:07:55,740 una funcionalidad que tiene que ver con préstamos 101 00:07:55,740 --> 00:07:58,579 y otra que tiene que ver con cuentas de ahorro 102 00:07:58,579 --> 00:08:00,199 y otra que tiene que ver con lo que sea, 103 00:08:00,480 --> 00:08:03,259 diferentes funciones que tenga la banca. 104 00:08:04,300 --> 00:08:06,899 Si para con una de estas funciones necesitamos cinco .java, 105 00:08:07,319 --> 00:08:09,860 cinco ficheros .java para poner todo su código, 106 00:08:09,860 --> 00:08:15,800 estando todos juntos pues sería un poco un poco desorganizado digamos el intentar identificar en 107 00:08:15,800 --> 00:08:20,779 qué ficheros tenemos código relativo a cada una de las funcionalidades entonces qué podemos hacer 108 00:08:20,779 --> 00:08:26,459 pues podemos organizar en paquetes en bloques los ficheros punto java que dan cada una de esas 109 00:08:26,459 --> 00:08:33,440 funciones es decir si decimos mira la parte de préstamos pues estos cinco ficheros vamos a 110 00:08:33,440 --> 00:08:39,080 crear un paquete vamos a suponer que dentro un armario hacemos un cajoncito un apartado para 111 00:08:39,080 --> 00:08:42,179 los préstamos y en ese paquete de préstamos 112 00:08:42,179 --> 00:08:45,179 metemos los cinco ficheritos que tienen que ver 113 00:08:45,179 --> 00:08:48,179 con préstamos. Entonces si cuando 114 00:08:48,179 --> 00:08:50,220 tengamos que trabajar para hacer un mantenimiento 115 00:08:50,220 --> 00:08:54,299 o meterle más funcionalidad a la parte 116 00:08:54,299 --> 00:08:57,559 de préstamos, si lo tenemos todo así bien organizadito 117 00:08:57,559 --> 00:08:59,799 cuando vayamos a trabajar sobre esto 118 00:08:59,799 --> 00:09:03,019 nos iremos directamente a esos ficheros.java que están muy bien 119 00:09:03,019 --> 00:09:05,840 organizados en esa sección de préstamos, en ese paquete 120 00:09:05,840 --> 00:09:08,940 y de la misma forma podemos hacer con las cuentas 121 00:09:08,940 --> 00:09:12,399 de ahorro y bueno, pues con otros servicios que pueda tener el banco 122 00:09:12,399 --> 00:09:16,700 lo organizamos en paquetes. Y en cada uno de ellos metemos 123 00:09:16,700 --> 00:09:20,740 los ficheros .java que tienen que ver con esa funcionalidad. ¿Cómo se organizaría 124 00:09:20,740 --> 00:09:24,659 eso dentro del proyecto? Pues todo colgaría del 125 00:09:24,659 --> 00:09:28,940 SRC y en el SRC, en Eclipse, tendríamos 126 00:09:28,940 --> 00:09:31,840 un directorio por cada uno de los paquetes. 127 00:09:33,000 --> 00:09:36,779 Entonces imaginaos que tuviéramos en Mecadir aquí, creamos un directorio 128 00:09:36,779 --> 00:09:45,789 finanzas aquí tendríamos los ficheros punto java que están en el paquete por defecto que es el que 129 00:09:45,789 --> 00:09:50,070 venimos utilizando en los ejemplos hasta ahora y todo lo que tuviera que ver con finanzas lo 130 00:09:50,070 --> 00:09:56,649 meteríamos dentro de este directorio de finanzas podríamos tener otros directorios más y aquí 131 00:09:56,649 --> 00:10:01,350 colgando también del src pues podríamos tener otro que fuera un directorio de cuentas corrientes 132 00:10:01,350 --> 00:10:17,610 voy a borrar este finanzas aquí, ahí está borrado, entonces eso se organizaría aquí en el sistema de archivos 133 00:10:17,610 --> 00:10:22,649 con esa estructura de carpetas y aquí pues también veríamos esa estructura de carpetas de la misma forma 134 00:10:22,649 --> 00:10:25,929 y los ficheros .java los iríamos colocando en cada uno de esos paquetes 135 00:10:25,929 --> 00:10:34,389 ¿Cómo podemos hacer para que un código esté en un determinado paquete? 136 00:10:34,389 --> 00:10:38,470 pues aquí en la cabecera podemos poner la etiqueta 137 00:10:38,470 --> 00:10:44,460 package, vamos a hacerlo aquí para el inicio que es el que tiene el .me 138 00:10:44,460 --> 00:10:53,750 vamos a hacerlo por ejemplo aquí para el de personas, no sé si me va a 139 00:10:53,750 --> 00:11:02,960 crear Eclipse directamente el paquete, tenemos la posibilidad de crear 140 00:11:02,960 --> 00:11:07,200 a ver, vamos a ver si lo creamos, vamos a crear 141 00:11:07,200 --> 00:11:10,899 el paquete, un nuevo paquete aquí en el proyecto 142 00:11:10,899 --> 00:11:14,940 new, fijaros aquí me da la opción de crear un nuevo paquete 143 00:11:14,940 --> 00:11:24,309 veis, me ha creado aquí esta estructura, fijaros, colgando de source 144 00:11:24,309 --> 00:11:27,490 aparte de estos dos, si nos vamos aquí, ponemos ls 145 00:11:27,490 --> 00:11:31,309 y tenemos el directorio finanzas que me acaba de crear ahora 146 00:11:31,309 --> 00:11:34,409 y si yo ahora cojo y creo aquí una nueva clase 147 00:11:34,409 --> 00:11:39,649 vamos a llamarla clase finanzas 148 00:11:39,649 --> 00:11:46,320 bueno, pues la he metido ahí y fijaros como lo que estaba yo intentando escribir 149 00:11:46,320 --> 00:11:49,539 pero como no estaba en el paquete de finanzas, no me lo ponía 150 00:11:49,539 --> 00:11:52,820 en la cabecera del fichero para identificar que se encuentra 151 00:11:52,820 --> 00:11:55,759 en el paquete de finanzas, pues le ponemos aquí la etiqueta 152 00:11:55,759 --> 00:11:59,100 esta package finanzas. Todo lo que tenga que ver 153 00:11:59,100 --> 00:12:02,139 con código relacionado en Java con las finanzas 154 00:12:02,139 --> 00:12:04,399 pues lo podemos poner en esta carpeta. 155 00:12:05,679 --> 00:12:07,759 Esto las ventajas que tiene, ya os digo 156 00:12:07,759 --> 00:12:10,820 si tenemos 157 00:12:10,820 --> 00:12:13,539 muchos ficheros .java 158 00:12:13,539 --> 00:12:16,860 de diferentes funcionalidades todos metidos aquí, igual nos resulta 159 00:12:16,860 --> 00:12:20,159 más complicado localizar una actualización que tuviera 160 00:12:20,159 --> 00:12:23,000 que ver con la funcionalidad de finanzas. Pero 161 00:12:23,000 --> 00:12:25,860 si abrimos el proyecto, en un proyecto que sea muy grande, con 162 00:12:25,860 --> 00:12:28,960 muchos paquetes y muchos ficheros, y sabemos que 163 00:12:28,960 --> 00:12:31,840 tenemos que corregir una cosa relacionada con finanzas, pues convenirnos 164 00:12:31,840 --> 00:12:34,580 a este paquete, si lo hemos estructurado todo bien, 165 00:12:35,000 --> 00:12:37,860 en las dos o tres ficheros .java será donde tengamos 166 00:12:37,860 --> 00:12:39,220 que tocar y no en otras zonas. 167 00:12:40,740 --> 00:12:43,720 Otra de las ventajas que tiene esto, es que imaginaros que estamos 168 00:12:43,720 --> 00:12:46,779 haciendo el organizar los proyectos por paquetes 169 00:12:46,779 --> 00:13:06,000 Imaginaos que estamos haciendo un proyecto para un banco en particular, me da igual, el Santander digamos, y tiene todo su código aquí que da servicio a ese proyecto y de repente otro banco resulta que le interesa que le hagamos también un desarrollo. 170 00:13:06,000 --> 00:13:11,320 no quiere el desarrollo completo de este primer banco pero sí que el paquete de finanzas le parece 171 00:13:11,320 --> 00:13:15,559 que es muy interesante pues podemos coger todo el paquete de finanzas que lo tenemos muy bien 172 00:13:15,559 --> 00:13:22,000 organizadito y metido aquí importar este paquete en el nuevo proyecto con lo cual toda esta parte 173 00:13:22,000 --> 00:13:30,539 de código lo tenemos ya desarrollada y en principio incluso probada. Aquí tenemos la clase 174 00:13:30,539 --> 00:14:21,230 finanzas que podemos poner, vamos a poner aquí un método public, public void, finanzas, public void, saluda, finanzas, vamos a poner, si este no es println, método simplemente que saque por pantalla algo, entonces si nos venimos aquí al inicio, fijaros el inicio está en el paquete por defecto, no está directamente metido en ningún directorio, 175 00:14:21,250 --> 00:14:38,590 Si nosotros queremos construir aquí un objeto de la clase finanzas, ponemos finanzas, fin, igual a new, finanzas, el constructor, como os comentaba el otro día. 176 00:14:38,590 --> 00:14:43,269 Y esto no me compila, esto de finanzas no entiendo, no sé yo lo que es. 177 00:14:43,870 --> 00:14:53,730 Entonces, ¿qué tenemos que hacer? En cambio, si yo pongo aquí persona miper igual a new persona, 178 00:14:55,649 --> 00:14:57,830 este persona no se me queja y se me compila. 179 00:14:58,009 --> 00:15:04,850 ¿Qué sucede? Que persona está en el mismo paquete que inicio, pero finanzas está en un paquete diferente que inicio. 180 00:15:04,850 --> 00:15:19,309 ¿Qué está intentando desde la clase inicio en el método main? ¿Dónde está intentando localizar el paquete, es decir, la clase finanzas para construir un objeto que se llame fin? 181 00:15:19,309 --> 00:15:32,389 Pues lo está intentando localizar donde él se encuentra y como donde él se encuentra, que es en el paquete por defecto, no existe el fichero finanzas java, que es el que tiene el código de la clase finanzas, pues no me compila. 182 00:15:32,389 --> 00:15:39,370 En cambio, persona, como si se encuentra en su mismo paquete, pues lo ha localizado y directamente me lo permite. 183 00:15:39,549 --> 00:15:44,649 ¿Qué tenemos que hacer si dentro de la estructura que hemos organizado por paquetes en mi programa 184 00:15:44,649 --> 00:15:51,389 quiero tener acceso, en este caso, desde inicio que está en el paquete default a una clase que está en el paquete finanzas? 185 00:15:52,029 --> 00:15:53,330 Pues necesito importarlo. 186 00:15:53,929 --> 00:15:59,019 Entonces yo cojo y digo import finanzas aquí. 187 00:16:07,419 --> 00:16:09,480 Vamos a decirle que nos ayude aquí para ponerlo. 188 00:16:09,480 --> 00:16:16,289 aquí lo que me dice es, importa 189 00:16:16,289 --> 00:16:18,250 del paquete 190 00:16:18,250 --> 00:16:20,289 finanzas, la clase finanzas 191 00:16:20,289 --> 00:16:22,350 es decir, desde la ruta 192 00:16:22,350 --> 00:16:23,370 donde yo me encuentro 193 00:16:23,370 --> 00:16:28,480 paquete finanzas, aquí lo tenéis 194 00:16:28,480 --> 00:16:30,620 el paquete finanzas y dentro de ese paquete 195 00:16:30,620 --> 00:16:36,059 metido en la clase 196 00:16:36,059 --> 00:16:37,159 finanzas tenemos 197 00:16:37,159 --> 00:16:40,019 metido en el 198 00:16:40,019 --> 00:16:42,320 fichero finanzas.java tenemos la clase finanzas 199 00:16:42,320 --> 00:16:43,679 entonces en el momento que ya se lo 200 00:16:43,679 --> 00:16:45,860 identificamos aquí, decimos importa al proyecto 201 00:16:45,860 --> 00:16:47,879 la clase finanzas que se encuentra 202 00:16:47,879 --> 00:16:54,299 en el paquete finanzas pues ya coge y me funciona esto en realidad no es nada nuevo lo único que 203 00:16:54,299 --> 00:17:00,600 estamos utilizando una clase de un paquete que hemos construido a nosotros pero ya en su caso 204 00:17:00,600 --> 00:17:08,359 habíamos hecho escáner mi scan verdad en algunos ejercicios igual año escáner si está en punto in 205 00:17:09,619 --> 00:17:14,180 y esto no me compila va porque no me compila va a escáner bueno pues porque no se encuentra 206 00:17:14,180 --> 00:17:17,579 cargado dentro de mi proyecto. Entonces, ¿qué hacíamos aquí? 207 00:17:17,579 --> 00:17:20,619 Le poníamos tal que aquí, decíamos import y fijaros 208 00:17:20,619 --> 00:17:23,779 lo que me hace aquí. Impórtame del paquete 209 00:17:23,779 --> 00:17:26,440 Java útil la clase 210 00:17:26,440 --> 00:17:29,420 Scanner, que viene a ser el equivalente de importame 211 00:17:29,420 --> 00:17:32,220 en nuestra clase, importame de finanzas 212 00:17:32,220 --> 00:17:35,319 la clase finanzas. Un poquito lo mismo. 213 00:17:35,500 --> 00:17:38,519 Es decir, ya lo estábamos haciendo en realidad, pero desde paquetes 214 00:17:38,519 --> 00:17:40,240 que tenemos en las librerías de Java. 215 00:17:40,240 --> 00:17:46,480 y luego es verdad que también se comentaba en algún momento que teníamos por ejemplo el método 216 00:17:46,480 --> 00:17:57,980 system.out.println utilizamos este y decíamos oye este método no hemos importado nada y estamos 217 00:17:57,980 --> 00:18:04,059 utilizando un método de algo bueno pues que está en el paquete system.out este paquete system.out 218 00:18:04,059 --> 00:18:12,619 el método println donde está pues lo que sucede es que este este paquete está dentro de la librería 219 00:18:12,619 --> 00:18:19,940 java lang y la librería java lang tiene funciones tan comunes en el uso de todos los programas de 220 00:18:19,940 --> 00:18:25,299 java que para ahorrar ya que se entiende que son de uso muy común para estar ahorrando importarlas 221 00:18:25,299 --> 00:18:31,299 automáticamente se importan en todos los proyectos entonces que tenemos que importar aquello que no 222 00:18:31,299 --> 00:18:36,579 está en java lang y lo que no está en java lang pueden ser clases de paquetes no es propios o 223 00:18:36,579 --> 00:18:41,960 clases de paquetes que se encuentran en la librería de java pero no en java lang en este 224 00:18:41,960 --> 00:18:50,839 caso es java útil para escáner vale pues bueno contado esto de cómo podemos organizar nuestro 225 00:18:50,839 --> 00:18:57,059 código en paquetes y un poco para qué nos puede servir tener estos paquetes nos facilita el 226 00:18:57,059 --> 00:19:02,460 mantenimiento ya que tenemos más ubicado el código relacionado con ciertas funcionalidades y luego 227 00:19:02,460 --> 00:19:06,619 hace que nuestro programa sea más portable si sólo queremos el paquete finanzas en un segundo 228 00:19:06,619 --> 00:19:11,420 proyecto cogemos este directorio y sabemos que va auto contenido hay toda la información que 229 00:19:11,420 --> 00:19:17,240 necesitamos para ese desarrollo pues regresamos un poco a esto que estábamos hablando del public 230 00:19:17,240 --> 00:19:26,619 cuando nosotros estamos definiendo algo como public lo que estamos haciendo es que este 231 00:19:26,619 --> 00:19:35,059 método al que está haciendo referencia este public pueda ser ejecutado desde cualquier sitio de todo 232 00:19:35,059 --> 00:19:41,740 mi proyecto vamos a definir aquí un método mirad aquí public public saludar este método public 233 00:19:41,740 --> 00:19:50,980 saludar puede ser ejecutado desde, vamos a ver, finanzas, mejor. Mirad, este public saludar finanzas puede ejecutarse 234 00:19:50,980 --> 00:20:00,019 desde cualquier sitio en todo mi proyecto. Si yo, de hecho, yo me vengo aquí, ahora que tenemos un objeto de la clase 235 00:20:00,019 --> 00:20:14,509 finanzas y digo fin objeto de la clase punto y llamo al método saludar si ejecuto me lo ejecuto 236 00:20:14,509 --> 00:20:21,529 correctamente si yo esta etiqueta que tengo que definida como public la defino como private 237 00:20:21,529 --> 00:20:30,960 lo que sucede es que estoy diciendo que este método solamente sea ejecutable desde otros 238 00:20:30,960 --> 00:20:35,940 métodos de mi clase si yo tengo mirad como esto me deja 239 00:20:35,940 --> 00:20:40,519 veis como ha dejado de compilar aquí porque por qué 240 00:20:40,519 --> 00:20:44,380 la clase inicio lógicamente no es la clase finanzas el hecho de haber 241 00:20:44,380 --> 00:20:50,740 definido este método como private es el ámbito de ejecución de este método es mi 242 00:20:50,740 --> 00:20:55,079 clase con lo cual solamente podría llamar a saludar finanzas desde 243 00:20:55,079 --> 00:21:01,400 cualquier otro sitio de mi propia clase y así yo comento aquí esto para que me 244 00:21:01,400 --> 00:21:09,599 compile el proyecto y creo aquí otro método fijaros public 245 00:21:09,599 --> 00:21:26,000 llamar saludar y aquí lo que hago es llamar este método digo que no devuelva 246 00:21:26,000 --> 00:21:31,140 nada public voy llamar saludar fijaros como aquí a pesar de ser privado ya sí 247 00:21:31,140 --> 00:21:34,960 que me compila me compila perfectamente porque porque la llamada la estoy 248 00:21:34,960 --> 00:21:38,299 haciendo desde un método que pertenece a la clase de finanzas el hecho de que 249 00:21:38,299 --> 00:21:48,779 este método sea privado, nos permite que llamadas desde su método sí le valgan, pero llamadas desde su clase sí me valgan, pero desde otras clases no. 250 00:21:50,279 --> 00:22:04,059 Aquí si pongo fin, punto. Observad como ahora ya aquí al poner fin, punto, como ese método ya es privado, el id, si intento buscar saludar, ya no me lo ofrece. 251 00:22:04,059 --> 00:22:17,200 ¿Por qué? Porque es privado. Realmente desde este ámbito no está disponible el método saludar. El que sí que está disponible será el método llamar saludar. ¿Por qué? Porque el método llamar saludar, fijaros, lo he definido como público. 252 00:22:22,049 --> 00:22:33,190 Entonces, si ahora llamo a llamar saludar, llamar saludar, sí que lo llama, ¿veis? Y llamar saludar está llamando a saludar finanzas, con lo cual el resultado es que me lo muestra por aquí por pantalla. 253 00:22:37,880 --> 00:22:42,440 Podríamos pensar, ¿qué utilidad tiene el definir algo aquí privado? 254 00:22:43,839 --> 00:22:48,619 Mirad, un ejemplo clásico que yo creo que es bastante ilustrativo. 255 00:22:48,619 --> 00:23:00,809 Imaginaos que, vamos a la clase persona, tenemos aquí una edad, ¿verdad? 256 00:23:01,170 --> 00:23:03,910 En principio se supone que es la edad que va a tener una persona. 257 00:23:04,470 --> 00:23:12,190 Esta edad está definida como pública. 258 00:23:12,190 --> 00:23:25,829 El concepto de público y privado para parámetros y para métodos es igual, es decir, el hecho de que este método, esta variable sea pública quiere decir que está accesible desde cualquier parte de todo el proyecto por ser pública. 259 00:23:25,829 --> 00:23:42,829 Fijaros como aquí podemos poner persona miper igual a new persona, creo un objeto de la clase persona y pongo miper punto y edad y le digo que tenga 10 años. 260 00:23:42,829 --> 00:23:50,150 se ha podido acceder a la edad de una persona esta edad justo aquí en persona está definida 261 00:23:50,150 --> 00:23:55,430 como pública como podéis ver entonces está disponible en cualquier parte de todo el 262 00:23:55,430 --> 00:23:59,470 proyecto desde cualquier paquete de todo el proyecto desde cualquier clase en todo el 263 00:23:59,470 --> 00:24:07,609 proyecto si yo esta clase la defino como private privada esta clase no este parámetro este atributo 264 00:24:07,609 --> 00:24:12,930 fijaros como ahora me deja de compilar porque me deja de compilar pues la misma jugada que hemos 265 00:24:12,930 --> 00:24:18,390 tenido antes con saludar finanzas como ahora es privado el ámbito en el cual podemos modificar 266 00:24:18,390 --> 00:24:24,529 la edad es única y exclusivamente desde la propia clase por ser privada antes que era pública 267 00:24:24,529 --> 00:24:31,599 podríamos desde cualquier sitio que podemos decir y que utilidad tiene el hecho de que sea privado 268 00:24:31,599 --> 00:24:37,180 pues mira una primera situación que podemos plantearnos es que imaginaos que esto es un 269 00:24:37,180 --> 00:24:44,900 proyecto gigantesco y trabajan 60 personas y a ti te dan la responsabilidad de desarrollar 270 00:24:44,900 --> 00:24:50,799 la clase persona entonces tú coges haces todo tu gesto a tu gestión de la clase persona y si 271 00:24:50,799 --> 00:24:57,940 tú dejas y a lo mejor tu requisito es que las personas pueden tener una entre una edad entre 272 00:24:57,940 --> 00:25:04,359 entre cero los recién nacidos hasta bueno por la persona más longeva vamos a poner que somos 273 00:25:04,359 --> 00:25:06,700 generosos si llegamos hasta 150 años, ¿no? 274 00:25:07,440 --> 00:25:10,339 Pero, oye, te dicen, mira, es impensable pensar que una persona 275 00:25:10,339 --> 00:25:13,160 va a llegar a 300 años, es que eso no va a pasar, ¿no? 276 00:25:13,660 --> 00:25:19,440 Entonces, no quiero que la edad pueda tener un valor mayor de 150 años. 277 00:25:22,940 --> 00:25:25,779 Tú eres el responsable de la clase persona y casi estás un poco 278 00:25:25,779 --> 00:25:30,079 comprometiéndote a que esta variable de edad nunca sea menor de cero, 279 00:25:30,079 --> 00:25:34,900 porque no consideramos que sean personas pendientes de nacer 280 00:25:34,900 --> 00:25:37,319 ni personas que tengan más de esta edad. 281 00:25:38,119 --> 00:25:40,059 Si tú coges y lo dejas esto como público, 282 00:25:41,680 --> 00:25:44,079 resulta que alguien ajeno a ti, 283 00:25:44,359 --> 00:25:47,779 es decir, quien está desarrollando la clase inicio, 284 00:25:48,240 --> 00:25:51,099 puede coger y decirte que una persona tiene 300 años 285 00:25:51,099 --> 00:25:52,799 y durante la ejecución de tu programa 286 00:25:52,799 --> 00:25:55,799 la edad de una persona resulta que está siendo 300. 287 00:25:56,920 --> 00:25:59,079 Y eso, según los requisitos que te habían dicho a ti, 288 00:25:59,079 --> 00:26:00,759 no era válido. 289 00:26:00,980 --> 00:26:01,900 Entonces, ¿qué podemos hacer? 290 00:26:01,900 --> 00:26:19,380 Pues podemos coger y decir, mira, yo voy a poner la edad aquí, privada, private, y así tengo el, ya que yo soy el que programo la clase persona, nadie más va a tocar este código, desde aquí nadie me va a poner una edad de 300 años, ¿por qué? Porque no se lo voy a permitir. 291 00:26:19,380 --> 00:26:33,319 En cambio, como sí que necesito que desde diferentes partes del código se puedan ir asignando edades a personas, estamos dando de alta aquí personas y queremos asignar edades, pero queremos que estén controlados en ese rango de edad. 292 00:26:33,319 --> 00:26:50,480 Entonces lo que puedo hacer es crear aquí un método que sea público, es decir, que tenga acceso desde todo el proyecto. Vamos a poner aquí asignar edad. Ahora después hablamos de estos métodos de asignar. 293 00:26:50,480 --> 00:27:25,740 Vamos a decir, el otro día hablábamos que los métodos pueden recibir cierta información a través de parámetros, vamos a decir aquí que se reciba una edad int y e, vamos a llamarlo, esta variable va a ser una variable local al método asignar edad y se aplicará en el momento en el que hagamos una llamada a ese método. 294 00:27:25,740 --> 00:27:44,339 Entonces tendremos la posibilidad aquí de coger y decir mi per, objeto de la clase persona, punto, aquí tengo accesible los métodos y los parámetros, quiero utilizar el método asignar edad y digo por ejemplo que quiero asignar la edad de 30 años. 295 00:27:44,339 --> 00:28:07,670 ¿Qué decíamos el otro día que sucede aquí? Voy a ponerme a ejecutar asignar edad, en particular de esta persona, pasándole como valor 30, con lo cual cuando vengo aquí a hacer la ejecución, en esta variable se carga la información que le estoy pasando en la llamada, con lo cual esta variable arrancará la ejecución del método asignar edad con el valor 30. 296 00:28:07,670 --> 00:28:16,210 Y esta variable es una variable local al ámbito del método, con lo cual es local aquí a la apertura y cierre de llaves. 297 00:28:18,210 --> 00:28:30,089 Justo el hecho de que todo acceso que vaya a hacer esta variable voy a obligar al resto del programa que lo haga a través de asignar edad, es lo que me va a permitir bloquear estos valores. 298 00:28:30,089 --> 00:29:04,809 Entonces yo puedo coger y decir aquí, if, sí, y e, es decir, la edad que estás intentando asignar, que se lo has pasado aquí como parámetro, es menor que 0, aquí podría decir que y e sea igual a 0, con lo cual, si alguien aquí me está intentando cargar como edad una cosa que no tenía permitido en los requisitos de mi desarrollo de la clase persona, menos 30 años, resulta que esto se cargará, este menos 30 se cargará. 299 00:29:04,829 --> 00:29:09,329 en y está allí al ser menor que cero lo estoy aplicando el valor cero 300 00:29:10,049 --> 00:29:12,170 también puede decir el cif sí 301 00:29:13,950 --> 00:29:22,049 y es mayor que 150 pues tampoco tampoco me gusta entonces que podría hacer pues podría 302 00:29:22,049 --> 00:29:30,210 acoger y decir y es igual a 150 estoy bloqueando los valores y si no es ni esto ni es menor que 303 00:29:30,210 --> 00:29:35,430 cero ni es mayor que 150 resultará que estará dentro del margen que me gusta con lo cual no 304 00:29:35,430 --> 00:29:45,700 sobre escribo la variable y con ningún valor y aquí puedo coger y poner y edad igual allí de 305 00:29:45,700 --> 00:29:49,799 esta forma he conseguido mediante el método público que está accesible desde cualquier 306 00:29:49,799 --> 00:29:57,279 parte del programa proteger mi variable y edad para que el rango esté cubierto con 307 00:29:57,279 --> 00:30:10,000 las posibilidades que me marcaba a mí el enunciado otra posibilidad habría sido imaginaos que ya 308 00:30:10,000 --> 00:30:17,240 dependerá de en el enunciado en los requisitos que tengamos para el proyecto las condiciones 309 00:30:17,240 --> 00:30:21,980 que tengamos a lo mejor podríamos poner mira vamos para mantener esto lo que vamos a hacer 310 00:30:21,980 --> 00:30:28,759 base no va a ser bloquear el valor de la edad sino que si la edad no me gusta porque no es 311 00:30:28,759 --> 00:30:37,240 un valor válido le devuelvo un mira la edad no ha sido asignada entonces fijaros podríamos decir 312 00:30:37,240 --> 00:30:46,200 poner aquí un boolean por ejemplo es decir en lugar de no devolver nada también lo hablábamos 313 00:30:46,200 --> 00:30:51,480 el otro día en la tutoría que mi método devuelva un boolean en el momento que tengo aquí un boolean 314 00:30:51,480 --> 00:30:56,920 me obliga a poner un retorno por eso no me compila ya en el momento que ponga aquí que devuelve una 315 00:30:56,920 --> 00:31:04,559 variable de cualquier tipo. Entonces aquí lo que podríamos decir es poner boolean b asignada, 316 00:31:05,160 --> 00:31:11,460 suponer que la edad se asigna correctamente, inicializamos la variable asignada a que se 317 00:31:11,460 --> 00:31:21,880 asigna de forma correcta y luego decir aquí y si la edad es menor que 0 o podemos poner y e es mayor 318 00:31:21,880 --> 00:31:29,880 que 150 en cualquiera de los dos casos podríamos hacer que la edad no sea asignada es decir no 319 00:31:29,880 --> 00:31:37,119 falsa la edad no se asigna y si resulta que ha sido correcta en ese caso podemos poner aquí 320 00:31:37,119 --> 00:31:53,720 que sí que asigne la edad y luego hacer aquí un retorno así nada fijaros a todos los efectos aquí 321 00:31:53,720 --> 00:31:57,759 lo que estamos haciendo es que solamente le estamos actualizando la edad en el caso de 322 00:31:57,759 --> 00:32:03,339 que esté dentro del rango que me gusta si no está dentro del rango que me gusta no estoy modificando 323 00:32:03,339 --> 00:32:09,420 la variable edad pero para que desde donde se llama tengan una idea de si se ha asignado la 324 00:32:09,420 --> 00:32:15,160 edad que estaban proponiendo no bueno pues hemos añadido que el método sea capaz de volver una 325 00:32:15,160 --> 00:32:21,759 información de tipo boolean que puede ser verdadera o falsa como he inicializado aquí a true si no 326 00:32:21,759 --> 00:32:27,019 entro por aquí en el momento que lleguemos aquí esto se mantiene con la inicialización con lo 327 00:32:27,019 --> 00:32:32,519 cual su valor será true y si resulta que el rango en la edad que intentaba aplicar no estaba dentro 328 00:32:32,519 --> 00:32:40,390 del rango estaré modificando esta variable a falsa con lo cual el return de volver a falsa y esto que 329 00:32:40,390 --> 00:32:51,059 devolvemos donde de dónde podemos sacar provecho aquí en la llamada y podemos poner asignar dos 330 00:32:51,059 --> 00:32:58,400 y aquí podemos poner una edad que puede estar dentro del rango o fuera de él vamos a poner 331 00:32:58,400 --> 00:33:04,339 en mil años no está dentro del rango y aquí podríamos justo en la zona donde estamos llamando 332 00:33:04,339 --> 00:33:13,460 a ese método que es en la clase inicio en el método main podríamos definir una variable b 333 00:33:13,460 --> 00:33:23,319 result que tenga el resultado esta variable b result se va a cargar con lo que devuelva este 334 00:33:23,319 --> 00:33:30,240 método es decir se va a cargar con verdadero o si se actualiza aquí falso en qué momento en el 335 00:33:30,240 --> 00:33:34,980 momento que termina el método porque es lo que estamos devolviendo es el valor que tenga aquí 336 00:33:34,980 --> 00:33:43,309 asignada se cargará aquí en esta variable después de ejecutar el programa esta variable tendrá 337 00:33:43,309 --> 00:33:49,309 verdadero o falso según se haya o no asignado la edad a la variable que tiene la persona y aquí 338 00:33:49,309 --> 00:33:55,670 bueno pues dentro de el método main podríamos tener una referencia de cómo ha ido la ejecución 339 00:33:55,670 --> 00:33:57,089 de la asignación de la edad 340 00:33:57,089 --> 00:33:59,849 utilizando esta variable 341 00:33:59,849 --> 00:34:01,049 boolean, entonces podemos decir 342 00:34:01,049 --> 00:34:07,480 if si bresult 343 00:34:07,480 --> 00:34:09,400 es igual a true 344 00:34:09,400 --> 00:34:13,050 poner este bresult 345 00:34:13,050 --> 00:34:14,789 es igual a true es equivalente a poner 346 00:34:14,789 --> 00:34:17,250 si bresult 347 00:34:17,250 --> 00:34:19,250 recordad que 348 00:34:19,250 --> 00:34:20,909 if necesita algo que sea aquí 349 00:34:20,909 --> 00:34:23,090 verdadero o falso, aquí decimos 350 00:34:23,090 --> 00:34:24,969 si true 351 00:34:24,969 --> 00:34:26,269 es igual a true 352 00:34:26,269 --> 00:34:28,070 pues entonces devuelve true 353 00:34:28,070 --> 00:34:30,030 pero como bresult da la casualidad 354 00:34:30,030 --> 00:34:37,530 que que si es true ya es true directamente sería equivalente poner cualquiera de estas dos y si 355 00:34:37,530 --> 00:34:42,989 ve result viene siendo falso pues false no es igual a true con lo cual se convertiría en false 356 00:34:42,989 --> 00:34:50,360 que sería equivalente a la información que tendría en ese caso vea result entonces aquí por ejemplo 357 00:34:50,360 --> 00:35:10,289 por ejemplo podemos poner System.out.println edad actualizada, correctamente, o lo que pongáis. 358 00:35:10,289 --> 00:35:24,550 Else, si nos devuelve el false, decimos edad no actualizada. 359 00:35:24,550 --> 00:35:33,860 Si ahora ejecuto este código, haciendo una llamada con 1000, fijaros como dice edad no actualizada. 360 00:35:33,860 --> 00:35:40,679 porque porque este 1000 ha llegado por aquí inicialmente habíamos dicho por defecto que 361 00:35:40,679 --> 00:35:47,639 fuera true pero como 1000 se pasa de 150 ha entrado por aquí no ha hecho el else con lo 362 00:35:47,639 --> 00:35:56,800 cual no ha asignado la edad y sí que al venir por él por el if de asignada vale falso devuelve falso 363 00:35:56,800 --> 00:36:04,300 que se carga en b result y este b result al no ser verdadero es el else y me dice edad no actualizada 364 00:36:04,900 --> 00:36:17,630 si yo pongo aquí que tenga un añito pues me dice edad actualizada correctamente recapitulando un 365 00:36:17,630 --> 00:36:24,849 momento que lo que hemos hecho pues fijaros hemos puesto esta variable este parámetro de form privado 366 00:36:24,849 --> 00:36:28,989 con lo cual ya no está accesible desde todo el proyecto solamente está accesible desde la propia 367 00:36:28,989 --> 00:36:33,010 clase, fijaros si está accesible este parámetro en la propia clase 368 00:36:33,010 --> 00:36:37,010 que lo estamos actualizando desde un método que pertenece a la 369 00:36:37,010 --> 00:36:40,869 clase, es decir, aquí sí que lo está, pero por ser privado ya solamente 370 00:36:40,869 --> 00:36:45,010 está en la propia clase. Y nos ha permitido, entre otras 371 00:36:45,010 --> 00:36:48,869 cosas, pues el tener un control del rango 372 00:36:48,869 --> 00:36:53,050 que queremos que tenga de edad. Además, entre uno y otro 373 00:36:53,050 --> 00:36:57,150 aquí, al devolver un void, otra de las 374 00:36:57,150 --> 00:37:29,019 cosas que tenemos en los métodos de las etiquetas que vamos a ir repasando, este asignar edad en principio no devuelve nada, no devuelve nada para que tenga una gestión de cómo ha ido la cosa desde donde lo hemos llamado, asigna o no asigna la edad a iedad, siempre asigna la edad a iedad pero si era menor de 0 en este caso aplicaba un 0, si era mayor de 150 aplicaba el techo de edad que podíamos tener 150, en este caso bueno pues teníamos un requisito diferente a la hora de gestionar la edad y era 375 00:37:29,019 --> 00:37:32,039 que solo se actualizase en caso de que estuviera dentro del rango. 376 00:37:33,079 --> 00:37:40,219 Y además nos estábamos obligando a que este método informase de cómo había ido su ejecución 377 00:37:40,219 --> 00:37:46,840 a través de un boolean en particular que nos devolvía true si la actualización había sido correcta 378 00:37:46,840 --> 00:37:47,980 y false si no lo había sido. 379 00:37:48,300 --> 00:37:49,460 ¿Y cómo lo hemos capturado aquí? 380 00:37:51,000 --> 00:37:57,480 Pues en la llamada hacia la izquierda del igual nos devuelve lo que hayamos puesto en el return. 381 00:37:57,480 --> 00:38:13,559 Entonces, BRSUL se ha cargado con verdadero o falso y aquí hemos hecho una gestión que es la que nos ha parecido oportuno. Podría haber sido otra. Podría haber sido el programa. Si resulta que se actualiza la edad, tenemos que dejar un log en un fichero diciendo edad actualizada. 382 00:38:13,559 --> 00:38:35,579 Pues en lugar de escribir por pantalla, si el denunciado nos dijese eso, tendríamos que abrir un fichero y escribir un registro. Y si no, en una base de datos de errores, dejar un log. Pues a lo mejor tendríamos que insertar en una base de datos en el else, en lugar de este system of println, pues poner el código equivalente al acceso a la base de datos, crear un registro y almacenar que se ha producido ese error en el log. 383 00:38:35,579 --> 00:38:43,500 Ya lo que nos pide el programa, cuando la cosa va bien o cuando va mal. La cosa es que aquí tenemos el resultado de cómo ha ido la actualización de la variable. 384 00:38:47,579 --> 00:39:01,869 Bien, pues como siempre vamos dando diferentes vueltas a cada cosa, pero el objetivo inicial es repasar los posibles valores que tenemos para la etiqueta public. 385 00:39:01,869 --> 00:39:18,110 Entonces tenemos que cuando es público está accesible desde todo el proyecto. Cuando es privado, hemos visto que está accesible solamente desde la propia clase. Y nos queda por hablar de dos, la protective y la de no poner nada. 386 00:39:18,110 --> 00:39:25,469 Bueno, que la llaman package o la llaman también friendly, amigable. 387 00:39:27,840 --> 00:39:39,969 Cuando no ponemos nada en un método o en un parámetro, el ámbito del acceso es en el paquete. 388 00:39:41,630 --> 00:39:51,550 Es decir, podemos acceder a esta variable desde la propia clase siempre y desde cualquier clase que pertenezca a tu paquete. 389 00:39:51,550 --> 00:40:02,769 si acudimos y la edad la ponemos como y edad sin poner nada aquí es equivalente es él 390 00:40:02,769 --> 00:40:14,139 esa etiqueta se considera friendly de si ponemos aquí mi per punto y edad fijaros que ya lo tengo 391 00:40:14,139 --> 00:40:21,079 disponible donde lo tengo disponible lo tengo disponible en la clase inicio porque porque 392 00:40:21,079 --> 00:40:33,280 persona e inicio están en el mismo paquete y edad ahora está aquí y ya si yo intento acceder a edad 393 00:40:33,280 --> 00:40:48,539 así que la tengo disponible volvemos un momento a ponerlo privado y fijaros cómo ya no es no vale 394 00:40:48,539 --> 00:40:53,300 para cualquier clase de todo el paquete sino que sería por privado en la misma clase y ya me deja 395 00:40:53,300 --> 00:41:03,099 de compilar, lo quito, se convierte en su ámbito de paquete y puedo acceder desde cualquier clase 396 00:41:03,099 --> 00:41:07,980 que esté en su paquete pero no desde otros paquetes, fijaros finanzas que está en un paquete 397 00:41:07,980 --> 00:41:18,860 diferente de inicio, si definimos aquí una variable, vamos a ver si nos funciona, int y fin, vamos a llamarlo 398 00:41:18,860 --> 00:41:26,420 vamos a suponer que necesitamos esta variable, si le ponemos private y nos venimos a inicio, recordad 399 00:41:26,420 --> 00:41:33,559 que inicio está en el paquete de por defecto y finanzas está en el paquete finanzas como tengo 400 00:41:33,559 --> 00:41:42,699 aquí el objeto fin si yo ahora pongo fin punto hemos definido y fin privada con lo cual solamente 401 00:41:42,699 --> 00:41:51,539 debe estar disponible dentro de su propia clase entonces fijaros como no me ofrece esta variable 402 00:41:51,539 --> 00:41:58,780 porque la hemos definido como privada si yo cojo y defino esta public estaría disponible en todo 403 00:41:58,780 --> 00:42:05,420 el proyecto si yo ahora como pongo aquí y fin fijaros como ya me la ofrece porque porque es 404 00:42:05,420 --> 00:42:14,079 pública accesible en todo el proyecto y si yo la dejo sin nada en principio su ámbito de alcance 405 00:42:14,079 --> 00:42:24,340 del paquete fijaros como ya no la tengo disponible en la clase inicio el paquete que está en el 406 00:42:24,340 --> 00:42:34,219 paquete por defecto ya que y fin le hemos definido sin ninguna etiqueta con lo cual está disponible 407 00:42:34,219 --> 00:42:40,519 en su paquete no la tenemos aquí cosa muy diferente a lo que nos pasa con y edad que 408 00:42:40,519 --> 00:42:49,980 edad fijaros como si la tengo disponible a pesar de no tener ningún identificador aquí la tengo 409 00:42:49,980 --> 00:42:58,099 disponible en inicio ya que inicio y personas están en el mismo paquete si no ponemos nada 410 00:42:58,099 --> 00:43:02,980 disponible en el paquete si ponemos privada solamente en su clase si ponemos protective 411 00:43:02,980 --> 00:43:12,179 si ponemos pública en todo el proyecto y si ponemos protective bueno pues hay un hay un 412 00:43:12,179 --> 00:43:20,800 concepto nuevo que tenemos que repasar aunque lo veremos luego en más detalle pero pero bueno lo 413 00:43:20,800 --> 00:43:27,099 voy a enseñar aunque luego ya lo veremos otro día para ilustrar un poco la etiqueta en public 414 00:43:28,739 --> 00:43:48,659 fijaros si vamos a crear una nueva clase aquí en finanzas a la clase no vamos a crear la mejor 415 00:43:48,659 --> 00:43:52,300 aquí, en la de por defecto 416 00:43:52,300 --> 00:43:52,760 yo creo 417 00:43:52,760 --> 00:44:04,559 vamos a crear en finanzas 418 00:44:04,559 --> 00:44:14,550 y la voy a llamar clase hija 419 00:44:15,489 --> 00:44:16,730 ahora entenderéis por qué 420 00:44:16,730 --> 00:44:35,900 y aquí voy a crear otra clase 421 00:44:35,900 --> 00:44:38,019 y lo cuento 422 00:44:38,019 --> 00:44:38,739 paso a paso 423 00:44:38,739 --> 00:44:42,019 aquí voy a llamar una que sea clase 1, no tiene mucho 424 00:44:42,019 --> 00:44:43,340 sentido estos nombres pero 425 00:44:43,340 --> 00:44:48,079 es para que lo veáis, mirad 426 00:44:48,079 --> 00:44:49,679 si yo cojo y pongo aquí 427 00:44:49,679 --> 00:44:51,920 en la clase 1, defino un parámetro 428 00:44:51,920 --> 00:44:54,000 int y valor 1 429 00:44:54,000 --> 00:44:58,989 esta clase estaría dando el servicio que fuese 430 00:44:58,989 --> 00:45:03,449 no lo hemos definido de ninguna de las formas, simplemente es para 431 00:45:03,449 --> 00:45:11,400 contaros lo que quiero, voy a dar un nombre un poquito 432 00:45:11,400 --> 00:45:14,739 a la clase un poquito más entendible 433 00:45:14,739 --> 00:45:19,699 tenemos la clase persona y 434 00:45:19,699 --> 00:45:23,320 un tipo de persona que tenemos son por ejemplo los alumnos 435 00:45:23,320 --> 00:45:37,449 voy a crear la clase alumno, entonces los alumnos pueden tener una nota 436 00:45:37,449 --> 00:45:40,710 int, vaya se me ha ido a la clase finanzas 437 00:45:40,710 --> 00:46:07,949 a ver si arrastrándolo así al paquete por defecto, lo ha arrastrado a la clase paquete por defecto, tenemos en la clase paquete por defecto la clase alumno y el alumno tiene un identificador, un entero. 438 00:46:07,949 --> 00:46:22,880 En Java tenemos una organización jerárquica de clases. Esto quiere decir que tenemos la posibilidad de, bueno, es una de las características de la programación orientada a objetos, que es la herencia. 439 00:46:22,880 --> 00:46:30,760 hablaremos de ella en otro no sé si en el tema siguiente o más adelante pero lo introduzco un 440 00:46:30,760 --> 00:46:36,719 poquito para contaros esto entonces la herencia lo que nos permite es definir clases a un nivel 441 00:46:36,719 --> 00:46:47,360 de jerarquía superior vamos a poner la clase persona y decir que una por debajo colgando 442 00:46:47,360 --> 00:46:53,679 digamos de la persona podemos decir que existe la clase alumno y por ejemplo la clase profesor 443 00:46:53,679 --> 00:46:57,119 ambos dos son personas, es la característica que tienen. 444 00:46:57,800 --> 00:47:02,099 Entonces, en la clase persona podríamos definir una serie de atributos, 445 00:47:02,219 --> 00:47:07,699 por ejemplo, int y edad, y esta edad es común tanto al alumno como al profesor. 446 00:47:08,579 --> 00:47:12,179 Si nosotros queremos que los alumnos tengan edad y que los profesores tengan edad, 447 00:47:12,579 --> 00:47:16,420 podríamos definir en cada una de ellas un iedad, 448 00:47:16,420 --> 00:47:22,179 con lo cual podríamos acceder a la edad del alumno y en el profesor un int y edad también, 449 00:47:22,179 --> 00:47:32,670 y por ejemplo vamos a suponer que las personas pueden saludar public void saludar y los alumnos 450 00:47:32,670 --> 00:47:45,199 efectivamente también pueden saludar y los profesores también pueden saludar claro tanto 451 00:47:45,199 --> 00:47:50,539 los alumnos como los profesores tienen una edad y son capaces de saludar dar porque en realidad 452 00:47:50,539 --> 00:47:57,139 bueno pues son personas ambos dos luego el profesor pues tendrá el mejor en habrá dado 453 00:47:57,139 --> 00:47:59,420 un número de cuenta 454 00:47:59,420 --> 00:48:01,139 y NUM cuenta 455 00:48:01,139 --> 00:48:02,820 y a lo mejor el alumno 456 00:48:02,820 --> 00:48:05,579 tristemente no cobra aquí por estudiar 457 00:48:05,579 --> 00:48:06,920 y no tiene un número de cuenta. 458 00:48:07,079 --> 00:48:08,579 En cambio el alumno sí que tiene 459 00:48:08,579 --> 00:48:09,880 INT y 460 00:48:09,880 --> 00:48:12,760 NUM matrícula. 461 00:48:17,400 --> 00:48:18,260 Alumnos y profesores 462 00:48:18,260 --> 00:48:21,280 por una característica que suelen ser 463 00:48:21,280 --> 00:48:22,760 de las personas, tienen una edad. 464 00:48:23,440 --> 00:48:24,480 Alumnos y profesores 465 00:48:24,480 --> 00:48:26,159 por el hecho de ser 466 00:48:26,159 --> 00:48:28,920 alguna característica que tienen por ser personas 467 00:48:28,920 --> 00:48:33,480 son capaces de saludar y los alumnos tienen un número de matrícula 468 00:48:33,480 --> 00:48:37,380 y los profesores tienen un número de cuenta, los alumnos no tienen 469 00:48:37,380 --> 00:48:40,340 un número de cuenta, los profesores no tienen un número de matrícula. 470 00:48:41,920 --> 00:48:46,320 Estas dos características que son comunes podemos coger y no definirlas 471 00:48:46,320 --> 00:48:50,639 aquí inicialmente y aún así estar disponibles en el alumno y el profesor 472 00:48:50,639 --> 00:48:55,119 si las pueden recuperar de forma heredada desde la clase persona. 473 00:48:55,119 --> 00:49:18,719 Y en Java, para hacer eso, lo que se pone aquí es la etiqueta Stents. Les decimos que un alumno hereda todas las características que tenga una persona. Con lo cual, sin definirla en la clase alumno, resulta que está teniendo una edad y la posibilidad de saludar según se haya definido en el método de la clase persona. 474 00:49:18,719 --> 00:49:44,079 Y si de la misma forma queremos que un profesor tenga esas posibilidades, cogemos y ponemos aquí Stents, Persona, entonces ambos dos, tanto el alumno como el profesor, tienen estas características de forma heredada desde la persona, es decir, somos capaces de asignarles una edad y de saludar según se haya puesto en la clase Persona, en los alumnos y los profesores. 475 00:49:44,079 --> 00:49:54,260 Y luego aparte, los alumnos tienen sus propios parámetros y sus propios métodos que pudiéramos poner aquí. Un alumno le podemos asignar un número de matrícula y un profesor su número de cuenta. 476 00:49:54,260 --> 00:50:37,260 Entonces si nosotros ponemos aquí extends persona, fijaros que esto es un alumno, nosotros podemos venir aquí, es una clase alumno, podemos instanciar aquí un objeto de la clase alumno, como siempre, ¿verdad? Con el new, el constructor, y ahora podemos poner aquí mi alum, punto, y fijaros como me ofrece aquí la edad, ¿por qué me ofrece la edad? 477 00:50:37,260 --> 00:50:41,739 porque el alumno, aunque no tiene aquí definida una edad, 478 00:50:41,860 --> 00:50:43,320 estamos diciendo que hereda de persona. 479 00:50:43,500 --> 00:50:47,059 Y persona, hemos cogido y le hemos dicho que tiene aquí una edad, 480 00:50:47,320 --> 00:50:47,960 como podéis ver. 481 00:50:48,099 --> 00:50:50,280 Entonces, tiene disponible, gracias a la herencia, 482 00:50:50,840 --> 00:50:52,559 la posibilidad de asignarle una edad. 483 00:51:14,280 --> 00:51:20,000 A ver, entonces, si cogemos y a la edad que tiene la clase persona 484 00:51:20,000 --> 00:51:23,199 le decimos que sea private, 485 00:51:28,670 --> 00:51:31,670 cuando definimos algo privado, que hemos dicho que solo estaba disponible 486 00:51:31,670 --> 00:51:34,969 en su clase. Entonces, si yo ahora pongo aquí 487 00:51:34,969 --> 00:51:39,690 mi alumno y edad, esta edad 488 00:51:39,690 --> 00:51:42,550 a pesar de que el alumno 489 00:51:42,550 --> 00:51:49,130 hereda a través del Stance las características de la clase 490 00:51:49,130 --> 00:51:53,289 persona, como hemos dicho que la edad es privada, solamente es modificable 491 00:51:53,289 --> 00:51:55,150 por objetos de la clase persona. 492 00:51:56,989 --> 00:52:00,369 Y por ese motivo, aquí ya coge y no me compila. 493 00:52:00,369 --> 00:52:09,300 pero tampoco me va a compilar, yo creo que si le pongo 494 00:52:09,300 --> 00:52:10,719 protective, que es lo que iba a decir 495 00:52:10,719 --> 00:52:12,960 protective, tampoco me va a dejar 496 00:52:12,960 --> 00:52:14,260 vale 497 00:52:14,260 --> 00:52:17,219 así con protective ya sí, con protective 498 00:52:17,219 --> 00:52:18,139 me deja porque 499 00:52:18,139 --> 00:52:21,199 este valor ya está 500 00:52:21,199 --> 00:52:23,000 disponible, tanto 501 00:52:23,000 --> 00:52:27,210 está disponible para aquellos 502 00:52:27,210 --> 00:52:28,250 objetos, para 503 00:52:28,250 --> 00:52:30,650 aquella información que 504 00:52:30,650 --> 00:52:32,809 está heredada, es lo que añade 505 00:52:32,809 --> 00:52:34,489 el privado 506 00:52:34,489 --> 00:52:36,489 el package al 507 00:52:36,489 --> 00:52:55,170 A ver qué os digo. El protective lo que añade respecto al de paquete, las variables paquete están disponibles desde cualquier objeto que esté definido en el mismo paquete, desde cualquier clase que esté definida en el mismo paquete. 508 00:52:55,170 --> 00:53:07,869 Y en cambio las que están protective están disponibles en el mismo paquete y para aquellas clases que heredan de una que esté en el mismo paquete. 509 00:53:16,800 --> 00:53:24,079 Mirad, aquí la clase alumno, bueno, en realidad alumno y persona están en el mismo, con lo cual también le vale el package. 510 00:53:24,260 --> 00:53:29,159 Vamos a hacer que la clase hija herede de la clase persona. 511 00:53:31,400 --> 00:54:01,880 Stance, create, import, no me deja importar por estar en la clase persona, por estar en el paquete por defecto. 512 00:54:03,380 --> 00:54:06,719 Mirad, la tabla como queda entonces es de la siguiente forma. 513 00:54:06,719 --> 00:54:18,079 Si tenemos public, está accesible desde cualquier parte del proyecto. 514 00:54:22,900 --> 00:54:26,860 Si está el otro extremo respecto a public, es private. 515 00:54:32,360 --> 00:54:39,039 Está accesible solo desde la propia clase. 516 00:54:42,420 --> 00:54:54,469 Luego tenemos no poner nada, que sería equivalente a la etiqueta package. 517 00:54:54,469 --> 00:55:17,369 también le llaman friendly, en ese caso estaría disponible desde cualquier sitio en su propio paquete. 518 00:55:17,369 --> 00:55:29,980 Y luego está la protective, que este sería igual que la de por defecto, sería la de por defecto, 519 00:55:29,980 --> 00:55:40,699 efecto es decir desde cualquier sitio de su propio paquete más desde clases heredadas 520 00:55:40,699 --> 00:55:47,699 para que sea esta situación si está en el mismo paquete que en realidad este ejemplo que estábamos 521 00:55:47,699 --> 00:55:54,340 poniendo estaba en el mismo paquete alumno y persona estaría con protective en el mismo 522 00:55:54,340 --> 00:56:00,619 paquete y para desde clases heredadas necesitaríamos que la herencia fuera desde una clase a otra que 523 00:56:00,619 --> 00:56:07,760 estuviera en otro paquete tallesta en realidad son como muy comunes típicamente las clases heredadas 524 00:56:07,760 --> 00:56:13,039 van a estar dentro del mismo paquete porque van a ser típicamente van a ser de funcionalidades 525 00:56:13,039 --> 00:56:18,260 comunes y como los paquetes los solemos crear por funcionalidades van a estar el mismo paquete 526 00:56:18,260 --> 00:56:24,980 entonces la de por defecto y la la y la protective son como muy parecidas y las que marcan más 527 00:56:24,980 --> 00:56:40,960 diferencias son la privada y la pública se entiende se vale pues nada genial 528 00:56:43,019 --> 00:56:49,099 hablando de paquetes y librerías ya lo hemos repasado un poquito lo tengo por aquí marcado 529 00:56:49,099 --> 00:56:55,800 para contarlo los modificadores estos de public protect is el friendly o para casi el private 530 00:56:55,800 --> 00:57:03,179 método main más cosas que tiene el método main static ya hemos hablado varias veces de ella 531 00:57:03,179 --> 00:57:10,619 cuando definimos algo estatis bien sea un método bien sea un parámetro resulta que se convierte en 532 00:57:10,619 --> 00:57:19,900 un método propio de toda la clase y para acceder a él no es necesario instancia instancia objetos 533 00:57:19,900 --> 00:57:28,380 lo habíamos visto por ejemplo con más más punto apps de bueno el valor absoluto de un valor pues 534 00:57:28,380 --> 00:57:34,940 accedemos directamente a un método de la clase math poniendo el nombre de la clase sin necesidad 535 00:57:34,940 --> 00:57:49,119 de haber creado un objeto de esa clase típicamente desde un método estático si yo pongo aquí yo creo 536 00:57:49,119 --> 00:58:00,769 aquí un valor que sea y valor si yo pongo aquí y valor igual a 5 ya os he comentado pues no me 537 00:58:00,769 --> 00:58:04,789 compila. ¿Por qué no me compila? Porque en realidad, si yo instancio 538 00:58:04,789 --> 00:58:08,690 diferentes objetos de la clase inicio, cada uno de ellos tendrá 539 00:58:08,690 --> 00:58:12,710 en zona RAM su espacio diferente. Entonces, este iValor 540 00:58:12,710 --> 00:58:15,469 me diría, sí, muy bien, quieres asignar iValor, pero 541 00:58:15,469 --> 00:58:20,170 ¿a dónde? ¿a cuál de ellos? De todos los posibles objetos que podríamos tener. 542 00:58:21,110 --> 00:58:24,750 En cambio, si yo esto lo defino como static, como ya es único 543 00:58:24,750 --> 00:58:28,650 para toda la clase y lo estoy ejecutando desde un método que es único 544 00:58:28,650 --> 00:58:33,889 para toda la clase ya no hay lugar a dudas dice oye pues se debe referir a la única posición de 545 00:58:33,889 --> 00:58:39,829 memoria que tengo para la variable y valor dentro de la clase para todos los objetos entonces aquí 546 00:58:39,829 --> 00:58:48,570 lo tendría fijaros aquí en finanzas si definimos por ejemplo y fin o vamos a definir static 547 00:58:48,570 --> 00:58:53,530 int y valor también, vamos a llamarlo 548 00:58:53,530 --> 00:58:55,230 por ejemplo, si tuviéramos 549 00:58:55,230 --> 00:59:00,710 como parámetro de clase un entero llamado y valor 550 00:59:00,710 --> 00:59:03,010 y acordamos definirlo como estático 551 00:59:03,010 --> 00:59:08,150 si nosotros venimos aquí, fijaros, podríamos acceder directamente 552 00:59:08,150 --> 00:59:11,369 a ese valor que es estático con el nombre de la clase 553 00:59:11,369 --> 00:59:37,269 aquí finanzas, punto, bueno me pide que le identifique el paquete 554 00:59:37,269 --> 00:59:49,480 también en el paquete finanzas clase finanzas punto y valor porque no me deja acceder y valor 555 00:59:49,480 --> 01:00:19,420 si lo he definido como estático a ver que vea por aquí no entiendo a ver bueno no me está no me lo 556 01:00:19,420 --> 01:00:25,840 está ofreciendo precisamente por algo que hemos estado hablando antes fijaros este no le he puesto 557 01:00:25,840 --> 01:00:32,059 ningún identificador ni de privado ni público ni nada con lo cual tiene la etiqueta friendly la 558 01:00:32,059 --> 01:00:39,300 etiqueta friendly corresponde a su propio paquete y resulta que inicio está en un paquete y finanzas 559 01:00:39,300 --> 01:00:44,460 está en otro justo estoy estaba sufriendo algo de lo que os estaba contando antes entonces para 560 01:00:44,460 --> 01:00:58,800 poder acceder desde diferentes clases este y valor tendrá que ser public y ahora ya lo tengo 561 01:00:58,800 --> 01:01:09,309 disponible ahora ya se me deja tener disponible y a lo que iba es que ha cedido a finanzas se ha 562 01:01:09,309 --> 01:01:14,989 accedido a un valor que es estático sin necesidad de utilizar un objeto de la clase finanzas como 563 01:01:14,989 --> 01:01:20,630 era este si quito esto también me va también me da como lo tengo importado aquí también me da 564 01:01:20,630 --> 01:01:27,909 digo de la clase finanzas en sí antes distanciar incluso un objeto ya tengo disponible la variable 565 01:01:27,909 --> 01:01:34,730 y valor porque porque es estática que es un poco lo mismo que como digo hacemos aquí con el math 566 01:01:34,730 --> 01:01:37,730 cualquiera de todos estos métodos 567 01:01:37,730 --> 01:01:39,090 o cualquiera de estos, el tau 568 01:01:39,090 --> 01:01:41,590 debe ser un valor 569 01:01:41,590 --> 01:01:46,070 vamos a ver que vale 570 01:01:46,070 --> 01:01:50,429 println, vamos a mostrarlo 571 01:01:50,429 --> 01:01:57,110 por pantalla, no sé que será 572 01:01:57,110 --> 01:01:58,690 el tau este de matemáticas 573 01:01:58,690 --> 01:01:59,670 vamos a ver 574 01:01:59,670 --> 01:02:03,449 a lo que voy, tenemos disponible 575 01:02:03,449 --> 01:02:05,030 este parámetro de la clase 576 01:02:05,030 --> 01:02:07,030 matemáticas porque en la clase matemáticas 577 01:02:07,030 --> 01:02:09,010 estará definido como estático 578 01:02:09,010 --> 01:02:11,610 tau vale eso 579 01:02:11,610 --> 01:02:15,849 parece que es el doble de pi 580 01:02:15,849 --> 01:02:17,610 628, 31 581 01:02:17,610 --> 01:02:29,659 doble más cosas que tenemos aquí en el método main pues tenemos el void voy también hemos 582 01:02:29,659 --> 01:02:34,760 hablado de ello todo método exceptuando los constructores que no devuelven nada pero no 583 01:02:34,760 --> 01:02:40,500 se indica haremos un constructor otra vez que hablábamos el otro día tienen que avisar de 584 01:02:40,500 --> 01:02:49,000 si devuelven algo no devuelve nada puede ser que no devuelva nada aquí persona en este habíamos 585 01:02:49,000 --> 01:02:52,699 dicho que no devolviera nada, no tenía un return, como no devolvía nada, tenía el void 586 01:02:52,699 --> 01:02:56,659 y cuando lo hemos llamado por aquí, no hemos hecho ninguna gestión con 587 01:02:56,659 --> 01:03:00,860 o no sé si lo hemos terminado de llamar, no hemos hecho ninguna gestión con la información que 588 01:03:00,860 --> 01:03:04,440 devolvía porque de hecho no devolvía nada. O puede ser que devuelva 589 01:03:04,440 --> 01:03:08,739 un tipo de datos, bien primitivo o bien referenciado. Puede devolver un 590 01:03:08,739 --> 01:03:12,139 entero, un boolean, un string, lo que corresponda. 591 01:03:13,480 --> 01:03:16,800 Si devuelve algo, acordaros que dentro del 592 01:03:16,800 --> 01:03:18,739 método, este por ejemplo devuelve 593 01:03:18,739 --> 01:03:20,539 un boolean, tendremos que poner un return 594 01:03:20,539 --> 01:03:22,019 porque en el momento que devuelve algo 595 01:03:22,019 --> 01:03:24,300 si no obtengo un return ya no compila 596 01:03:24,300 --> 01:03:26,820 y lo que debe devolver es algo del mismo 597 01:03:26,820 --> 01:03:28,519 tipo que tiene aquí 598 01:03:28,519 --> 01:03:31,039 identificado en la cabecera, en este caso es un boolean 599 01:03:31,039 --> 01:03:32,800 y esto lo devuelve 600 01:03:32,800 --> 01:03:34,179 trae la ejecución 601 01:03:34,179 --> 01:03:36,219 hacia la izquierda en la llamada 602 01:03:36,219 --> 01:03:41,909 y me lo carga aquí en la variable 603 01:03:41,909 --> 01:03:44,030 para que luego aquí desde el sitio de la llamada 604 01:03:44,030 --> 01:03:45,769 pueda hacer la gestión que corresponda 605 01:03:45,769 --> 01:03:47,909 coordinando lo que devuelve y lo que 606 01:03:47,909 --> 01:03:50,090 esperamos que devuelva con lo que haya devuelto 607 01:03:54,159 --> 01:04:01,260 Luego aquí tenemos el nombre del main y por aquí tenemos la posibilidad de pasarle parámetros para su ejecución. 608 01:04:01,800 --> 01:04:08,760 Dentro de pasarle parámetros, el main es así, porque como es estrictamente así, ya que es el punto de entrada al programa, 609 01:04:09,639 --> 01:04:16,099 pero aquí el otro día hablábamos de diferentes alternativas, fijaros, a la hora de pasarle parámetros. 610 01:04:16,280 --> 01:04:24,539 El hecho de tener métodos con el mismo nombre es la característica de la programación orientada a objetos de sobrecarga, 611 01:04:24,539 --> 01:04:37,400 En este caso es sobrecarga de métodos, pero para diferenciar y que en la llamada se ejecute un método u otro, diferenciamos uno u otro en función del número de parámetros y el tipo de los parámetros que reciba. 612 01:04:38,940 --> 01:04:41,239 Aquí estuvimos haciendo sobrecarga del método saludar. 613 01:04:41,239 --> 01:05:07,960 Y en el main habíamos dicho que recibe una serie de parámetros que justo se cargan en el inicio del programa a través de la llamada del intérprete de Java, cuando le ponemos el Java nombre del programa y le podemos pasar una serie de strings que separados por espacios se van cargando en este array para que luego podamos manejarlo. 614 01:05:07,960 --> 01:05:36,679 Y desde Eclipse, recordad que habíamos hablado que lo teníamos, a ver si lo vemos, el otro día, era aquí, coverage configuration, a ver, sí, aquí, de hecho, aquí tenemos del ejemplo del otro día que decíamos que en el inicio de la ejecución los argumentos de inicio del main cargue, bueno, por dos palabras, hola, con un espacio aquí dos, habíamos puesto. 615 01:05:36,679 --> 01:06:07,449 Y esto se cargaba, como os decía, como un array en el array de strings ARS, con lo cual si ponemos aquí system.out.println ARS0 y ARS1, hacemos una ejecución y fijaros como aquí nos sale el hola y adiós que corresponden a estos dos datos que tenemos puestos aquí. 616 01:06:07,449 --> 01:06:23,260 Y bueno, pues esto es entendiendo un poquito en qué consiste el main y realmente todas estas funciones que son extrapolables a otros métodos por ahí. 617 01:06:24,760 --> 01:06:34,639 Más métodos interesantes y un poquito diferentes, y hablando de cosas de métodos, en el siguiente tema volvemos a hablar de métodos, igual repasamos todo esto de nuevo. 618 01:06:34,639 --> 01:07:01,719 Los métodos por convenio suelen tener nombre en singular, primera letra en singular, perdón, en minúsculas. Si el nombre del método tiene varias palabras, pues minúsculas y luego la siguiente palabra, saludar mucho, pues la segunda palabra si quisiéramos ponerlo, pues la ponemos en mayúsculas, si tiene varias palabras. 619 01:07:01,719 --> 01:07:07,719 Y si tuviera otra palabra adicional, pues volveríamos a poner la primera letra en mayúsculas. 620 01:07:10,909 --> 01:07:15,420 Más cosas de los métodos que contaros. 621 01:07:15,940 --> 01:07:23,300 Vale, tenemos, decimos que los métodos siempre tenemos que indicar que devuelven, excepto los métodos constructores. 622 01:07:23,679 --> 01:07:27,260 Recordad, los métodos constructores son los que llamamos cuando hacemos el new. 623 01:07:28,460 --> 01:07:32,019 Entonces, en estos métodos se definen como públicos. 624 01:07:34,610 --> 01:07:36,570 Persona justo no tiene ninguno, a ver. 625 01:07:37,190 --> 01:07:52,789 aquí tenemos métodos constructores, son los que se llamamos con los news, no devuelven nada pero no se indica, ¿por qué? pues bueno, así lo definieron, esto en realidad sería como si tuviera un void, 626 01:07:52,789 --> 01:08:04,429 pero si tiene un void no se considera ya el método constructor, sino que no hay que poner nada, y bueno, así que se va un poco de la regla de que los métodos empiezan con minúsculas, 627 01:08:04,429 --> 01:08:15,429 porque como se tienen que llamar obligatoriamente igual que la clase y la clase nos obliga también la norma que la llamamos con letra mayúscula, pues los constructores tienen que ser con letra mayúscula. 628 01:08:19,529 --> 01:08:31,869 Otros métodos que también se suelen utilizar y van un poco en relación a lo que os comentaba antes de definir, por ejemplo, los métodos private y que se pueda acceder a ellos solamente desde la clase, 629 01:08:31,869 --> 01:08:36,630 de tal forma que protegemos los posibles valores que pueda terminar teniendo la edad. 630 01:08:36,850 --> 01:08:40,829 Fijaros, en el momento que he puesto ya este y edad como privado, 631 01:08:42,289 --> 01:08:46,569 me ha dejado compilar ya por aquí en un acceso que tenía directamente a la variable, 632 01:08:47,310 --> 01:08:53,970 pues de esta forma nos estamos obligando a que los accesos se hagan a través de métodos públicos 633 01:08:53,970 --> 01:08:59,189 que tenga la clase y en estos métodos públicos nos permite tener un determinado control, 634 01:08:59,189 --> 01:09:25,029 Lo que os he contado antes. Pues estos métodos que están pensados no para hacer funcionalidades propias de la persona, como pueda ser saludar o si fuera un alumno hacer examen, estos cuya finalidad es gestionar el acceso a variables, a parámetros de clase, se los suelen llamar métodos de establecimiento o de recuperación o en inglés getter o setters. 635 01:09:25,029 --> 01:09:31,680 getter o setter. Entonces estos getter o setter 636 01:09:31,680 --> 01:09:35,119 lo que hacen es devolver el nombre 637 01:09:35,119 --> 01:09:39,319 y si es para este sería devolver el nombre 638 01:09:39,319 --> 01:09:43,600 el getter y el setter sería asignarlo. Y bueno, entre medias 639 01:09:43,600 --> 01:09:47,000 puedes poner cierto código para controlar los posibles valores que tenga. 640 01:09:48,579 --> 01:09:50,939 Entonces estos métodos getter o setter, como son 641 01:09:50,939 --> 01:09:55,140 muy típicos, los ides ya tienen por aquí una función 642 01:09:55,140 --> 01:09:58,300 que nos permite crearlos de forma bastante automática. 643 01:09:58,739 --> 01:10:00,239 Vamos a intentar localizarlo. 644 01:10:00,340 --> 01:10:03,119 Fijaros aquí en la opción Source. 645 01:10:04,520 --> 01:10:07,560 De Clise tenemos Generate, Getter y Setter. 646 01:10:08,399 --> 01:10:12,020 Si lo pulsamos, fijaros cómo nos localiza 647 01:10:12,020 --> 01:10:14,119 las variables de clase que tenemos, 648 01:10:14,479 --> 01:10:16,359 ese nombre y edad e iValor. 649 01:10:17,140 --> 01:10:19,819 Y dice, selecciona para cuál quieres crear. 650 01:10:19,819 --> 01:10:21,979 setters, getters 651 01:10:21,979 --> 01:10:23,779 o 652 01:10:23,779 --> 01:10:25,960 bueno, para 653 01:10:25,960 --> 01:10:28,039 generarlos, entonces vamos a por ejemplo a generar 654 01:10:28,039 --> 01:10:30,159 getter y setter de IEDAD 655 01:10:30,159 --> 01:10:34,260 no vamos a marcar los otros dos, podríamos marcar todos 656 01:10:34,260 --> 01:10:35,140 pulsamos 657 01:10:35,140 --> 01:10:37,579 y por aquí abajo 658 01:10:37,579 --> 01:10:39,819 o por aquí en medio 659 01:10:39,819 --> 01:10:40,600 o no sé dónde 660 01:10:40,600 --> 01:10:44,039 fijaros aquí como me ha creado un getter 661 01:10:44,039 --> 01:10:46,140 y un setter, voy a subirlos arriba 662 01:10:46,140 --> 01:10:47,920 para tenerlos localizados 663 01:10:47,920 --> 01:10:50,939 aquí arribita, los he cortado y los he pegado 664 01:10:50,939 --> 01:10:53,720 en realidad el programa 665 01:10:53,720 --> 01:10:56,819 lo único que hace es, pues el getter 666 01:10:56,819 --> 01:11:00,039 que lo que va a hacer va a ser devolverme la información de iedad 667 01:11:00,039 --> 01:11:02,800 que en principio la hemos definido como privada para que no haya 668 01:11:02,800 --> 01:11:04,199 acceso directamente a la variable 669 01:11:04,199 --> 01:11:08,880 lo único que hace a la hora de generarlo de forma automática es devolver 670 01:11:08,880 --> 01:11:11,859 precisamente ese valor y como iedad es 671 01:11:11,859 --> 01:11:14,520 un parámetro de tipo entero 672 01:11:14,520 --> 01:11:17,199 pues lo que hace es el método de devolver un entero 673 01:11:17,199 --> 01:11:24,140 y en el caso de asignar el setter, no necesitamos que devuelva nada, 674 01:11:24,399 --> 01:11:28,899 pero lo que queremos es asignar un valor a un parámetro de la clase, 675 01:11:29,020 --> 01:11:32,979 con lo cual el valor que vamos a asignar lo recibe como parámetro 676 01:11:32,979 --> 01:11:35,340 y se lo asigna la variable de clase. 677 01:11:36,140 --> 01:11:41,239 Fijaros que este setter es muy parecido a lo que hemos hecho aquí antes, 678 01:11:41,239 --> 01:11:49,670 recibir el valor y terminar asignándoselo a la variable aquí. 679 01:11:49,789 --> 01:12:10,489 Lo único que bueno, aquí nosotros hemos añadido cierto código porque nosotros sí sabíamos lo que queríamos que pasara con la edad, Eclipse inicialmente no lo sabe, entonces este setter ahora podríamos nosotros actualizarlo, más allá de que no devuelva nada, podríamos actualizarlo para que asignase la edad en función de estos criterios. 680 01:12:10,489 --> 01:12:45,000 Este asignar edad podría ser ese setter. La variable aquí se ha llamado iedad. Este método sería este otro que hemos puesto nosotros aquí, asignar edad, que habíamos hecho en realidad un setter, no se llamaba con el set, pero era lo que estábamos haciendo. Cierta lógica para asignar una información. 681 01:12:45,000 --> 01:12:53,590 fijaros que aquí esta variable se llamaba y era una variable local a nuestro método 682 01:12:53,590 --> 01:13:02,550 y esta edad si la marco fijaros como se me asigna justo a la edad que tenemos definida como parámetro 683 01:13:02,550 --> 01:13:11,350 entre este no hay lugar a dudas este método la única variable y que conoce o la variable y que 684 01:13:11,350 --> 01:13:15,329 conoce, es una variable local que la tiene en su propio ámbito 685 01:13:15,329 --> 01:13:19,149 definida, con lo cual no hay lugar a dudas que es esta la que ejecuta, si marco 686 01:13:19,149 --> 01:13:23,369 sobre ella, aquí lo tenemos, y si pulsamos sobre esta, esta variable 687 01:13:23,369 --> 01:13:27,109 yedad disponible en el método asignar edad, como no la tiene 688 01:13:27,109 --> 01:13:31,170 definida en su ámbito más local, que es en la definición del propio método, se va 689 01:13:31,170 --> 01:13:35,250 al ámbito más grande, que es el de la clase, y fijaros como me está 690 01:13:35,250 --> 01:13:39,270 marcando esta yedad. En cambio en el setter, esta 691 01:13:39,270 --> 01:13:43,550 y edad es esta, la local, pero se lo está asignando 692 01:13:43,550 --> 01:13:46,970 a esta variable, que si os fijáis 693 01:13:46,970 --> 01:13:51,289 vuelve a ser esta, con lo cual en realidad no estaríamos actualizando la edad que tiene 694 01:13:51,289 --> 01:13:55,010 la persona en la clase. Esto ha sucedido porque 695 01:13:55,010 --> 01:13:59,350 tenemos coincidencia de nombre en la variable, entonces si la tenemos 696 01:13:59,350 --> 01:14:02,590 definida en un ámbito más amplio, como en la clase persona 697 01:14:02,590 --> 01:14:07,149 y en el ámbito también del método de forma local a través del 698 01:14:07,149 --> 01:14:13,470 atributo de a través del parámetro de entrada la tenemos definida con el mismo nombre el método se 699 01:14:13,470 --> 01:14:20,270 queda con la digamos más próxima a la más cercana que es esta otra como podemos hacer que esta edad 700 01:14:20,270 --> 01:14:26,949 que se recibe aquí en realidad se asigne a la variable de edad de toda la persona utilizando 701 01:14:26,949 --> 01:14:35,289 la etiqueta this this significa yo como objeto que estoy ahora mismo en ejecución este método 702 01:14:35,289 --> 01:14:41,289 se estará ejecutando para un determinado objeto pues yo mismo mi variable y edad entonces si ahora 703 01:14:41,289 --> 01:14:47,170 marcamos está fijaros como ya no se marca esta y sí que me identifica ese y edad no como la variable 704 01:14:47,170 --> 01:14:55,199 local sino como la variable de objeto esto ha sucedido porque el set era hecho coincidir los 705 01:14:55,199 --> 01:15:02,670 dos nombres de la variable en este caso no había lugar a dudas porque como no coincidía esta edad 706 01:15:02,670 --> 01:15:07,350 está y edad no está definida en el ámbito del método y solamente está definido en el ámbito 707 01:15:07,350 --> 01:15:09,210 de la clase, con lo cual no había problemas. 708 01:15:09,930 --> 01:15:11,289 Igualmente podríamos haber puesto aquí 709 01:15:11,289 --> 01:15:12,890 el dis, también hubiera sido 710 01:15:12,890 --> 01:15:15,329 tampoco un problema, aunque 711 01:15:15,329 --> 01:15:17,369 no había conflicto, pero bueno 712 01:15:17,369 --> 01:15:19,310 con el dis todavía queda quizás 713 01:15:19,310 --> 01:15:21,109 más claro que se está refiriendo a la variable 714 01:15:21,109 --> 01:15:27,899 de la clase. A ver, ¿qué más cositas 715 01:15:27,899 --> 01:15:29,520 por ahí tengo para contaros? 716 01:15:29,880 --> 01:15:31,560 Public Protective, Friendly, 717 01:15:32,000 --> 01:15:33,840 los Getter y los Setter. Entonces los 718 01:15:33,840 --> 01:15:36,100 Getter y los Setter, pues son estos métodos 719 01:15:36,100 --> 01:15:37,979 para asignar valores 720 01:15:37,979 --> 01:15:39,220 y para recibirlos. Mirad, 721 01:15:41,340 --> 01:15:41,699 aquí 722 01:15:41,699 --> 01:15:45,880 en la edad, nosotros estábamos intentando asignar valores, pero si yo 723 01:15:45,880 --> 01:15:51,199 cojo y digo system.auth.println 724 01:15:51,199 --> 01:15:55,060 y digo voy a sacar por pantalla 725 01:15:55,060 --> 01:16:02,390 la edad de mi pair, un objeto de la clase persona. Bueno, directamente 726 01:16:02,390 --> 01:16:06,369 no me deja poner y edad, ¿por qué? Pues porque y edad está 727 01:16:06,369 --> 01:16:10,670 definido como privado. Y la forma de saber la edad 728 01:16:10,670 --> 01:16:14,329 la puedo obtener a través del getter, que es 729 01:16:14,329 --> 01:16:27,079 público si yo pongo aquí y per punto get y edad cuando ejecutó este método se viene aquí y que 730 01:16:27,079 --> 01:16:33,340 hace un retorno de edad del valor que tiene esta variable devuelve un entero lo devuelve digamos 731 01:16:33,340 --> 01:16:39,319 hacia la izquierda es decir se lo devuelve al paréntesis del println y mostrará la edad que 732 01:16:39,319 --> 01:16:45,899 si damos aquí una ejecución pues yo creo que estamos por aquí en este 0 733 01:16:45,899 --> 01:16:52,039 vamos a comentar cosas por ahí para poder seguirlo más fácil 734 01:16:52,039 --> 01:16:54,840 esto del tau que parece que era el doble de pi 735 01:16:54,840 --> 01:16:58,869 vamos a comentar esto también 736 01:16:58,869 --> 01:17:10,609 este o la 2 que uno lo está mostrando desde aquí también lo comentamos 737 01:17:10,609 --> 01:17:17,119 y ya si ejecutamos lo primero que nos encontramos es el 0 738 01:17:17,119 --> 01:17:20,039 que es esta edad 739 01:17:20,039 --> 01:17:21,460 ¿por qué nos ha dado de vuelto 0? 740 01:17:21,460 --> 01:17:29,800 pues bueno pues los valores las variables numéricas por defecto se inicializan a cero 741 01:17:31,020 --> 01:17:35,960 resulta que hemos intentado que asignar una edad llamando a este método asignar edad con valor 742 01:17:35,960 --> 01:17:45,619 menos 30 y si nos ponemos aquí recordad que cuando llamamos a este método si el valor era menor de 743 01:17:45,619 --> 01:17:50,859 0 directamente la asignaba como valor un 0 y vamos a poner que si el valor es muy pequeño 744 01:17:50,859 --> 01:17:58,100 la asignó un 1 para hacer una proyección claro es como ya nos asigna el 1 y luego el get y edad 745 01:17:58,100 --> 01:18:03,380 nos ha devuelto la información el getter nos ha devuelto la información de la variable y edad 746 01:18:03,380 --> 01:18:24,989 que era este 1 y el sistema println no ha sacado por alguna duda mirad más cosas que os cuento las 747 01:18:24,989 --> 01:18:34,470 términos términos que tenemos en java cuando llamamos ejecutamos métodos desde aquí del 748 01:18:34,470 --> 01:18:46,100 inicio aquí por ejemplo estamos ejecutando estamos ejecutando el método llamar saludar 749 01:18:46,100 --> 01:18:54,819 de un objeto fin que es de la clase de finanzas a nivel terminología cuando ejecutamos un método 750 01:18:54,819 --> 01:18:58,619 lo que se dice es que estamos mandando un mensaje 751 01:18:58,619 --> 01:19:03,000 desde el método main de la clase inicio 752 01:19:03,000 --> 01:19:07,079 al objeto fin, es decir, poner en ejecución 753 01:19:07,079 --> 01:19:09,840 un método es enviar un mensaje, eso es lo que luego por ahí 754 01:19:09,840 --> 01:19:14,119 por el temario cuando veáis mensajes, es a lo que hace referencia 755 01:19:14,119 --> 01:19:18,899 luego, las clases hemos dicho que tienen 756 01:19:18,899 --> 01:19:22,539 atributos, aquí tenemos dos 757 01:19:22,539 --> 01:19:25,680 o parámetros y tienen 758 01:19:25,680 --> 01:19:28,779 métodos. Pues la forma de interactuar 759 01:19:28,779 --> 01:19:31,500 con objetos de la clase finanzas desde otras clases 760 01:19:31,500 --> 01:19:34,460 es enviándole mensajes, como os decía, 761 01:19:35,239 --> 01:19:37,640 y a través de sus 762 01:19:37,640 --> 01:19:40,500 métodos. Entonces, cuando los métodos, digamos 763 01:19:40,500 --> 01:19:43,739 que es el interfaz de la clase. En un momento dado se dice 764 01:19:43,739 --> 01:19:46,500 ¿cuál es el interfaz de la clase finanzas? Pues son los 765 01:19:46,500 --> 01:19:49,439 métodos saludafinanzas y 766 01:19:49,439 --> 01:19:52,239 llamarsaludar, que en realidad saludafinanzas está bloqueado 767 01:19:52,239 --> 01:19:56,220 su acceso porque es privado para que lo llamen desde otras partes, pero bueno 768 01:19:56,220 --> 01:20:00,079 formaría parte de su interfaz aunque solo fuese para ser llamado 769 01:20:00,079 --> 01:20:04,140 desde otros métodos de la propia clase. Entonces el interfaz es el conjunto 770 01:20:04,140 --> 01:20:08,119 de métodos con el cual nos podemos comunicar con los objetos de la clase 771 01:20:08,119 --> 01:20:12,140 finanzas. ¿Y cómo nos comunicamos? A través del envío de 772 01:20:12,140 --> 01:20:16,180 mensajes, que básicamente es dar la instrucción de que se 773 01:20:16,180 --> 01:20:20,439 ejecute un método del objeto de esa clase. 774 01:20:20,439 --> 01:20:29,430 más cosas, los ámbitos de las variables que también hemos hablado de ellos 775 01:20:29,430 --> 01:20:34,090 si nosotros tenemos aquí la variable, por ejemplo el método set y edad 776 01:20:34,090 --> 01:20:39,090 esta es una variable, la que recibe como parámetro una variable local al método 777 01:20:39,090 --> 01:20:46,630 y si nosotros definimos aquí una variable también local a este método 778 01:20:46,630 --> 01:20:51,590 como está definido en este ámbito, cuando acaba este ámbito la variable desaparece 779 01:20:51,590 --> 01:20:56,750 que desaparezca la variable quiere decir que deja de estar accesible desde otras partes del código 780 01:20:56,750 --> 01:21:04,710 y que, como ya no está referenciada, nos interesa que se libere la memoria RAM que estaba ocupando. 781 01:21:05,149 --> 01:21:10,670 Aquí, cuando hemos definido una variable, no hemos hecho el new porque es un tipo string, 782 01:21:10,670 --> 01:21:15,250 está entre medias de primitivo referenciado, pero bueno, por la característica de tipo primitivo, 783 01:21:15,630 --> 01:21:19,289 no hemos tenido que hacer el new, pero lógicamente se ha reservado un trocito de memoria RAM 784 01:21:19,289 --> 01:21:24,409 para guardar su información, para que no se quede bloqueada de por vida en el momento en el que ya 785 01:21:24,409 --> 01:21:40,590 No es una variable accesible desde el programa, es decir, si es una variable local al método, una vez que termina el método, lo que interesa es que se libere esa memoria RAM para que nuestro propio programa o cualquier otro programa que esté en ejecución en el ordenador sea capaz de utilizar esa memoria RAM. 786 01:21:40,590 --> 01:21:44,909 ¿Quién se encarga de hacer esto en Java? Pues no lo hacemos nosotros directamente 787 01:21:44,909 --> 01:21:51,829 está el recolector de basura, así se llama, que se va dando cuenta de variables 788 01:21:51,829 --> 01:21:57,210 que ya no están siendo utilizadas y que están bloqueando memoria RAM en el ordenador 789 01:21:57,210 --> 01:22:01,449 y empieza a liberarlo, dice bueno pues ya como ya no se utiliza esa memoria RAM 790 01:22:01,449 --> 01:22:05,270 te la devuelvo al sistema operativo para que la utilices convenientemente 791 01:22:05,270 --> 01:22:09,149 con el programa que te interese, el recolector de basura 792 01:22:09,149 --> 01:22:25,109 Si la variable está definida en este ámbito de la clase persona, pues ¿cuándo cobran vida estas variables de clase? Estas variables de clase cobran vida en el momento que hacemos el new y llamamos al constructor, cuando creemos una nueva persona. 793 01:22:25,109 --> 01:22:29,369 entonces, ¿cuál es la existencia de estas variables 794 01:22:29,369 --> 01:22:32,890 mientras esa persona exista? si nosotros definimos 795 01:22:32,890 --> 01:22:37,350 dentro de un método una persona 796 01:22:37,350 --> 01:22:40,350 aquí por ejemplo el objeto 797 01:22:40,350 --> 01:22:44,130 mi alum de alumno, en este caso cuando acabe el main 798 01:22:44,130 --> 01:22:49,029 como ya este alumno se va del ámbito de donde ha sido definido 799 01:22:49,029 --> 01:22:53,489 ya deja de tener sentido, y si deja de tener sentido el recolector de basura 800 01:22:53,489 --> 01:22:59,550 igual que había hecho antes con la variable ese no se dará cuenta que ya no se utiliza y como 801 01:22:59,550 --> 01:23:08,670 no está referenciado liberar a esa memoria entonces bueno por ahí tenemos momentos en 802 01:23:08,670 --> 01:23:15,010 los que se crean variables ámbitos en los que están disponibles y cuando son eliminados que 803 01:23:15,010 --> 01:23:21,189 se encarga de ello el recolector de basura hay lenguajes como también orientados a objetos como 804 01:23:21,189 --> 01:23:25,250 C++, que tienes que hacer también las instrucciones 805 01:23:25,250 --> 01:23:28,829 equivalentes al new para hacer la reserva de memoria para tipos referenciados 806 01:23:28,829 --> 01:23:33,050 pero luego no existe un recolector de basura, con lo cual si tú 807 01:23:33,050 --> 01:23:37,069 cuando está acabando el ámbito en el que utilizas esa variable, no te preocupas de 808 01:23:37,069 --> 01:23:41,010 liberar la memoria por código, ese código se va quedando ahí bloqueando 809 01:23:41,010 --> 01:23:45,310 memoria RAM y bueno, imaginaos que está en un bucle que se ejecuta a menudo 810 01:23:45,310 --> 01:23:49,149 en cada una de esas ejecuciones haría una nueva reserva de memoria 811 01:23:49,149 --> 01:23:55,609 y los recursos del ordenador poco a poco se irían irían escaseando hasta que sí bueno si está 812 01:23:55,609 --> 01:24:02,250 muchísimo tiempo pues igual terminaría el programa por dejar de funcionar porque no tendrían nueva 813 01:24:02,250 --> 01:24:12,829 memoria ram disponible para seguir trabajando cosas que tenemos por ahí más con el tipo 814 01:24:12,829 --> 01:24:19,289 referenciado ya hemos hablado las clases graper tengo por aquí apuntado acordaros para los tipos 815 01:24:19,289 --> 01:24:24,250 primitivos necesitan ciertas funciones que nos las proporcionan las clases 816 01:24:24,250 --> 01:24:31,539 grupper en una clase que sea referenciada como por ejemplo mat 817 01:24:31,539 --> 01:24:43,189 nosotros ponemos aquí está escribiendo lo fuera de un método si ponemos aquí 818 01:24:43,189 --> 01:24:50,090 más punto pues fijaron la clase más nos ofrece cosas por aquí todos estos como 819 01:24:50,090 --> 01:24:55,010 una instancia de un objeto de la clase más serán todos ellos estáticos cambios 820 01:24:55,010 --> 01:25:00,529 si nosotros ponemos aquí int y definimos una variable y ponemos aquí 821 01:25:00,529 --> 01:25:04,489 un punto, si ponemos aquí y punto, 822 01:25:05,130 --> 01:25:08,449 pues no me ofrece nada. ¿Por qué? Porque son los tipos primitivos, con sus 823 01:25:08,449 --> 01:25:12,569 características que ya hemos hablado. No hay que hacer el new, pero no tienen cosas disponibles. 824 01:25:13,250 --> 01:25:15,109 Entonces, hay definida una clase integer 825 01:25:15,109 --> 01:25:20,050 que implementa 826 01:25:20,050 --> 01:25:24,449 funciones que van de la manita de las variables de 827 01:25:24,449 --> 01:25:26,649 tipo int para que tengamos disponibles 828 01:25:26,649 --> 01:25:28,170 todas aquellas funciones que 829 01:25:28,170 --> 01:25:30,510 la clase primitiva int no 830 01:25:30,510 --> 01:25:32,369 tiene. Estas son las clases 831 01:25:32,369 --> 01:25:34,390 Wrapper, ya hemos hablado de ellas otras 832 01:25:34,390 --> 01:25:39,300 veces. Mirad, el método 833 01:25:39,300 --> 01:25:43,420 toString. El método toString 834 01:25:43,420 --> 01:25:45,300 hablaremos también de él 835 01:25:45,300 --> 01:25:46,619 más veces, pero es 836 01:25:46,619 --> 01:25:48,260 bastante interesante. 837 01:25:49,220 --> 01:25:49,920 Cuando nosotros 838 01:25:49,920 --> 01:25:53,260 y útil, habrá momentos en los que 839 01:25:53,260 --> 01:25:55,300 tendremos que trabajar con él bastante intensamente 840 01:25:55,300 --> 01:25:56,699 cuando hablemos de colecciones. 841 01:25:57,239 --> 01:26:00,500 Os cuento un poco el toString. 842 01:26:00,880 --> 01:26:23,699 claro en la clase finanzas tenemos el método si ponemos a punto intentamos utilizar tu string ya 843 01:26:23,699 --> 01:26:30,300 no lo está ofreciendo cambio en finanzas no hemos definido ningún método tuestre que sucede que hay 844 01:26:30,300 --> 01:26:36,659 una serie de características que toda clase en java va a tener siempre porque dentro de esa 845 01:26:36,659 --> 01:26:42,380 estructura que os decía de jerarquías que iban de arriba abajo antes cuando se hablaba de las 846 01:26:42,380 --> 01:26:51,079 herencias arriba del todo en la estructura ahí está la clase object y esta clase object de alguna 847 01:26:51,079 --> 01:26:57,319 forma todas sus características son heredadas por cualquier clase que tenga todo programa en 848 01:26:57,319 --> 01:27:03,539 java me da igual sea un programa mío sea de quien sea sea una clase sea otra sea de librerías todas 849 01:27:03,539 --> 01:27:10,680 ellas tienen características que están definidas en object con lo cual todo objeto siempre va a 850 01:27:10,680 --> 01:27:21,319 tener una serie de métodos disponibles y uno de ellos es el tu string el método como herencia 851 01:27:21,319 --> 01:27:26,640 digamos desde hoy de las herencias hablaremos que la herencia tiene que ser única desde una clase 852 01:27:26,640 --> 01:27:31,420 con excepción de esta herencia que os digo desde hoy pero ya hablaremos de herencia otro día 853 01:27:33,180 --> 01:27:37,439 entonces el método tu string está disponible en todas partes nosotros cuando ponemos aquí 854 01:27:37,439 --> 01:27:40,880 un system.out.println 855 01:27:40,880 --> 01:27:47,079 pongamos lo que pongamos aquí, en realidad nos funciona y nos 856 01:27:47,079 --> 01:27:50,239 saca información, si nosotros ponemos aquí un int i igual a 5 857 01:27:50,239 --> 01:27:54,880 ponemos aquí un i, nos saca el 5 858 01:27:54,880 --> 01:27:58,680 pero si ponemos aquí un string, ese info 859 01:27:58,680 --> 01:28:11,390 igual a hola, nosotros ponemos aquí un system.out.println 860 01:28:11,390 --> 01:28:18,510 y también nos funciona, y si ponemos un system.out 861 01:28:18,510 --> 01:28:20,109 .println 862 01:28:20,109 --> 01:28:24,140 de i más 863 01:28:24,140 --> 01:28:26,279 pongo aquí 864 01:28:26,279 --> 01:28:28,279 una sas yo directamente y pongo aquí 865 01:28:28,279 --> 01:28:35,079 ese info, pues también 866 01:28:35,079 --> 01:28:35,439 no va 867 01:28:35,439 --> 01:28:38,020 entonces que pasa que 868 01:28:38,020 --> 01:28:40,840 si este .println se traga aquí 869 01:28:40,840 --> 01:28:43,039 cualquier cosa, pues si se lo traga 870 01:28:43,039 --> 01:28:44,140 pero porque 871 01:28:44,140 --> 01:28:47,060 para cada una de las cosas que pongamos aquí 872 01:28:47,060 --> 01:28:49,020 lo que hace 873 01:28:49,020 --> 01:28:50,359 es convertirlo antes 874 01:28:50,359 --> 01:28:57,090 a un string 875 01:28:57,090 --> 01:29:24,659 con lo cual esto que es un entero lo convierte primero en un string y luego lo que hace es concatenar ese string con esto que es otro string y si esto no fuera un string que ya lo es pues lo convertiría también un string fijaros si ponemos aquí más vamos a poner aquí unos espacios y ponemos aquí a recordad que a es el objeto de la clase de finanzas también me compila 876 01:29:24,659 --> 01:29:30,840 recordad que antes hemos puesto aquí el tu string este y que devuelve tu string devuelve un string 877 01:29:30,840 --> 01:29:36,600 entonces cualquier cosa que pongamos aquí lo convierte en un string y luego concatena todos 878 01:29:36,600 --> 01:29:44,350 esos strings para sacar un resultado conjunto de lo que pongamos en el sistema println en el 879 01:29:44,350 --> 01:29:50,710 que hay casos en los que está muy claro lo que lo que va a suceder si yo pongo aquí un entero 880 01:29:50,710 --> 01:30:18,789 pues resulta que la clase, seguramente el grupper este integer, si ponemos aquí integer.toString, fijaros como lo tiene, recibe un entero y nos devuelve un string y conviérteme a string un valor entero, está claro que este método, esta clase integer tendrá escrito, estará sobrescribiendo lo que recibió de object, 881 01:30:19,369 --> 01:30:26,970 Recordad que antes os he dicho que por herencia tenemos disponibles los métodos que estén definidos en las clases de las cuales se heredan. 882 01:30:27,329 --> 01:30:32,590 Object, digamos que podría ser un estilo de herencia, todas las clases se heredan de object. 883 01:30:32,970 --> 01:30:34,609 Entonces todas tienen un toString. 884 01:30:35,710 --> 01:30:40,180 Pero resulta que, ¿cómo quiero que me convierta? 885 01:30:40,180 --> 01:30:43,439 fijaros, si de object tiene la clase 886 01:30:43,439 --> 01:30:44,640 wrapper integer 887 01:30:44,640 --> 01:30:49,640 el comportamiento que esté definido en la clase object para el método 888 01:30:49,640 --> 01:30:52,579 toString, es decir, el código toString de la librería 889 01:30:52,579 --> 01:30:55,560 de la clase object, intentará 890 01:30:55,560 --> 01:30:58,000 convertir un integer a algo 891 01:30:58,000 --> 01:31:01,520 pero ese mismo código, porque el código es único 892 01:31:01,520 --> 01:31:03,859 tendrá el mismo toString 893 01:31:03,859 --> 01:31:07,140 y ese mismo toString estará heredado para 894 01:31:07,140 --> 01:31:11,000 en este caso mi clase finanzas. 895 01:31:11,319 --> 01:31:14,420 También mi clase finanzas por herencia. 896 01:31:16,640 --> 01:31:19,939 Vamos a poner un poco entrecomillado la herencia, porque es así, pero 897 01:31:19,939 --> 01:31:24,340 la herencia tiene que ser simple, ya os contaré. 898 01:31:24,619 --> 01:31:28,739 Pero bueno, por herencia, la clase finanzas tiene el método toString 899 01:31:28,739 --> 01:31:32,640 y el comportamiento de los objetos de la clase finanzas 900 01:31:33,199 --> 01:31:35,000 será el que esté definido en la clase object. 901 01:31:35,000 --> 01:31:41,020 entonces convertir un objeto de la clase finanzas a una cadena de caracteres 902 01:31:41,020 --> 01:31:46,260 cuando tiene estas características puede ser muy diferente a convertir a un string 903 01:31:46,260 --> 01:31:48,279 un objeto de la clase integer 904 01:31:48,279 --> 01:31:54,720 entonces que es lo que habrá hecho la clase integer con el toString que tiene heredado de object 905 01:31:54,720 --> 01:31:56,199 pues lo habrá sobrescrito 906 01:31:56,199 --> 01:32:06,210 para que el comportamiento del método toString 907 01:32:06,210 --> 01:32:10,449 cuando esté relacionado con la clase grupper integer 908 01:32:10,449 --> 01:32:14,350 no sea el que esté ya predefinido en la clase object 909 01:32:14,350 --> 01:32:18,789 porque queremos que convertir un entero sea diferente 910 01:32:18,789 --> 01:32:22,409 a lo que haga la clase object cuando esté intentando convertir 911 01:32:22,409 --> 01:32:30,539 un objeto de la clase finanzas. Tanto la clase finanzas como mi clase 912 01:32:30,539 --> 01:32:36,380 tanto la clase grupper integer como la clase finanzas 913 01:32:36,380 --> 01:32:40,720 de inicio tienen un código común definido en la clase object 914 01:32:40,720 --> 01:32:46,399 para el método to string como convertir en una cadena de caracteres un objeto de la clase 915 01:32:46,399 --> 01:33:00,380 finanzas y un entero es diferente java nos permite sobreescribir el comportamiento veremos ahora como 916 01:33:00,380 --> 01:33:06,920 otro día nos permite sobreescribir el comportamiento entonces si yo en la clase íntegras digo mira ya 917 01:33:06,920 --> 01:33:13,060 deja de utilizar el código de la clase hoy es para tu string y utiliza el que yo te indico en 918 01:33:13,060 --> 01:33:18,880 En la propia clase, el comportamiento que tendrá en la clase Integer será el propio sobrescrito. 919 01:33:19,239 --> 01:33:23,319 Y si en mi propia clase no lo he sobrescrito, utilizará el de la clase Object. 920 01:33:25,060 --> 01:33:31,560 Entonces, la clase Integer, para este entero, lo que hará será convertir a un string un número. 921 01:33:32,920 --> 01:33:44,279 Pero la clase Finanzas, como no tiene aquí escrito el método toString, lo que hará será utilizar el único que tiene disponible, que será el de la clase Object. 922 01:33:44,279 --> 01:34:00,720 De una forma o de otra, cualquiera de ellos devolverá un string y esos strings se concatenan aquí y nos los muestra por pantalla. Fijaros qué información me ha sacado. Me ha sacado un 5. 923 01:34:00,720 --> 01:34:04,020 la clase toString de 924 01:34:04,020 --> 01:34:05,539 el wrapper 925 01:34:05,539 --> 01:34:07,840 integer ha hecho que esto 926 01:34:07,840 --> 01:34:09,600 que es un número lo ha convertido en un string 927 01:34:09,600 --> 01:34:11,539 y lo ha puesto ahí, lo ha concatenado 928 01:34:11,539 --> 01:34:12,720 con una sass 929 01:34:12,720 --> 01:34:15,760 luego ese info lo ha sacado que ya es 930 01:34:15,760 --> 01:34:17,720 directamente un string, con lo cual me ha puesto aquí 931 01:34:17,720 --> 01:34:19,779 hola, me ha puesto 932 01:34:19,779 --> 01:34:21,779 aquí unos espacios y luego 933 01:34:21,779 --> 01:34:23,319 fijaros que a 934 01:34:23,319 --> 01:34:25,539 que es un objeto de la clase finanzas 935 01:34:25,539 --> 01:34:27,380 no tiene definido aquí un toString 936 01:34:27,380 --> 01:34:29,500 con lo cual habrá utilizado el heredado 937 01:34:29,500 --> 01:34:36,000 de la clase object y me ha mostrado aquí que es un objeto de la clase finanzas y me ha puesto 938 01:34:36,000 --> 01:34:40,479 aquí un identificador que probablemente tenga que ver con algo de una posición de la posición 939 01:34:40,479 --> 01:34:47,300 de memoria que tengamos que tengamos donde tengamos donde tengamos reservado espacio 940 01:34:47,300 --> 01:34:57,369 para este objeto igual que habíamos dicho que la que la clase integer que es una clase de 941 01:34:57,369 --> 01:35:16,770 que está definido en las librerías de Java, tendrás sobrescrito el comportamiento de tu string para no utilizar directamente el de object y mostrar en un string el valor del número entero, tenemos la posibilidad de sobrescribir nosotros en nuestras propias clases el método imprimir, el método toString y cualquier otro. 942 01:35:16,770 --> 01:35:28,479 bueno esto no es necesario, si ponemos aquí 943 01:35:28,479 --> 01:35:31,439 public que devuelva un string 944 01:35:31,439 --> 01:35:33,819 un método que sea el método toString 945 01:35:33,819 --> 01:35:43,029 y ponemos aquí return que devuelva 946 01:35:43,029 --> 01:35:45,710 una cadena de caracteres, vamos a poner aquí hola 947 01:35:45,710 --> 01:35:51,210 estamos diciendo que para la clase finanzas 948 01:35:51,210 --> 01:35:54,449 el método toString ya no queremos 949 01:35:54,449 --> 01:35:57,390 que utilice el método, fijaros como aquí 950 01:35:57,390 --> 01:35:59,810 dice está sobre escribiendo el toString 951 01:35:59,810 --> 01:36:04,750 está sobre escribiendo el de object ya no queremos que utilice el de object es 952 01:36:04,750 --> 01:36:10,729 decir cuando al sistema println pasemos un objeto de 953 01:36:10,729 --> 01:36:15,649 la clase finanzas println utilizar el to string para convertir esto en una 954 01:36:15,649 --> 01:36:19,949 cadena de caracteres si yo no tengo definido aquí un to string que es lo que 955 01:36:19,949 --> 01:36:23,930 sucede que utilizará el único que tiene disponible que es el heredado de object 956 01:36:23,930 --> 01:36:44,390 Y me mostrará algo de este estilo. Pero si yo lo sobrescribo aquí, estoy haciendo un ejercicio parecido al que decíamos que hacía la clase Grouper Integer para no utilizar el de Object y como consecuencia, en lugar de mostrarnos algo para el entero de este estilo, nos mostraba su valor numérico como una cadena de caracteres. 957 01:36:44,390 --> 01:36:48,710 ahora estamos diciendo que la clase, el método toString de la clase finanzas 958 01:36:48,710 --> 01:36:52,430 sobreescriba al toString de la clase object 959 01:36:52,430 --> 01:36:56,750 como me dice aquí, fijaros, y me devuelva un string que sea hola 960 01:36:56,750 --> 01:37:01,109 entonces siempre que ponga yo aquí ahora un objeto de la clase finanzas 961 01:37:01,109 --> 01:37:06,729 fijaros lo que sucede, me muestra aquí un hola 962 01:37:06,729 --> 01:37:10,430 ¿para qué nos sirve esto? pues nos sirve para 963 01:37:10,430 --> 01:37:14,670 identificar la forma en la que yo quiero que se vean 964 01:37:14,670 --> 01:37:18,909 mis objetos de la clase finanzas cuando se integren en un 965 01:37:18,909 --> 01:37:24,270 System of Println, mirad, en la clase persona 966 01:37:24,270 --> 01:37:49,539 si yo pongo aquí un objeto de la clase persona, si lo meto aquí 967 01:37:49,539 --> 01:37:55,659 en el System of Println, yo ahora ejecuto, y fijaros 968 01:37:55,659 --> 01:37:58,180 ahora lo que me dice es, bueno, todo este 969 01:37:58,180 --> 01:38:02,779 es todo esto, y para mi PER 970 01:38:02,779 --> 01:38:07,560 como en la clase persona, al contrario de en la clase finanzas 971 01:38:07,560 --> 01:38:09,960 no tengo sobre escrito el toString 972 01:38:09,960 --> 01:38:13,880 hemos visto que todo objeto en mi programa 973 01:38:13,880 --> 01:38:16,119 tiene un toString disponible, entonces si yo pongo aquí 974 01:38:16,119 --> 01:38:17,720 miPerl.toString 975 01:38:17,720 --> 01:38:22,579 fijaros que me dice, te devuelvo un string 976 01:38:22,579 --> 01:38:25,520 y está definido en la clase Object, veis aquí como me indica 977 01:38:25,520 --> 01:38:28,539 que lo está definido en la clase Object, y por qué utiliza el que está 978 01:38:28,539 --> 01:38:31,279 definido en la clase Object, porque todo lo tienen disponible 979 01:38:31,279 --> 01:38:32,720 pero aquí no lo he sobre escrito 980 01:38:32,720 --> 01:38:37,760 ahora digo, bueno pues es que esto en realidad no me dice mucho 981 01:38:37,760 --> 01:38:42,220 este toString, fijaros que desde la clase object no puede hacer nada 982 01:38:42,220 --> 01:38:46,479 diferente a mostrarme el nombre de la clase y su posición de memoria 983 01:38:46,479 --> 01:38:50,140 porque como es un código definido de forma común para 984 01:38:50,140 --> 01:38:54,319 todos los objetos que podamos definir en nuestro programa 985 01:38:54,319 --> 01:38:56,539 si no tienen sobre escrito el método toString 986 01:38:56,539 --> 01:39:02,359 que podría la clase object definir allí en sus librerías cuando lo va 987 01:39:02,359 --> 01:39:09,739 utilizar mi programa otro programa una clase de mi programa otra clase de mi programa cualquiera 988 01:39:09,739 --> 01:39:14,840 no habrá habría infinitas combinaciones de clases que podrían llegar a estar utilizando ese código 989 01:39:14,840 --> 01:39:19,699 claro yo pensando en mi programa podría decir mira yo lo que quiero que me identifique una 990 01:39:19,699 --> 01:39:24,560 persona cuando yo lo ponga en el sistema printer en es que salga su nombre pero claro es que ese 991 01:39:24,560 --> 01:39:29,840 código en la clase oye no puede poner un nombre porque en otro programa no hay personas hay 992 01:39:29,840 --> 01:39:35,340 directamente mesas y las mesas no tienen nombre que tienen todos en común absolutamente todos 993 01:39:35,340 --> 01:39:40,279 pues tienen que pertenecer a una clase que te la muestra aquí el tu string y que tiene una zona de 994 01:39:40,279 --> 01:39:46,359 memoria reservada con un identificador entonces como eso sí que es común a todos si no lo has 995 01:39:46,359 --> 01:39:52,000 sobre escrito en aquel código de la clase object lo que me muestra es esto si yo quiero que mi 996 01:39:52,000 --> 01:39:56,899 clase tenga unas características particulares diferentes de esto que en línea general dice 997 01:39:56,899 --> 01:40:01,460 poco pero es lo único común que podemos tener para definir en la clase object para todas las 998 01:40:01,460 --> 01:40:07,899 posibles clases de todos los programas lo que puedo hacer es en cada clase sobre escribir el 999 01:40:07,899 --> 01:40:13,420 método to stream para que tenga un comportamiento acorde al que yo espero que suceda cuando se llame 1000 01:40:13,420 --> 01:40:20,760 este método y lo meta en un sistema println qué es lo que hace la clase grúa perder las librerías 1001 01:40:20,760 --> 01:40:26,640 la clase grúa per íntegra pues tiene sobre escrito del método to stream para no utilizar 1002 01:40:26,640 --> 01:40:29,539 el de object y en particular en ese método 1003 01:40:29,539 --> 01:40:32,220 toString equivalente a este return hola que he puesto 1004 01:40:32,220 --> 01:40:35,579 lo que hace es fijarse en el numerito que tiene 1005 01:40:35,579 --> 01:40:38,619 el entero y devolver ese string, por eso me sale 1006 01:40:38,619 --> 01:40:42,989 aquí el 5. ¿Qué es lo que hemos hecho en finanzas? Pues mira 1007 01:40:42,989 --> 01:40:46,090 no nos hemos preocupado ni de la información que tiene por aquí finanzas y directamente 1008 01:40:46,090 --> 01:40:49,130 hemos dicho que cuando se meta en system.out.println 1009 01:40:49,130 --> 01:40:54,069 devuelva un string que sea un hola. ¿Qué es lo que 1010 01:40:54,069 --> 01:40:56,989 podemos coger de la clase persona? Pues aquí dependería 1011 01:40:56,989 --> 01:40:59,090 de lo que queramos nosotros 1012 01:40:59,090 --> 01:41:04,210 en nuestro enunciado, de nuestro ejercicio en particular, igual en un ejercicio 1013 01:41:04,210 --> 01:41:09,239 donde tenemos definido una clase persona, voy a sobre escribirlo 1014 01:41:09,239 --> 01:41:13,439 me interesa que de esa clase persona se muestre su nombre 1015 01:41:13,439 --> 01:41:17,560 pues en el método toString yo pongo 1016 01:41:17,560 --> 01:41:21,159 que haga un return de la variable nombre, como veis 1017 01:41:21,159 --> 01:41:34,170 entonces si ahora ejecuto aquí, bueno sale null 1018 01:41:34,170 --> 01:41:36,590 porque no le hemos asignado un nombre, vamos a asignarle un nombre 1019 01:41:36,590 --> 01:41:38,649 ponemos mi per 1020 01:41:38,649 --> 01:41:40,649 punto ese nombre 1021 01:41:40,649 --> 01:41:42,850 igual 1022 01:41:42,850 --> 01:41:51,039 mi per tiene como nombre noa 1023 01:41:51,039 --> 01:41:52,920 pongo aquí mi per 1024 01:41:52,920 --> 01:41:55,000 dentro del system of println, sabemos que 1025 01:41:55,000 --> 01:41:56,939 aquí voy a utilizar el toString, la clase 1026 01:41:56,939 --> 01:41:58,699 persona hemos dicho que devuelve al nombre 1027 01:41:58,699 --> 01:42:01,199 entonces yo ahora pulso aquí 1028 01:42:01,199 --> 01:42:03,100 y fijaros como me sale aquí noa 1029 01:42:03,100 --> 01:42:05,140 imaginamos que 1030 01:42:05,140 --> 01:42:07,199 en otro ejercicio decimos, es que el nombre 1031 01:42:07,199 --> 01:42:09,180 en realidad, en el contexto 1032 01:42:09,180 --> 01:42:10,859 del ejercicio anterior estaba bien que 1033 01:42:10,859 --> 01:42:15,079 apareciera el nombre, pero aquí lo trascendente, lo importante de las personas cuando salgan 1034 01:42:15,079 --> 01:42:19,119 un System of Println es la edad, entonces aquí podríamos poner por ejemplo 1035 01:42:19,119 --> 01:42:21,819 string SAUS 1036 01:42:21,819 --> 01:42:44,939 igual, mira, llamo al toString 1037 01:42:44,939 --> 01:42:49,539 de la clase WorkerInteger, le paso uniedad 1038 01:42:49,539 --> 01:42:53,520 con lo cual me va a devolver el número que tenga este, lo meto 1039 01:42:53,520 --> 01:43:00,800 en SAUS y aquí devuelvo SAUS, aquí estoy diciendo que 1040 01:43:00,800 --> 01:43:02,880 en el toString, cuando lo ponga en un sistema de println, 1041 01:43:03,039 --> 01:43:05,079 lo que me importa es que me devuelva 1042 01:43:05,079 --> 01:43:07,000 la edad 1043 01:43:07,000 --> 01:43:08,159 que tenga justo aquí. 1044 01:43:09,180 --> 01:43:10,279 Entonces aquí podríamos coger, 1045 01:43:11,739 --> 01:43:12,920 vamos a poner una edad, 1046 01:43:14,180 --> 01:43:14,659 a miper, 1047 01:43:14,760 --> 01:43:16,579 miper.iedad, 1048 01:43:18,220 --> 01:43:19,319 set y edad, 1049 01:43:19,899 --> 01:43:20,899 ponemos aquí 15. 1050 01:43:23,649 --> 01:43:24,729 Entonces ahora al ejecutar, 1051 01:43:25,949 --> 01:43:26,989 fijaros como ya me sale aquí 1052 01:43:26,989 --> 01:43:28,909 un 15, ¿por qué? Porque estoy devolviendo la edad. 1053 01:43:31,489 --> 01:43:32,329 Podríamos decir, pues, 1054 01:43:32,329 --> 01:43:35,329 en otro ejercicio lo que me interesa 1055 01:43:35,329 --> 01:43:37,390 lo que identifica es 1056 01:43:37,390 --> 01:43:39,130 podría ser el iValor que tenemos aquí 1057 01:43:39,130 --> 01:43:41,310 pero no, igual no es ni el 1058 01:43:41,310 --> 01:43:43,050 nombre, no es ni la edad, es una 1059 01:43:43,050 --> 01:43:44,409 combinación de los dos 1060 01:43:44,409 --> 01:43:47,149 entonces que podríamos poner aquí, pues podríamos poner que 1061 01:43:47,149 --> 01:43:49,470 ese aus, este string 1062 01:43:49,470 --> 01:43:51,350 que es el que estoy devolviendo aquí, fijaros 1063 01:43:51,350 --> 01:43:54,579 ese aus, sea 1064 01:43:54,579 --> 01:43:56,899 el nombre 1065 01:43:56,899 --> 01:43:58,880 imaginaos que con el toString queremos 1066 01:43:58,880 --> 01:44:01,000 poner que ese nombre 1067 01:44:01,000 --> 01:44:02,960 ese nombre tiene 1068 01:44:02,960 --> 01:44:10,489 fijaros aquí estamos cargando en ese aus 1069 01:44:10,489 --> 01:44:12,930 una concatenación 1070 01:44:12,930 --> 01:44:14,569 de tres strings, este utilizando 1071 01:44:14,569 --> 01:44:16,029 el toString por aquí, tiene 1072 01:44:16,029 --> 01:44:18,449 el valor de ese nombre, es lo que 1073 01:44:18,449 --> 01:44:20,710 devuelve el toString y es el que se utiliza 1074 01:44:20,710 --> 01:44:22,149 aquí en el System.out.println 1075 01:44:22,149 --> 01:44:24,250 entonces si ahora ejecutamos aquí 1076 01:44:24,250 --> 01:44:26,470 fijaros como dice noa tiene 1077 01:44:26,470 --> 01:44:26,850 15 1078 01:44:26,850 --> 01:44:30,770 en definitiva, ¿qué podemos poner aquí en el toString? 1079 01:44:30,869 --> 01:44:32,510 pues cualquier cosa que queramos 1080 01:44:32,510 --> 01:44:34,810 una combinación 1081 01:44:34,810 --> 01:44:36,670 de todo lo que tengamos por aquí 1082 01:44:36,670 --> 01:44:37,750 disponible y que sea 1083 01:44:37,750 --> 01:44:41,710 digamos la cara que va a dar una persona cuando se llame a su método 1084 01:44:41,710 --> 01:44:46,149 toStream que de forma automática se llama cuando lo incorporamos al system of println 1085 01:44:46,149 --> 01:44:49,470 si no tiene sobrescrita la clase 1086 01:44:49,470 --> 01:44:53,989 el toStream nos va a mostrar lo que veíamos antes, el único que tiene disponible 1087 01:44:53,989 --> 01:44:57,850 heredado desde la clase object, si utilizamos una librería de java 1088 01:44:57,850 --> 01:45:01,789 una clase de una librería de java, si lo tiene sobrescrito como la clase 1089 01:45:01,789 --> 01:45:05,250 wrapper integer, pues nos va a devolver el stream del entero 1090 01:45:05,250 --> 01:45:07,750 si es una clase propia 1091 01:45:07,750 --> 01:45:09,710 si no lo hemos sobrescrito 1092 01:45:09,710 --> 01:45:11,869 pues nos devolverá eso, si lo hemos sobrescrito 1093 01:45:11,869 --> 01:45:13,750 lo que nosotros hayamos devuelto 1094 01:45:13,750 --> 01:45:15,470 por aquí como un string, estamos 1095 01:45:15,470 --> 01:45:17,189 sobrescribiendo ese método toString 1096 01:45:17,189 --> 01:45:22,229 ¿Sí? ¿Se entiende? 1097 01:45:29,090 --> 01:45:30,010 ¿Por ahí más o menos bien? 1098 01:45:37,460 --> 01:45:38,779 Vale, pues 1099 01:45:38,779 --> 01:45:40,319 pues nada, yo creo 1100 01:45:40,319 --> 01:45:42,100 que vamos a parar ya por aquí, son las 1101 01:45:42,100 --> 01:45:44,199 7 y 20, el repaso 1102 01:45:44,199 --> 01:45:46,260 a lo que tenía apuntado por aquí 1103 01:45:46,260 --> 01:45:48,239 del tema 4, ya lo tenemos 1104 01:45:48,239 --> 01:45:53,699 volveremos sobre todo esto el tema 5 vuelvo a hablar de todas estas cosas así que bueno 1105 01:45:53,699 --> 01:46:01,140 pues aunque repasemos en otra tutoría volveremos a hacerlo y nada poco más que contaros por ahí 1106 01:46:01,140 --> 01:46:23,930 sí dime pero con un pad el vídeo si quieres yo creo la mejor forma es que puedas ver el vídeo 1107 01:46:23,930 --> 01:46:26,090 ¿no? de nuevo quizás 1108 01:46:26,090 --> 01:46:26,250 ¿no? 1109 01:46:28,010 --> 01:46:29,529 no, es que te lo digo porque 1110 01:46:29,529 --> 01:46:31,949 no es que sea un tesoro 1111 01:46:31,949 --> 01:46:34,050 esto que no quiera compartir con vosotros, ni mucho menos 1112 01:46:34,050 --> 01:46:35,989 de hecho está grabado, pero es que 1113 01:46:35,989 --> 01:46:37,470 si te lo pongo en un pad como 1114 01:46:37,470 --> 01:46:40,109 o sea, que sobre las mismas clases he ido poniendo 1115 01:46:40,109 --> 01:46:41,409 y quitando cosas, entonces 1116 01:46:41,409 --> 01:46:43,970 hemos perdido ya la traza de muchas de las 1117 01:46:43,970 --> 01:46:45,329 cosas que os he ido contando 1118 01:46:45,329 --> 01:46:47,869 entonces yo creo que, bueno, si te interesa algún 1119 01:46:47,869 --> 01:46:49,289 apartado así más en particular 1120 01:46:49,289 --> 01:46:51,949 como os voy a publicar el enlace 1121 01:46:51,949 --> 01:46:53,869 de la clase, pues la vuelves a ver y 1122 01:46:53,869 --> 01:46:56,130 ahí sobre la marcha lo puedes ir haciendo yo creo mejor 1123 01:46:56,130 --> 01:46:56,970 no sé si te parece 1124 01:46:56,970 --> 01:46:59,350 ¿sí? vale 1125 01:46:59,350 --> 01:47:04,130 vale pues pues nada ya tengo la grabación 1126 01:47:04,130 --> 01:47:04,710 ya por aquí