Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 19-12-23 - 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:
Bueno, a ver. No, no voy a hablar de nada que no queráis que hablemos.
00:00:00
Vamos, que yo no tengo ninguna idea para ese día.
00:00:08
Me dijeron ayer, necesito el tutorial de 9 a 10. Vale, pues ya está.
00:00:11
Ya, ya, ya, ya lo sé.
00:00:16
Venga, a ver. A ver, tenemos esta primera hora intensa.
00:00:19
El domingo si se ponen faltas.
00:00:24
El domingo si se ponen faltas. Si no estás aquí el domingo te pongo una falta gorda, gorda.
00:00:25
No se ponen faltas. Bueno, yo por lo menos no pongo faltas.
00:00:29
Vale, a ver. Tenemos una hora de aquí hasta las 12.40 intensa,
00:00:35
en la que voy a tener que hablar mucho y soltar mucho rollo,
00:00:40
porque luego las otras dos siguientes horas tengo lecturas de proyecto, etcétera,
00:00:42
con lo cual me iré y os podéis quedar haciendo ejercicios.
00:00:47
Y bueno, si alguien sí quiere ir, pues no le vea a que se quede,
00:00:52
porque yo no voy a poder estar aquí. Vale.
00:00:58
Bueno, pues venga, vamos a revisar y añadir unas cuantas cosas
00:01:01
en cuanto a operación y orientación de objetos para que ya en navidades
00:01:07
podáis trabajarlo más a partir de ejercicios que dejemos,
00:01:12
podáis trabajar ya con conocimientos suficientes para hacer un poquito más.
00:01:16
¿Vale? Silencio. Bueno, pues a ver.
00:01:20
Silencio. Bueno, pues a la hora...
00:01:34
A ver, ¿os queréis callar y estar en absoluto silencio,
00:01:40
aunque no me escuchéis que eso me la refanfifla completamente?
00:01:43
Lo que quiero es silencio absoluto. Así. Este perfecto.
00:01:46
Ismael y Ricardo. También aplica. Vale.
00:01:51
Tienes que ser capaces de aguantar callados, de verdad que no es tan complicado.
00:01:56
Así mejor. Vale. Pues todos sabéis lo que es una clase
00:02:00
y luego ya lo que significa crear un objeto de esa clase.
00:02:05
Uno, dos, tres o mil. Vale.
00:02:10
Una clase tiene dos partes. La parte de propiedades,
00:02:13
que también sabemos todos lo que significa.
00:02:17
No repito todo una y otra vez. Y la parte de métodos,
00:02:21
que también sabemos todos lo que significa. ¿Vale?
00:02:25
Lo que va a caracterizar al objeto que exista en el futuro de esa clase
00:02:30
está aquí en propiedades y lo que ese objeto va a poder llamar
00:02:35
para que se ejecute está aquí en métodos.
00:02:40
Bueno, entonces en nuestra clase pedido con nuestras propiedades y nuestros métodos
00:02:43
luego vimos que en una aplicación, ahora ya con un main que se puede ejecutar
00:02:47
en una aplicación, uno crea ya todos los pedidos que dé la gana.
00:02:52
Metidos en un array, sueltos, como sea.
00:02:56
Y cuando lo cree siempre lo va a hacer con algo de este estilo.
00:02:59
Pedido p igual a new pedido. Vale.
00:03:03
Bueno, pues nosotros hemos puesto aquí el new pedido y hemos dicho
00:03:11
con este término new, nombre de la clase y paréntesis,
00:03:16
hemos dicho que lo que ocurre es que de repente aparece un objeto en memoria.
00:03:22
Eso es lo que hemos dicho que ocurría cuando hacíamos esta llamada.
00:03:28
Que de repente aparece un objeto en memoria y este objeto en memoria
00:03:31
se quede apuntado por una dirección que está guardada en esa variable p.
00:03:35
Esto es el resultado de hacer esta llamada new pedido.
00:03:42
Que aparezca esto en memoria.
00:03:46
Y como ya ha aparecido ese espacio en memoria, a partir de entonces
00:03:48
ya podemos mediante p punto no sé cuántos, p punto no sé qué,
00:03:52
acceder al espacio de este objeto para guardar las propiedades.
00:03:56
Pues cliente, identificador, las propiedades que sea.
00:04:02
Bueno, vale, pues tenemos que meternos ahora ya que entendemos
00:04:05
lo que es un método un poquito más con esta llamada.
00:04:09
Que hasta ahora lo único que sabemos es que lo que significa es
00:04:12
que aparece ese espacio en memoria y se queda apuntado a por p.
00:04:15
Vale. Pero es que además esta llamada también hace algo.
00:04:18
Y es llamar a un método, y ya sabemos lo que es un método.
00:04:23
Un método es un trozo de código que hay dentro de la clase, bajo un nombre.
00:04:28
Pues mostrar descripción, lo que sea, un trozo de código bajo un nombre
00:04:34
que se puede ejecutar cuando lo llama el objeto en su método.
00:04:40
Bueno, pues hay unos métodos especiales que no hemos escrito hasta ahora
00:04:43
ni hemos visto porque no es obligatorio que estén,
00:04:48
que son los métodos constructores.
00:04:51
Entonces, y son los únicos especiales.
00:04:56
Vamos a ponerlo aquí.
00:05:02
Dentro de los métodos existen unos especiales,
00:05:04
especiales porque se saltan algunas de las reglas de construcción
00:05:13
de métodos que vimos el otro día.
00:05:17
Bueno, pues dentro de los métodos existe un método especial
00:05:23
que es el método constructor.
00:05:32
Y se llama así, método constructor.
00:05:36
Pues entonces dentro de los métodos que ya hemos visto,
00:05:46
los métodos como se codifican.
00:05:49
Un nombre, parámetros que recibe si es que recibe alguno,
00:05:51
tipo de dato de retorno, el código que tiene dentro.
00:05:55
Ese es el concepto de método que ya sabemos lo que es.
00:05:58
Bueno, pues dentro de todos los métodos que puede tener una clase,
00:06:01
que puede tener uno o mil, uno o mil los que yo quiera programar,
00:06:05
dentro de todos los métodos puede haber uno especial
00:06:09
que todavía no lo hemos incorporado, que se le llama método constructor.
00:06:12
Y vamos a ver este método porque es especial y que hace.
00:06:17
¿Vale? Ese método especial dentro de los métodos.
00:06:20
Vale, pues vamos a verlo.
00:06:23
Vale, pues el método constructor de una clase es un método
00:06:43
que obligatoriamente, obligatoriamente se tiene que llamar,
00:06:47
obligatoriamente se tiene que llamar.
00:06:51
Voy a hacer aquí un método constructor, para esta clase no está pedido.
00:06:54
Pues el método constructor de una clase cualquiera,
00:07:01
pedido, cliente, persona, alumno, la que sea.
00:07:04
El método constructor de una clase cualquiera,
00:07:07
obligatoriamente se tiene que llamar igual que la clase a la que pertenece.
00:07:09
Esa es, obligatoriamente se tiene que llamar, igual que la clase.
00:07:20
¿Vale? Esa es la primera característica que lo hace especial.
00:07:23
Que yo no puedo elegir su nombre.
00:07:27
Se tiene que llamar como la clase a la que pertenece.
00:07:29
Luego este método se salta, ese convenio de programación
00:07:34
de que los métodos empiecen por minúscula.
00:07:38
Porque si se tiene que llamar igual que la clase,
00:07:41
y la clase seguimos el convenio de programación establecido entre todos,
00:07:44
que empiecen con mayúscula, pues el constructor va a empezar con mayúscula.
00:07:48
¿Vale? O sea, el constructor no hay elección.
00:07:52
Se tiene que llamar exactamente igual que la clase.
00:07:54
Si yo hago otro método que se llame así,
00:07:59
pues este será otro.
00:08:02
Este ya no es el constructor, será otro el método que yo quiera hacer.
00:08:03
Ya no será el constructor, será otro método cualquiera.
00:08:07
Con su nombre, sus parámetros, si es que tiene, su valor de retorno, será otro.
00:08:10
Pero el constructor se tiene que llamar igual que la clase.
00:08:14
Y como ya sabéis que esto es sensible a minúsculas y mayúsculas.
00:08:18
Vale, pues esta es la primera cosa que le hace especial.
00:08:21
¿Qué parámetros recibe el constructor?
00:08:26
Los que a mí me dé la gana.
00:08:28
¿Y qué código? Sobre esto nos metemos ahora.
00:08:32
¿Y qué código tiene aquí el constructor?
00:08:35
El que a mí me dé la gana.
00:08:37
¿Vale?
00:08:40
Todavía no me meto con esto.
00:08:41
Entonces, ahora la pregunta sería, ¿vale?
00:08:44
¿Y para qué sirve ese método?
00:08:46
¿Cuándo llamo yo a ese método?
00:08:48
¿Por qué tiene que haber un método que se llame así?
00:08:49
Bueno, pues ahora ya sí que nos vamos aquí.
00:08:52
Cuando se instancia, ya en una clase main,
00:08:57
una clase que ya empieza, que tiene las sentencias que se van ejecutando.
00:09:00
Cuando se instancia, o se crea,
00:09:04
es sinónimo instanciar, crear un objeto.
00:09:06
Cuando se instancia un objeto,
00:09:08
que nosotros sabemos que eso se hace haciendo newPedido,
00:09:11
pues sí, efectivamente no hemos mentido.
00:09:14
Pasa en memoria principal todo lo que hemos dicho.
00:09:17
Que aparecerá un espacio para guardar las propiedades de este objeto P.
00:09:20
Aquí aparece el espacio para las propiedades.
00:09:25
Ese espacio se queda apuntado por la variable P.
00:09:28
Pasa todo eso cuando se hace newPedido.
00:09:31
Pero además pasa que si existe un método constructor,
00:09:34
es decir, un método que se llama igual que la clase,
00:09:38
además la máquina virtual se va a ejecutar.
00:09:41
Si existe, se va a ejecutarlo.
00:09:46
Si no existe, pues no se va a ejecutarlo porque no existe.
00:09:48
Pero si existe, se va a ejecutarlo.
00:09:51
Entonces ese método, ponerlo, nos viene bien
00:09:53
para hacer a lo mejor tareas de inicializar propiedades del objeto
00:09:56
o hacer cosas.
00:10:00
O cualquier cosa.
00:10:03
Por ejemplo, pues avisar.
00:10:04
Se ha creado objeto.
00:10:06
Lo que a mí me dé la gana puedo poner aquí.
00:10:07
¿Vale?
00:10:14
Luego repito.
00:10:15
Lo que tenemos que saber es que este método constructor,
00:10:16
que obligatoriamente se llama igual que la clase,
00:10:18
es un método que se invoca solo,
00:10:20
cada vez que se instancia un objeto a Tableau.
00:10:22
Se invoca solo.
00:10:26
Además de crear el espacio.
00:10:27
Todo eso se llama aquí.
00:10:28
Es decir, no es un método que uno llame a propósito en cualquier momento.
00:10:30
No.
00:10:33
Es un método que está pensado para ser llamado y ejecutado
00:10:34
como consecuencia de hacer la instanciación de un objeto con new pedido.
00:10:38
Entonces se llama automáticamente.
00:10:42
Luego el uso de ese método será hacer pues tareas de inicialización,
00:10:45
de lo que sea, lo que a mí me apetezca vender.
00:10:49
Ahí ya sí que Java no se mete.
00:10:51
Mete ahí lo que quieras.
00:10:52
Lo que quieras que pase en el momento de construir el objeto.
00:10:53
Lo que quieras que pase.
00:10:57
¿Vale?
00:11:00
Bueno, pues entonces, como este método se llama aquí,
00:11:02
no hay valor de retorno posible.
00:11:06
No hay valor de retorno porque es que esto en realidad
00:11:09
está igual que se asigna aquí.
00:11:12
Ya me está condenando.
00:11:15
O sea, el método no tiene donde devolver el valor de retorno.
00:11:16
No es un método que yo llamo y luego puedo asignar a una variable
00:11:19
la llamada al método.
00:11:22
No funciona así.
00:11:24
En este momento, que la sintaxis es esta,
00:11:25
no tengo donde recoger el valor de retorno.
00:11:27
Luego, los métodos constructores nunca pueden devolver nada.
00:11:31
No hay un retún ahí.
00:11:35
Nunca.
00:11:36
No hay un retún.
00:11:37
Jamás van a tener un retún.
00:11:38
Porque no devuelven nada.
00:11:40
Entonces, tanto es así que no devuelven nada,
00:11:42
que son métodos que tienen la característica especial y solo ellos,
00:11:44
que ni siquiera se pone el void.
00:11:48
Prohibido.
00:11:50
Ni se pone el void.
00:11:51
Nada.
00:11:52
No se pone nada.
00:11:53
Así se escribe el constructor.
00:11:54
O sea, son los únicos métodos,
00:11:56
los únicos,
00:11:58
que no tienen nada delante.
00:12:00
Ni void,
00:12:02
ni el tipo de dato de retorno del método que sea.
00:12:04
No tienen nada.
00:12:07
Porque los constructores, por pura definición,
00:12:08
no pueden devolver nada.
00:12:11
Porque son llamados aquí,
00:12:13
y aquí no puedo poner yo aquí una variable para que recoja el valor.
00:12:15
No puedo ponerla, porque ya tengo que poner esto obligatoriamente.
00:12:18
Ya tengo que ponerlo.
00:12:20
La sintaxis es esta.
00:12:21
Entonces no puedo meter en ninguna variable ningún valor de retorno.
00:12:23
Luego no se pone aquí nada para hacer el constructor.
00:12:27
Bueno, pues en este caso ya tendríamos aquí un constructor ya hecho.
00:12:33
Esta clase nuestra ya tiene un constructor.
00:12:37
En este caso el constructor se va a invocar cada vez que yo creo un objeto.
00:12:40
Y lo único que hace es mostrar un mensajito.
00:12:45
Bueno, pues un constructor poco útil.
00:12:47
Lo normal es darles a los constructores un poquito más de utilidad.
00:12:50
¿Cómo? Pues a lo mejor pasándoles parámetros.
00:12:55
Yo este constructor que he hecho no recibe ningún parámetro.
00:12:57
Lo he declarado así porque me ha dado la gana.
00:13:00
Entonces, como lo he declarado así,
00:13:04
en el momento de hacer new pedido, también lo pongo así.
00:13:06
Pero yo puedo hacer constructores que reciban cosas, parámetros,
00:13:11
igual que cualquier otro método.
00:13:14
Eso sí que lo puedo hacer.
00:13:16
No puedo hacer que devuelvan nada, eso es imposible.
00:13:17
Pero si me da la gana, yo puedo hacer un constructor que reciba parámetros.
00:13:19
Y si los recibe, cuando yo haga el new pedido,
00:13:24
se los tengo que pasar aquí obligatoriamente.
00:13:27
Si yo lo he declarado para que reciba parámetros,
00:13:30
se lo tengo que pasar ahí.
00:13:32
Por ejemplo, el uso habitual de los constructores,
00:13:37
que prácticamente siempre se usan para eso.
00:13:40
Pues para ya que creo el objeto,
00:13:43
vamos a aprovechar para inicializar sus propiedades.
00:13:45
Por ejemplo, pedido.
00:13:48
Imaginaos que tiene dos propiedades,
00:13:49
que son el identificador y la descripción.
00:13:51
¿Vale?
00:13:59
Ahora, vamos a hacerle un constructor,
00:14:00
un método constructor.
00:14:02
El método constructor se tiene que llamar pedido.
00:14:03
Aquí ni void ni nada,
00:14:06
porque es el constructor.
00:14:09
Y ahora, ¿qué parámetros decido pasarle?
00:14:11
Venga, pues vamos a pasarle un id y una descripción
00:14:14
desde fuera, cuando lo llamemos.
00:14:18
Vamos a pasárselo por aquí.
00:14:20
Y vamos a usarlo para que inicialice las propiedades.
00:14:22
Así no tenemos luego que inicializarlas
00:14:25
con p.id, p.descripción.
00:14:27
¿Vale?
00:14:30
Pues ¿qué tenemos que pasarle?
00:14:31
Tenemos que pasarle un id.
00:14:32
Pues venga, le voy a pasar un numerito entero para el id.
00:14:34
¿Qué más le quiero pasar a este método?
00:14:37
Una cadena para que inicialice esta.
00:14:39
Pues venga, le voy a pasar como parámetro una cadena.
00:14:41
string descripción.
00:14:45
¿Vale?
00:14:49
Y ahora,
00:14:50
¿el constructor qué queremos que haga con estos parámetros
00:14:51
que le hemos pasado desde fuera?
00:14:54
Pues con estos parámetros queremos que los utilice
00:14:57
para inicializar las propiedades del objeto.
00:15:00
Pues venga,
00:15:03
la propiedad del objeto dis.id,
00:15:04
que se inicialice con esta,
00:15:08
y la propiedad dis.descripción,
00:15:12
que se inicialice con esta.
00:15:20
Pues este es el aspecto típico de los constructores,
00:15:25
porque suelen valer para esto.
00:15:28
Uno puede poner dentro lo que le la gana, insisto.
00:15:30
Si le interesa que pasen más cosas
00:15:33
en el momento de construir el objeto,
00:15:36
lo pone.
00:15:38
Como si pone ahí 10.000 líneas.
00:15:39
Pero bueno, ¿para qué?
00:15:41
Normalmente cuando uno construye un objeto,
00:15:42
lo más que quiere que ocurra con ese objeto
00:15:45
es darle valor a las propiedades.
00:15:47
Es lo más que quiere.
00:15:49
Pues en ese caso pondré este código y ya está.
00:15:51
Bueno, pues es el constructor típico.
00:15:54
Ahora, ¿cómo usaremos este constructor?
00:15:57
Pues vamos a imaginarnos que queremos crear un pedido.
00:16:00
En nuestra aplicación necesita crear un objeto pedido.
00:16:04
Pues eso no cambia.
00:16:07
Por ejemplo, le llamo p a ese objeto pedido
00:16:09
en mi clase main, que estoy ahora en mi clase main.
00:16:12
Pues venga, ¿cómo creamos un pedido?
00:16:15
new, eso no cambia.
00:16:17
new pedido, eso no cambia.
00:16:19
Pero ojo, ahora los paredes ya no se quedan vacíos,
00:16:21
porque ahora tengo un constructor
00:16:25
que necesita recibir dos cosas.
00:16:28
Si yo lo dejar así vacío,
00:16:31
el compilador, ahora lo repasaremos
00:16:34
y lo comprobaremos todo.
00:16:36
El compilador me diría,
00:16:38
me lo pondría rojito y me diría,
00:16:40
perdona, pero no puedo llamar al constructor
00:16:42
sin parámetros, porque es que el constructor
00:16:45
tú lo has hecho para que reciba
00:16:48
un entero y una cadena.
00:16:50
Perdona, lo has hecho para que reciba
00:16:52
un entero y una cadena.
00:16:54
Luego no lo llames así, porque así no va a funcionar.
00:16:56
Bueno, pues entonces aquí tenemos que pasar
00:16:59
obligatoriamente un entero y una cadena.
00:17:01
El uso normal sería que yo hubiera dicho primero
00:17:03
introduzca el código del pedido, patatín.
00:17:05
Introduzca la descripción del pedido, patatín.
00:17:08
Y ahora le paso aquí esas dos variables.
00:17:10
Vamos a suponer que se las doy directamente
00:17:13
a capón aquí, porque no las he pedido por teclado.
00:17:15
Bueno, esta llamada ya sí que es válida.
00:17:18
Entonces con esto, ¿qué estaríamos haciendo?
00:17:20
Construir un objeto pedido,
00:17:23
que se quede apuntado por P.
00:17:25
Y ahora, además de crear el espacio,
00:17:28
saltamos al constructor.
00:17:31
¿Qué hace el constructor?
00:17:33
Coge 5, se lo asigna la propiedad ID del objeto,
00:17:34
que es esta, ahí se queda el 5.
00:17:38
Y coge descripción, que es D,
00:17:41
y se lo asigna la propiedad de descripción del objeto,
00:17:44
que es esta.
00:17:47
Pues ala, esto habríamos conseguido con esta llamada.
00:17:48
No solo crear el objeto, el espacio en memoria para él,
00:17:52
sino además ya de paso,
00:17:55
dar unos valores iniciales a las propiedades.
00:17:57
Dar unos valores iniciales.
00:18:01
Que es el uso habitual del constructor,
00:18:02
cuando existe, el uso habitual.
00:18:04
A partir de aquí, si yo ahora ya tengo P.ID que vale 5,
00:18:06
P.descripción que vale D,
00:18:11
que las quiero volver a cambiar, pues las vuelvo a cambiar.
00:18:14
Pero ya tengo unos valores iniciales.
00:18:17
¿Vale?
00:18:21
En los ejemplos anteriores,
00:18:26
no habíamos puesto método constructor.
00:18:28
Esto no estaba.
00:18:31
Entonces llamábamos sin parámetros,
00:18:33
lo llamábamos así.
00:18:35
Entonces uno diría, uy, pero si no tengo método constructor,
00:18:38
el compilador como verifica que...
00:18:41
A ver, si yo no he hecho método constructor,
00:18:44
Java se inventa uno y lo pone ahí.
00:18:47
Aunque nosotros no lo veamos físicamente.
00:18:49
Lo pone ahí.
00:18:51
Entonces si mi clase no tuviera método constructor,
00:18:52
porque esto no lo tiene, yo no lo he puesto,
00:18:55
es como si existiera esto.
00:18:58
Que la máquina virtual lo pone y se lo inventa.
00:19:02
Es como si existiera esto.
00:19:04
Pedido sin parámetros y vacío.
00:19:06
Se lo inventa.
00:19:09
Y dice, ¿no tienes método constructor?
00:19:10
Vale, me hago uno sin parámetros, sin código.
00:19:12
Y ahí está oculto, aunque no lo veamos.
00:19:15
Ahí está oculto.
00:19:17
Que este es el que se llama el constructor sin parámetros.
00:19:19
Entonces luego por eso, cuando hemos creado los objetos
00:19:22
en nuestros ejemplos anteriores, los hemos creado así,
00:19:25
sin parámetros.
00:19:27
Porque como no habíamos hecho ni un constructor,
00:19:28
la máquina virtual se ha inventado este.
00:19:30
Que es el que se inventa siempre.
00:19:33
Y este no tiene parámetros.
00:19:34
Luego la llamada encajaba.
00:19:36
Porque sin parámetros, sin parámetros.
00:19:37
Pero siempre se llama un constructor.
00:19:40
O bien el que he hecho yo,
00:19:42
o bien el que la máquina virtual se ha inventado
00:19:44
porque no tiene nada.
00:19:46
Vale.
00:19:53
Vamos a verlo en el eclipse, que se va a ver todo más claro.
00:19:55
Bueno, ya sí que están subidas todas las clases.
00:20:01
Aunque alguna puede estar medio rara
00:20:24
porque se me olvidó cortar a veces en eso.
00:20:26
Pero bueno, ya con las últimas ya están mejor.
00:20:30
Y subido al aula virtual ya el proyecto este
00:20:35
con el que vamos a hacer los ejemplos.
00:20:37
Y los ejercicios que subimos ayer,
00:20:40
que eran sobre el primero y parte del segundo.
00:20:42
Vale, pues sobre este mismo proyecto de ejemplo
00:20:47
que estamos usando de pedidos
00:20:50
y que iremos ampliando e incorporando cosas,
00:20:52
vamos a ampliar ahora con los constructores.
00:20:55
¿Vale?
00:20:57
¿Se ve mejor sin la luz?
00:20:59
Bueno, esto es lo de ayer, vamos a olvidarnos.
00:21:14
Vale, a ver, nuestro ejemplo de clases y objetos.
00:21:22
Vale, esta es nuestra clase pedido de partida.
00:21:26
Tenía tres propiedades, un método comprobar cliente
00:21:29
con lo que estuvimos trabajando,
00:21:33
un método actualiza descripción
00:21:35
y luego ya teníamos aquí uno quantum main
00:21:37
para probar cosas.
00:21:39
¿Vale?
00:21:41
Bueno, pues vamos a ampliar ahora nuestra clase pedido
00:21:42
y vamos a ponerle un método constructor.
00:21:44
Le vamos a poner un método constructor.
00:21:47
Vale, pues venga, el método constructor
00:21:50
se suele poner al principio de todos los métodos,
00:21:52
después de las propiedades.
00:21:55
No es que sea obligatorio,
00:21:57
pero insisto, acostumbraos a seguir estilos de programación
00:21:59
que compartimos todos,
00:22:04
porque vuestros programas si no, no van a valer igual.
00:22:06
Da igual que funcionen,
00:22:09
si no siguen esos estilos de programación compartidos
00:22:11
no van a ser legibles fácilmente
00:22:13
y eso les hace poco valiosos.
00:22:16
Vale, pues el constructor,
00:22:18
vamos a hacer un constructor que,
00:22:21
el constructor estándar,
00:22:24
podríamos hacer cualquier cosa,
00:22:26
pero vamos a hacer un constructor que reciba
00:22:28
tantos parámetros como propiedades tiene el objeto
00:22:30
y los use para inicializar
00:22:34
las propiedades del objeto.
00:22:38
Pues entonces en este caso habrá que pasarle
00:22:40
un código,
00:22:43
una descripción,
00:22:47
una array de clientes.
00:22:50
Vale, ¿y para qué puede usar estos parámetros el constructor?
00:23:00
Pues para la propiedad .código,
00:23:03
obligatorio poner el dis,
00:23:06
porque con el nombre que he elegido para el parámetro
00:23:08
tengo que distinguir,
00:23:10
código,
00:23:12
descripción,
00:23:14
para la propiedad del objeto .descripción,
00:23:16
pues descripción,
00:23:24
y para la propiedad .clientes,
00:23:28
clientes.
00:23:36
Vale, este suele ser el aspecto estándar del constructor.
00:23:38
Como veis, yo aquí no he puesto valor de retorno
00:23:41
y el compilador no se queja ni dice nada.
00:23:44
Dice, vale, muy bien.
00:23:47
Pero sin embargo, si en un método normal y corriente
00:23:49
que no es constructor,
00:23:51
le quitara yo el valor de retorno,
00:23:53
le quitara esto,
00:23:55
automáticamente me diría aquí,
00:23:57
oye, lo siento,
00:23:59
pero me está diciendo,
00:24:01
el tipo de retorno te falta, ponlo.
00:24:03
Es lo que me está diciendo esta cosa amarilla,
00:24:06
oye, oye, que te falta, ponlo.
00:24:08
Claro, porque este no es el método constructor,
00:24:10
es un método normalucho y corrientucho,
00:24:12
entonces todos los métodos normales y corrientes
00:24:14
necesitan el tipo de dato.
00:24:17
Pero aquí en este no me lo ha pedido,
00:24:20
porque este sabe que es el constructor.
00:24:22
¿Y por qué sabe que es el constructor?
00:24:24
Porque se llama exactamente igual que la clase.
00:24:26
Si yo le cambio el nombre y lo llamo así,
00:24:30
ya está, dejó de ser el constructor,
00:24:34
porque le he cambiado el nombre,
00:24:36
dejó de ser el constructor.
00:24:38
¿Pasa algo?
00:24:39
No pasa nada, el código está bien,
00:24:40
todo está bien,
00:24:41
pero lo que pasa es que entonces me dice
00:24:42
el compilador,
00:24:44
oye, este no es el constructor,
00:24:45
con lo cual es obligatorio que le ponga
00:24:46
el valor de retorno.
00:24:48
Bueno, pues yo le pongo el valor de retorno
00:24:49
y ya está.
00:24:51
Pero esto ya no es el método constructor,
00:24:52
esto es otro,
00:24:54
con lo cual este no se va a invocar nunca
00:24:55
cuando se hace el mío, nunca,
00:24:57
porque es otro.
00:24:58
Para que sea el constructor,
00:24:59
por tanto, repito,
00:25:01
se tiene que llamar igual que la clase.
00:25:02
¿Vale?
00:25:04
Y en ese caso,
00:25:05
esto ni se pone nada,
00:25:06
se queda en blanco
00:25:08
para que se vea bien claro
00:25:09
que es el constructor.
00:25:10
Y no me quite los avisos de
00:25:11
oye, ese es constructor,
00:25:13
¿para qué le pones void?
00:25:14
Bla, bla, bla.
00:25:15
¿No es un public?
00:25:16
No pasa nada,
00:25:18
pero eso tiene que ver,
00:25:19
de nuevo,
00:25:20
los public, private, protect, etc.,
00:25:21
tienen que ver con los paquetes.
00:25:23
Y es que los paquetes
00:25:25
todavía no los hemos contado.
00:25:26
Por eso yo no pongo public en nada,
00:25:27
porque no quiero poner nada
00:25:29
que no entendemos lo que significa.
00:25:30
Tú tranquilo,
00:25:32
que tenemos que ver
00:25:33
cómo construir paquetes,
00:25:34
cómo empaquetar con criterio
00:25:35
y cómo hacer modificadores de acceso.
00:25:36
Public, private,
00:25:38
todos esos modificadores de acceso.
00:25:39
Pero claro,
00:25:41
esos modificadores de acceso
00:25:42
existen de momento
00:25:43
en que existen paquetes.
00:25:44
Si no,
00:25:45
no tiene sentido que existan.
00:25:46
Entonces,
00:25:47
como no estamos todavía
00:25:48
trabajando con paquetes,
00:25:49
obvio los public,
00:25:50
los quito siempre.
00:25:51
¿Vale?
00:25:52
¿Qué los pones?
00:25:53
No pasa nada,
00:25:54
no tiene implicaciones.
00:25:55
Ahora mismo,
00:25:56
porque no tiene implicaciones,
00:25:57
pero todavía no las estamos viendo.
00:25:58
Lo puedes poner.
00:25:59
Vale,
00:26:00
pues este es el aspecto estándar
00:26:01
de un constructor
00:26:02
normal y corriente.
00:26:03
Repito,
00:26:06
uno le puede poner
00:26:07
lo que le dé la gana.
00:26:08
Lo que quiera.
00:26:09
Podríamos poner aquí,
00:26:10
ala,
00:26:11
se ha construido el pedido.
00:26:12
¿Vale?
00:26:15
Y ya está,
00:26:16
se ha construido el pedido.
00:26:17
Vale.
00:26:18
Bueno,
00:26:20
pues entonces,
00:26:21
ahora,
00:26:22
podríamos crear
00:26:23
un objeto pedido,
00:26:24
pero ya tendríamos que pasarle
00:26:25
esto obligatoriamente.
00:26:27
Ups.
00:26:29
Por eso,
00:26:30
en mis main de arriba,
00:26:31
ahora ya se me han puesto
00:26:33
en rojo,
00:26:34
porque ahora ya
00:26:35
el compilador me dice,
00:26:36
eh,
00:26:38
ojo,
00:26:39
ojo,
00:26:40
que cuando construyas el objeto,
00:26:41
el constructor que has hecho,
00:26:43
necesita parámetros.
00:26:45
No me llames sin parámetros.
00:26:48
Es imposible,
00:26:50
por eso se me ha puesto en rojo.
00:26:51
¿Vale?
00:26:52
Ahora le ponemos parámetros
00:26:53
y vamos con ello.
00:26:54
Vale,
00:26:55
volvemos un momento
00:26:56
con el aspecto del código.
00:26:57
Vale,
00:26:58
para no tener que escribir tanto,
00:26:59
este estándar
00:27:01
eh,
00:27:03
de forma tan generalizada,
00:27:04
el uso habitual
00:27:05
de los constructores,
00:27:06
suele ser este,
00:27:07
el uso habitual,
00:27:08
que todos los entornos
00:27:09
de desarrollo,
00:27:10
te facilitan
00:27:11
una forma de,
00:27:12
pam,
00:27:13
que te lo escribe el solo.
00:27:14
¿Vale?
00:27:15
Entonces,
00:27:16
si vosotros dais aquí
00:27:17
al botón derecho del eclipse,
00:27:19
esto es un truco para vagos.
00:27:20
¿Vale?
00:27:21
Si le dais al botón
00:27:22
de derecho del eclipse,
00:27:23
si os vais a source,
00:27:24
fuente,
00:27:25
veis que
00:27:26
se os despliega a la derecha
00:27:27
un generar constructor
00:27:28
usando campos.
00:27:29
Campos son propiedades.
00:27:30
¿Recordáis que cuando dijimos
00:27:32
propiedades lo dije?
00:27:33
Dije,
00:27:34
en inglés
00:27:35
se suele usar el término fill.
00:27:36
Fill significa
00:27:37
propiedad,
00:27:38
que es sinónimo
00:27:39
de atributo,
00:27:40
variable de clase,
00:27:41
etc.
00:27:42
Pues,
00:27:43
generar constructor
00:27:44
usando campos.
00:27:45
Marcáis
00:27:46
todas las propiedades
00:27:47
que queráis
00:27:48
que aparezca
00:27:49
en el constructor
00:27:50
y ala,
00:27:51
te lo genera
00:27:52
automáticamente.
00:27:53
¿Vale?
00:27:54
Y él también,
00:27:55
fíjate que casualidad,
00:27:56
ha escogido
00:27:57
como nombres
00:27:58
de los parámetros
00:27:59
los mismos
00:28:00
que los de la clase.
00:28:02
Para que quede muy claro
00:28:03
que son el mismo concepto.
00:28:04
Pero claro,
00:28:06
eso le obliga
00:28:07
a poner el dis.
00:28:08
Le obliga a poner el dis.
00:28:09
¿Vale?
00:28:11
No olvidéis del dis.
00:28:15
El dis significa
00:28:16
el objeto en el que estoy,
00:28:17
punto,
00:28:19
propiedad del objeto.
00:28:20
Si no ponemos el dis,
00:28:21
si uno dice,
00:28:23
uy,
00:28:24
este dis que me molesta,
00:28:25
lo quito,
00:28:26
ha estropeado el constructor,
00:28:27
porque automáticamente
00:28:29
ahora código
00:28:30
se referirá
00:28:31
a este parámetro.
00:28:32
Y es absurdo.
00:28:34
A este parámetro
00:28:35
darle el valor
00:28:36
de este parámetro.
00:28:37
Que tontería,
00:28:38
no estamos diciendo nada.
00:28:39
Vale.
00:28:43
Entonces,
00:28:44
el super
00:28:45
tiene que ver con la herencia,
00:28:46
no molesta si está ahí.
00:28:47
Porque no hace nada
00:28:48
ahora mismo.
00:28:49
Porque no tenemos superclases.
00:28:50
Y el public
00:28:52
tampoco molesta,
00:28:53
pero tampoco entendemos
00:28:54
exactamente qué significa.
00:28:55
Así que lo podemos quitar
00:28:57
o dejar.
00:28:58
Todavía no entendemos
00:28:59
qué significa
00:29:00
ni una cosa ni la otra.
00:29:01
Bueno,
00:29:02
pues nos ha generado
00:29:03
el mismo código
00:29:04
que hemos hecho nosotros.
00:29:05
O sea,
00:29:06
nos permite generarlo fácil.
00:29:07
Bueno,
00:29:08
ahora ya podemos
00:29:09
crear pedidos,
00:29:10
podemos crear pedidos
00:29:11
usando este constructor
00:29:12
de forma más cómoda.
00:29:13
Vale,
00:29:16
vamos a hacer un main3.
00:29:17
Usando este constructor.
00:29:25
Ahora,
00:29:29
pues para construir un pedido
00:29:31
lo normal ahora sería
00:29:32
que uno pidiera
00:29:33
con antelación,
00:29:34
antes de construirlo
00:29:35
pidiera con antelación
00:29:36
los datos.
00:29:37
Introduzca
00:29:38
descripción,
00:29:39
introduzca no sé qué.
00:29:40
Voy a
00:29:42
copiar de aquí
00:29:43
del otro main
00:29:48
el escáner.
00:29:49
Y ahora voy a copiar
00:29:51
de aquí esto,
00:29:52
introduzca código,
00:29:53
descripción
00:29:54
para que
00:29:55
vale,
00:30:00
introduzca código,
00:30:03
suponer que lo guardamos
00:30:04
en una variable cualquiera,
00:30:05
incódigo,
00:30:06
introduzca descripción,
00:30:10
vamos a suponer
00:30:13
que lo guardamos
00:30:14
en una variable cualquiera.
00:30:15
Vale,
00:30:19
ya tenemos dos valores
00:30:20
leídos,
00:30:21
dos variables,
00:30:22
un código
00:30:23
y una descripción.
00:30:24
¿Para qué las vamos a usar?
00:30:25
Pues las vamos a usar
00:30:27
para crear ahora ya
00:30:28
un nuevo objeto pedido,
00:30:30
pedido p
00:30:32
igual a
00:30:33
new pedido
00:30:34
y ahora tengo que pasarle
00:30:37
los valores
00:30:39
que el constructor me exige.
00:30:40
El constructor me exige
00:30:42
una descripción
00:30:43
y un array
00:30:45
para inicializar las propiedades.
00:30:46
Bueno,
00:30:48
pues el código lo tengo
00:30:49
que lo acabo de leer,
00:30:50
pues se lo paso,
00:30:51
la descripción la tengo
00:30:53
que la acabo de leer
00:30:54
y vamos a crear un pedido
00:30:56
con un array
00:30:57
por ahora nulo,
00:30:58
un array nulo,
00:30:59
ya pues de así
00:31:00
luego lo queremos crear
00:31:01
los clientes,
00:31:02
lo creamos.
00:31:03
Bueno,
00:31:04
pues esta llamada
00:31:05
ya es una llamada válida,
00:31:06
ya hemos creado el objeto.
00:31:07
El objeto
00:31:16
tiene
00:31:17
de id
00:31:20
y vamos a ponerlo aquí,
00:31:22
p.id
00:31:23
no, p.código
00:31:27
se llamaba, ¿no?
00:31:29
El objeto pedido
00:31:38
tiene de descripción
00:31:41
p.descripción
00:31:49
Vale, pues ya está.
00:31:57
Si ejecutamos esto,
00:31:59
efectivamente este main,
00:32:00
pues le meto el código
00:32:07
veintitrés
00:32:08
descripción
00:32:10
pues se ha creado
00:32:14
el objeto pedido
00:32:15
y efectivamente
00:32:16
se han,
00:32:17
sus propiedades
00:32:18
se han inicializado
00:32:19
con esto
00:32:20
por primera vez
00:32:21
a través del constructor.
00:32:22
Vale,
00:32:24
a través del constructor
00:32:25
ya le he pasado
00:32:26
estos valores,
00:32:27
los ha usado
00:32:28
el constructor
00:32:29
para inicializar
00:32:30
las propiedades
00:32:31
y efectivamente
00:32:33
a partir de este punto
00:32:34
el objeto ya tiene
00:32:35
esas propiedades.
00:32:36
¿Qué daño
00:32:37
se las quiero cambiar
00:32:38
a otras?
00:32:39
Pues hago yo,
00:32:40
yo ahora hago
00:32:41
lo que me dé la gana.
00:32:42
¿Que quiero cambiar
00:32:43
el código
00:32:44
y ponerle ahora dieciséis?
00:32:45
Pues lo que yo quiera.
00:32:46
¿Que quiero modificar
00:32:47
la descripción?
00:32:48
Lo que yo quiera.
00:32:49
¿Vale?
00:32:50
Bueno,
00:32:51
pues esto es
00:32:52
el concepto
00:32:53
de método constructor.
00:32:54
Aparece siempre
00:32:55
cuando uno declara
00:32:56
una clase entidad
00:32:57
las que yo estoy llamando
00:32:58
clases entidad
00:32:59
son las clases
00:33:00
que su significado es
00:33:01
representar
00:33:02
un concepto
00:33:03
de mi aplicación.
00:33:04
Representar pedido,
00:33:05
representar cliente,
00:33:06
representar mueble.
00:33:07
La clase main
00:33:08
no la llamaría
00:33:09
clase entidad
00:33:10
porque esta clase
00:33:11
no representa
00:33:12
ningún objeto
00:33:13
de mi aplicación.
00:33:14
Esta clase
00:33:15
es una clase
00:33:16
que tiene
00:33:17
ese método
00:33:18
especial
00:33:19
que es
00:33:20
el método
00:33:21
constructor
00:33:22
es una clase
00:33:23
que tiene
00:33:24
ese método
00:33:25
especial
00:33:26
que es el punto
00:33:27
de arranque.
00:33:28
A esa no la llamaría
00:33:29
clase entidad
00:33:30
pero es una clase
00:33:31
también.
00:33:32
No tiene propiedades,
00:33:33
no tiene nada
00:33:34
pero es una clase.
00:33:35
Bueno,
00:33:36
vale,
00:33:37
constructores
00:33:38
puede haber
00:33:39
más de uno.
00:33:40
Puede haber
00:33:41
más de uno.
00:33:42
Es decir,
00:33:43
yo puedo hacer
00:33:44
otro constructor
00:33:45
si me da la gana
00:33:46
pero claro,
00:33:47
como todos
00:33:48
se tienen que llamar
00:33:49
igual
00:33:50
porque eso es obligatorio
00:33:51
y todos tienen que devolver
00:33:53
lo mismo
00:33:54
que es
00:33:55
nada,
00:33:56
el vacío
00:33:57
¿Qué me queda a mí
00:33:58
para distinguir
00:33:59
uno de otro?
00:34:00
¿Qué me queda?
00:34:01
La lista de parámetros.
00:34:03
Lo único que me queda a mí
00:34:05
para poder distinguir
00:34:06
uno de otro
00:34:07
es la lista de parámetros
00:34:08
porque el nombre
00:34:09
tiene que ser igual.
00:34:10
Lo que hay delante
00:34:11
tiene que ser igual.
00:34:12
Entonces,
00:34:13
para distinguir
00:34:14
uno de otro
00:34:15
lo único que me falta
00:34:16
es
00:34:17
esta lista de parámetros.
00:34:18
¿Vale?
00:34:19
Pues,
00:34:21
por ejemplo,
00:34:22
aquí tengo otro ya
00:34:23
otro constructor
00:34:24
que me da a mí la gana
00:34:27
que tenga este código
00:34:28
que es nada.
00:34:29
Pues como veis
00:34:30
admite los dos
00:34:31
que son perfectamente
00:34:33
distinguibles.
00:34:34
Este se llamaría
00:34:35
el constructor
00:34:36
sin parámetros
00:34:37
porque no tiene parámetros.
00:34:38
Este es otro
00:34:39
que es distinto
00:34:40
porque tiene parámetros.
00:34:41
¿Vale?
00:34:43
Las cabeceras son distintas.
00:34:44
Entonces,
00:34:48
a la hora de crear el objeto
00:34:49
¿cómo sabe la máquina virtual
00:34:51
a cuál tiene que ir?
00:34:52
¿A uno o a otro?
00:34:54
Pues depende
00:34:56
de cómo lo llame yo.
00:34:57
Si le llamo
00:34:58
sin parámetros
00:34:59
tendrá que ejecutar
00:35:00
el de arriba.
00:35:01
Si le llamo con parámetros
00:35:03
el de abajo.
00:35:04
Por ejemplo,
00:35:07
en el main este
00:35:08
del primer día
00:35:09
que los estuvimos
00:35:10
creando así.
00:35:11
Pues aquí la máquina virtual
00:35:13
no tiene ningún problema.
00:35:14
Sabe que aparte
00:35:15
de crear el objeto
00:35:16
tiene que llamar
00:35:17
al constructor
00:35:18
que no necesita parámetros
00:35:19
porque no se los estoy pasando
00:35:21
que no necesita.
00:35:22
¿Vale?
00:35:23
Pues lo llama
00:35:24
a este
00:35:25
que lo único que hará
00:35:26
será es mostrar este mensaje.
00:35:27
Sin embargo aquí
00:35:29
aquí yo estoy llamando
00:35:30
al new pedido
00:35:31
de esta otra manera.
00:35:32
Entonces,
00:35:34
además de crear el espacio
00:35:35
sabe que tiene que llamar
00:35:36
al constructor
00:35:37
con tres parámetros.
00:35:38
Pues entonces
00:35:40
tiene que llamar a este.
00:35:41
Luego no hay confusión
00:35:43
cuando hacemos
00:35:44
un new pedido
00:35:45
a cuál de los métodos
00:35:46
tiene que ir.
00:35:47
¿A cuál de los constructores?
00:35:48
Tiene que ir
00:35:49
a aquel
00:35:50
al que le encajen
00:35:51
sus parámetros
00:35:52
con el que yo le echo
00:35:53
en la llamada.
00:35:54
Y así como si le pongo
00:35:57
27 constructores
00:35:58
pero eso sí
00:35:59
se tienen que distinguir
00:36:00
en la lista de parámetros.
00:36:01
No puede ser igual.
00:36:04
Yo no puedo hacer
00:36:05
otro constructor
00:36:06
que reciba un entero
00:36:08
un string
00:36:09
y un array.
00:36:10
No puedo
00:36:11
porque sería igual.
00:36:12
Pero puedo hacer
00:36:13
otro constructor
00:36:14
que reciba a lo mejor
00:36:16
solamente el código
00:36:17
por ejemplo.
00:36:18
Porque me da a mí
00:36:19
la gana hacer
00:36:20
abrir la posibilidad
00:36:21
de crear objetos
00:36:23
sólo con el código
00:36:24
y la descripción
00:36:25
ya la pondré luego.
00:36:26
¿Vale?
00:36:28
Este sería otro constructor
00:36:29
porque resulta
00:36:30
que a mi aplicación
00:36:31
le interesa
00:36:32
poder crear pedidos
00:36:33
pero por ahora
00:36:34
sólo con el código.
00:36:35
La descripción ya vendrá.
00:36:36
Bueno,
00:36:37
pues me hago otro
00:36:38
y no hay ningún problema.
00:36:39
Es perfectamente
00:36:40
distinguirlo del de arriba
00:36:41
porque la lista de parámetros
00:36:42
es distinta.
00:36:43
Luego yo ya
00:36:45
que quiero llamar
00:36:46
a este constructor
00:36:47
bueno, pues lo llamaré
00:36:50
pasándole
00:36:51
que le pongo aquí un 3.
00:36:52
Entonces la máquina virtual dirá
00:36:55
uy, estás llamando
00:36:56
al constructor
00:36:57
que necesita un entero
00:36:58
porque me estás pasando un 3.
00:37:00
Se va aquí y dice
00:37:01
a ver,
00:37:02
¿tengo algún constructor
00:37:03
que necesite un entero?
00:37:04
Sí, tengo uno, este.
00:37:05
Pues llamo a este.
00:37:06
Que yo lo llamo así
00:37:08
sin nada.
00:37:09
Dice, a ver,
00:37:10
estás llamando
00:37:11
al constructor
00:37:12
que no recibe nada.
00:37:13
¿Tengo algún constructor
00:37:14
que no reciba nada?
00:37:15
Sí, este.
00:37:16
Vale, pues llamo a este.
00:37:17
Ahora hago esta llamada.
00:37:18
Uy, estás llamando
00:37:19
a un constructor
00:37:20
que recibe un entero,
00:37:21
un string
00:37:23
y un objeto
00:37:24
porque nulo es un objeto.
00:37:25
¿Tengo yo algún
00:37:26
constructor que reciba eso?
00:37:27
Uy, pues sí.
00:37:29
Tengo este que recibe
00:37:30
un entero,
00:37:31
una cadena
00:37:33
y un array
00:37:34
que es un objeto.
00:37:35
Pues me encaja.
00:37:36
Vale, pues me encaja.
00:37:37
Que yo trato
00:37:39
de crear un objeto
00:37:40
pasándole
00:37:41
por ejemplo
00:37:43
un entero
00:37:44
y una cadena.
00:37:47
Automáticamente
00:37:49
se pone rojo.
00:37:50
Me dice, a ver,
00:37:51
¿tengo yo algún constructor
00:37:52
que necesite
00:37:54
un entero
00:37:56
y un string?
00:37:57
Él se pone a mirar
00:37:59
en la lista y dice no
00:38:00
porque este no recibe nada.
00:38:01
Este un entero,
00:38:05
un string
00:38:06
y una cadena
00:38:07
y este solo un entero.
00:38:08
Luego no hay ninguno
00:38:09
que encaje con esto.
00:38:10
Luego dice, no,
00:38:11
esa llamada no la puedes hacer
00:38:12
porque no hay ningún
00:38:13
método constructor
00:38:14
que me encaje con esto.
00:38:15
Que me da mi la gana
00:38:17
hacerlo
00:38:18
porque yo quiero
00:38:19
un constructor
00:38:20
que reciba solamente
00:38:21
el código
00:38:22
y la descripción.
00:38:24
Que me da mi la gana
00:38:36
hacer un
00:38:37
así,
00:38:39
así,
00:38:40
este.
00:38:41
Ala,
00:38:43
ya tengo otro constructor
00:38:44
que se distingue
00:38:45
de los demás
00:38:46
porque recibe una lista
00:38:47
de parámetros distinta.
00:38:48
Ah, pues entonces
00:38:49
ahora ya sí que se me ha
00:38:50
quitado este error.
00:38:51
Este.
00:38:52
Porque ahora ya
00:38:53
la máquina virtual
00:38:54
ya ha encontrado
00:38:55
que hay un constructor
00:38:56
que espera
00:38:57
un entero y un string.
00:38:58
Ya lo ha encontrado.
00:38:59
Entonces ya me quita
00:39:00
este error.
00:39:01
¿Vale?
00:39:02
Bueno,
00:39:04
pues esto de poner
00:39:06
varios constructores
00:39:07
es lo que se llama
00:39:08
hacer sobrecarga
00:39:09
de constructores
00:39:10
que se puede hacer
00:39:18
en el resto de métodos.
00:39:19
Pero eso ya lo veremos.
00:39:20
Tenemos cuatro constructores
00:39:21
que se distinguen
00:39:26
por
00:39:29
la lista de parámetros.
00:39:30
Y esto es lo que se llama
00:39:35
hacer sobrecarga
00:39:36
de constructores.
00:39:37
¿Vale?
00:39:45
Bueno, pues los constructores
00:39:46
siempre aparecen
00:39:47
de una clase
00:39:48
porque cuando uno
00:39:49
crea un objeto
00:39:50
quiere ya darle valores.
00:39:51
Y es que hay veces
00:39:54
que es que incluso
00:39:55
se los tiene que dar así.
00:39:56
Porque esto que yo he hecho
00:39:57
tan alegremente
00:39:58
de acceder
00:39:59
con
00:40:00
pedido gomas
00:40:01
punto código
00:40:02
pedido gomas
00:40:03
pues no se suele hacer así.
00:40:04
¿Vale?
00:40:05
Porque las propiedades
00:40:06
suelen ser privadas
00:40:07
hay paquetes, etcétera
00:40:08
que ya veremos a la vuelta.
00:40:09
Entonces no se suele hacer así
00:40:11
porque me habrán puesto
00:40:12
un privado y no podré.
00:40:13
Pero eso ya lo
00:40:14
veremos después.
00:40:15
¿Vale?
00:40:16
Vale, pues nada.
00:40:21
¿Alguna duda
00:40:23
sobre constructores
00:40:24
para lo que valen?
00:40:25
Bueno,
00:40:30
pues no nos da tiempo
00:40:31
a nada de
00:40:32
de bueno
00:40:36
a ver
00:40:37
en dos minutos
00:40:39
algo rápido
00:40:40
para que dejarlo ahí
00:40:41
planteado
00:40:42
por si luego podéis
00:40:43
con los ejercicios
00:40:44
practicarlo
00:40:45
y todo eso.
00:40:46
A ver.
00:40:48
Vale, pues
00:40:52
sobre clases
00:40:53
un poquito más
00:40:54
que no digo nada nuevo
00:40:55
simplemente generalizo.
00:40:56
Vale, vamos a imaginar
00:40:59
de esta aplicación
00:41:00
la vamos a ampliar.
00:41:01
Esta aplicación
00:41:03
era para gestionar
00:41:04
pedidos y clientes.
00:41:05
Vamos a ampliarla un poco.
00:41:07
Entonces para ampliarla
00:41:09
lo primero que se nos ocurre es
00:41:11
oye, pues vamos a
00:41:12
trabajar también
00:41:14
con clientes, ¿no?
00:41:15
Pues hombre, le pegaría
00:41:16
tener también
00:41:17
una clase cliente
00:41:18
que tenga las propiedades
00:41:19
de los clientes.
00:41:20
Porque
00:41:22
uno diría
00:41:23
vamos a ver
00:41:24
de mi cliente
00:41:25
me basta con el nombre
00:41:26
porque si me basta
00:41:27
con el nombre
00:41:28
no me hace falta
00:41:29
una clase cliente
00:41:30
porque
00:41:31
string
00:41:32
sirve para guardar un nombre
00:41:33
y entonces
00:41:34
con una propiedad string
00:41:35
me valdría para el cliente, ¿no?
00:41:36
Una propiedad string
00:41:37
me valdría
00:41:38
porque tiene su nombre.
00:41:39
Pero normal
00:41:40
es que los objetos
00:41:41
de mi aplicación
00:41:42
necesiten más cosas
00:41:43
para caracterizarse.
00:41:44
Entonces uno después
00:41:46
de analizar su aplicación
00:41:47
decide
00:41:48
que nombre no
00:41:49
de los clientes
00:41:50
le interesa
00:41:51
su DNI
00:41:52
su dirección
00:41:53
su teléfono
00:41:54
hombre, le interesan
00:41:55
varias cosas.
00:41:56
Pues entonces
00:41:57
tiene que haber una clase.
00:41:58
¿Vale?
00:41:59
Tres minutos
00:42:00
y nos vamos
00:42:01
o nos quedamos
00:42:02
¿Vale?
00:42:03
Entonces
00:42:04
vamos a hacer
00:42:05
una clase cliente.
00:42:06
A ver
00:42:09
lo que he dicho
00:42:10
al principio de la clase
00:42:11
que no me habéis hecho
00:42:12
ni caso
00:42:13
es que yo tengo
00:42:14
lectura de proyectos
00:42:15
ahora hasta las dos y media.
00:42:16
Entonces
00:42:17
os podéis quedar
00:42:18
aquí
00:42:19
haciendo ejercicios
00:42:20
de esto
00:42:21
o
00:42:23
si os vais a casa
00:42:24
pues no pasa nada.
00:42:25
No vais a casa.
00:42:26
¿Vale?
00:42:27
Espera
00:42:31
déjame que termine esto
00:42:32
¿Vale?
00:42:33
Y seguidme haciendo caso
00:42:34
bueno, si es que me lo
00:42:35
estabais haciendo.
00:42:36
Venga
00:42:38
cinco minutos
00:42:40
A ver
00:42:44
¿De qué te ríes?
00:42:45
Compártelo con nosotros
00:42:46
¿Por qué no?
00:42:48
¿De qué tienes miedo?
00:42:49
Pero igual a mí
00:42:51
sí me interesa.
00:42:52
¿Eh?
00:42:57
Bueno, vale.
00:42:59
Silencio
00:43:02
Bueno, vamos a seguir
00:43:04
ampliando nuestra aplicación.
00:43:05
Si nuestra aplicación
00:43:06
va a trabajar con pedidos
00:43:07
y va a trabajar con clientes
00:43:08
y los clientes
00:43:10
se quieren caracterizar
00:43:11
por diferentes cosas
00:43:12
una clase cliente
00:43:13
va a ser imprescindible.
00:43:14
¿Verdad que sí?
00:43:16
¿Vosotros dos?
00:43:17
Vamos a hacer
00:43:18
una clase cliente más
00:43:19
y la seguimos ampliando.
00:43:20
Venga
00:43:23
clase cliente
00:43:24
Vale
00:43:30
Venga
00:43:32
pues la clase cliente
00:43:33
Ahora
00:43:35
habría que plantearse
00:43:36
¿Por qué queremos
00:43:37
que se caracterice el cliente?
00:43:38
Venga
00:43:39
pues vamos a decirle
00:43:40
que se caracterice
00:43:41
por su DNI
00:43:43
su nombre
00:43:44
y por ejemplo
00:43:46
cada cliente
00:43:48
puede haber hecho
00:43:49
un pedido
00:43:50
y solo uno.
00:43:51
Silencio
00:43:52
¿Vale?
00:43:53
Entonces
00:43:55
después de analizar
00:43:57
nuestra aplicación
00:43:58
porque todo esto
00:43:59
se hace mucho antes
00:44:00
de ponerse a teclear
00:44:01
hemos visto que
00:44:02
vale
00:44:03
cada cliente
00:44:04
puede tener un solo pedido
00:44:05
y cada cliente
00:44:06
se caracteriza
00:44:07
por el pedido
00:44:08
que le ha hecho
00:44:09
solo uno.
00:44:10
Igual que se caracteriza
00:44:11
por su NIF
00:44:12
por su nombre
00:44:13
también se caracteriza
00:44:14
por el pedido
00:44:15
que ha hecho.
00:44:16
Luego la pregunta sería
00:44:17
vale
00:44:18
pues el pedido
00:44:19
que ha hecho
00:44:20
es una propiedad suya
00:44:21
igual que lo es
00:44:22
su NIF
00:44:23
y su nombre
00:44:24
el pedido
00:44:25
que ha hecho
00:44:26
también es una propiedad suya.
00:44:27
Bueno pues nos falta
00:44:28
esa tercera propiedad
00:44:29
¿Eh?
00:44:31
No, es un solo pedido
00:44:35
el que va a tener el cliente.
00:44:36
El cliente se caracteriza
00:44:38
por su NIF
00:44:39
su nombre
00:44:40
y el pedido
00:44:41
que ha hecho.
00:44:42
Recordad que tenemos
00:44:43
una clase pedido
00:44:44
que a su vez
00:44:45
tiene dentro
00:44:46
las propiedades del pedido.
00:44:47
Vale, pues esas tres propiedades
00:44:48
NIF
00:44:49
que es string
00:44:50
nombre que es string
00:44:51
y pedido
00:44:52
llamémosle a pedido
00:44:53
esa otra propiedad
00:44:54
esa otra propiedad
00:44:56
de qué tipo
00:44:58
veis que tendría sentido
00:45:00
que fuera
00:45:01
de tipo
00:45:05
objeto
00:45:07
¿Qué tipo de objeto?
00:45:08
Efectivamente
00:45:10
vale
00:45:11
entonces esta propiedad
00:45:12
sería
00:45:14
de este tipo
00:45:15
porque
00:45:17
recordad
00:45:18
que ahora ya
00:45:19
nuestras variables
00:45:20
pueden ser
00:45:21
de tipo primitivo
00:45:22
o también de tipo objeto
00:45:23
en nuestro main
00:45:25
de antes
00:45:26
en nuestro main
00:45:27
hemos declarado ya
00:45:29
propiedades
00:45:30
que son de tipo objeto
00:45:31
y hemos trabajado
00:45:32
con ellas
00:45:33
¿verdad?
00:45:34
Pues perfectamente
00:45:36
dentro de cliente
00:45:37
puede haber una propiedad
00:45:38
que sea tipo objeto pedido
00:45:39
y dentro de esta propiedad
00:45:42
a su vez
00:45:43
estará el código
00:45:44
etcétera
00:45:45
¿vale?
00:45:47
Entonces por ejemplo
00:45:51
y ya nos vamos
00:45:52
imaginaos que vamos
00:45:55
a hacerle un método
00:45:56
que es
00:45:57
mostrar
00:45:58
descripción
00:45:59
del pedido
00:46:00
del cliente
00:46:01
bueno
00:46:05
devolver descripción
00:46:06
más que mostrar
00:46:07
devolver descripción
00:46:14
del pedido que ha hecho el cliente
00:46:15
primera pregunta
00:46:16
¿qué os hago?
00:46:17
¿Necesita algún parámetro
00:46:18
de entrada
00:46:19
a este método?
00:46:20
Alejandro
00:46:23
de descripción
00:46:28
o sea
00:46:31
devolver descripción
00:46:32
del pedido que ha hecho
00:46:33
y que es una propiedad suya
00:46:34
que está ahí
00:46:35
entonces
00:46:36
¿necesita que yo le pase
00:46:37
alguna información
00:46:38
desde fuera
00:46:39
para acceder
00:46:40
a la información
00:46:41
de su pedido?
00:46:42
bueno ahora mismo
00:46:45
voy a traer el constructor
00:46:46
este objeto tiene
00:46:47
su propiedad pedido
00:46:48
en if y nombre
00:46:49
dentro de
00:46:50
ahora
00:46:51
para
00:46:52
devolverme
00:46:53
hacer un return
00:46:54
mostrarlo
00:46:55
su propiedad
00:46:57
pedido
00:46:58
¿necesita que yo le pase
00:46:59
algo de fuera?
00:47:00
a ver hago la pregunta
00:47:07
otra vez
00:47:08
imagínate que este método
00:47:09
te digo
00:47:10
mostrar
00:47:11
el nif
00:47:12
del cliente
00:47:13
que llama este método
00:47:14
¿qué haría este método?
00:47:15
¿qué pondría yo ahí?
00:47:19
si tuviera que
00:47:21
mostrar la descripción
00:47:22
perdón mostrarle el nif
00:47:23
¿le habríamos pasado
00:47:26
algo desde fuera?
00:47:27
no porque no le hace falta
00:47:28
el nif ya es una propiedad
00:47:29
del objeto
00:47:30
recordad que los métodos
00:47:31
tienen
00:47:32
acceso directamente
00:47:33
a las propiedades
00:47:34
del objeto
00:47:35
es lo que explicamos
00:47:36
ayer a última hora
00:47:37
cuando corregimos
00:47:39
el ejercicio
00:47:40
y lo hicimos todo
00:47:41
bueno lo que volvimos
00:47:42
a explicar otra vez
00:47:43
que un método
00:47:44
accede directamente
00:47:45
a las propiedades
00:47:46
del objeto
00:47:47
que lo llama
00:47:48
y la información
00:47:49
externa
00:47:50
si le hace falta
00:47:51
entonces el objeto cliente
00:47:52
cuando llame a este método
00:47:53
ese objeto cliente
00:47:54
ya tiene su pedido dentro
00:47:56
pero es que está dentro
00:48:03
entonces
00:48:04
imagina
00:48:05
para devolver descripción
00:48:06
de pedido
00:48:07
retún
00:48:09
pedido
00:48:11
punto
00:48:12
descripción
00:48:14
y ya estaría
00:48:20
es decir
00:48:21
pedido es una propiedad
00:48:22
que como es objeto
00:48:23
dentro de ella
00:48:24
tiene código
00:48:25
de descripción
00:48:26
y array de clientes
00:48:27
dentro de ella
00:48:28
todas metidas dentro
00:48:29
dentro las tiene todas
00:48:30
entonces yo puedo
00:48:32
acceder a ella
00:48:33
como se acceden
00:48:34
a las propiedades
00:48:35
de los objetos
00:48:36
con el punto
00:48:37
vale
00:48:38
entonces
00:48:39
no estoy diciendo
00:48:40
nada nuevo
00:48:41
lo que digo
00:48:42
es que las propiedades
00:48:43
objeto
00:48:44
pueden estar dentro
00:48:45
de otros objetos
00:48:46
también
00:48:47
vale
00:48:48
o sea un objeto
00:48:49
puede tener una propiedad
00:48:50
que a su vez es un objeto
00:48:51
y no pasa nada
00:48:52
pues tengo otra propiedad
00:48:53
dentro que a su vez
00:48:54
es un objeto
00:48:55
y yo puedo acceder
00:48:56
a las propiedades
00:48:57
con el punto
00:48:58
sin ningún problema
00:48:59
entonces
00:49:00
este método
00:49:01
devolvería la descripción
00:49:02
del objeto pedido
00:49:03
como haría
00:49:05
un constructor
00:49:06
de este método
00:49:07
por ejemplo
00:49:08
pues vamos a crearlo
00:49:09
automáticamente
00:49:10
pues mira
00:49:15
me ha creado automáticamente
00:49:16
este superloquito
00:49:17
y este publicloquito
00:49:18
que no me interesan
00:49:19
pues mira
00:49:20
le di
00:49:21
le pasa directamente
00:49:22
un if
00:49:23
un nombre
00:49:24
y un objeto enterito
00:49:25
un objeto enterito
00:49:26
y ese objeto
00:49:27
lo usa para inicializar
00:49:28
el objeto pedido
00:49:29
me da igual
00:49:30
que la propiedad
00:49:31
sea objeto
00:49:32
sea primitiva
00:49:33
pueden ser
00:49:36
propiedades
00:49:37
de la clase
00:49:38
perfectamente
00:49:39
con la salvedad
00:49:40
de que yo aquí
00:49:41
de esta variable
00:49:42
accederé a los campos
00:49:43
claro
00:49:44
accederé a lo que
00:49:45
me interese a mí
00:49:46
accederé a lo que
00:49:47
me interese
00:49:48
vale
00:49:49
bueno y ahora sí
00:49:50
para matar
00:49:51
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 5
- Fecha:
- 22 de diciembre de 2023 - 9:28
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 951.16 MBytes