20251212 POO-Ejer_4 - 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:
Bueno, pues hemos dicho entonces que íbamos a hacer el 14.
00:00:01
Como de costumbre, pues primero lo leemos para hacernos una idea de qué va esto.
00:00:07
Pues es hacer cosas con los vehículos.
00:00:12
¿Cosas como cuál?
00:00:15
Pues ver lo que han gastado en cada trayecto.
00:00:16
Vale.
00:00:19
Entonces, la entidad vehículo que es con la que vamos a trabajar se va a caracterizar por cosas para hacer esos cálculos.
00:00:21
Una, lo que gasta por combustible.
00:00:27
Perdón, lo que gasta por kilómetro recorrido.
00:00:30
Solamente se caracteriza por esto porque esta aplicación lo único que hace es calcular gastos.
00:00:33
Ya está.
00:00:37
Entonces, como lo único que hace es calcular gastos, pues el gasto por kilómetro.
00:00:38
Es lo único que necesitamos del vehículo.
00:00:44
Ya está.
00:00:46
Vale, pues entonces vamos a empezar haciendo esa primera entidad.
00:00:48
Entonces, pues ejercicio 14.
00:00:54
vale, y el ejercicio 14 tiene una clase
00:01:00
vehículo
00:01:09
bueno, propiedades del vehículo
00:01:12
el gasto por combustible
00:01:21
por defecto en condiciones normales
00:01:23
pues las propiedades las hacemos de ámbito privado
00:01:26
y luego ya que los métodos Getty Set
00:01:28
decidan si las ofrecen al exterior
00:01:31
para consulta y o escritura
00:01:34
pues el gasto por combustible
00:01:37
Perdón, jodín
00:01:39
El gasto por kilómetro
00:01:41
Un double
00:01:42
No, es
00:01:43
Otra cosa
00:01:48
Que es desde la propia clase
00:01:50
Perdón, desde el propio paquete
00:01:52
Private es
00:01:54
Solo desde la clase
00:01:56
Public es
00:01:57
Desde cualquier clase de cualquier otro paquete
00:01:59
Y nada
00:02:02
Es desde este paquete
00:02:03
Son tres posibilidades distintas
00:02:06
Bueno, pues entonces, para que esta propiedad se pueda establecer o se pueda recuperar desde fuera,
00:02:10
tenemos que hacer sus getter y sus setter, claro.
00:02:17
Pues venga, hacemos sus getter y sus setter, que estos ya sí que son públicos.
00:02:20
Quien quiera ver el gasto por kilómetro del coche llamará a este método.
00:02:27
Y el que quiera cambiar el gasto por kilómetro del coche, porque ha cambiado por lo que sea,
00:02:31
llama a ese método, que ya sí que son públicos.
00:02:35
Vale, para facilitar la tarea de instanciar un coche
00:02:39
Y darle valor a su propiedad
00:02:43
Vamos a hacer un constructor
00:02:45
¿No viniste a clase ni viste la grabación?
00:02:46
Pues muy mal
00:03:00
Porque entonces lo habrías visto
00:03:01
Botón derecho, source
00:03:03
Vale
00:03:06
Vale, pues ya tenemos el kilómetro
00:03:07
Uy, el kilómetro
00:03:14
El constructor
00:03:15
Este constructor será llamado cuando se instancie el objeto
00:03:16
En ese momento pasamos un valor para esa propiedad y se utiliza para inicializar esa propiedad.
00:03:21
Bueno, pues esta es lo que viene a ser una entidad normal y corriente, una entidad vehículo.
00:03:29
¿Para qué sirve esta aplicación?
00:03:38
Esta aplicación sirve para calcular lo que me gasto yo cuando recorro una trayectoria.
00:03:40
pues entonces tendré que ser capaz
00:03:46
de representar el objeto trayectoria
00:03:50
esta aplicación trabaja con vehículos
00:03:53
está claro, ya hemos hecho una clase para ellos
00:03:57
pero también va a trabajar con trayectorias
00:03:59
porque es una aplicación que dada una trayectoria
00:04:01
me va a decir lo que gasta este vehículo
00:04:05
entonces, ¿cómo podemos caracterizar
00:04:08
una trayectoria?
00:04:11
En un ámbito digital, claro
00:04:13
Pues vamos a tener que, lógicamente
00:04:17
Cuantificarla de alguna manera
00:04:20
Entonces
00:04:23
Uy va
00:04:24
Si esta es
00:04:26
Si esta es una trayectoria, bum bum bum
00:04:28
Vale, yo como la mido
00:04:35
Como la mido para pasársela
00:04:37
Luego al método que calcule
00:04:39
El gasto, como la mido
00:04:41
Pues hombre, voy a tener que
00:04:42
Rectificarla, pues una forma posible es
00:04:45
Voy a tomar muestras en diferentes puntitos, voy a tomar muestras y la trayectoria se va a caracterizar por toda la sucesión de puntos, lo que puede ser una raíz de puntos, ¿verdad? La trayectoria se va a caracterizar por un montón de puntitos.
00:04:47
Y ahora ya, la trayectoria total
00:05:02
¿Cuál va a ser?
00:05:05
La suma de las distancias entre los puntos
00:05:06
¿Vale?
00:05:09
La suma de las distancias entre los puntos
00:05:10
¿No va a ser exactamente la distancia?
00:05:12
Dependerá de cómo de cerca
00:05:15
Tome yo los puntitos, ¿no?
00:05:16
O sea, si mi trayectoria es esta
00:05:18
Y yo tomo un punto aquí, otro aquí y otro aquí
00:05:19
La trayectoria
00:05:22
Me va a salir
00:05:24
La medida me va a salir esto
00:05:25
Es una aproximación, pero es una aproximación un poco grosera
00:05:27
aproximarla por esta distancia y esta distancia
00:05:31
si quiero que la aproximación a la trayectoria real
00:05:33
sea más fiel, pues tendré que tomar más puntitos
00:05:37
más cerca, entonces ya la aproximación
00:05:40
está mucho más afinada
00:05:43
¿verdad? cuanto más puntos tome yo de muestra
00:05:46
de esa trayectoria real, más puntos tome
00:05:50
más se va a aproximar la medida
00:05:52
la estimación a la medida real
00:05:55
esto en un caso límite
00:05:58
si os acordáis de los límites de las matemáticas
00:06:00
de segundo de bachillerato
00:06:03
pues el límite
00:06:04
cuando el número de puntos tiende a infinito
00:06:05
es la distancia real
00:06:09
pero el límite
00:06:12
es un concepto astral
00:06:13
el límite no se puede cuantificar
00:06:14
pero sí que podemos
00:06:18
poner un montón de puntitos
00:06:19
conclusión
00:06:21
hemos decidido
00:06:23
podría haber sido de otra manera pero hemos decidido
00:06:25
que para cuantificar una trayectoria,
00:06:27
que es otro dato que mi aplicación necesita,
00:06:31
voy a utilizar un montón de puntos.
00:06:34
¿Qué es un montón de algo en Java?
00:06:37
Pues un array.
00:06:39
Pues un array de puntos me va a caracterizar la trayectoria.
00:06:41
Pues estoy hablando de punto como si punto fuera algo.
00:06:45
¿Punto es un int? ¿Punto es un double?
00:06:48
No.
00:06:50
Punto es una posición en el plano.
00:06:51
Una posición en el plano no es un tipo de variable,
00:06:53
no es un tipo de dato estándar de Java
00:06:56
el plano es esto
00:06:58
y una posición en el plano es esto
00:06:59
o esto, o esto
00:07:02
es decir, una posición en el plano
00:07:03
es una coordenada X y una coordenada Y
00:07:05
eso es una posición en el plano
00:07:08
y eso no es un tipo
00:07:10
de dato estándar, no es un int, no es un double
00:07:12
es un tipo de
00:07:14
dato que me voy a tener que crear
00:07:16
porque es
00:07:18
la combinación de dos cosas
00:07:19
son dos valores, ¿vale?
00:07:21
una posición en el plano
00:07:24
que eso es lo que es un punto
00:07:25
una posición en el plano
00:07:27
está formada por dos valores
00:07:29
coordenada X, coordenada Y
00:07:31
luego
00:07:33
voy a tener que hacerme una clase punto
00:07:34
porque el tipo de dato punto no existe
00:07:37
no existe el tipo de dato
00:07:39
par de valores
00:07:41
ese tipo de dato no existe
00:07:42
pues entonces aquí nos surge ya la necesidad
00:07:44
de crearnos otra clase
00:07:47
para especificar ya un tipo
00:07:49
de dato nuestro propio
00:07:51
que es la combinación de una
00:07:53
coordenada X y otra Y.
00:07:55
Y ahora ya, cuando tengamos esa clase
00:07:58
punto, ya podremos hacer
00:07:59
array de puntos. Y un array
00:08:01
de puntos, ¿qué va a ser? Una trayectoria.
00:08:03
Podríamos
00:08:07
hacernos, de hecho, otra clase trayectoria.
00:08:07
¿Qué vamos a hacer?
00:08:10
Para cuya
00:08:12
propiedad fuera el array de puntos
00:08:13
que la forman, por ejemplo.
00:08:15
Tendríamos tres clases. El vehículo
00:08:17
que guarda el gasto por kilómetro.
00:08:19
La clase
00:08:22
punto que representa una posición en el
00:08:23
plano y la clase trayectoria que representa un montón de puntos. Y ya con eso mi aplicación
00:08:25
ya hará sus métodos, trabajará, operará, pues como toque hacerlo, ya veremos cómo.
00:08:32
Pero primero, antes de empezar a decidir qué hacer, hay que tomar la decisión sobre qué
00:08:38
hay y cómo caracterizarlo. Pues aquí qué hay, coches con su gasto por kilómetro, puntos
00:08:44
con sus dos coordenadas
00:08:52
y trayectorias, un montón de puntitos
00:08:53
eso es lo que hay
00:08:56
una vez que tenemos claro lo que hay
00:08:56
y cómo se caracteriza
00:08:59
es decir, qué propiedades tiene dentro
00:09:01
una vez que eso ya hemos hecho una foto
00:09:03
ya sabemos lo que hay
00:09:05
ahora ya pongámonos a hacer código
00:09:06
a hacer métodos que ejecutan cosas
00:09:10
¿qué trayectoria se puede hacer una raíz de puntos?
00:09:12
pues por meter una entidad más
00:09:16
vamos a una trayectoria
00:09:18
que se caracteriza por una raíz de puntos
00:09:20
porque va a quedar la aplicación más clara
00:09:22
si tú ahora un método
00:09:24
en lugar de pasarle raíz de puntos
00:09:25
le pasas un objeto trayectoria
00:09:27
cuando alguien ve el método
00:09:29
ya sabe que eso trabaja con
00:09:31
una trayectoria para lo que sea
00:09:33
pasas una raíz de puntos
00:09:35
puede representar muchas más cosas
00:09:36
entonces
00:09:39
la razón de hecho sería
00:09:40
para hacer un diseño
00:09:43
más claro
00:09:44
a los ojos del que echa un vistazo al código
00:09:45
¿vale?
00:09:47
no pasa nada por hacer una clase más
00:09:48
si clases puede haber 2.000 millones,
00:09:50
si estimamos que ayudan a dejar el código claro,
00:09:52
esa sería la razón de alguna manera real.
00:09:56
Nosotros además ahora la vamos a poner,
00:09:59
ya que nos hemos puesto,
00:10:01
pues para practicar más,
00:10:02
con pasar objetos de clases, etc.
00:10:04
¿Vale?
00:10:06
Pues venga.
00:10:08
Vamos a hacernos esas clases.
00:10:12
Vale, el vehículo ya estaba.
00:10:17
Entonces, vamos a hacernos punto.
00:10:20
vale, vamos a hacernos la clase punto
00:10:23
la clase punto
00:10:26
la trayectoria
00:10:32
claro, la clase trayectoria se caracterizaría
00:10:36
solamente por la raíz de puntos
00:10:39
pero claro, la aplicación se haría
00:10:40
si elegimos una clase trayectoria
00:10:42
la aplicación automáticamente se convertiría
00:10:44
en una aplicación escalable, por ejemplo
00:10:47
que si dejamos la trayectoria como raíz de puntos
00:10:49
sería muy difícilmente escalable
00:10:51
¿qué quiero decir con escalable?
00:10:52
que cualquier actualización, cualquier incorporación
00:10:54
de funcionalidades añadidas va a ser más fácil.
00:10:59
Una aplicación muy escalable significa que puedo escalar
00:11:03
su funcionalidad o lo que es lo mismo,
00:11:07
que puede incorporarle funcionalidades de forma muy sencilla.
00:11:09
Una aplicación poco escalable implica,
00:11:13
le voy a incorporar funcionalidades nuevas,
00:11:16
tengo que hacer un montón de retoques.
00:11:18
Entonces, una aplicación que tiene una clase trayectoria
00:11:20
y está planteada con esa clase trayectoria
00:11:23
y dices, voy a incorporar
00:11:25
una funcionalidad más, que es además
00:11:27
de la trayectoria, ponerle
00:11:29
la cualidad del terreno, porque
00:11:31
si el terreno es muy rugoso, el coche salta
00:11:33
y gasta más, por ejemplo
00:11:35
eso sería escalar la aplicación
00:11:37
añadir una funcionalidad
00:11:40
si tú tienes ya una clase trayectoria
00:11:41
que se caracteriza por su array de puntos
00:11:43
dices, magnífico, le meto otra
00:11:45
propiedad que sea
00:11:47
dificultad del terreno, y es mucho
00:11:48
más bonito, más natural
00:11:51
La ampliación
00:11:52
Si tú has trabajado con
00:11:54
Array de puntos como trayectorias sueltos
00:11:56
Aquí y allí
00:11:59
Y de repente tienes que meter la rugosidad del terreno
00:11:59
Vas a tener que retocar los cálculos en muchos sitios
00:12:02
¿Vale?
00:12:05
Venga, pues entonces
00:12:08
Punto se caracteriza
00:12:09
Solo por sus coordenadas
00:12:11
¿Coordenadas de Abel también?
00:12:13
Pues sí
00:12:16
X e Y
00:12:16
X e Y son nombres en este caso
00:12:18
bien elegidos
00:12:22
porque normalmente las llamamos así
00:12:24
el eje de abscisas la llamamos X
00:12:25
y el eje de ordenada lo llamamos Y
00:12:27
sí, pero eso sí que
00:12:29
quizás complicarlo un poco
00:12:40
esto es muy intuitivo, X e Y
00:12:41
tú ves el nombre, ves rápidamente
00:12:44
coordenada X, coordenada Y
00:12:45
y usar un array
00:12:47
solo para englobar dos cosas
00:12:49
quizás matar moscas a cañonazos
00:12:52
otra cosa es que
00:12:54
tú tuvieras un espacio
00:12:56
n dimensional
00:12:57
de 20 coordenadas
00:12:59
un espacio de 20 coordenadas
00:13:01
pues entonces poner las 20 coordenadas sueltas
00:13:02
sería muy pesado, entonces ahí podríamos hacer un array
00:13:05
para todas las coordenadas, pero va a un espacio
00:13:07
de dos dimensiones, queda casi más claro
00:13:09
poner x y que meterlo
00:13:11
en un array, pero sí, podríamos, pero quizás
00:13:13
es un poquito más, lo estás complicando
00:13:15
a lo igual sin necesidad
00:13:17
en este caso
00:13:19
vale, pues hacemos los get y los set
00:13:20
de las propiedades
00:13:23
Posibilidades y el constructor.
00:13:25
¡Hala!
00:13:40
Ya está.
00:13:41
Nuestra clase punto con su constructor Getty Set.
00:13:42
Vale.
00:13:45
Vamos a hacer el objeto trayectoria ahora cuando lo necesitemos.
00:13:49
Para comparar un poquito cómo serían las dos posibilidades.
00:13:52
Con objeto trayectoria y sin él.
00:13:56
A ver, hay mucho ruido de fondo.
00:13:58
Y así no se puede.
00:14:02
Venga.
00:14:04
Por ahora vamos a dejar esta en su trayectoria
00:14:05
y vamos a incorporarlo cuando lo necesitemos
00:14:06
para ver un poquito cómo serían las dos posibilidades.
00:14:08
Repito.
00:14:10
Vale, tenemos la clase punto y la clase vehículo.
00:14:11
Ahora, ¿qué más dice?
00:14:15
La clase punto.
00:14:16
Como vamos a necesitar calcular la distancia entre dos puntos
00:14:18
y eso es una cosa que se hace con puntos,
00:14:21
pues vamos a meter un método en la clase punto
00:14:25
para calcular la distancia
00:14:27
entre un punto que llame al método
00:14:29
y el que se le pasa por parámetro.
00:14:31
entonces distancia entre dos puntos
00:14:33
es esta fórmula
00:14:37
la distancia entre dos puntos
00:14:38
ya es un método, algo que hay que operar
00:14:41
¿dónde lo coloco?
00:14:43
ese método en la clase punto porque afecta
00:14:44
a puntos, vale, pues que este método
00:14:47
se coloca en la clase punto está claro
00:14:49
pues lo colocamos
00:14:50
en la clase punto el método distancia
00:14:53
vale, distancia
00:14:55
¿qué me va a devolver? una distancia
00:15:02
entre puntos que va a ser un double
00:15:04
pues dabble, voy a etiquetarlo
00:15:05
como public para permitir
00:15:08
usar este método desde fuera del
00:15:10
paquete, si es que lo voy a usar
00:15:12
desde fuera del paquete, aquí estamos
00:15:14
en todas las clases, en el mismo da igual
00:15:16
pero en general, lo normal
00:15:17
es que alguien tuviera la aplicación
00:15:20
aquí y usara estas clases que están en este otro
00:15:22
paquete de modelo, entonces necesitaría el public
00:15:24
vale, ahora viene lo más importante
00:15:26
¿qué parámetros
00:15:28
necesita el método distancia?
00:15:29
bueno, lo que
00:15:32
me dice el enunciado es
00:15:34
a este método lo va a llamar un punto
00:15:35
eso está claro, a este método lo llama un punto
00:15:37
porque a los métodos los llaman los objetos
00:15:39
luego ya tengo el primer punto de los
00:15:41
dos, para calcular la distancia
00:15:44
pues ¿cuál es el segundo
00:15:45
punto del cual vamos a calcular la distancia?
00:15:47
ese ya sí que se lo tengo que pasar por parámetro
00:15:50
luego este
00:15:52
método, del punto que
00:15:53
llame al método, me va a calcular la distancia con
00:15:55
ese que le paso desde fuera
00:15:57
bueno, pues
00:15:59
entonces, para pasarle un objeto
00:16:02
punto, pues
00:16:03
esto, por ejemplo.
00:16:05
¿Vale?
00:16:08
Entonces, aquí tengo
00:16:11
las coordenadas
00:16:13
del punto que llame al método.
00:16:14
Las coordenadas del punto que llama
00:16:23
al método son estas dos que tengo aquí arriba.
00:16:25
X e Y.
00:16:27
X e Y.
00:16:29
Esas son las coordenadas
00:16:31
del punto que llame al método.
00:16:33
¿Y cuáles van a ser las coordenadas
00:16:35
del
00:16:38
punto
00:16:41
Pasado como parámetro
00:16:41
El punto pasado como parámetro es P
00:16:44
Sus coordenadas son
00:16:48
P.getX
00:16:50
Y P.getY
00:16:53
Esas son sus coordenadas
00:16:56
La que me da el método get
00:16:59
Del objeto P
00:17:01
Y la que me da el método get
00:17:02
Del objeto P
00:17:05
Estas dos son las del punto
00:17:06
Que llama el método
00:17:09
Que son las de arriba
00:17:10
y estas dos son las coordenadas del punto P
00:17:11
porque P al ser de la clase punto
00:17:14
puede llamar a sus get para sacar sus coordenadas
00:17:18
bueno, pues ya tengo los dos pares de coordenadas
00:17:21
ahora aplico la fórmula que me han dado
00:17:24
y la fórmula es la raíz cuadrada de la diferencia
00:17:26
vamos a hacer primero la diferencia y luego hacemos la raíz
00:17:29
sería x menos p punto get x
00:17:31
todo esto al cuadrado
00:17:43
o lo que es lo mismo multiplicado por sí mismo
00:17:45
todo esto multiplicado por sí mismo
00:17:47
porque es al cuadrado
00:17:53
más
00:17:54
lo mismo pero con la i
00:17:58
vale
00:18:01
con esto
00:18:19
he hecho la primera parte de la fórmula
00:18:21
que es
00:18:24
esta, esta de aquí
00:18:25
la suma
00:18:29
del cuadrado de las diferencias de las coordenadas
00:18:31
he hecho la primera parte
00:18:34
me falta la raíz cuadrada
00:18:35
de todo esto. Pero bueno, ya me dicen, ¿cómo puedo hacer la raíz cuadrada? Pues ahora mismo
00:18:38
que sepamos que hay un método que se llama SQRT
00:18:42
para hacer la raíz cuadrada de algo y que puedo llamar a ese
00:18:46
método como math. Vale, pues entonces
00:18:50
la verdadera distancia será
00:18:54
eso, la raíz cuadrada
00:18:58
de esto que acabo de calcular. Esto
00:19:01
a ser la verdadera distancia. Y esto
00:19:06
es lo que quiero yo devolver.
00:19:08
Quiero que el método lo devuelva.
00:19:11
El método tiene que tener
00:19:14
un return porque he puesto que devuelve un double.
00:19:14
Pues hala, ya está.
00:19:19
Ya tengo ese método.
00:19:20
Que no me hace falta la variable
00:19:26
auxiliar div. Podría meter
00:19:28
todo esto, lo podría meter aquí dentro.
00:19:30
Y me ahorro
00:19:33
esa variable auxiliar. Pero bueno, si queda más
00:19:34
claro así el código, pues lo dejamos
00:19:36
así.
00:19:38
vale, entonces este método está claro
00:19:38
este método es un método
00:19:45
que me dice, cuando en un
00:19:47
programa que se esté ejecutando, que todavía
00:19:49
no hay ningún programa ejecutándose
00:19:51
pues cuando un programa con un main que se ejecute
00:19:52
cree un punto
00:19:55
y ese objeto punto, llame al método distancia
00:19:56
pasándole otro punto que también tendrá
00:19:59
que haber creado el programa
00:20:01
es decir, cuando existan dos puntos
00:20:02
porque ya estoy en un programa que se está ejecutando
00:20:05
y ya estén creados, cuando ya existan
00:20:07
dos puntos, si uno de ellos
00:20:09
llame a este método, recibiendo como parámetro
00:20:11
el otro, yo te voy a entregar
00:20:13
la distancia entre ambos
00:20:15
magnífico, es justo lo que necesitamos
00:20:16
para calcular valores
00:20:19
de trayectorias, sumas de distancia
00:20:21
esta suma más esta suma más esta suma
00:20:23
más esta suma, es justo lo que necesitamos
00:20:25
pero este método no va a venir muy bien para hacer eso
00:20:27
vale, en la clase
00:20:29
punto, hay que meter más cosas
00:20:31
hay que hacer más cosas con los puntos
00:20:32
no hay que hacer más cosas con los puntos
00:20:35
de hecho
00:20:38
O sea, aquí me dice solamente el método distancia, ¿vale?
00:20:39
Ahora, con los vehículos, ¿qué hay que hacer?
00:20:44
Pues con los vehículos hay que meter un método que te diga cuánto has gastado
00:20:47
para una trayectoria en concreto.
00:20:51
¿Cuánto has gastado?
00:20:55
Eso afecta al vehículo.
00:20:56
Lo que ha gastado en una trayectoria afecta al vehículo.
00:20:58
Pues ese método tendrá que ir en vehículo, porque afecta al vehículo.
00:21:01
Vale, pues entonces
00:21:05
En vehículo
00:21:09
Ponemos ese método
00:21:10
Que me va a devolver un gasto
00:21:13
Con lo cual me va a devolver un double
00:21:15
Gastado
00:21:17
Trayectoria, yo que sé el nombre
00:21:22
Lo más explicativo que se os ocurra
00:21:24
Trayectoria
00:21:26
Vale, pues este método
00:21:27
Tendrá que calcular algo
00:21:33
Y devolvernolo
00:21:36
Tendrá que calcular algo
00:21:38
por ahora pongo esto para
00:21:40
tendrá que hacer el cálculo
00:21:48
que sea y devolverlo
00:21:53
cuando ya lo haya hecho, el cálculo que sea
00:21:55
eso nos falta aquí
00:21:57
pero claro, antes de nada
00:21:58
pues tenemos que pensar, vale, que me va a devolver
00:22:00
un double, sí, me va a devolver un gasto
00:22:03
un double, muy bien
00:22:05
¿qué necesita
00:22:06
este método para trabajar?
00:22:08
necesita lo que este coche
00:22:11
gasta por kilómetro
00:22:13
eso no hay problema, lo que este coche
00:22:14
gasta por kilómetro está aquí arriba
00:22:17
el propio vehículo va a llamar al método
00:22:18
y él ya tiene dentro el gasto
00:22:21
el método accede a eso y ya está
00:22:23
luego ese método
00:22:24
puede acceder a ese dato sin problema
00:22:26
pero también necesita
00:22:29
la trayectoria para saber
00:22:31
cuántos kilómetros tiene
00:22:33
y la multiplicación de los kilómetros
00:22:34
de la trayectoria por el gasto por kilómetro
00:22:37
será el resultado de volver
00:22:39
luego la trayectoria
00:22:40
no es una característica del coche
00:22:42
la trayectoria es un
00:22:45
a veces es una
00:22:47
a veces es otra, la trayectoria es un dato externo
00:22:48
que se le pasa al método para decir
00:22:51
para esta, ¿cuánto consumes?
00:22:53
muy bien, y ahora para esta otra
00:22:55
¿cuánto consumes? muy bien, y ahora para esta otra
00:22:57
¿cuánto consumes? la trayectoria se pasa
00:22:59
desde fuera
00:23:01
no caracteriza al vehículo
00:23:01
el vehículo lo caracteriza a su gasto por combustible
00:23:04
vale, pues entonces
00:23:07
tenemos que pasar aquí la trayectoria
00:23:09
entonces aquí tenemos las dos posibilidades
00:23:10
ya hemos dicho que la trayectoria
00:23:13
es una raíz de puntos
00:23:15
Luego, si nos olvidamos de la clase trayectoria
00:23:16
Le pasaríamos esto
00:23:21
Un array de puntos
00:23:22
Yo le paso mi trayectoria
00:23:25
Y cálculame cuánto has gastado
00:23:32
Vale, vamos a hacerlo así
00:23:35
Vamos a hacer así esta primera versión del método
00:23:39
Bueno, pues ahora ya
00:23:42
Lo que tenemos es que hacer
00:23:44
cuál va a ser
00:23:47
la distancia total
00:23:48
tendremos que calcular
00:23:50
la distancia entre cada dos puntos
00:23:52
es una suma acumulativa
00:23:54
voy al primero, distancia con el siguiente
00:23:56
le sumo la distancia de este con el siguiente
00:23:58
la distancia de este con el siguiente, es una suma acumulativa
00:24:00
que sabemos hacer, esto va a ser
00:24:02
una suma acumulativa, pero tendremos
00:24:04
que recorrer el array
00:24:06
y qué suerte que tenemos un método
00:24:08
distancia en punto que me dice
00:24:10
la distancia entre un punto y otro, qué suerte
00:24:12
pues una suma acumulativa
00:24:15
que para cada punto va incorporando a esa suma la distancia entre este y el siguiente.
00:24:16
Bueno, pues como sabemos hacer la suma acumulativa, vamos a recorrer el array suma acumulativa.
00:24:23
Partiendo de cero, vamos a ir sumando para cada punto en el que estamos parados,
00:24:42
para cada punto en el que estamos parados
00:24:47
vamos a ir haciendo esto
00:24:49
puntos de Y
00:24:55
punto distancia
00:24:59
puntos de Y más 1
00:25:01
y esa sería mi suma acumulativa
00:25:06
el método distancia me calcula
00:25:11
la distancia entre este punto y su siguiente
00:25:14
a la suma acumulativa
00:25:17
avanzo al siguiente
00:25:20
Suma entre ese y su siguiente
00:25:22
¿Vale?
00:25:24
Es decir, mi array
00:25:28
Será esto
00:25:30
Me paro en este punto
00:25:34
Calculo distancia entre este y el siguiente
00:25:35
A la suma acumulativa
00:25:37
Ahora avanzo a este
00:25:39
Distancia entre este y su siguiente
00:25:40
A la suma acumulativa
00:25:42
Ahora me paro en este
00:25:44
Distancia entre este y el siguiente
00:25:45
A la suma acumulativa
00:25:47
Y así la suma de todas estas distancias
00:25:48
Me devuelve
00:25:52
¿Vale? ¿Estaría bien el método?
00:25:52
Muy bien.
00:25:58
Eso estaba esperando que me dijerais.
00:25:59
No estaría bien, tendría un detalle,
00:26:00
me saldría aquí una Reindersbaun Exception.
00:26:03
Porque me tengo que parar en el penúltimo.
00:26:05
Me tengo que parar en el penúltimo.
00:26:08
Porque cuando me paro el penúltimo,
00:26:10
ya estoy sumando esta distancia.
00:26:12
Me paro en el penúltimo.
00:26:14
No tengo que pararme aquí,
00:26:16
porque este me guía a este más su siguiente.
00:26:17
Que no hay siguiente a Reindersbaun Exception.
00:26:18
¿Vale? Me tengo que parar en el penúltimo.
00:26:21
Luego el recorrido sería hasta menos 1, ¿vale?
00:26:24
Me tengo que parar en el penúltimo.
00:26:29
Luego esto, para que no me dé a Reinders Bound Exception,
00:26:33
cuidado porque tengo que pararme antes, en el penúltimo.
00:26:37
Buen ejemplo este para decir, oye, como solo estoy consultando,
00:26:43
ah, bueno, ni siquiera, porque nada, nada, olvidamos,
00:26:47
ni siquiera podríamos.
00:26:49
Vale, ahora este método en principio ya sí que estaría bien.
00:26:51
Me da el gasto por trayectoria.
00:26:54
Y ya está, ya está todo hecho.
00:26:57
Ahora ya mi programa principal
00:26:58
Que arranque los puntos
00:27:00
Que arranque las cosas
00:27:02
Aquí que me dice
00:27:03
El main vamos a hacerlo ahora
00:27:05
Como nos dé la gana
00:27:10
Pero aquí no dice un main
00:27:10
Eso ya depende
00:27:11
Eso ya en tiempo de ejecución
00:27:20
Se decidirá
00:27:22
Este no se compromete a nada
00:27:23
Aquí estamos simplemente declarando
00:27:24
Lo que va a hacer el método
00:27:26
Cuando le llegue un array
00:27:28
¿ese array cuánto va a tener? no lo sé
00:27:29
a lo mejor en una ejecución le paso un array de 3
00:27:31
pero a lo mejor en la siguiente
00:27:34
le paso un array de 5
00:27:36
a este método le da igual, porque tiene el punto led
00:27:37
que le va a decir siempre cuál es su tamaño
00:27:40
a este método no le importa
00:27:41
que longitud tenga en particular
00:27:43
él ya accede a ella, a esa longitud
00:27:46
con punto led
00:27:48
¿que me llamas con un array de 7? pues ya está, son 7
00:27:49
¿que me llamas con un array de 12?
00:27:52
pues son 12, me da igual
00:27:55
mi for se va a ejecutar tantas veces
00:27:56
como necesite, aquí no nos comprometemos
00:27:58
al tamaño, luego ya en el main
00:28:01
ahora ya sí, en el main es donde
00:28:03
las cosas existen, ahí ya hay que
00:28:05
crear una trayectoria con una serie de puntos
00:28:07
concretos, un coche y ahí ya
00:28:09
pues las cosas
00:28:11
se ejecutan y dan resultados
00:28:13
aquí solo se dice cómo
00:28:15
se va a hacer, luego ya
00:28:17
cuando se hace realmente
00:28:19
en el main
00:28:20
pues venga, vamos a hacer el main
00:28:21
tengo mi main, ahora
00:28:24
Aquí ya hay que crear los coches
00:28:33
Las trayectorias, todo
00:28:35
Pues venga, vamos a hacer un main guapo
00:28:36
A ver
00:28:38
Un scanner, porque vamos a leer
00:28:40
Del teclado
00:28:44
Vale, y ahora vamos a decir
00:28:45
¿Cuánto gasta tu coche?
00:28:58
Para poder hacer los cálculos
00:29:01
Vale
00:29:03
Pues el gasto
00:29:09
Lo vamos a leer
00:29:12
Con scan.nextdabel
00:29:15
pues vamos a hacernos ya un objeto vehículo con ese gasto
00:29:19
pues vamos a instanciar un objeto vehículo
00:29:24
v, new vehículo
00:29:28
y como he dicho, aquí
00:29:31
si yo lo dejo en paréntesis vacíos, el constructor me dice, el compilador me dice
00:29:35
perdona, no puedo, claro, porque nos hemos inventado
00:29:40
un constructor, hemos pasado del por defecto, ese olvidado ya no existe
00:29:44
Porque me he inventado uno
00:29:48
Y este me dice
00:29:49
Que un double, lo siento
00:29:52
Pero tienes que darme un double, si no yo no puedo
00:29:54
Llamar al constructor
00:29:56
Venga, pues
00:29:57
Gasto
00:29:59
El que yo he pedido, este
00:30:01
Vale, el coche ya está
00:30:04
Ahora
00:30:05
Tenemos que meter la trayectoria, esto es más rollo
00:30:07
Vamos a hacerlo, primero cuántos puntos
00:30:10
De la trayectoria y luego ya rellenamos la raya
00:30:12
Y ya está, ahora
00:30:14
Vamos a decirle, venga, ahora vamos
00:30:16
a leer, a escanear la trayectoria
00:30:18
este escaneo
00:30:21
pues lógicamente
00:30:23
lo haría el maps
00:30:24
pues el maps pipipi
00:30:27
con el satélite pipipi haría el escaneo
00:30:29
llamaría
00:30:31
a distancia
00:30:32
a gasto y ya está
00:30:34
nosotros se lo tenemos que meter
00:30:35
a mano, pues nada, vamos a metérselo a mano
00:30:38
primero vamos a decir
00:30:40
cuántos puntos
00:30:42
cuántos puntos va a tener la trayectoria
00:30:43
Esto va a ser un int, el número de puntos, lógicamente
00:30:53
Cuántos puntos va a tener, pues lo que nosotros queramos en un momento dado
00:30:57
Los que nos den la gana
00:31:05
Y ahora ya vamos a hacer el bucle para leer los puntos de la trayectoria
00:31:06
Se los tenemos que meter a mano porque la aplicación no sabe leerlas directamente
00:31:11
Pues venga, ahora ya vamos a hacernos un array con la trayectoria
00:31:15
Punto
00:31:22
La voy a llamar
00:31:24
Trayectoria
00:31:27
Este array trayectoria
00:31:29
New punto
00:31:32
De num puntos
00:31:34
¿Verdad?
00:31:36
Ya tengo mi array
00:31:39
Mi array con tantos puntos como yo le he pedido
00:31:40
Mi array de puntos
00:31:44
Y ahora vamos a recorrerlo para leerlo
00:31:45
Simplemente
00:31:47
Trayectoria
00:31:48
Punto led
00:31:55
Vale
00:31:57
Pues le vamos a decir
00:32:00
Que meta coordenada x e y seguidas
00:32:02
No, pero vamos a hacer la versión 2
00:32:04
¿Vale? Para compararlos
00:32:08
Vamos a hacer el método con la versión 2
00:32:10
x e y
00:32:12
Bueno, x e y
00:32:13
Vale, entonces primero que lea
00:32:15
La coordenada x
00:32:18
Double x igual a
00:32:19
Scan.nextdouble
00:32:24
Y luego la y
00:32:29
y ahora
00:32:31
metemos en la
00:32:37
posición iésima un punto
00:32:39
con esas coordenadas
00:32:41
trayectoria
00:32:42
de i
00:32:46
igual
00:32:47
a new.x
00:32:49
y
00:32:53
listo el for
00:32:53
listo el for
00:32:56
que lee la trayectoria
00:32:58
vale
00:32:59
nos pide tantos puntos
00:33:03
Como le hemos dicho, como longitud tenga el array
00:33:06
Nos pide coordenada X, nos pide coordenada Y
00:33:09
Instancia un punto con esas coordenadas
00:33:13
Y lo mete en la posición del array que toque
00:33:16
¡Hala! Muy bien, ya tenemos los datos rellenos
00:33:19
Y ahora ya vamos a mostrarle cuánto ha gastado
00:33:22
Gasto
00:33:26
Su gasto en esa trayectoria
00:33:31
Su gasto
00:33:35
pues su gasto ha sido
00:33:36
pues mi vehículo
00:33:39
V
00:33:43
tiene un método estupendo
00:33:43
que se llama gastado
00:33:47
trayectoria, que si yo le paso
00:33:49
una raíz de puntos
00:33:51
me devuelve lo que ha
00:33:52
gastado, bueno, pues venga voy a
00:33:55
meterlo directamente en el siso
00:33:57
y ya está
00:33:58
y ya está, se acabó el programa
00:34:00
entonces, mi main
00:34:05
se olvida de las peculiaridades
00:34:07
de este método, le dan igual
00:34:10
ese método ya está encapsulado
00:34:11
metido en la clase vehículo
00:34:13
con toda su complejidad, con todo lo que sea
00:34:16
y mi clase llama
00:34:18
al método y punto pelota
00:34:20
pasándole eso si la información
00:34:22
que necesita, que la información que necesita
00:34:24
es la trayectoria, en concreto
00:34:26
que ejecuto el programa
00:34:27
con otra trayectoria, pues
00:34:30
me devolverá otro valor, lógicamente
00:34:31
¿vale?
00:34:34
y ya está
00:34:38
¿puedes un segundo mostrar
00:34:39
la clase vehículo y trayectoria?
00:34:41
¿cuál es la vehículo según?
00:34:44
¿cuál es la trayectoria?
00:34:46
el método sería ese
00:34:47
¿hace la fórmula?
00:34:48
¿hace la fórmula con las coordenadas?
00:34:56
bueno, hace la suma acumulativa
00:34:59
¿pero esto te devuelve la distancia?
00:35:01
¿no te devuelve el precio?
00:35:03
¿qué atributos has puesto en vehículo?
00:35:06
el gasto por kilómetro
00:35:09
entonces, este te dice
00:35:11
¿cuántos kilómetros hay?
00:35:12
Claro, y ahora tienes que multiplicarlo por el...
00:35:14
Ay, no lo he multiplicado, perdón, perdón, perdón, perdón.
00:35:16
Que he gastado trayectoria, efectivamente,
00:35:19
me falta multiplicarlo.
00:35:21
Esta es la distancia, perdón, claro,
00:35:22
me falta multiplicarlo por el gasto por kilómetro.
00:35:24
Efectivamente, tenéis razón, claro.
00:35:28
Efectivamente, este método me ha calculado
00:35:31
todo lo que mide la trayectoria, los kilómetros,
00:35:34
pero lo que tiene que ver el método
00:35:37
es lo que ha gastado el coche.
00:35:39
Entonces esa distancia que resulta la multiplico por el gasto por kilómetro que es la propiedad del coche que está arriba, ¿vale?
00:35:40
Sí, a ese método le faltaba esto, efectivamente.
00:35:48
Vale, entonces el main llama al método y ya está.
00:36:03
Si ejecutamos, venga, ¿cuánto gasta tu coche? Pues 2, gasta 2.
00:36:11
¿Cuántos puntos quieres? Venga, 3, x e y.
00:36:18
coordenadas
00:36:21
1, 1
00:36:23
para que sea una recta
00:36:26
y así podemos calcular bien
00:36:28
coordenadas, 2, 2
00:36:29
coordenadas
00:36:32
ah no, espera
00:36:34
le quiero pasar una recta horizontal
00:36:36
porque si es en vertical, bueno
00:36:37
3, 3
00:36:39
su gasto ha sido este, pero le voy a pasar
00:36:41
una trayectoria que sea más fácil de calcularla
00:36:44
de cabeza
00:36:46
a ver, claro
00:36:46
1, 0, 2, 0, 3, 0
00:36:49
Que eso es una recta, y ya está
00:36:51
Porque 1, 1 tendría que hacer la raíz cuadrada
00:36:52
Entonces, ¿cuánto gasta tu coche?
00:36:54
Gasta 2
00:36:56
¿Cuántos puntos? 3 puntos
00:36:57
Coordinada X del primer punto
00:37:00
1, 0
00:37:02
2, 0
00:37:04
3, 0
00:37:07
¿Vale?
00:37:11
4
00:37:18
Su gasto ha sido 4, 2 por 2, 4
00:37:18
Efectivamente, entre esos dos puntos
00:37:21
Tengo 1 y 1, 2 por 2, 4
00:37:23
¿vale? está bien calculado
00:37:25
vale
00:37:26
pues entonces
00:37:37
aquí se trata de
00:37:38
todas las complejidades
00:37:41
que afectan a una entidad
00:37:43
hacer cosas con esa entidad, con ese objeto
00:37:44
se meten ahí dentro y ahí se queda todo
00:37:46
encerrado
00:37:49
y luego la clase main llama a lo que necesite
00:37:49
¿vale?
00:37:53
primera cosa importante
00:37:54
y segunda
00:37:55
los objetos son otros datos más
00:37:56
otras variables más
00:38:00
como aquí
00:38:02
aquí ha habido que pasarle
00:38:03
una variable como parámetro
00:38:05
pues es otra variable más
00:38:07
normal y corriente
00:38:08
otra variable más
00:38:09
lo que pasa es que es una variable
00:38:09
que es de tipo objeto
00:38:11
porque es de la clase punto
00:38:12
y eso hace que tenga propiedades dentro
00:38:13
pueda llamar a método si hace falta
00:38:16
etcétera
00:38:18
vale, que nos hacemos una tercera clase
00:38:19
trayectoria
00:38:25
porque queremos que esto sea más escalable
00:38:25
por si añado yo propiedades a la trayectoria
00:38:28
como
00:38:31
rugosidad alta o lo que sea
00:38:32
vamos a completarlo antes de parar
00:38:34
para así ya dejar el ejercicio
00:38:36
olvidado, que no se nos olvide
00:38:38
pues venga, me voy a hacer
00:38:40
una clase trayectoria
00:38:42
inicialmente mi trayectoria
00:38:44
solo se va a caracterizar
00:38:49
por un array de puntos
00:38:51
ala, esto es a lo que caracteriza
00:38:53
mi trayectoria, por ahora
00:39:03
a lo mejor en el futuro le meto más propiedades
00:39:05
pero ahora mismo es eso
00:39:07
bueno, una única propiedad
00:39:09
array de puntos, una única
00:39:11
Un get y set
00:39:13
Ahí tengo el get y set
00:39:14
Que como veis el get devuelve un array de puntos
00:39:19
Y el set recibe un array de puntos
00:39:22
Ningún problema
00:39:24
Y ahora vamos a hacerle un constructor
00:39:26
Que es lo habitual
00:39:28
Hacer un constructor
00:39:31
Con parámetros
00:39:32
Vale, ya tengo mi constructor
00:39:37
Vale
00:39:38
¡Hala! Ya está
00:39:41
Ahora
00:39:44
¿Cómo cambia mi programa?
00:39:46
Pues vamos a copiarlo en un main2
00:39:49
main2, vale
00:39:50
sería este, bueno
00:40:01
¿cuánto gasta tu coche?
00:40:03
muy bien, hago mi vehículo, trayectoria
00:40:05
vale, leo
00:40:07
los puntos, y una vez que tengo ya
00:40:09
los puntos leídos
00:40:11
pues ahora ya
00:40:13
me podría
00:40:15
hacer un objeto
00:40:18
trayectoria
00:40:19
un objeto trayectoria
00:40:20
que sería new
00:40:22
trayectoria a la que le paso
00:40:24
ese array de puntos
00:40:29
Ese array de puntos
00:40:30
Que lo he llamado así
00:40:32
Vale, ahora tengo
00:40:33
Ese array de puntos envuelto
00:40:38
En este objeto trayectoria
00:40:40
Bueno, pues vamos a añadir
00:40:41
Otro método
00:40:44
En vehículo
00:40:46
La versión 2 de este
00:40:47
Que recibe el objeto trayectoria
00:40:49
Vamos a hacer la versión 2 de este
00:40:52
Copiadlo
00:40:53
Y pegadlo
00:41:00
Pero llamadle aquí
00:41:02
Pues versión 2
00:41:03
Copiad el de arriba
00:41:04
Versión 2
00:41:07
Esta versión 2 no recibe la raíz de puntos
00:41:08
Recibe el objeto trayectoria
00:41:11
Que los tiene dentro
00:41:13
¿Eh?
00:41:14
¿Por qué?
00:41:19
Vale, pues entonces esta versión 2
00:41:24
De este método
00:41:27
Recibe el objeto trayectoria
00:41:28
No recibe la raíz de puntos
00:41:30
Yo veo esto y digo, raíz de puntos
00:41:32
¿Qué será esto? Una raíz de puntos
00:41:34
Una raíz de puntos de examen
00:41:35
¿Una raíz de qué?
00:41:37
sin embargo veo esto y digo
00:41:38
este método trabaja con trayectorias
00:41:40
parece que no
00:41:43
a lo mejor en este contexto no se ve tan claro
00:41:44
que sea más útil
00:41:47
pero en general si lo es
00:41:49
vale y en que me cambia esto
00:41:51
pues me cambia que ahora
00:41:53
yo ya puntos
00:41:55
este array es la propiedad
00:41:57
punto de trayectoria es decir será
00:41:59
t.get
00:42:00
puntos es lo que me cambia
00:42:02
es lo que me cambia
00:42:04
Que mi array puntos se ha convertido
00:42:07
En la propiedad puntos de t
00:42:14
Eso es lo que cambia
00:42:16
Que mi array puntos
00:42:18
Se ha convertido en la propiedad
00:42:19
Puntos de t
00:42:22
En esta y en esta
00:42:23
¿Veis? Ahora le paso la trayectoria
00:42:25
Trayectoria, su array está dentro
00:42:31
Lo saco con el get
00:42:34
Con get puntos
00:42:36
Pues ya está, no pasa nada
00:42:37
Este es mi array con su longitud
00:42:39
La posición id de ese array mío
00:42:41
la posición y más uno de ese array
00:42:44
que está dentro de t
00:42:47
vale
00:42:48
es el mismo método de arriba pero en lugar de
00:42:50
trabajar con un array directamente
00:42:55
trabaja con lo que hay dentro de esto
00:42:58
y ahora en mi main2
00:43:00
en mi main2
00:43:05
su gasto ha sido
00:43:07
pues yo ahora
00:43:08
cuando llame al versión 2
00:43:10
le llamo
00:43:13
le paso el objeto
00:43:15
tr, este de aquí
00:43:17
vale
00:43:18
Mi método versión 2
00:43:21
Necesita el objeto trayectoria
00:43:24
Que tiene el array dentro
00:43:26
Pues ahí va, el objeto trayectoria
00:43:27
Con el array dentro
00:43:30
¿Vale? Venga, pues ahora sí que paramos
00:43:31
Iba a decir para que vayáis al baño
00:43:38
Pero eso duele
00:43:39
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 1
- Fecha:
- 12 de diciembre de 2025 - 13:57
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 43′ 42″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 175.32 MBytes