Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 12-01-24 - 1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vamos a calentar un poco con este ejercicio a ver si tenemos claro todas las cosas.
00:00:00
Esto estaba en ejercicios, clases, objetos 1, ejercicio 5.
00:00:10
Luego ya subo este proyecto en el que tengo las resoluciones que hemos hecho aquí en clase.
00:00:19
Luego ya la dejo subida para que estén todos tal y como los hemos resuelto en clase.
00:00:24
Que vosotros podéis haberlo hecho de otra manera a lo mejor.
00:00:29
Los estoy separando en paquetes distintos, cada paquete un ejercicio.
00:00:36
Ahora ya que entendemos exactamente que son los paquetes y las implicaciones que tienen que usarlos.
00:00:47
Ya los usaremos a demanda según necesitemos nos venga bien organizar nuestras aplicaciones con ellos o no.
00:01:12
Esta aplicación por ejemplo en la que yo he decidido meter todos los ejercicios.
00:01:18
Pues aquí viene estupendo meter las clases asociadas a cada ejercicio en un paquete diferente.
00:01:23
Entonces los paquetes se incorporan cuando dentro de una misma aplicación tengo muchas clases
00:01:29
y a efectos organizativos me viene muy bien hacer una agrupación.
00:01:34
Pues aquí me viene fenomenal, esta aplicación mía tiene varios ejercicios, pues estupendo.
00:01:39
Como cada ejercicio tiene varias clases, pues cada uno lo agrupo en un paquete diferente.
00:01:45
Y ya sabemos todas las implicaciones que tiene separar las clases por paquetes.
00:01:50
La implicación fundamental es si desde clases de un paquete quiero usar yo, instanciar clases de otro.
00:01:56
Entonces en ese caso ya sabemos que hay que incluir los modificadores de acceso,
00:02:06
los import si queremos hacer la trampita de usar el nombre corto de las clases.
00:02:11
Bueno ya todos esos matices ya los conocemos del otro día y tenemos que intentar no olvidarlos.
00:02:16
Vale pues entonces hacemos ahora un paquetillo para el ejercicio 5 que era lo que estábamos,
00:02:23
que ya está hecho aquí y hacemos este ejercicio, calentamos y luego continuamos con otra aplicación.
00:02:28
Bueno pues esta aplicación como todas va a necesitar varias clases.
00:02:36
De nuevo repito por enésima vez, en una situación real a ti te plantea unas necesidades
00:02:42
y con esas necesidades tu decides que clases pueden representar esa situación
00:02:49
y ya a partir de ahí programas, es la parte de análisis y diseño.
00:02:56
Nuestros ejercicios ya directamente parten de que te dicen oye hazme estas clases,
00:03:00
estamos obviando esa fase de análisis y diseño, que no la obviéis porque
00:03:05
un proceso de desarrollo completo obviamente está ahí.
00:03:09
En nuestro caso es otro caso más en el cual nos dicen que clases hay que hacer.
00:03:12
Pues vamos a necesitar una clase vehículo, porque nuestra aplicación gestiona cosas relacionadas con vehículos.
00:03:16
En este caso como esta aplicación lo que gestiona es gasto, consumo,
00:03:24
pues la única propiedad que interesa del vehículo es lo que consume por kilómetro.
00:03:28
Si fuera una aplicación que va a gestionar otras cosas de los vehículos, pues sus marcas,
00:03:35
sus dueños pues entonces tendría propiedades relacionadas con eso que va a gestionar.
00:03:40
En este caso como esta aplicación sirve solo para gestionar el consumo que han tenido los vehículos,
00:03:44
que se instancien, pues esta es la única propiedad que el que diseñó esto decidió que le interesaba.
00:03:51
¿Vale? Pues esta clase tendremos que hacerla.
00:03:57
Entonces, sigamos por partes.
00:04:02
Bueno, vale, pues como esta clase en principio es independiente de cualquier otra,
00:04:04
pues una clase vehículo con consumo por kilómetro.
00:04:08
Pues yo la puedo hacer ya directamente porque es independiente de cualquier otra.
00:04:12
Pues venga, me hago mi clase vehículo.
00:04:19
Recordad que el entorno de desarrollo me ofrece siempre el public.
00:04:26
Yo antes lo quitaba porque no me gustaba tener algo ahí que no sabíamos lo que significaba.
00:04:29
Ahora ya sí sabemos lo que significa.
00:04:33
Entonces ahora decido, ¿me molesta que esté el public?
00:04:35
Pues nada, no me molesta que esté el public.
00:04:37
¿Vale? Pues lo dejamos.
00:04:40
Propiedades de vehículo.
00:04:43
Me han dicho lo que consume por kilómetro realizado, ¿no?
00:04:45
El gasto de combustible por kilómetro realizado.
00:04:52
El gasto de combustible.
00:04:55
Aquí la decisión sería, ¿lo hago en DAVE, lo hago en IND?
00:04:57
Venga, vamos a hacerlo en DAVE.
00:05:00
¿Vale?
00:05:08
Por cierto, ¿ha venido alguien a arreglar las mesas, los cables pelados esos de atrás?
00:05:10
Sí, aquí hay otro.
00:05:15
Sí vinieron, ¿no? Es que puse el aviso antes de Navidad y no sabía...
00:05:17
O sea, ¿esa mesa ya no tiene el cable pelado?
00:05:21
Aquí también hay.
00:05:24
¿Y ahí hay otro?
00:05:25
¿Os los coméis?
00:05:27
¿Y acordaros radiadores?
00:05:31
No, eso no.
00:05:33
¿Sigue frío?
00:05:34
Pues habrá que volverlo a decir o igual es que van con todas las frases hasta que lleguen aquí.
00:05:37
Vale, pues entonces.
00:05:47
Nuestra única propiedad es esta.
00:05:49
Nuestro margen de decisión es el tipo de dato.
00:05:53
En principio, bueno, el gasto por kilómetro, pues 3,5 litros, 8,9 litros, mejor un DAVE.
00:05:55
Vale, pues un DAVE.
00:06:03
Vale, ahora ya tenemos más decisiones que tomar que antes.
00:06:05
Vale, esta propiedad, aparte del tipo de dato, que esto ya lo hemos decidido,
00:06:09
ahora ya tenemos otra decisión más que tomar.
00:06:14
¿Qué modificador de acceso le pongo?
00:06:16
¿Le pongo que sea privada?
00:06:19
¿No le pongo nada?
00:06:21
¿O le pongo public?
00:06:23
Que son las tres opciones.
00:06:25
Porque la opción protected, que es la cuarta que mencionamos,
00:06:27
la dejamos aparcada porque esa tiene que ver con si hay clases herederas.
00:06:30
Aquí no hay nada heredero todavía, pero no sabemos.
00:06:35
Bueno, pues ya saben lo que significa cada cosa.
00:06:38
Si yo no pongo nada, significa que a esta propiedad pueden acceder clases del mismo paquete.
00:06:41
Si pongo public, significa que a la propiedad gasto por kilómetro pueden acceder clases
00:06:49
de cualquier otro paquete de la aplicación.
00:06:56
Si pongo esto, significa que a esta propiedad solo se puede acceder desde aquí dentro.
00:07:00
¿Qué decisión solemos tomar?
00:07:07
Ya lo mencionamos el otro día.
00:07:09
Nosotros, efectivamente, las propiedades del vehículo, cuando el vehículo esté instanciado,
00:07:11
necesitaremos acceder a ellas.
00:07:16
Si no podemos acceder al gasto que tiene un vehículo, ¿de qué nos sirve ese vehículo?
00:07:18
Si esa aplicación va a gestionar precisamente los gastos de los vehículos.
00:07:23
Si yo no puedo acceder a ella, ¿de qué me sirve?
00:07:26
Pensaría entonces uno que poner ahí un privado no tiene ningún sentido.
00:07:30
Claro, es que tenemos que acceder a la propiedad, pero la forma de hacerlo no es directamente así.
00:07:35
Si yo tengo por aquí otra clase, imaginaos que estoy aquí en otro paquete.
00:07:42
Estoy aquí en mi main y quiero instanciar un vehículo.
00:07:45
Voy a guardar esto.
00:07:49
Yo quiero instanciar aquí un vehículo.
00:07:53
Estoy fuera del paquete, estoy en otro lado.
00:07:55
Me voy a hacer un vehículo por aquí.
00:07:58
Vale, he puesto el nombre mal porque la clase no se llama vehículo.
00:08:03
Claro que no, ¿la clase cómo se llama?
00:08:07
Esta clase en realidad.
00:08:09
Ejercicio 5. Vehículo.
00:08:12
He puesto el nombre mal, obviamente, por eso el compilador me dice
00:08:14
¿Qué me estás poniendo?
00:08:17
Ah, claro, es que no hay ninguna clase que se llame así.
00:08:19
Hay una clase que se llama así.
00:08:22
Esto sí.
00:08:25
Así sí hay una clase que se llama.
00:08:27
Así sí.
00:08:30
Pero digo, ¡buf! ¡Menudo rollo!
00:08:32
Tener que poner ejercicio de 5 vehículos, ¡qué feo queda todo el rato!
00:08:35
Venga, vamos a poner un import.
00:08:39
Porque somos unos jodidos vagos.
00:08:41
Pues venga, ponemos un import.
00:08:43
¡Hala! Como he puesto un import, ya le puedo quitar esto.
00:08:48
Genero confusión en el caso de que haya otra clase vehículo dentro de este paquete.
00:08:58
Porque si hay otra, entonces vehículo es la del paquete, no esta que estoy importando.
00:09:04
Pero como no es el caso, no hay ninguna otra clase vehículo, no hay problema.
00:09:10
Bueno, pues entonces, efectivamente, si yo esta propiedad la dejo privada,
00:09:14
pues no me sirve para nada.
00:09:19
Porque ahora yo no puedo acceder a ella.
00:09:22
No puedo hacer esto para asignarle valores y gestionar el vehículo.
00:09:24
Se llama así, ¿no? La he puesto bien.
00:09:30
No puedo hacer esto.
00:09:33
Me dice, oye, que no, que no es visible.
00:09:35
Claro que no es visible.
00:09:38
Porque le he puesto este modificador.
00:09:40
Entonces, pues ¿de qué me vale una propiedad privada?
00:09:43
Claro, es que sí hay que dar acceso a esta propiedad.
00:09:47
Pero la forma de hacerlo no es esta.
00:09:50
O sea, no es la forma recomendable, repito.
00:09:53
O la forma que todos hemos acordado en la comunidad Java para utilizar.
00:09:56
Si yo hago esto, claro que lo hago visible, ya está.
00:10:02
¡Hala! Ya se me quitó el rojito.
00:10:05
Le asigno 7, luego la recupero, la multiplico por 12, lo que me dé la gana.
00:10:08
Pero, hombre, esto es muy feo.
00:10:11
La forma de hacerlo es la que dijimos, que era hacerla privada
00:10:15
y ahora habilitar el acceso a esta propiedad mediante ti.
00:10:19
¿Solo estudias tú o es que los demás son muy tímidos?
00:10:25
¿Sois tímidos? Espero que sea eso.
00:10:28
Porque es que la forma asimilada de la comunidad Java
00:10:31
es que las propiedades sean privadas y luego tú habilites unos métodos
00:10:39
para acceder a ellas.
00:10:44
Uno para leer y otro para escribir.
00:10:46
Y así separas los dos accesos, el de lectura y escritura.
00:10:49
Porque si yo pongo aquí el public, estoy de golpe
00:10:54
habilitando acceso para escribir, como aquí, y también para leer.
00:10:59
Con esto estaría leyendo.
00:11:06
Aquí estoy escribiendo la propiedad y aquí estoy leyendo la propiedad
00:11:11
para dársela a un System Output de LN.
00:11:17
Entonces, con el public, yo habilito de golpe acceso tanto a recoger
00:11:19
el valor de la propiedad, como aquí, recogerlo, como a escribirlo.
00:11:24
Pero, sin embargo, si lo hago a través, si yo aquí pongo el privado
00:11:29
y lo hago a través de los get y los set,
00:11:34
que o los escribo a mano, o si tengo un entorno de desarrollo,
00:11:39
pues bueno, venga, que me los genere automáticamente.
00:11:43
Si lo hago a través de los get y los set, ahora ya este método
00:11:46
es el que me habilita la recogida de la propiedad y este método
00:11:51
es el que me habilita la escritura de la propiedad.
00:11:56
Que los dos son públicos, habilito los dos permisos.
00:11:59
Que este lo quiero quitar, he habilitado solo el de escritura.
00:12:03
Que el que quito es este, he habilitado solo el de lectura.
00:12:08
Entonces tengo más margen, tengo mucho más margen de decisión
00:12:13
con los get y los set que con el public de la propiedad.
00:12:19
Por eso es la forma que hemos acordado y que se usa habitualmente
00:12:23
en las entidades, ¿vale?
00:12:27
Entonces ahora yo con estos, aunque la propiedad es privada,
00:12:29
con estos métodos, yo ya el acceso a la propiedad así no puedo.
00:12:31
Pero ¿qué pondría aquí para hacer esto mismo?
00:12:35
Como esto no puedo porque la propiedad es privada,
00:12:39
¿qué sentencia pondríamos para hacer lo mismo?
00:12:42
Para darle 7 a esa propiedad.
00:12:44
Dictadme, v. no es para asignar valor a la propiedad.
00:12:46
Pondríamos esto, ¿vale?
00:12:55
Con esto estaríamos haciendo lo de arriba, pero no a través de la propiedad
00:12:58
porque no puedo, porque es privada.
00:13:02
Lo estaría haciendo a través del set, lo mismo.
00:13:04
Y para hacer esto de aquí, que es la lectura, así no puedo
00:13:06
porque la propiedad es privada.
00:13:10
Lo que haríamos es, ¿qué pondríamos aquí?
00:13:12
Dictadme, ¿eh?
00:13:15
Vale, pero dictadme tal cual, v. get.
00:13:20
Pues lo de arriba y lo de abajo es lo mismo.
00:13:26
Aquí estoy recogiendo la propiedad a través del return del get,
00:13:28
a través del return, y aquí la estoy accediendo directamente.
00:13:33
Pero si la propiedad es privada, esto no puedo.
00:13:41
Entonces lo tengo que hacer a través del get.
00:13:45
Y esta es la forma en la que accederíamos a las propiedades de vehículo,
00:13:47
el get y el set.
00:13:51
Esta es la manera, no esta directamente.
00:13:53
Y para hacerlo así, de hecho, es por lo que se prohíbe el acceso desde aquí
00:13:56
y se hacen estos métodos.
00:14:01
Que esto es obligatorio hacerlo así, no.
00:14:04
No es obligatorio y no puede programar como le dé la gana.
00:14:06
Pero insisto, si tú no te adaptas a los estilos de programación,
00:14:09
no vas a poder interaccionar con los demás.
00:14:13
Las librerías que te descargues para que usen tus entidades
00:14:15
no las van a entender porque ellas van a esperar que haya un get
00:14:18
para recoger la propiedad y cuando llamen a ese get,
00:14:21
tu aplicación va a decir, no existe método get.
00:14:24
Claro, puedes hacer las propiedades, tú puedes programar como quieras
00:14:27
dentro de las posibilidades que te da Java.
00:14:30
Pero si tu aplicación está aislada del mundo, fenomenal.
00:14:32
Pero si no está aislada del mundo, vas a tener problemas.
00:14:35
Bueno, pues aparte de, vale, pues esto venía en cuanto a,
00:14:39
ya habíamos decidido el tipo de dato de la propiedad.
00:14:42
Ahora tenemos algo más que decidir, que es el modificador de acceso.
00:14:45
Pues ya decidimos este porque es una propiedad de una entidad.
00:14:48
Y las propiedades de las entidades se suelen programar así.
00:14:52
Y vale, pues ya está.
00:14:57
¿Y qué más cosas se suelen poner en una clase entidad?
00:14:58
Una clase que representa la realidad de mi aplicación.
00:15:01
Aparte de las propiedades con sus getter y setter.
00:15:03
¿Qué me falta?
00:15:05
Los constructores, ¿no?
00:15:06
Los constructores.
00:15:08
Vale, pues entonces lo normal es que haya siempre un constructor
00:15:09
con parámetros, este de aquí, que el public, ya lo puedo dejar,
00:15:13
ya no me molesta porque sé lo que significa,
00:15:21
y es que permito usar el método constructor desde fuera de la clase.
00:15:23
El super sí que lo quito porque eso sí que seguimos sin saber lo que significa.
00:15:29
Vale, este es mi constructor sin parámetros, perdón, con parámetros.
00:15:33
Como solo tengo una propiedad, pues este constructor solo tiene una.
00:15:38
Claro, ¿qué ha pasado cuando yo he hecho este constructor?
00:15:41
¡Qué paz!
00:15:44
Me apareció el rojo ahí.
00:15:46
¿Os acordáis por qué me ha aparecido este rojo ahí?
00:15:48
Cuando este constructor no estaba, cuando este constructor no estaba,
00:15:51
y yo tenía mi clase sin ningún constructor, sin ninguno,
00:15:56
este main encantó de la vida, instanciando el vehículo.
00:16:00
Cuando este constructor yo lo hago, lo incluyo,
00:16:05
el main ya, ala, se fastidió, ya no me deja instanciar así.
00:16:12
¿Por qué?
00:16:19
Claro, porque cuando no hay constructor, cuando no hay ninguno escrito,
00:16:23
recordad que entonces Java se inventa uno sin parámetros, vacío,
00:16:28
y asume que está ahí, se lo inventa, aunque yo no lo vea.
00:16:34
Pero desde el momento en que hago uno, ese que se inventó desaparece,
00:16:37
ese que se inventó desaparece, porque ya está el que yo he hecho,
00:16:40
y el que yo he hecho necesita un parámetro, y aquí lo estoy llamando mal,
00:16:43
con lo cual no me deja.
00:16:47
Lo habitual es poner en las entidades los dos constructores,
00:16:49
el con parámetros y el sin parámetros también,
00:16:53
para dar la posibilidad de instanciar con parámetros o sin ellos,
00:16:56
porque alguien le puede dar la gana instanciar un vehículo
00:16:59
y luego pasarle las propiedades más tarde, ponerlo set.
00:17:03
Puede ocurrir, ¿no?
00:17:08
Entonces, lo relativamente habitual en las clases entidad
00:17:10
es que tengan este constructor con parámetros
00:17:15
y también tengan uno vacío, que no haga nada,
00:17:18
y tener uno vacío que no hace nada,
00:17:22
lo que permite es ahora ya que la gente pueda hacer esto,
00:17:25
puede instanciar un vehículo sin más, porque puede ser interesante,
00:17:29
yo puedo querer instanciar vehículos,
00:17:34
pero todavía no saber el gasto, ponérselo más tarde,
00:17:36
a lo mejor todavía no lo sé.
00:17:39
Entonces yo habilito las dos maneras de crear vehículos.
00:17:41
Habilito una manera en la cual ya sé lo que vale su propiedad
00:17:45
y lo instancio con ese valor, porque ya lo sé.
00:17:49
Pero habilito también una segunda manera,
00:17:52
por si alguien quiere instanciar un vehículo
00:17:55
y todavía no sabe cuál es el valor de esa propiedad,
00:17:57
pues lo habilito y ya lo fijo más tarde con el set.
00:17:59
Por eso lo habitual en una clase entidad por defecto
00:18:03
es que figuren los dos,
00:18:06
y así das la opción de cada uno que instancie como le dé la gana.
00:18:08
Eso es lo que aparece siempre por defecto
00:18:12
en cualquier clase entidad que veáis por ahí.
00:18:14
Las propiedades privadas, los getter y los setter,
00:18:16
un par para cada uno de ellos y los constructores.
00:18:20
Pero si es lo que explicamos el otro día.
00:18:27
¿Pero lo ha repasado del martes aquí?
00:18:30
Claro, es que no vale entenderlo.
00:18:37
Entenderlo en clase está fenomenal.
00:18:40
Ya, ya lo sé, no está grabado, pero bueno,
00:18:43
porque falló la grabación.
00:18:46
Pero hombre, vosotros ni la responsabilidad de tomar notas.
00:18:48
Entonces entenderlo está muy bien, en lo deseable.
00:18:52
Pero el segundo paso a entenderlo es,
00:18:58
ahora lo miro en casa para consolidarlo.
00:19:00
Porque lo que has entendido, si no lo miras,
00:19:03
lo normal es que se te olvide.
00:19:05
Entonces claro, yo no puedo estar explicando.
00:19:08
Ahora, de hecho todo lo que he hecho en este rato que llevamos de clase,
00:19:10
que llevamos media hora, ha sido todo repaso.
00:19:14
No ha avanzado nada nuevo, ha sido todo repaso.
00:19:18
Pero claro, todavía más repaso,
00:19:21
porque no lo repaséis en casa.
00:19:26
Bueno, pues lo de los Getty lo sé,
00:19:31
lo van madurando, porque hombre, es fácil de decir lo entendiste.
00:19:33
El otro día es muy fácil de entender según lo vas usando,
00:19:36
no vas a tener problema en eso.
00:19:39
Y aparte es que lo acabo de explicar,
00:19:41
acabo de explicarlo tal cual, otra vez.
00:19:43
Vale, pues entonces en las clases entidad lo habitual es esto.
00:19:46
Ya la hemos hecho, nuestra clase vehículo.
00:19:49
Su propiedad, estos dos métodos para permitir
00:19:51
recuperar el valor de la propiedad,
00:19:55
o fijarle un valor, el que a mí me dé la gana,
00:19:57
y los dos constructores,
00:20:00
para permitir instanciar de la manera que yo quiera.
00:20:02
¿La clase vehículo está?
00:20:05
¿La clase vehículo está algo más?
00:20:07
Pues no.
00:20:09
Vale, mi aplicación tiene otra.
00:20:10
¿Cómo está?
00:20:12
Sí.
00:20:13
Como buenas prácticas de programación,
00:20:14
¿los de Getty 7 tienen un orden con respecto a los constructores
00:20:17
o es diferente?
00:20:22
Yo creo que no.
00:20:24
A ver, yo por costumbre pongo propiedades,
00:20:25
constructor y Getty 7,
00:20:27
pero eso sí que yo creo que lo puedes ver de muchas maneras distintas.
00:20:29
Lo he visto de esa manera.
00:20:32
Me imagino que lo habrás visto constructor y Getty 7 después.
00:20:34
Claro, o sea lo que sí que suele ser relativamente habitual,
00:20:37
pero relativamente,
00:20:41
es que propiedades primero y métodos después.
00:20:42
Pero incluso digo relativamente,
00:20:45
porque en las aplicaciones que tienen interfaz gráfica
00:20:47
es relativamente habitual que uno se encuentre
00:20:49
métodos antes y los elementos gráficos después.
00:20:51
Pero bueno, en general eso sí que suele ser,
00:20:54
propiedades y métodos.
00:20:56
Dentro de los métodos,
00:20:58
constructores antes y Getty 7 después,
00:20:59
yo tengo la costumbre de constructores antes
00:21:01
y Getty 7 después.
00:21:03
Ahora lo he hecho después porque es que
00:21:05
como íbamos primero por la propiedad,
00:21:07
pero yo tengo esa costumbre
00:21:10
y seguramente tengo esa costumbre
00:21:11
porque es que es lo que he visto siempre
00:21:13
y lo que he hecho siempre.
00:21:14
De hecho los vamos a colocar delante
00:21:16
porque yo me siento más cómoda
00:21:18
si los veo primero los constructores,
00:21:19
porque es lo que estoy acostumbrada.
00:21:21
¿Vale?
00:21:25
Vale, pues entonces.
00:21:29
Ahora, esta clase está.
00:21:32
Bueno, como esta aplicación
00:21:34
trabaja con el consumo en una distancia,
00:21:35
pues la aplicación ha necesitado
00:21:40
definir una entidad
00:21:42
en la cual se puedan medir distancias.
00:21:44
Entonces, como la aplicación
00:21:47
después de analizarla,
00:21:50
uno ha visto que los recorridos del coche
00:21:52
son trayectorias que pueden ir así,
00:21:55
de cualquier manera.
00:21:57
¿Vale?
00:22:02
O sea, el que le planteó esta aplicación
00:22:03
a alguien le dijo,
00:22:04
oye, los coches pueden hacer trayectorias
00:22:05
de este tipo.
00:22:08
Así, todas como segmentos en línea recta,
00:22:13
así, patapam, patapam.
00:22:15
¿Vale?
00:22:18
Entonces, a ver, esto tiene sentido
00:22:19
porque una trayectoria cualquiera
00:22:21
que uno haga incluso en círculo,
00:22:22
así por papá,
00:22:23
pues siempre tiene una aproximación
00:22:25
bastante fiable, ¿verdad?
00:22:27
Siempre la tiene mediante segmentos rectos pequeñitos.
00:22:28
¿Verdad?
00:22:31
Esto es la segmentación de las trayectorias.
00:22:33
Me gustan tanto las matemáticas.
00:22:39
Entonces, tiene sentido
00:22:42
cuando en una aplicación
00:22:43
tienes que emular trayectorias,
00:22:45
pues que esas trayectorias
00:22:49
sean sucesiones de segmentos rectos
00:22:50
porque las sucesiones de segmentos rectos
00:22:54
te permiten aproximar
00:22:56
cualquier trayectoria circular
00:22:59
con bastante fiabilidad.
00:23:02
Claro, cuanto más pequeñitos
00:23:06
sean los segmentos más, obviamente.
00:23:07
Si los segmentos son muy pequeñitos,
00:23:09
la aproximarás muy bien.
00:23:10
Si los segmentos rectos son muy grandes,
00:23:12
la aproximarás fatal.
00:23:14
Pero bueno, la forma de aproximar
00:23:15
cualquier trayectoria
00:23:18
siempre es mediante una sucesión
00:23:20
de segmentos rectos.
00:23:21
Todo esto es lo que pensó el que
00:23:23
diseñó esta aplicación, mini aplicación,
00:23:25
que a nosotros ya nos da diseñada, claro.
00:23:29
Pero bueno, el que la pensó dijo,
00:23:32
vale, pues entonces yo la tengo que recoger
00:23:33
de alguna manera en mi aplicación
00:23:35
el concepto trayectoria
00:23:37
porque tengo dos conceptos.
00:23:39
El concepto vehículo, ya está recogido,
00:23:41
y el concepto trayectoria.
00:23:43
Jolín, ¿cómo recojo eso?
00:23:45
Vale, pues si uno piensa que una trayectoria
00:23:47
es una sucesión de segmentos rectos,
00:23:49
una idea posible, de las muchas posibles,
00:23:51
es, ah bueno, pues una trayectoria
00:23:53
se puede definir por la sucesión
00:23:55
de los puntos, ya está, puntos en un plano.
00:23:57
Es la forma más sencilla
00:24:00
de definir una trayectoria,
00:24:02
que es un conjunto de puntos en el plano
00:24:04
porque así necesito solo una clase,
00:24:07
la clase punto,
00:24:09
y el conjunto de puntos,
00:24:11
que eso ya es una colección de datos,
00:24:13
sea una raíz, sea la que sea,
00:24:14
es la trayectoria.
00:24:16
Es una idea muy natural
00:24:18
que se le puede ocurrir a alguien
00:24:20
para recoger en una aplicación
00:24:21
esta realidad, la realidad trayectoria.
00:24:24
Pues un conjunto de puntitos.
00:24:28
Dado que los segmentos rectos
00:24:32
pueden simular cualquier trayectoria,
00:24:34
bueno, esto forma de nuevo
00:24:36
parte de la fase de análisis y diseño.
00:24:37
A nosotros ya nos la han hecha
00:24:40
y nos dicen,
00:24:42
la clase que tú necesitas
00:24:43
es la clase punto
00:24:45
y cuando tengas muchos puntos
00:24:47
tendrás una trayectoria.
00:24:49
Perfecto, estupendo.
00:24:51
Vale, pues ahora llegaríamos
00:24:52
a la siguiente parte.
00:24:53
Muy bien, y la clase punto
00:24:54
¿por qué se caracteriza?
00:24:55
Hombre, pues los puntos en un plano
00:24:56
sabemos cómo se caracterizan,
00:24:59
los puntos en un plano
00:25:01
¿cómo se caracterizan?
00:25:02
Pues sus dos coordenadas,
00:25:05
la x y la y, ¿no?
00:25:06
Con dos coordenadas,
00:25:07
la coordenada x y la coordenada y
00:25:08
ya tenemos el punto en el plano.
00:25:10
Un plano siempre tiene un eje de referencia,
00:25:12
un eje de referencia
00:25:14
que es su eje de abscisas
00:25:15
o su eje de ordenadas.
00:25:16
Pues un par de coordenadas
00:25:18
define completamente
00:25:21
una posición en el plano.
00:25:22
Igual que un trío de coordenadas
00:25:24
define completamente
00:25:26
una posición en el espacio.
00:25:28
Pero aquí estamos hablando
00:25:29
de trayectorias en el plano,
00:25:30
en el suelo,
00:25:32
que es por donde va el coche.
00:25:33
Si habláramos de trayectorias en el espacio
00:25:34
porque es esto mismo,
00:25:36
pero con aviones,
00:25:37
pues lo único que cambiaría
00:25:39
es que el punto se caracteriza
00:25:40
por tres coordenadas
00:25:42
porque en el espacio
00:25:43
se caracterizan las posiciones
00:25:44
por tres coordenadas.
00:25:46
Pero aquí hablamos de trayectorias
00:25:47
de un coche que va en plano.
00:25:49
Luego, con puntos de dos coordenadas,
00:25:50
suficiente.
00:25:52
Bueno, pues todo eso
00:25:53
es a lo que llega la conclusión,
00:25:54
el que está analizando esta aplicación
00:25:56
y ya dice, pues ya está,
00:25:57
necesito una clase punto
00:25:59
y esa clase punto tiene dos propiedades.
00:26:01
X e Y.
00:26:04
Y se acabó.
00:26:05
Y ahora ya,
00:26:06
cuando ya tenemos las únicas dos entidades
00:26:07
que necesitamos,
00:26:10
vehículo y punto del plano,
00:26:11
ya uno aborda los requisitos de la aplicación.
00:26:13
Pues dado un conjunto de puntos,
00:26:15
lo que el coche ha consumido en la trayectoria.
00:26:17
Pues cuál es la mayor trayectoria posible
00:26:19
que puede hacer un coche
00:26:21
que no quiere consumir
00:26:22
más de tres kilómetros.
00:26:23
Por los requisitos que toquen.
00:26:24
Habrá muchos requisitos.
00:26:26
Y todos ellos se construirán,
00:26:27
se solucionarán,
00:26:29
pues ahora ya creando puntos,
00:26:31
creando coches,
00:26:33
haciendo cuentas para allá,
00:26:34
para acá, etc.
00:26:35
Pero con punto y vehículo
00:26:36
tenemos todas las entidades que necesitamos.
00:26:38
Pues ahora vamos a hacer entonces
00:26:41
la clase punto.
00:26:43
Vale.
00:26:47
Ejercicio 5.
00:26:49
Sí, ejercicio 5 estoy.
00:26:53
Clase punto.
00:26:55
Clase punto,
00:26:57
le damos el nombre lo más explicativo posible,
00:26:58
como siempre.
00:27:00
Propiedades.
00:27:01
Pues ya que estamos,
00:27:03
vamos a hacerlo ya
00:27:04
con la forma general,
00:27:07
la forma habitual,
00:27:09
con propiedades privadas.
00:27:11
Coordenada X,
00:27:13
coordenada Y,
00:27:14
a ver, para no escribir tanto
00:27:15
vamos a llamarlas X, Y.
00:27:16
Y ya está.
00:27:17
X, Y.
00:27:19
Ahora vamos a,
00:27:21
bueno, si le pongo el tipo de dato mejor.
00:27:22
Las coordenadas,
00:27:25
pues podemos definirlas
00:27:26
decimales, enteras,
00:27:27
para no complicarnos ahora la vida,
00:27:28
las coordenadas X, Y son enteras.
00:27:30
Pues el punto 3, 7,
00:27:32
el punto 2, 9,
00:27:33
el punto menos 1, 4,
00:27:34
coordenadas enteras.
00:27:36
Y ahora ya hago los constructores,
00:27:39
el sin parámetros
00:27:42
y el con parámetros
00:27:44
y los getter y setter.
00:27:45
Eso lo hago siempre ya por defecto.
00:27:46
Pues un constructor que use
00:27:53
las coordenadas X, Y
00:27:55
para crear el punto.
00:27:57
Otro constructor sin parámetros.
00:28:00
Este.
00:28:07
Le quito el super
00:28:08
porque no sé lo que significa.
00:28:09
Y ahora ya los getter y setter
00:28:11
para las dos propiedades.
00:28:13
Vale.
00:28:24
Vale, como veis los getter y setter
00:28:28
siempre siguen el mismo convenio.
00:28:31
Es get o set
00:28:33
y luego el nombre de la propiedad
00:28:35
empezando por mayúscula.
00:28:37
En este caso,
00:28:39
como la propiedad
00:28:40
tiene solo un carácter,
00:28:41
pues es directamente
00:28:42
ese único carácter en mayúscula.
00:28:44
Ese es el convenio
00:28:47
para nombrar a los getter y los setter.
00:28:48
Y hay que seguirlo
00:28:50
porque si no,
00:28:51
otras clases que quieran
00:28:52
trabajar con nosotros
00:28:53
no nos van a acceder,
00:28:54
no van a poder.
00:28:56
Hay que seguir.
00:28:58
Vale, ya tenemos vehículo y punto.
00:28:59
Y ahora ya se trata
00:29:01
de hacer la aplicación
00:29:02
que satisfaga los requisitos
00:29:03
que me han pedido.
00:29:04
Pues de cálculo,
00:29:05
de trayectorias,
00:29:06
de consumos,
00:29:07
de lo que sea.
00:29:08
Lo que me pida el cliente.
00:29:09
Pues yo quiero una aplicación
00:29:10
que cuando tú le metas
00:29:11
una trayectoria y un vehículo
00:29:14
me digas cuánto voy a gastar,
00:29:16
por ejemplo.
00:29:17
¿El sin parámetros?
00:29:21
Pues igual,
00:29:23
pero en source,
00:29:24
generar constructor,
00:29:27
using fields también,
00:29:29
pero luego los he deseleccionado.
00:29:30
Para que no use ninguno.
00:29:34
Y entonces te lo creas sin nada.
00:29:35
Y sí, puedes aquí quitar el...
00:29:41
¿Dónde?
00:29:45
Esto.
00:29:47
Que no llame al constructor
00:29:48
de object super
00:29:49
y ya está.
00:29:50
Si quieres, vale.
00:29:51
No lo tienes que...
00:29:53
De todas formas,
00:29:56
el super no molesta nada
00:29:57
porque está llamando ahora
00:29:59
a una clase que no hace nada.
00:30:01
Ahora.
00:30:03
Entonces no es buena práctica
00:30:04
quitarlo porque en otras situaciones.
00:30:06
Entonces no es bueno
00:30:08
que marquéis eso por defecto.
00:30:09
Lo que pasa es que yo
00:30:11
lo estoy quitando
00:30:12
pues porque no aparezcan
00:30:14
nuestros programas
00:30:15
a lo que no sabemos lo que es.
00:30:16
Pero hombre, si está mejor.
00:30:17
En este caso,
00:30:19
va a dar lo mismo
00:30:20
efectos prácticos.
00:30:21
Que esté o no esté.
00:30:22
Pero en general,
00:30:23
en otras situaciones,
00:30:24
si está va a ser siempre mejor.
00:30:25
Pero bueno, yo lo quito
00:30:26
solo para que no aparezca
00:30:27
algo que no hemos visto.
00:30:28
Hay un par
00:30:36
por cada propiedad.
00:30:37
GetX, GetX, GetY, GetY.
00:30:38
Bueno, pues ya tenemos
00:30:46
las dos entidades.
00:30:47
Ahora ya,
00:30:49
¿qué me están pidiendo
00:30:50
a mí hacer?
00:30:51
¿Qué aplicación
00:30:52
se va a ejecutar?
00:30:53
Es decir,
00:30:54
¿qué main
00:30:55
tengo que hacer?
00:30:56
Ahora ya sí.
00:30:57
Con esto he descrito
00:30:58
una realidad.
00:30:59
Y esa realidad
00:31:00
está descrita.
00:31:01
Es como decir,
00:31:02
vale,
00:31:03
yo tengo alumnos,
00:31:04
tengo asignaturas,
00:31:05
tengo profesores
00:31:07
y eso es lo que tengo.
00:31:08
Y así nos quedamos
00:31:09
parados y cruzados
00:31:10
del tanto.
00:31:11
Eso es lo que hemos hecho.
00:31:12
Y ahí viene la siguiente fase
00:31:13
que es,
00:31:14
¿ahora qué tengo
00:31:15
que hacerle con esto?
00:31:16
Tienes alumnos
00:31:17
con profesores.
00:31:18
Tienes que dar
00:31:19
de baja alumnos.
00:31:20
Ese ya es el main.
00:31:21
Es decir,
00:31:22
¿y ahora qué tengo
00:31:23
que hacer con esto?
00:31:24
Ese ya es el main.
00:31:25
Bueno, pues lo que me pidan,
00:31:26
lo que el cliente me diga,
00:31:27
oye, yo es que necesito
00:31:28
que me hagas esto.
00:31:29
Pues vamos a ver
00:31:30
qué es lo que necesitas hacer.
00:31:31
Bueno,
00:31:32
pues...
00:31:33
Ah,
00:31:36
seguimos con la clase punto
00:31:37
porque aquí ya nos han pedido
00:31:38
que le metamos métodos.
00:31:39
Vale.
00:31:41
Declaramos la clase punto,
00:31:43
hemos hecho hasta aquí.
00:31:44
Vale.
00:31:45
A ver,
00:31:46
oye tú,
00:31:47
el que diseñó esto,
00:31:48
que lo diseñó
00:31:49
desde la aplicación,
00:31:50
pues decidió
00:31:51
que le va a venir muy bien
00:31:52
que en la clase punto
00:31:53
haya un método,
00:31:54
un método,
00:31:55
porque ahora mismo
00:31:56
solamente están
00:31:57
las propiedades
00:31:58
constructores y etcétera,
00:31:59
etcétera.
00:32:00
Vale.
00:32:01
No hemos puesto
00:32:02
métodos específicos
00:32:03
para la clase.
00:32:04
Dice,
00:32:05
pues a ver,
00:32:06
va a venir muy bien
00:32:07
a las necesidades
00:32:08
de mi cliente,
00:32:09
le va a venir muy bien
00:32:10
que yo pueda calcular
00:32:11
la distancia
00:32:12
entre dos puntos.
00:32:13
Ahora viene estupendo.
00:32:14
Hombre,
00:32:15
la he de prever
00:32:16
que le vaya a venir estupendo,
00:32:17
porque
00:32:18
la longitud
00:32:19
en kilómetros
00:32:20
de una trayectoria
00:32:21
va a ser una suma
00:32:23
de distancias.
00:32:24
La suma de esta distancia
00:32:25
entre estos dos,
00:32:26
más la suma
00:32:27
de esta distancia
00:32:28
entre estos dos,
00:32:29
más la suma
00:32:30
de esta distancia.
00:32:31
Entonces,
00:32:32
el que está analizando
00:32:33
la aplicación
00:32:34
ha dicho,
00:32:35
a ver,
00:32:36
yo voy a necesitar
00:32:37
poder calcular
00:32:38
dado un punto
00:32:39
la distancia
00:32:40
que tiene respecto a otro.
00:32:41
Lo voy a necesitar,
00:32:42
porque si no,
00:32:43
me va a venir muy bien
00:32:44
la trayectoria.
00:32:45
Tengo que calcular
00:32:46
una suma de distancias,
00:32:47
esta, más esta,
00:32:48
más esta.
00:32:49
Entonces,
00:32:50
el que está analizando
00:32:51
la aplicación
00:32:52
dice,
00:32:53
ah,
00:32:54
me viene muy bien
00:32:55
a mí en el método punto,
00:32:56
el método punto
00:32:57
que es el implicado
00:32:58
en calcular la distancia
00:32:59
de un punto con otro
00:33:00
de la clase,
00:33:01
perdón,
00:33:02
en la clase punto,
00:33:03
me viene muy bien
00:33:04
un método
00:33:05
al que yo le pase
00:33:06
otro punto
00:33:07
y me dé la distancia.
00:33:08
Me va a venir estupendo.
00:33:09
Cuando tenga yo
00:33:10
luego que calcular trayectorias,
00:33:11
hago sumas
00:33:12
te dice,
00:33:13
oye,
00:33:14
por favor,
00:33:15
programa en la clase punto
00:33:16
un método
00:33:17
al que le pasas
00:33:18
como parámetro
00:33:19
otro objeto punto
00:33:20
y te devuelve la distancia
00:33:21
entre ambos,
00:33:22
porque nos va a venir muy bien.
00:33:23
Pues venga,
00:33:24
vamos a meter
00:33:25
ese método
00:33:26
en la clase punto.
00:33:27
Vale,
00:33:28
pues nos vamos
00:33:29
a la clase punto
00:33:30
y ahora vamos a meter
00:33:31
un método.
00:33:32
Este método
00:33:33
obtiene la distancia
00:33:34
entre dos puntos,
00:33:35
¿no?
00:33:36
Pues venga,
00:33:37
vamos a llamarle,
00:33:38
yo qué sé,
00:33:39
calcular distancia
00:33:41
puntos,
00:33:42
empezando con minúscula
00:33:43
los nombres
00:33:44
de los métodos
00:33:45
preferiblemente siempre,
00:33:46
recordad,
00:33:47
calcular distancia.
00:33:48
¿Cómo es de este punto
00:33:49
con otro?
00:33:50
Pues venga,
00:33:51
no es que sea muy bonito
00:33:52
el nombre,
00:33:53
pero vamos a llamarlo
00:33:54
de este punto
00:33:55
con otro,
00:33:56
¿no?
00:33:57
Pues venga,
00:33:58
vamos a llamarlo
00:33:59
de este punto
00:34:00
con otro,
00:34:01
¿no?
00:34:02
Pues venga,
00:34:03
vamos a llamarlo
00:34:04
de este punto
00:34:05
con otro,
00:34:06
¿no?
00:34:07
Pues venga,
00:34:08
no es que sea muy bonito
00:34:09
el nombre,
00:34:10
pero bueno,
00:34:11
calcular distancia
00:34:12
con punto.
00:34:13
Entonces,
00:34:14
este método
00:34:15
está en la clase punto,
00:34:16
luego este método
00:34:17
lo va a llamar un punto,
00:34:18
lo llama un punto,
00:34:19
eso lo tenemos claro.
00:34:20
Vale,
00:34:21
pues entonces,
00:34:22
como parámetro
00:34:23
se pasa otro
00:34:24
desde fuera,
00:34:25
se pasa otro.
00:34:26
Bueno,
00:34:27
pues el parámetro
00:34:28
que pasamos,
00:34:29
¿qué es?
00:34:30
Una variable,
00:34:31
pero que es de tipo punto,
00:34:32
o sea,
00:34:33
es una variable objeto,
00:34:34
una variable objeto
00:34:35
que es de tipo punto,
00:34:36
igual que le podría pasar yo
00:34:37
un int si lo necesitara,
00:34:38
un string
00:34:39
si lo necesitara,
00:34:40
pues es que no necesito esto,
00:34:41
lo que yo necesito
00:34:42
no es esto,
00:34:43
lo que yo necesito
00:34:44
es una variable
00:34:45
objeto
00:34:46
de tipo punto,
00:34:47
esto es lo que yo necesito,
00:34:48
¿vale?
00:34:49
Pues se lo paso,
00:34:50
ya está,
00:34:51
es una variable más,
00:34:52
me da igual que la variable
00:34:53
sea tipo punto,
00:34:54
tipo string,
00:34:55
tipo int,
00:34:56
es una variable,
00:34:57
es una variable tipo objeto,
00:34:58
pero es una variable.
00:34:59
Vale,
00:35:00
pues esta es la variable
00:35:01
de tipo punto,
00:35:02
¿vale?
00:35:03
Entonces,
00:35:04
vamos a hacer
00:35:05
Vale,
00:35:07
pues esta es la variable
00:35:08
que yo le tengo que pasar
00:35:09
desde fuera
00:35:10
para que el método
00:35:11
calcule la distancia
00:35:12
entre este punto
00:35:13
y el que llama al método.
00:35:14
Aquí habrá que calcular
00:35:15
esa distancia.
00:35:16
Antes de seguir
00:35:18
nos planteamos,
00:35:19
vale,
00:35:20
este método queda
00:35:21
doble el cobrador de retorno,
00:35:22
una distancia entre puntos.
00:35:23
Esa distancia,
00:35:24
una distancia,
00:35:25
pues la forma
00:35:26
de recogerla
00:35:27
más genérica
00:35:28
es un número real,
00:35:29
¿no?
00:35:30
Un número decimal.
00:35:31
Pues venga,
00:35:32
que me devuelva un valor.
00:35:33
¡Hala!
00:35:34
Y ahora ya,
00:35:37
llegados aquí
00:35:38
dentro de,
00:35:39
aquí dentro de este método,
00:35:40
ahora ya tenemos aquí
00:35:42
dos objetos puntos
00:35:43
involucrados,
00:35:44
involucrados.
00:35:45
Lo voy a poner aquí.
00:35:50
El método este,
00:35:56
¿qué tiene que hacer?
00:35:57
Tiene que calcular
00:35:58
la distancia.
00:35:59
Entre el objeto punto
00:36:04
que llama al método,
00:36:07
el objeto punto
00:36:18
que llama al método,
00:36:20
y el objeto punto
00:36:25
pasado como parámetro.
00:36:29
El objeto punto
00:36:35
pasado como parámetro,
00:36:40
ya sabemos cuál es.
00:36:41
Es este.
00:36:42
Este es el objeto punto
00:36:43
pasado como parámetro.
00:36:44
Lo pongo aquí dentro.
00:36:45
Este es la referencia.
00:36:46
Esta es la referencia
00:36:48
del objeto punto
00:36:49
pasado como parámetro.
00:36:50
Pero el objeto punto
00:36:52
que llama al método,
00:36:53
¿ese quién es?
00:36:54
¿Quién es ese?
00:36:57
¿Eh?
00:36:58
El objeto entero,
00:37:01
¿quién es?
00:37:02
No, no, no.
00:37:05
El objeto punto
00:37:06
que llama al método.
00:37:07
X, Y son sus propiedades,
00:37:08
pero el objeto entero en sí,
00:37:10
¿cómo puedo acceder yo
00:37:11
al objeto en el que estoy?
00:37:12
Sí, pero aquí estoy en la...
00:37:19
aquí todavía no hay
00:37:21
ningún objeto creado.
00:37:22
Aquí estoy declarando
00:37:23
un método en general
00:37:24
y quiero decir,
00:37:25
el objeto que llame
00:37:26
a este método,
00:37:27
cuando teníamos que
00:37:28
referirnos a S en general,
00:37:29
el objeto que llama
00:37:30
a este método,
00:37:31
¿qué término usábamos?
00:37:32
Dis.
00:37:33
¿Vale?
00:37:35
Ahí la importancia del dis.
00:37:36
Yo tengo que poder
00:37:37
desde un método
00:37:38
referirme el objeto
00:37:39
que llame a este método,
00:37:40
que no sé quién será,
00:37:41
cuando yo tenga un main,
00:37:42
ya veré cuál es,
00:37:43
si es P1, si es P2,
00:37:44
si es P7,
00:37:45
ya veré.
00:37:46
Ahora mismo
00:37:47
lo único que tengo
00:37:48
es un método que me dice,
00:37:49
cuando un objeto
00:37:50
llame a este método,
00:37:51
hará eso.
00:37:52
¿Y cómo puedo yo
00:37:53
referirme desde aquí
00:37:54
al objeto que llame
00:37:55
a este método?
00:37:56
Pues efectivamente,
00:37:57
dis,
00:37:58
para esto servía.
00:37:59
Para referirme
00:38:00
al objeto
00:38:01
que llama
00:38:02
a este método,
00:38:03
y el objeto
00:38:04
que llama
00:38:05
a este método,
00:38:06
tendrá sus propiedades
00:38:07
dis.x
00:38:08
y dis.y.
00:38:09
Y el objeto
00:38:10
punto pasado
00:38:11
como parámetro
00:38:12
tiene punto,
00:38:13
punto,
00:38:14
punto x
00:38:15
y punto y.
00:38:16
Son dos objetos distintos.
00:38:17
Tengo
00:38:18
el objeto
00:38:19
que llama al método,
00:38:20
que es este,
00:38:21
y el objeto
00:38:22
pasado como parámetro,
00:38:23
que es este otro,
00:38:24
y ambos son
00:38:25
objetos de tipo punto.
00:38:26
Y ahora
00:38:27
lo que tengo que hacer
00:38:28
es calcular
00:38:29
la distancia
00:38:30
entre ellos.
00:38:31
¿Vale?
00:38:32
Claro,
00:38:33
ahora entonces
00:38:34
tendría que irme
00:38:35
a las matemáticas
00:38:36
y decir,
00:38:37
si yo tengo
00:38:38
un punto de coordenadas
00:38:39
x e y,
00:38:40
otro punto de coordenadas
00:38:41
x e y,
00:38:42
¿cómo calculo
00:38:43
la distancia?
00:38:44
Bueno,
00:38:45
pues eso
00:38:46
en topología
00:38:47
ya está resuelto.
00:38:48
Y es
00:38:49
esta formulita.
00:38:50
Si estas son
00:38:51
las coordenadas
00:38:52
del primer punto
00:38:53
y estas son
00:38:54
las del segundo punto,
00:38:55
la distancia
00:38:56
es
00:38:57
la raíz
00:38:58
de esto.
00:38:59
¿Vale?
00:39:00
Pues entonces
00:39:01
aquí
00:39:02
¿cuáles son
00:39:03
las coordenadas
00:39:04
involucradas?
00:39:05
Las coordenadas
00:39:06
del primer punto,
00:39:07
es decir,
00:39:08
del punto
00:39:09
que llama
00:39:10
al método,
00:39:11
¿cuáles serán?
00:39:12
Serán
00:39:13
dis.x
00:39:14
y
00:39:15
dis.y.
00:39:16
Esas son
00:39:17
las coordenadas
00:39:18
del punto
00:39:19
que llama
00:39:20
al método.
00:39:21
¿Y cuáles son
00:39:22
las coordenadas
00:39:23
del parámetro?
00:39:24
Coordinadas
00:39:25
del parámetro
00:39:26
son
00:39:27
las coordenadas
00:39:28
del parámetro
00:39:29
punto.
00:39:30
El parámetro
00:39:31
pasado.
00:39:32
Las coordenadas
00:39:33
de este parámetro
00:39:34
pasado,
00:39:35
punto,
00:39:36
son
00:39:37
punto.x
00:39:38
y
00:39:39
punto.y.
00:39:40
Serían
00:39:41
esas.
00:39:42
Para que lo
00:39:43
entendamos,
00:39:44
¿no?
00:39:45
Y ahora
00:39:46
tengo que meter
00:39:47
eso en la
00:39:48
fórmula.
00:39:49
Hasta
00:39:50
aquí
00:39:51
está claro.
00:39:52
Pues tengo
00:39:53
dos puntos
00:39:54
involucrados.
00:39:55
El punto dis,
00:39:56
que es el que
00:39:57
yo paso como
00:39:58
parámetro.
00:39:59
Pero luego
00:40:00
en el main
00:40:01
ya veremos
00:40:02
cuál es.
00:40:03
Ahora estamos
00:40:04
en el main.
00:40:05
Y el punto
00:40:06
que yo paso
00:40:07
como parámetro,
00:40:08
ese.
00:40:09
Vale,
00:40:10
pues si
00:40:11
yo hago
00:40:12
la fórmula
00:40:13
de esto
00:40:14
de aquí,
00:40:15
voy a poner
00:40:16
la
00:40:17
formulita
00:40:18
que sería
00:40:19
dis.x
00:40:20
menos
00:40:21
punto.x
00:40:22
y esto
00:40:23
al cuadrado
00:40:24
y elevar
00:40:25
al cuadrado
00:40:26
dos veces.
00:40:27
Esto sería
00:40:28
el x1
00:40:29
menos
00:40:30
y1,
00:40:31
perdón,
00:40:32
el x1
00:40:33
menos
00:40:34
x2
00:40:35
al cuadrado
00:40:36
sería esto
00:40:37
primero.
00:40:38
Y el
00:40:39
y1
00:40:40
menos
00:40:41
y2
00:40:42
al cuadrado
00:40:43
sería
00:40:44
más
00:40:45
esto
00:40:46
pero con la
00:40:47
y.
00:40:48
Vale.
00:40:49
Y ahora sería
00:40:51
la raíz
00:40:52
de todo esto.
00:40:53
Con esto he hecho
00:40:54
el x1
00:40:55
menos x2
00:40:56
al cuadrado
00:40:57
más
00:40:58
y1
00:40:59
menos y2
00:41:00
al cuadrado.
00:41:01
Pero tengo que hacer
00:41:02
la raíz cuadrada
00:41:03
de esto.
00:41:04
La raíz cuadrada
00:41:05
en Java,
00:41:06
¿cómo la hacemos?
00:41:07
¿Tenemos que programar
00:41:08
algoritmos
00:41:09
en la raíz cuadrada?
00:41:10
Pues no.
00:41:11
Afortunadamente
00:41:12
tenemos un
00:41:13
algoritmo
00:41:14
que se llama
00:41:15
x1
00:41:16
menos x2
00:41:17
al cuadrado
00:41:18
pero afortunadamente
00:41:19
tenemos un método
00:41:20
que nos lo ha hecho.
00:41:21
¿Os acordáis
00:41:22
cuando queríamos crear
00:41:23
un numeratorio
00:41:24
que usábamos
00:41:25
el math.random?
00:41:26
Pues aparte
00:41:27
del math.random
00:41:28
tenemos math.
00:41:29
Un montón de cosas
00:41:30
para hacer cosas
00:41:31
matemáticas.
00:41:32
Entre ellas
00:41:33
la raíz cuadrada.
00:41:34
Entonces si yo
00:41:35
paso todo esto
00:41:36
a esto de aquí
00:41:37
math.sqrt
00:41:38
y le paso
00:41:39
como parámetro
00:41:40
todo esto
00:41:41
que he hecho
00:41:42
ahí
00:41:43
y ahí
00:41:44
y aquí
00:41:45
y aquí
00:41:46
y aquí
00:41:47
y ahí
00:41:48
Pues esto
00:41:51
ya sería
00:41:52
Espera que aquí
00:41:55
estoy poniendo
00:41:56
this as a repository
00:41:57
vale
00:41:58
double
00:42:01
result
00:42:03
igual a esto
00:42:08
result
00:42:10
y ahora
00:42:12
esta sería
00:42:13
esta fórmula matemática
00:42:14
esta fórmula
00:42:15
siendo x1
00:42:17
la coordenada x
00:42:18
de this
00:42:19
y siendo x2
00:42:20
la coordenada x
00:42:21
de punto
00:42:22
y esto sería
00:42:23
la coordenada y
00:42:24
de this
00:42:25
y esto sería
00:42:26
la coordenada y
00:42:27
de punto del otro
00:42:28
Pues esta misma fórmula
00:42:29
esta misma fórmula
00:42:30
es esto que yo
00:42:31
he escrito aquí
00:42:32
la raíz cuadrada
00:42:33
de esto al cuadrado
00:42:34
más esto al cuadrado
00:42:35
vale
00:42:38
y ahora ya
00:42:39
el método
00:42:40
tiene que devolver
00:42:41
esto como valor
00:42:42
de retorno
00:42:43
porque el método
00:42:44
ya está en la referencia
00:42:45
método
00:42:50
result
00:42:51
ala
00:42:52
el método ya estaría
00:42:55
vale
00:43:00
pues aquí
00:43:01
lo importante
00:43:02
de hacer de este método
00:43:03
cuál era mi objetivo
00:43:04
pues que
00:43:06
doble
00:43:08
primero
00:43:10
que veáis
00:43:11
que quede claro
00:43:12
que las variables
00:43:13
objetos
00:43:14
son como cualquier
00:43:15
otra variable
00:43:16
e igual que puedo
00:43:18
pasar por parámetro
00:43:19
números enteros
00:43:20
números double
00:43:21
claro que puedo pasar
00:43:22
por parámetro
00:43:23
cosas que sean objetos
00:43:24
porque son variables
00:43:25
como otras cualquiera
00:43:26
lo que pasa
00:43:27
es que una variable
00:43:28
objeto
00:43:29
sus datos
00:43:30
están a su vez
00:43:31
en propiedades
00:43:32
porque la variable
00:43:33
objeto en si
00:43:34
es una dirección
00:43:35
de memoria
00:43:36
no lo olvidéis nunca
00:43:37
que punto
00:43:38
en realidad
00:43:39
punto a secas
00:43:40
punto a palo seco
00:43:41
es una dirección
00:43:42
si yo hago un system
00:43:43
println punto
00:43:44
me sale una cosa rara
00:43:45
que no entiendo
00:43:46
claro
00:43:47
es que una variable
00:43:48
objeto
00:43:49
su información
00:43:50
está guardada
00:43:51
en propiedades
00:43:52
está guardada
00:43:53
en casillitas
00:43:54
y cada casillita
00:43:55
tiene su nombre
00:43:56
en este caso
00:43:57
pues claro
00:43:58
punto tiene
00:43:59
su casillita
00:44:00
i
00:44:01
y punto
00:44:02
tiene
00:44:03
su casillita
00:44:04
x
00:44:05
yo no accedo
00:44:06
a punto tal cual
00:44:07
porque punto
00:44:08
es un objeto
00:44:09
sino accedo
00:44:10
a sus propiedades
00:44:11
entonces
00:44:12
es su primer objetivo
00:44:13
que empecéis a ver
00:44:14
las variables
00:44:15
objeto
00:44:16
como cualquier
00:44:17
otra variable
00:44:18
que puedo pasar
00:44:19
por parámetro
00:44:20
que puedo devolver
00:44:21
como valor de retorno
00:44:22
en un método
00:44:23
lo que sea
00:44:24
pero claro
00:44:25
su peculiaridad
00:44:26
es esa
00:44:27
que en realidad
00:44:28
accedemos
00:44:29
a las propiedades
00:44:30
de esas variables
00:44:31
no a la variable
00:44:32
sin más
00:44:33
no como cuando
00:44:34
declaramos
00:44:35
int n
00:44:36
accedemos a n
00:44:37
tal cual
00:44:38
n igual a 7
00:44:39
cuando declaramos
00:44:40
p punto x
00:44:41
p punto y
00:44:42
¿vale?
00:44:43
Esa es la primera cosa
00:44:44
que quería dejar clara
00:44:45
con este método
00:44:46
y segunda
00:44:47
segunda
00:44:48
pues que
00:44:49
reviséis
00:44:50
el concepto
00:44:51
de this
00:44:52
el significado
00:44:53
de this
00:44:54
que es fundamental
00:44:55
claro
00:44:56
ya lo hemos usado
00:44:57
cuando teníamos
00:44:58
que distinguir
00:44:59
nombres de variables
00:45:00
this
00:45:01
en una clase
00:45:02
se refiere siempre
00:45:03
al objeto
00:45:04
que está llamando
00:45:05
a este método
00:45:06
que es
00:45:07
el objeto
00:45:08
que está llamando
00:45:09
a este método
00:45:10
el objeto
00:45:11
en el que estoy
00:45:12
se refiere
00:45:13
al objeto
00:45:14
que se lo está llamando
00:45:15
y yo aquí
00:45:16
lo necesitaba
00:45:17
lo necesito
00:45:18
porque quiero
00:45:19
calcular la distancia
00:45:20
entre
00:45:21
el punto
00:45:22
que llama
00:45:23
al método
00:45:24
y el que llama
00:45:25
al método
00:45:26
es el objeto
00:45:27
en el que estoy
00:45:28
que es this
00:45:29
y este
00:45:30
¿vale?
00:45:31
Ahora hay otra cosa
00:45:32
y con esto paramos
00:45:33
es que recordéis
00:45:34
que el this
00:45:35
cuando no hay ambigüedad
00:45:36
era opcional
00:45:37
acordaos
00:45:38
que lo hemos
00:45:39
ya lo hemos dicho
00:45:40
varias veces
00:45:41
entonces
00:45:42
cuando
00:45:43
si yo quito el this
00:45:44
y dejo x
00:45:45
a palo seco
00:45:46
aquí no va a pasar nada
00:45:47
porque x
00:45:49
solo tiene
00:45:51
solo tiene
00:45:53
una declaración
00:45:54
que es esta
00:45:56
la propiedad x de aquí
00:45:57
solo tiene esa
00:45:58
solo tiene esa
00:45:59
no tiene otra
00:46:00
entonces yo podría quitar el this
00:46:01
y sería lo mismo
00:46:03
me seguiría refiriendo
00:46:04
a la propiedad x
00:46:05
del objeto este
00:46:06
en el que estoy
00:46:07
me seguiría refiriendo
00:46:08
pero como aquí
00:46:10
se me ocurriera a mí
00:46:11
por
00:46:12
yo que sé
00:46:13
de repente
00:46:14
entro una variable y
00:46:15
me da la gana
00:46:16
llamarla x
00:46:17
porque quiero hacer
00:46:18
cualquier chorrada
00:46:19
ahí ya la confusión
00:46:20
apareció
00:46:21
y con este x
00:46:22
ahora ya diría
00:46:23
oye
00:46:24
este x
00:46:25
¿cuál es?
00:46:26
¿esta variable
00:46:27
que te has declarado aquí?
00:46:28
o este x
00:46:29
es la propiedad
00:46:30
del objeto
00:46:31
que llama al método
00:46:32
o lo que viene
00:46:33
de arriba
00:46:34
aquí de nuevo
00:46:35
aparece la ambigüedad famosa
00:46:36
en una situación como esta
00:46:37
en la que yo aquí
00:46:38
me invento esta variable
00:46:39
porque me da la gana
00:46:40
aquí sí que tendría
00:46:41
que poner el this
00:46:42
igual
00:46:43
no, ojo
00:46:44
que este x
00:46:45
es la coordenada x
00:46:46
del objeto
00:46:47
que llama al método
00:46:48
no esta variable
00:46:49
que me acabo inventando
00:46:50
pero en este método mío
00:46:51
que yo no tengo
00:46:52
ninguna otra cosa
00:46:53
que se llama x
00:46:54
ninguna otra
00:46:55
pues el this
00:46:56
lo podríais quitar
00:46:57
lo podríais quitar
00:46:58
del x
00:46:59
del y
00:47:00
de todas partes
00:47:01
lo podríais quitar
00:47:02
porque no hay duda
00:47:03
de a quién se está refiriendo
00:47:04
pero si es importante
00:47:05
que cuando no aparezca
00:47:06
sepáis que esa x
00:47:07
es la x
00:47:08
del objeto this
00:47:09
del que está llamando
00:47:10
al método
00:47:11
vale
00:47:12
bueno
00:47:13
esto se entiende mejor
00:47:14
de nuevo
00:47:15
ahora ya haciendo el main
00:47:16
que crea ya los puntos
00:47:17
llama
00:47:18
a los métodos
00:47:19
para puntos concretos
00:47:20
etc
00:47:21
pero eso
00:47:22
lo hacemos ahora después
00:47:23
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 8
- Fecha:
- 12 de enero de 2024 - 12:47
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 903.48 MBytes