Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 15-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:
Vale, uno al que se le pasan los parámetros para que en el momento de crear el objeto
00:00:00
ya el objeto se cree con los valores y otro vacío por si uno quiere crear el objeto
00:00:08
pero todavía no tiene valores para los campos y los quiere dar más adelante.
00:00:13
Bueno, pues este solo es el aspecto típico de una clase entidad, el aspecto típico.
00:00:18
Vale, vamos a añadirle algo más para que sea un poquito más complicado.
00:00:25
Bueno, pues el que me explicó, el que me dijo que tenía necesidades de hacer esta aplicación
00:00:30
bueno, pues me dice, oye, a ver, que los pedidos pueden tener diferentes elementos.
00:00:34
Puede ser un pedido que tenga bolis, carpetas, etc.
00:00:40
Entonces yo en el pedido a lo mejor puedo incorporar cosas o quitar cosas.
00:00:44
Entonces eso como lo meto.
00:00:49
Entonces ahora ya viene, el cliente ya te ha soltado esto y ahora tú ya te pones a pensar
00:00:51
y dices, a ver, de qué manera puedo yo reflejar aquí en mi aplicación
00:00:57
que un pedido puede tener bolis, gomas, carpetas y de repente le quito las carpetas
00:01:01
y solo tiene bolis y gomas o a las bolis, gomas y carpetas ahora le quiero añadir
00:01:06
ordenadores, ¿cómo puedo reflejar yo esto?
00:01:11
Bueno, hay muchas alternativas, malas, buenas, peores.
00:01:15
Uno podría decir, uy, lo voy a meter en el string.
00:01:18
Hago un string separado con guiones, bolis, guion, carpeta, guion.
00:01:21
Ostras, pero añadir un pedido, vale, añadir un nuevo elemento de pedido, bueno, vale.
00:01:26
Es concatenarlo con un guion y el elemento.
00:01:34
Pero es un rollo, porque si tengo que hacer búsquedas, ¿este pedido tiene bolis?
00:01:36
Pues tengo que ir haciendo sub-string de mi string, a ver si tiene bolis dentro.
00:01:42
Vaya manera de hacer un diseño que luego te complica las búsquedas, ¿no?
00:01:46
De elementos y todo.
00:01:50
Y no solo eso, sino que además luego la aplicación en el futuro cambia
00:01:52
y te dicen, oye, de cada elemento de pedido, por favor, que la aplicación
00:01:55
también pueda recoger cuántos bolis ha pedido.
00:02:00
No solo si el pedido ha pedido bolis, no solo si el pedido tiene bolis, carpetas,
00:02:04
sino además que me recoja cuántos bolis tienen.
00:02:08
Ostras, pues con el diseño que yo tenía, que los elementos estuvieran en un string
00:02:11
separados por guiones, recoger eso se me complica.
00:02:16
¿Qué hago? ¿Añado a ese string el numerito?
00:02:19
Mira, se empieza esto ya a volver loco.
00:02:22
Entonces, ¿qué quiero decir con esto?
00:02:25
Que hay diseños buenos y malos, en el sentido de que nos pueden complicar
00:02:27
más o menos las funcionalidades y sobre todo nos pueden complicar más o menos
00:02:32
la ampliación de funcionalidades, la mejora del código.
00:02:38
Vale, pues en este caso, que el cliente te ha dicho, oye, que mi pedido puede
00:02:44
que tenga diferentes elementos.
00:02:48
Ahora ya entras tú, él ya se va.
00:02:50
¿Cómo recojo esto?
00:02:52
Hombre, pues entonces lo mejor es que hagas una clase para eso.
00:02:53
Que cada elemento de pedido sea parte de una clase, cada elemento de pedido.
00:02:56
Y así si en el futuro cada elemento de pedido, sea bolis, carpetas,
00:03:01
la aplicación se amplía y tienes que recoger para cada elemento de pedido
00:03:05
cuántos hay, cuánto valen.
00:03:09
Estupendo, como es un objeto le añades propiedades y ya está.
00:03:11
Bueno, pues entonces sería la opción que elegiríamos para esto.
00:03:15
Me han dicho que cada pedido tiene que incluir elementos de pedido.
00:03:18
Pues voy a hacer una clase aparte, una clase para reflejar ese concepto.
00:03:22
Elemento de pedido, o item, o como uno lo quiera llamar.
00:03:26
Y ahora ya mi clase pedido tendrá como propiedad el conjunto de esos.
00:03:31
Y se acabó.
00:03:36
Será un diseño siempre mucho mejor.
00:03:37
Un diseño mucho mejor.
00:03:39
¿Vale?
00:03:41
Que no meterlo todo en un string, que solo se va a acabar convirtiendo
00:03:42
en algo inmanejable.
00:03:45
Pues venga, vamos a hacer una clase aparte.
00:03:47
Una clase aparte, item, que es un nombre más cortito.
00:03:52
Vamos a llamar item.
00:03:57
Y ahora esto vendría como fruto de haber hablado con el cliente de cada item.
00:04:00
¿Qué nos interesa?
00:04:05
Pues podría ser la descripción y la cantidad.
00:04:07
Y ya está.
00:04:10
La descripción y la cantidad.
00:04:11
Pues venga, dos propiedades aquí.
00:04:15
La descripción va a ser un string.
00:04:17
Y la cantidad, pues un entero.
00:04:22
¿Vale?
00:04:30
Y ahora ya nos ponemos a hacer lo estándar, lo que siempre se hace.
00:04:31
Los constructores y los getter y los setter.
00:04:34
Hacemos el constructor usando los parámetros, que nos es muy útil siempre.
00:04:43
Super no va a hacer nada estando, pero lo quitamos.
00:04:49
Hacemos un constructor sin parámetros.
00:04:56
El super lo mismo.
00:05:01
Y los getter y setter.
00:05:07
Vale, ya tenemos aquí nuestro item.
00:05:20
Vale, entonces aquí vamos a reformular un poco esto.
00:05:25
Porque claro, esto del precio del pedido, hombre, tiene sentido.
00:05:29
Que el precio del pedido efectivamente sea la suma de lo que cuesta cada item.
00:05:34
¿No?
00:05:39
Entonces tiene mucho más sentido ahora que el precio esté en el item.
00:05:40
O sea, que el item diga un boli, cuesta esto, lo que cuesta.
00:05:45
Y ya el precio del pedido ya se podrá calcular.
00:05:49
Entonces, este precio aquí, vamos a quitar el precio en el pedido.
00:05:51
Porque con la nueva ampliación, el precio, su sitio es el item, el boli.
00:05:56
¿Cuánto cuesta el boli?
00:06:03
¿Cuánto cuesta el...?
00:06:04
Sí, pero los precios de los items los tienes que saber.
00:06:13
Entonces, tendrían que estar recogidos aquí.
00:06:16
Sí, pero el precio del pedido...
00:06:19
A ver, el precio...
00:06:21
Claro, pero el precio del pedido lo podrás tú obtener sumando el otro.
00:06:23
Entonces, ¿para qué duplicar la propiedad?
00:06:27
¿No?
00:06:30
Vale, entonces esta es una tarea habitual.
00:06:31
Tener que estar reformulando.
00:06:33
Según te van diciendo ampliaciones, tienes que estar reformulando.
00:06:34
¿Dónde ubico esto?
00:06:37
Entonces, claro, no es trivial el hacer un diseño que refleje lo mejor posible
00:06:38
cómo es la realidad.
00:06:45
Y la realidad es que lo que cuesta son las cosas sueltas.
00:06:47
Lo que cuesta es el boli.
00:06:51
Lo que cuesta es la goma.
00:06:52
Lo que cuesta es no sé qué.
00:06:53
Eso es lo que cuesta dinero.
00:06:55
Entonces, tiene sentido que el precio vaya ahí.
00:06:56
¿Que se puede hacer otro diseño?
00:06:59
Claro que se puede hacer.
00:07:01
Vale, entonces, si ponemos aquí el precio,
00:07:05
ahora el constructor con parámetros le falta un parámetro.
00:07:08
Bueno, vamos a añadírselo ahí.
00:07:13
No pasa nada.
00:07:15
Vale, no hace falta que lo generemos otra vez con el eclipse,
00:07:16
que no somos tontos.
00:07:19
Ya sabemos lo que hace el constructor con parámetros.
00:07:20
Recibe un parámetro por cada propiedad y los usa para inicializar.
00:07:23
Ahora el constructor ya está.
00:07:39
El constructor ya ha incorporado esta propiedad.
00:07:43
Vale, se le pasa por aquí.
00:07:49
Porque cuidado, que porque a veces usamos el eclipse
00:07:52
para generar código automáticamente,
00:07:55
no perdamos de vista nunca lo que estamos haciendo.
00:07:57
Vale, entonces, ¿qué falta aquí?
00:08:03
Falta un get y un set.
00:08:04
Vamos a hacerlo a mano.
00:08:07
No vamos a ser vagos y no lo vamos a...
00:08:08
Vamos a hacer a mano el get y el set del que nos falta.
00:08:10
Bueno, pues el get ya sabemos qué tipo de método es.
00:08:12
El get nos devuelve esa propiedad.
00:08:16
Luego tiene data del cuadro de retorno.
00:08:20
El get, si sigo la nomenclatura estándar que debo seguirla,
00:08:22
siempre es get, nombre de la propiedad empezando con mayúscula
00:08:27
y sin parámetros.
00:08:31
¿Y qué me hace el get?
00:08:33
Me devuelve la propiedad.
00:08:34
El eclipse, como veis, le...
00:08:37
Lo he hecho tal cual, ¿no?
00:08:44
Vale, pues ya está.
00:08:46
Ya he hecho el get.
00:08:47
Este método me devuelve el valor de esa propiedad
00:08:48
cuando yo lo invoque.
00:08:51
Y me falta el set para el precio.
00:08:53
De nuevo método público para que pueda ser llamado
00:08:55
desde fuera del paquete.
00:08:58
El set no devuelve nada porque lo que hace
00:08:59
es asignar un valor a la propiedad
00:09:03
No devuelve nada.
00:09:06
Y si sigo la nomenclatura, pues set seguido del nombre
00:09:07
de la variable empezando con mayúscula.
00:09:10
¿Y qué le tengo que pasar al set?
00:09:12
Un valor nuevo, un valor nuevo para esa propiedad.
00:09:14
Un valor nuevo.
00:09:19
Pues venga, un valor nuevo.
00:09:21
Y ahora ya, ¿qué hago con ese valor nuevo?
00:09:23
Se lo asigno a la propiedad.
00:09:26
Perdón, es dabble, sí.
00:09:31
Vale, pues ya he hecho los get y set que me faltaban.
00:09:36
Entonces estos métodos, de nuevo, están claros
00:09:44
a lo que sirven, cómo los hacemos, etc.
00:09:47
Son los que ya hemos estado trabajando otros días.
00:09:49
Vale, pues mi clase pedido ya aparentemente
00:09:52
tiene todo lo necesario para cumplir las tareas
00:09:57
que el cliente me ha dicho que tiene que cumplir.
00:10:02
Y en esas tareas solo necesitamos conocer descripciones,
00:10:04
cantidades y precio.
00:10:07
Luego ya en el mail, ya fijaremos unas tareas concretas
00:10:08
para hacer.
00:10:11
Sí, eso he dicho antes que ese método lo borrábamos
00:10:14
porque lo pusimos para explicar métodos.
00:10:18
El otro día tenemos el pedido a palo seco.
00:10:20
Vale, ahora mismo.
00:10:23
El pedido con las tres propiedades.
00:10:24
Los dos constructores y los get y los set.
00:10:27
Esto es todo lo que le hace falta a la aplicación,
00:10:30
hacer de los ítems.
00:10:33
Vale, esto de los ítems.
00:10:34
Ahora vámonos al pedido.
00:10:35
Vale, porque el ítem, esta propiedad, esta clase
00:10:38
la hemos metido nueva porque el cliente nos ha dicho
00:10:40
oye, mis pedidos pueden ser de varias cosas
00:10:44
y yo puedo necesitar meter cosas nuevas
00:10:46
o quitar cosas nuevas.
00:10:49
Como el cliente nos ha dicho eso,
00:10:50
hemos incorporado esta clase adicional.
00:10:52
Ahora ya que esta clase adicional ya está,
00:10:55
volvemos a pedido.
00:10:56
Vale, pedido.
00:10:58
¿Qué tiene el pedido?
00:10:59
Su código, su descripción y el conjunto de ítems.
00:11:00
Obviamente, el conjunto de ítems.
00:11:07
Para eso hemos hecho esa clase.
00:11:09
Vale, pues tiene otra propiedad entonces
00:11:11
que es privada y como esta propiedad son
00:11:13
todos los ítems que tiene, pues va a tener que ser esto.
00:11:17
Esto o luego cuando tengamos ya colecciones, sets, listas,
00:11:22
se puede cambiar esto a una lista, a un conjunto
00:11:26
y la aplicación va a funcionar igual.
00:11:28
¿Vale?
00:11:31
Pues llamémosle ítems por ejemplo.
00:11:34
Ítems pedido.
00:11:36
Así.
00:11:38
Vale, entonces.
00:11:49
Hemos añadido esta propiedad.
00:11:52
Por ahora parece ser que es lo único
00:11:54
que vamos a necesitar en pedido, por ahora.
00:11:56
Que es el código, la descripción y ítems pedido.
00:12:00
Vale.
00:12:02
Pero vamos a seguir pensando.
00:12:03
Bueno, no.
00:12:07
Vamos a dejarlo para cuando metamos el cliente.
00:12:08
Vale, pues como hemos añadido una propiedad,
00:12:10
nos falta modificar.
00:12:13
Este precio de aquí se va.
00:12:15
¿Vale?
00:12:17
Y este que dice de aquí se va.
00:12:19
¿Vale?
00:12:23
Entonces pedido tiene ahora código, descripción
00:12:24
y sus elementos.
00:12:27
¿Que queremos obtener el precio de ese pedido?
00:12:29
Ahora lo haremos.
00:12:32
Ahora lo haréis.
00:12:33
Nos metemos en los ítems para sumarlo.
00:12:34
Ahora lo haremos.
00:12:36
¿Vale?
00:12:37
Pero estas son las tres propiedades que tiene.
00:12:38
Constructor.
00:12:40
El constructor vamos a quitarle este parámetro
00:12:41
precio que ya no lo necesita.
00:12:43
¿Vale?
00:12:48
Y ahora, ¿qué nos falta en el constructor?
00:12:49
Hombre, tenemos un constructor con parámetros
00:12:52
que solamente recibe los dos primeros.
00:12:55
El otro no los recibe.
00:12:58
Pues hombre, vamos a hacer un constructor que reciba los tres.
00:13:00
¿Vale?
00:13:03
Pues otra vez lo de siempre.
00:13:06
Le paso un parámetro que sea la array
00:13:13
y ahora ya a esa propiedad.
00:13:16
Ahora ya tenemos un constructor con los tres parámetros
00:13:26
y otro vacío.
00:13:29
¿Vale?
00:13:36
Situación habitual.
00:13:39
Cuando tenemos una clase que una de sus propiedades
00:13:42
significa algo de este estilo.
00:13:45
Es un conjunto de cosas que van a ir creciendo,
00:13:47
encogiendo, creciendo, encogiendo
00:13:49
según la vida de la clase.
00:13:51
Según la vida del objeto va evolucionando.
00:13:54
El objeto pedido se instanciará en algún momento.
00:13:57
Este y otros mil más.
00:13:59
El objeto pedido se instanciará.
00:14:01
Y en ese objeto pedido, pues los ítems
00:14:03
al principio tendrá unos, luego a lo mejor se le meten más,
00:14:06
luego a lo mejor se le meten menos.
00:14:09
¿Vale?
00:14:12
Entonces en una situación como esta
00:14:13
en la que un objeto tiene como propiedad
00:14:14
una cosa que es una colección,
00:14:17
un array, o sea un conjunto de cosas,
00:14:19
una colección, un array,
00:14:21
es muy habitual, ahora lo pongo en comentarios
00:14:22
en el método,
00:14:25
hacerle un constructor en el cual
00:14:26
sólo use las propiedades que no son el conjunto.
00:14:28
De tal forma que tú puedas crear
00:14:31
un pedido sólo con código y descripción
00:14:33
y luego ya le vayas tú añadiendo los ítems
00:14:35
o quitándolos según te dé la gana.
00:14:38
Pero tener la opción de hacer un pedido
00:14:40
por ahora sin nada, en su conjunto de cosas.
00:14:42
Sin nada.
00:14:45
Y luego tú lo vas añadiendo después.
00:14:46
Es algo habitual.
00:14:48
Pues vamos a hacer ese constructor.
00:14:49
Voy a ponerlo aquí en comentarios.
00:14:51
Cuando una clase tiene una propiedad
00:14:57
que es, voy a decirlo en general,
00:15:03
un conjunto, cuando yo digo un conjunto
00:15:05
es muchos de algo.
00:15:07
Y ese muchos de algo hasta ahora
00:15:08
nosotros sólo lo estamos pudiendo hacer
00:15:10
con array.
00:15:12
Más adelante lo haremos con otras cosas.
00:15:13
Pues cuando una clase tiene una propiedad
00:15:15
que es un conjunto de otras cosas,
00:15:17
en este caso un conjunto de ítems, ¿verdad?
00:15:21
Pero podría ser un conjunto de string,
00:15:24
un conjunto de lo que sea.
00:15:26
Pues cuando una clase tiene una propiedad
00:15:28
que es un conjunto de otras cosas
00:15:30
es habitual
00:15:32
crear un constructor
00:15:38
que no inicialice
00:15:40
esta propiedad.
00:15:48
Que no la inicialice.
00:15:52
Entonces el conjunto de cosas
00:15:54
cuando el objeto es instancia
00:15:56
ese conjunto está vacío.
00:15:57
Y ya se irán añadiendo cosas.
00:15:59
Ya se irán metiendo cosas.
00:16:00
De tal manera que ese conjunto
00:16:11
se vaya llenando o vaciando
00:16:12
a lo largo de la vida del objeto.
00:16:14
Se vaya llenando o vaciando
00:16:18
posteriormente.
00:16:24
Posteriormente.
00:16:26
¿Vale? Relativamente habitual.
00:16:28
Bueno, pues tiene sentido.
00:16:30
¿No? Hacer un constructor
00:16:32
que solamente inicialice
00:16:33
código y descripción.
00:16:34
Por ahora sin pedidos.
00:16:36
Y ahora ya
00:16:38
le vamos añadiendo pedidos
00:16:40
o quitando.
00:16:41
¿Vale? Es un modelo de diseño habitual.
00:16:43
Pues venga, vamos a ponerle
00:16:45
ese constructor.
00:16:47
Ese constructor.
00:16:49
Vale, vamos a generarlo
00:16:51
también automáticamente
00:16:52
para no escribir tanto
00:16:53
souls, el get,
00:16:54
generar constructor usando campos.
00:16:55
¿Pero qué campos?
00:16:57
Pues de selección o ítems
00:16:59
y marco sólo los dos de arriba.
00:17:00
Entonces hacemos un constructor
00:17:03
que use sólo código y descripción.
00:17:05
¡Hala! Generado. Aquí está.
00:17:09
Me lo ha metido ahí en medio de...
00:17:11
Bueno, mete donde le da la gana.
00:17:13
Así que lo voy a poner aquí debajo.
00:17:15
Y le quito el super.
00:17:18
¡Hala! Ya tenemos un constructor
00:17:20
que sólo inicializa código y descripción.
00:17:22
Entonces cuando instanciemos un objeto
00:17:24
con new pedido de esto
00:17:26
su conjunto de ids va a estar a null.
00:17:28
Va a ser null.
00:17:30
Pero luego ya la idea es ir
00:17:32
añadiendo pedidos a ese objeto.
00:17:34
Esto es también la siguiente pregunta.
00:17:36
¿Cómo añado yo pedidos?
00:17:38
Porque añadir un pedido
00:17:40
implicará acceder a este array
00:17:42
que es privado. ¿Cómo?
00:17:44
Podría con el set.
00:17:46
Pero hombre, es feo
00:17:48
usar el set para esto.
00:17:50
Porque el set es para fijar
00:17:52
un array de golpe.
00:17:54
Y yo lo que quiero es simplemente
00:17:56
a los ítems que hay en un momento dado
00:17:58
añadir uno nuevo.
00:18:00
¿Entendéis la diferencia?
00:18:02
Te doy un array entero y con ese array
00:18:04
sobrescribes al que ya haya.
00:18:06
Ese set me puede ser útil
00:18:08
en un momento dado.
00:18:10
El array de ítems que haya
00:18:12
lo quiero sobrescribir entero por otro nuevo.
00:18:14
Puede usar eso.
00:18:16
Voy a necesitar eso alguna vez.
00:18:18
Pero también hay una necesidad
00:18:20
que seguramente yo tenga que es
00:18:22
añadir uno solo al array simplemente.
00:18:24
Que no es hacer el set.
00:18:26
Es añadir uno solo al que ya haya.
00:18:28
En este caso me está pidiendo
00:18:30
esto a Gritos que haga un método
00:18:32
añadir ítem.
00:18:34
Me lo está pidiendo a Gritos.
00:18:36
Añadir ítem.
00:18:38
¿Cómo haríamos el método añadir ítem?
00:18:40
Primero vamos a darle el nombre.
00:18:42
AddItem. Ese sería el nombre.
00:18:44
Añadir ítem al pedido.
00:18:46
¿Qué parámetro necesitaría este método?
00:18:48
Un objeto ítem añadir.
00:18:52
Necesitaría este método.
00:18:56
Este método
00:18:58
aparte de ser público
00:19:00
para poder ser llamado desde fuera
00:19:02
del paquete entidades.
00:19:04
Este método
00:19:06
me tiene que devolver algo.
00:19:08
No, no me estáis diciendo.
00:19:12
No, porque el resultado
00:19:14
añadir el ítem ya se queda reflejado aquí.
00:19:16
En este array.
00:19:18
No me tiene que devolver nada.
00:19:20
Ya se queda reflejado ahí.
00:19:22
Yo aquí pongo un void.
00:19:24
¿Vale?
00:19:26
Entonces, este método
00:19:32
me va a ser muy útil para añadir ítems al pedido.
00:19:34
Vale.
00:19:36
Venga, pues
00:19:38
hacedlo ahora vosotros.
00:19:42
Hacedlo ahora.
00:19:44
A ver si antes del requerido nos da tiempo a
00:19:46
dejarlo aquí puesto.
00:19:48
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 5
- Fecha:
- 15 de enero de 2024 - 11:05
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 378.12 MBytes