20241202 - 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:
Entonces, vamos a grabar la siguiente parte, si habláis o preguntáis algo me dais la autorización a grabaros, ¿vale?
00:00:00
Entonces, nosotros hasta la última vez hemos estado viendo un poquito la diferencia entre objeto y clase, hemos estado viendo los constructores, cómo se crea un objeto, etc.
00:00:09
Hemos llegado hasta esto, donde hemos visto que sustancialmente podemos crear constructores con distintos números o distintos orden de parámetros y por lo tanto lo que se puede hacer es sobrecargar un constructor.
00:00:22
También los métodos se pueden sobrecargar
00:00:41
La sobrecarga de métodos es que en la misma clase pueden haber varios métodos que se llaman con el mismo nombre
00:00:45
Se llaman iguales, pero difieren en el número o en el tipo de parámetros que reciben
00:00:52
Nunca puede haber métodos que tengan el mismo nombre con la misma secuencia de tipos de parámetros
00:00:59
Eso no se puede hacer, se enfada
00:01:09
¿Qué queréis? Hacemos un ejemplo
00:01:11
Por ejemplo, yo puedo crear el método escribe que recibe un string
00:01:13
Y lo que hace es escribir un string
00:01:18
El método escribe que recibe un num
00:01:20
Y lo que hace es escribir un num
00:01:23
Y el método escribe que recibe un string, una i
00:01:24
Y hace esta combinación de aquí, por ejemplo
00:01:29
El método es siempre el método escribe
00:01:31
Pero el programa sabe en cualquier momento
00:01:34
Cuál de los tres tiene que utilizar
00:01:38
En base al tipo de datos que se le pasa
00:01:40
Si yo llamo escribe de 5
00:01:44
Estará llamando este método de aquí
00:01:46
Y me imprimirá 5 en pantalla
00:01:47
Si yo llamo escribe de gato,7
00:01:49
Pues me escribirá gato un espacio 7
00:01:53
¿Vale?
00:01:57
Tened en cuenta también que normalmente
00:01:59
Si se llaman iguales
00:02:02
Los métodos hacen lo mismo
00:02:04
cuando vosotros habéis visto
00:02:07
el mismo método
00:02:10
println
00:02:13
si lo vamos a ver está sobrecargado
00:02:15
puede escribir un número
00:02:19
puede escribir un string
00:02:20
puede escribir un boolean
00:02:22
puede escribir un float
00:02:23
nosotros lo buscamos
00:02:24
ap java
00:02:28
esto es println
00:02:31
es un
00:02:34
printreader
00:02:35
Si vamos al objeto printWriter
00:02:38
Que es el que me permite escribir
00:02:41
Y vamos a buscar println
00:02:43
Veis que println
00:02:46
Hay un println a secas
00:02:48
Un println para booleano
00:02:51
Un println para char
00:02:52
Un println para redachar
00:02:54
Un println para double
00:02:55
Un println para long
00:02:57
Hacen todo lo mismo
00:02:58
Pero
00:03:02
Pillan un parámetro distinto
00:03:04
Entonces el método println dentro de la clase printwriter que es esta de aquí
00:03:07
Está sobrecargado
00:03:13
¿Entiendes?
00:03:15
¿Dudas?
00:03:17
Vale
00:03:19
Al llamar el método escribe dependiendo de cuantos parámetros uso
00:03:19
Y el tipo de los parámetros que tengo pues aplicaré una implementación u otra
00:03:26
Es decir que será la Jartel Machine o quien por él o el compilador o lo que sea
00:03:30
que cuando tú llamas Escribe con un determinado parámetro, sabrá cuál de estos tres es el que de verdad estás llamando.
00:03:37
Y si ahora llamo Escribe entre paréntesis y pongo True, ¿qué pasa?
00:03:46
Se enfada. Me lo marca el ojo diciendo, no existe un método Escribe que pille un Boolean como parámetro.
00:03:56
Por lo tanto, no sé qué tengo que hacer. No existe este método.
00:04:05
Debería crear un nuevo
00:04:08
Escribe boolean b
00:04:10
Que lo que haga es system.8.2.1.n
00:04:11
De b
00:04:14
Ya está
00:04:14
Vale
00:04:15
Otro tema muy importante
00:04:19
Muy muy importante
00:04:22
Es el concepto de these
00:04:23
Vale
00:04:26
Vamos a pillar un ejemplo
00:04:27
¿Se acuerdan si este era el coche
00:04:29
Que hemos utilizado el otro día?
00:04:32
Ahora, yo aquí dentro
00:04:34
Estoy utilizando
00:04:36
Un constructor
00:04:37
Estoy utilizando varios métodos
00:04:39
Y cosas por el estilo
00:04:42
Esto es una clase
00:04:43
Hay un objeto aquí
00:04:46
En el método main, sí
00:04:48
Pero cuando yo defino la clase
00:04:55
O se quito el método main
00:04:57
Hay un objeto
00:04:58
Hay una definición de un objeto
00:04:59
Hay un molde para objetos
00:05:04
Pero un objeto como tal no existe
00:05:06
No existirá hasta que en un main
00:05:08
Yo haga un new
00:05:12
¿Queda claro?
00:05:13
O sea, existe el objeto como descripción en general, como clase, pero no existe una instancia de esa clase hasta que no cree la instancia de esa clase.
00:05:14
Y si yo aquí dentro, por alguna razón, quisiera hacer referencia al objeto construido.
00:05:26
O sea, yo aquí quiero hacer algo para decir, oye, mira, a este punto pilla el objeto que eres tú,
00:05:36
Porque este cambiamatricula lo han llamado sobre un objeto
00:05:41
Y si yo quiero hacer referencia desde aquí dentro a este objeto sobre el que le han llamado
00:05:47
Aquí llamaban sobre C1
00:05:52
Aquí dice C1.descríbete
00:05:55
Si yo ahora dentro de escribete aquí en este código de aquí
00:05:57
Quisiera hacer referencia a este objeto C1
00:06:01
¿Cómo podría hacerlo?
00:06:05
Pero no existe
00:06:07
Porque yo esto lo quito ahora
00:06:14
¿Esto? Vale
00:06:16
Ahora, yo sé que alguno me llamará
00:06:20
¿Sí?
00:06:23
Pero ¿cómo puedo saber yo?
00:06:26
¿Cómo puedo hacer referencia a mí mismo?
00:06:28
¿Al objeto?
00:06:31
Porque descríbete será llamado sobre un objeto en un cierto momento
00:06:33
Entonces, si yo llegara allí
00:06:36
Este objeto existe, porque si no, no podría ser llamado descríbete
00:06:37
¿Cómo hago referencia al objeto sobre el que se ha llamado desde dentro de la clase?
00:06:40
Donde estoy pensando de forma genérica
00:06:45
Todavía no lo he creado
00:06:48
No puedo poner C1 aquí
00:06:49
C1 no existe
00:06:51
¿Entendéis cuál es el problema?
00:06:52
Pero esa es la clase, no es un objeto
00:06:57
Entonces todos se llaman igual
00:06:58
Con la palabra mágica
00:07:00
This
00:07:06
Cuando tú usas this
00:07:06
Estás diciendo este objeto
00:07:10
¿Cuál?
00:07:12
El objeto sobre el que la has llamado
00:07:14
Si yo
00:07:16
Llamaré C1
00:07:18
descríbete y aquí dentro uso this, será el c1. Si yo ahora uso c2.descríbete, this
00:07:23
se referirá a este c2, al objeto sobre el que se ha llamado. ¿Para qué sirve esto?
00:07:32
Mira, el primer uso sirve, ¿vale? Os daréis cuenta en el futuro. Pero el primer uso básico
00:07:42
que se hace, es que tú tienes
00:07:49
aquí string matrícula
00:07:51
string modelo, string velocidad
00:07:54
máxima, ¿os acordáis? y el
00:07:55
constructor, nosotros habíamos
00:07:57
utilizado ma, mo, vean
00:07:59
¿si? porque ma es la matrícula
00:08:01
mo es el modelo, ahora cuando tú
00:08:05
vas a ver el código
00:08:07
¿vale? vas a ver la
00:08:09
la ayuda
00:08:11
de este
00:08:13
magnífica clase coche que has hecho
00:08:14
y te dicen, oye mira
00:08:17
Para construir un coche tienes que dar
00:08:18
MAMOVEAN
00:08:20
¿Tú sabes qué es MAMOVEAN?
00:08:21
Imagínate que
00:08:26
Sacamos sólo esto
00:08:27
Y te dicen, oye mira, para crear un coche
00:08:31
Esto es como tienes que hacer
00:08:44
Tienes que hacer un new
00:08:46
Y luego le pones MAMOVEAN
00:08:47
¿Está claro?
00:08:49
¿De qué se está pidiendo?
00:08:53
No, sería mucho más claro
00:08:54
Si esto
00:08:56
Fose matrícula
00:08:58
matrícula, esto fuese modelo, esto fuese velocidad máxima y esto fuera año fabricación.
00:09:00
¿A qué hora? Ya es más fácil.
00:09:13
Pero ¿cuál es el problema?
00:09:18
Que si yo he usado matrícula aquí y ahora le pongo matrícula aquí,
00:09:19
él se lía, porque para él dentro de este bloque matrícula es esta.
00:09:28
Entonces, le tengo que decir, oye, matrícula esta, o modelo, o velocidad máxima, o año de fabricación
00:09:33
No es este de aquí, pero yo quiero que este, que sería este, esto es correcto, lo quiero poner aquí dentro
00:09:56
¿Queda claro? ¿Queda claro esto? ¿Cuál es el problema?
00:10:05
Entonces, ¿cómo puedo diferenciar esta matrícula de esta matrícula?
00:10:13
Pon esta matrícula y ponla dentro de este objeto su atributo matrícula.
00:10:27
¿Se entiende?
00:10:40
Esto es sutil.
00:10:42
Pero será siempre este objeto, el objeto sobre el que tú lo llamas.
00:10:51
Aquí en un cierto sentido lo estás construyendo.
00:10:56
Entonces tú tienes unos parámetros que te han dado desde fuera
00:10:59
Y un objeto que estás construyendo
00:11:02
Y tú dices, pilla la variable matrícula
00:11:04
Que me has dado como parámetro
00:11:08
Y lo guardas en accede a este objeto
00:11:09
Al objeto que estoy creando
00:11:12
En su campo matrícula
00:11:13
Y allí dentro es donde pones el valor
00:11:16
Entonces para hacer esto
00:11:18
Dis.model es igual a modelo
00:11:21
Si velocidad máxima esta de aquí es mayor o igual a cero
00:11:24
Pues entonces guarda this.velocidadMáxima es igual a velocidadMáxima
00:11:30
this.velocidadMáxima es igual a 1 si no
00:11:35
Y this.añoFabricación es igual a año
00:11:38
¿Sí?
00:11:44
Cuando no hay ambigüedad
00:11:47
Porque aquí no hay ambigüedad
00:11:49
Si yo uso modelo, él mirará directamente este de aquí
00:11:51
Pero en realidad esto no sería modelo
00:11:56
Esto sería
00:12:00
Dis.model
00:12:01
Es implícito
00:12:02
Y cuando no hay problemas de
00:12:07
Choque de variables
00:12:10
Que se llaman de la misma forma
00:12:13
Pues esto, él lo entiende directamente
00:12:15
¿Veis que me lo pone en azul?
00:12:17
Está entendiendo que es este
00:12:19
Azul
00:12:20
Pero si yo aquí, por alguna razón
00:12:21
Pusiera string
00:12:25
Modelo
00:12:27
Pues entonces ahora ya él se lía
00:12:28
Él dice, vale, si tú me has dado modelo este aquí
00:12:31
Pues este de aquí tiene que ser este
00:12:33
Y si yo quiero hacer referencia
00:12:35
Al de este objeto
00:12:37
¿Sí?
00:12:39
Ahora, esto del dis
00:12:46
Esta es la forma más básica que se puede utilizar
00:12:47
Dis, ¿vale?
00:12:50
En realidad luego se puede hacer
00:12:51
Cosas interesantes, ¿vale?
00:12:54
Imaginados un método que al final
00:12:56
Tengo public
00:12:58
Método
00:13:00
Mi método, que se yo, no se que hace
00:13:02
Y yo quiero que al final
00:13:04
De lo que haga aquí
00:13:06
No sé qué hace
00:13:08
Yo quiero devolver
00:13:10
Este objeto
00:13:12
Que el resultado de esto
00:13:15
Es devolver el objeto mismo
00:13:17
El objeto sobre el que he sido llamado
00:13:19
Pues devolvería un coche
00:13:20
Y sería un
00:13:24
Return this
00:13:27
Entonces este es un concepto que ya empieza
00:13:29
A dar un saltito más en adelante
00:13:39
En el
00:13:41
mundo de la
00:13:42
orientación a objetos
00:13:44
es un poquito retorcido
00:13:46
y hay que trabajar
00:13:48
un poquito sobre ello para entenderlo
00:13:50
¿vale? ahora que habéis visto la primera vez
00:13:53
aparecerá alguna vez
00:13:54
en esta vida, habrá algunos momentos
00:13:57
de vuestra vida en que diréis, oye mira yo tengo
00:13:59
que programar algo aquí, tengo que hacer referencia
00:14:01
a este objeto
00:14:03
pero no sé cómo llamarlo este objeto
00:14:04
no sé cómo hacerlo
00:14:07
pues entonces, this
00:14:08
¿sí?
00:14:10
Diga, a este objeto.
00:14:12
Cuando tú estás dentro de este método, ¿sobre qué objeto lo estás llamando?
00:14:22
Aquí, yo estoy aquí.
00:14:28
¿Sobre qué objeto lo estoy llamando?
00:14:31
No, frenar no es un objeto, es un método.
00:14:34
Sobre un objeto abstracto de tipo coche, porque todos los coches del mundo pueden frenar, según tu definición,
00:14:40
pero aquí no tienes un objeto
00:14:49
porque el objeto se creará en fase de main
00:14:52
donde tú crearás un objeto
00:14:56
y llamarás frenar sobre ese objeto
00:14:58
c1.frenar
00:15:00
entonces ahora el objeto sobre el que lo estás llamando es c1
00:15:02
pero desde aquí, desde fuera
00:15:06
desde donde estás llamando
00:15:08
desde donde estás utilizando
00:15:10
tú sabes que frenar lo has llamado sobre c1
00:15:11
pero cuando estás aquí dentro
00:15:14
No tienes una referencia a C1
00:15:17
Entonces tienes un puntero a ti mismo
00:15:19
No es un objeto
00:15:23
Es una referencia al objeto en el que estás
00:15:29
Si frenar lo llamas sobre C1
00:15:33
Este dice se referirá a C1
00:15:35
Si lo llamas sobre C2
00:15:37
Se referirá a C2
00:15:39
Y si lo llamas sobre gato
00:15:41
Pues estará refiriendo al gato
00:15:42
Es un comodín para decir el propio
00:15:44
Es que aquí tienes otro tipo de problema
00:15:48
Tienes una variable local
00:16:02
Que se llama modelo
00:16:05
Y otra variable que se llama modelo
00:16:06
Que pero es una parte
00:16:09
De la estructura de tu coche
00:16:10
Todos los coches tienen un modelo
00:16:13
Y tienes que poder diferenciar
00:16:14
Esta de esta
00:16:16
Si tú aquí dentro usas solo modelo
00:16:18
Él hace referencia
00:16:21
A este modelo de aquí
00:16:23
¿Vale?
00:16:24
Si tú quieres hacer referencia a esto
00:16:26
Es como si desde aquí
00:16:28
Tú accedieras
00:16:30
A c1.modelo
00:16:32
Porque aquí tú tienes
00:16:36
Y esto lo pones en string
00:16:40
String s
00:16:42
Es igual
00:16:44
Porque tú aquí tienes una referencia c1
00:16:45
Entonces la puedes utilizar
00:16:48
Y decir quiero el modelo
00:16:50
Pero de que objeto
00:16:51
Del objeto c1
00:16:53
Pero cuando tú estás dentro
00:16:54
de la propia definición de los métodos
00:16:56
tú no tienes
00:17:00
o puede poner C1
00:17:01
porque C1 no es nada
00:17:03
entonces necesitas
00:17:05
una palabra comodín
00:17:07
que te diga, oye, sea cual sea
00:17:09
este objeto, tú vete a
00:17:11
este objeto a su parte modelo
00:17:13
este objeto
00:17:15
¿cuál objeto? el objeto sobre el que
00:17:19
se ha llamado este constructor
00:17:21
el objeto que se está construyendo en este caso
00:17:22
o en este caso aquí, si yo pongo
00:17:25
esto
00:17:27
está diciendo, el modelo
00:17:27
sobre el que, el coche
00:17:31
sobre el que se ha llamado frenar
00:17:33
pues esta es una
00:17:35
referencia a ese objeto
00:17:37
si tú lo llamas sobre C1, esto se referirá
00:17:38
a C1, si tú lo llamas sobre C7
00:17:41
se referirá a Cristiano Ronaldo
00:17:43
porque
00:17:45
cuando, esto para
00:18:06
no entiendo tu pregunta
00:18:07
en general que es un constructor, me estás preguntando
00:18:09
para crear
00:18:11
un objeto, se puede crear
00:18:14
pero está vacío
00:18:17
si yo tengo un coche
00:18:18
vamos a eliminar
00:18:23
esto, vamos a hacer una copia
00:18:28
están objetos
00:18:30
vamos a copiar esto
00:18:36
creamos coche 2
00:18:40
y vamos a trabajar sobre coche 2
00:18:43
¿vale? entonces
00:18:45
imaginémonos que yo
00:18:51
me cargo este
00:18:54
constructor de aquí, ¿vale? fuera
00:18:55
ahora tengo un problema
00:18:58
Porque aquí yo creaba coches
00:18:59
Pero ahora no lo puedo crear
00:19:02
El coche
00:19:05
La única cosa que puedo hacer es crear
00:19:06
Un coche
00:19:08
Un coche 2
00:19:10
Pero este coche 2
00:19:12
No tiene nada
00:19:14
Si ahora yo lanzo
00:19:17
¿Lo que hace?
00:19:19
Explota
00:19:24
Vamos a ver porque tengo otro
00:19:24
Tengo otro por aquí
00:19:27
¿Dónde está?
00:19:30
Aquí
00:19:31
le quito todo esto
00:19:32
ya está, he creado un coche
00:19:34
sí, un coche de tipo coche 2
00:19:37
sí, lo he creado
00:19:39
¿vale? aquí lo que he hecho
00:19:41
para que no estaba, es simplemente
00:19:43
he quitado el constructor
00:19:45
ahora no hay constructor en esta clase
00:19:46
¿vale? entonces yo
00:19:49
si no hay constructores
00:19:51
puedo crear un constructor vacío
00:19:52
pero ahora lo lanzo
00:19:55
a feria internacional
00:19:58
del null
00:20:02
Porque todo está
00:20:02
¿Cómo se dice?
00:20:07
Inicializado
00:20:12
A su valor por defecto
00:20:12
Porque en ningún momento
00:20:15
Ha habido un constructor
00:20:17
Que ha metido lo que tenía que meter
00:20:18
En la cosa, puedo crear coches
00:20:20
De modelo nul
00:20:22
¿Cómo es eso?
00:20:24
De matrícula nul, modelo nul
00:20:26
Velocidad máxima cero y año de fabricación cero
00:20:28
De hecho, todos los estoy construyendo así
00:20:30
Y luego debería
00:20:33
Aquí
00:20:35
Acceder a cada campo
00:20:37
C1.matricula
00:20:40
Es igual a mat01
00:20:45
C1.
00:20:49
¿Qué es esto?
00:20:55
Modelo
00:20:57
No lo sé
00:20:58
Me sale solo me can
00:21:02
Y ahora, cuando lo lanzo, cuando escribe el C1, sí que es un megane y sigue teniendo su matrícula.
00:21:06
Pero es mucho más incómodo.
00:21:19
Es más, yo podría querer que estos datos de aquí no sean accesibles.
00:21:22
Porque si yo permito a estos datos de ser accesibles, la gente puede hacer lo que le da la gana con esto de aquí.
00:21:31
Puede mañana llegar y decir ahora mi matrícula es otra
00:21:37
Ahora mi modelo cambia
00:21:41
Ahora mi velocidad máxima ha cambiado
00:21:43
Y si yo los protejo, pues entonces ya esto no lo puedes hacer
00:21:45
Entonces, lo que se hace es decir, vale
00:21:50
Voy a crearme métodos especiales que me construyen coches
00:21:55
En base a los parámetros que le paso
00:22:01
Y entonces
00:22:03
Hacemos esto
00:22:06
Este aquí te dice
00:22:09
Este es un método para construir coches
00:22:12
Que requiere cuatro parámetros
00:22:14
Y una vez que me dan los parámetros
00:22:17
Yo los guardo
00:22:20
De golpe
00:22:21
En sus propios atributos
00:22:22
Y cuidado
00:22:24
Yo puedo hacer también
00:22:25
Algún tipo de
00:22:27
Control
00:22:28
Yo puedo decir que si
00:22:29
La velocidad máxima que me has puesto aquí
00:22:30
No es
00:22:32
No me gusta
00:22:33
Pues entonces pongo una velocidad máxima por defecto
00:22:34
O algo por el estilo
00:22:38
Pero puedes hacer control sobre lo que te da aquí
00:22:39
La matrícula no puede ser la que te da la gana
00:22:41
La matrícula tiene que ser con un determinado código, algoritmo
00:22:43
Que te da la matrícula para decir si es buena o no
00:22:47
Pues yo puedo hacer que cuando tú me pasas una matrícula
00:22:49
Aquí haga las comprobaciones necesarias
00:22:51
Para ver si es una matrícula efectivamente buena
00:22:53
Si es buena, creo el objeto
00:22:56
Si no es buena, no creo el objeto
00:22:58
¿Se entiende?
00:23:00
Más o menos
00:23:04
¿Dudas?
00:23:04
Vale
00:23:10
Nota, ya que estamos en esto
00:23:11
Yo aquí tengo
00:23:15
Un constructor
00:23:18
Vacío
00:23:20
¿Sí?
00:23:23
Esto se llama constructor por defecto
00:23:26
Cualquier clase que vosotros creáis
00:23:29
Por defecto
00:23:32
Tiene un constructor sin parámetros
00:23:34
que os permite crear
00:23:37
un objeto de esa clase
00:23:39
es el constructor por defecto
00:23:40
ahora
00:23:44
si yo creo un cualquier otro
00:23:46
constructor
00:23:48
public coche2
00:23:49
string
00:23:53
matricula
00:23:55
que lo que hace es
00:23:56
this.matricula
00:23:59
es igual a matricula
00:24:02
this.modelo
00:24:03
10.modelo es igual a, no sé, 10.velocidad máxima es igual a 0 y 10.añofabricación es igual a 0.
00:24:07
Este es un constructor que me permite dar solo la matrícula
00:24:27
Y lo que hace es poner la matrícula dentro
00:24:31
Y a todos los otros parámetros le da un parámetro básico
00:24:34
Un valor por defecto
00:24:39
En el momento en que creo un constructor
00:24:42
Pierdo el constructor por defecto
00:24:46
Ya no lo tengo
00:24:50
El constructor por defecto existe solo
00:24:51
Si no existen otros constructores
00:24:57
Queda claro hasta aquí
00:25:01
Si yo vuelvo a quitar esto
00:25:03
No hay constructores
00:25:08
Y por lo tanto él dice
00:25:12
Ah, muy bien, me vale
00:25:13
Usaré el constructor por defecto
00:25:15
Si yo pongo un constructor
00:25:18
Es porque le estoy diciendo
00:25:21
Oye, mira, no me crees objetos tú
00:25:23
Te estoy diciendo yo cómo se crean objetos
00:25:26
Se crean así
00:25:29
esta es la forma correcta de crear estos
00:25:30
objetos, por lo tanto él dice
00:25:32
ah vale, si te encargas tú
00:25:34
de decirme cómo se crean estos objetos
00:25:35
ya te quito
00:25:38
la forma por defecto que había
00:25:39
creado yo, ya no se puede hacer por
00:25:42
defecto, se hace como dices tú
00:25:44
porque tú sabrás que controles
00:25:45
o que cosas has hecho
00:25:48
aquí dentro y seguramente estás haciendo
00:25:50
un trabajo más concreto
00:25:52
y mejor con respecto al
00:25:54
mío que era general de
00:25:56
Tú no has hecho ningún constructor, te hago construir un objeto
00:25:57
Pero es un objeto vacío
00:26:00
Se entiende la diferencia
00:26:01
Porque imagínate que tú al momento
00:26:03
De crear un objeto
00:26:16
Sea cual sea
00:26:19
Todavía no sabes
00:26:19
Las características de ese objeto
00:26:21
Tú creas un coche
00:26:23
Pero tu
00:26:25
Tu
00:26:26
Sistema
00:26:29
Es de una planta de construcción de coches
00:26:31
Vale, ¿qué le pones al color del coche
00:26:34
cuando al principio es solo un trozo de hierro, tiene solo el chasis?
00:26:36
¿Qué color le pones?
00:26:41
Entonces a lo mejor tú puedes crear un coche, ya tienes tu coche, es este coche de aquí.
00:26:44
Y a lo mejor sí que el número de telar lo tienes, o todavía no, lo tendrás, no sé si es el número de telar.
00:26:48
Lo que sea que tú te creas un molde vacío, en un cierto sentido, que tendrá esta estructura de aquí,
00:26:53
pero todavía con todos los parámetros no formalizados,
00:27:00
y los irás construyendo tú en las varias fases de proceso.
00:27:04
Llamarás el método de pinta coche
00:27:08
Que lo pintará con un valor
00:27:10
Que te ha pasado por parámetro verde
00:27:12
Y entonces pondrá que el coche
00:27:15
Es color verde
00:27:16
Y te lo irá rellenando
00:27:17
Es para tener
00:27:19
Al fin y al cabo flexibilidad
00:27:22
En algunos casos lo puede tener
00:27:23
Ahora, vale, perfecto
00:27:25
Pero yo también tengo
00:27:27
Este de aquí
00:27:29
Puedo crear dos constructores
00:27:31
Sí
00:27:37
Este de aquí
00:27:39
Construye un coche
00:27:43
A partir solo de la matrícula
00:27:46
Y todo el resto
00:27:48
No se que es
00:27:49
Lo pongo valores normales
00:27:50
Y este de aquí
00:27:53
Tiene cuatro parámetros
00:27:54
Y pondrá los parámetros correctos
00:27:56
En cada uno de ellos
00:27:59
Ahora yo puedo hacer
00:28:00
Un new
00:28:02
Coche2
00:28:06
De
00:28:08
0010B
00:28:09
Esto me crea un objeto
00:28:12
Y también podría hacer
00:28:19
Bueno, lo pongo arriba
00:28:22
Este es un constructor válido
00:28:23
Y también este es un constructor válido
00:28:28
Algo
00:28:31
9, 9
00:28:39
Coma
00:28:40
Que gane
00:28:42
Coma
00:28:43
33, 2
00:28:45
Este también es válido
00:28:47
¿Sí?
00:28:51
String, string, int, int
00:28:53
O solo string
00:28:54
Pero aquí sigue dándome error
00:28:56
Entonces, ¿cómo puedo hacer yo
00:28:59
A que esto no me dé error?
00:29:05
Ah, pero yo esto
00:29:15
Imaginamos que yo no tengo acceso a esto
00:29:17
Esto lo está haciendo otro grupo
00:29:19
Yo quiero que aquí no le explote a ellos
00:29:21
¿Cómo puedo hacer mi clase para que pueda hacer esto?
00:29:24
Porque hemos dicho, una opción es borro todo
00:29:28
¿Vale?
00:29:30
Si borro todos los dos constructores
00:29:33
Pues ya está, esto funcionaría
00:29:37
Y si tengo que coche 1
00:29:39
C1
00:29:41
Está definido así
00:29:43
Y coche 2
00:29:45
C2 está definido así
00:29:49
Ahora como lo hago, porque no puedo borrar todo
00:29:51
Creo otro constructor
00:29:53
Que no tenga nada
00:29:58
Public
00:30:00
Coche 2
00:30:02
De nada
00:30:04
Lo que hará es algo parecido a esto
00:30:05
Con los valores que tú quieres
00:30:11
Por ejemplo aquí le podría poner null
00:30:15
Ahora tengo tres constructores
00:30:17
Uno que es un constructor sin parámetros
00:30:22
Entonces me vale esto
00:30:24
New
00:30:26
Coche2
00:30:27
Me vale
00:30:30
Simplemente no tengo parámetros
00:30:32
Y por lo tanto pondré parámetros por defecto
00:30:37
O pondré parámetros míos
00:30:39
O cosas por el estilo
00:30:41
Tened en cuenta que el constructor por defecto que no hemos visto, en realidad es esto.
00:30:42
Este es el constructor por defecto.
00:30:53
Entonces, si yo no pongo ningún constructor, automáticamente tengo un constructor por defecto
00:31:04
que me hace él por defecto, sin problemas.
00:31:09
Si yo creo un constructor, pierdo ese constructor por defecto,
00:31:14
Pero nadie me impide
00:31:19
De volver a crearlo yo
00:31:21
¿Se entiende?
00:31:23
¿Dudas?
00:31:29
Y esto más o menos es lo que dice
00:31:34
Aquí, aquí
00:31:36
Y el coso por el estilo
00:31:38
Entonces, volviendo a lo del dis
00:31:39
Veamos si aquí dice algo que se me ha olvidado
00:31:41
Para invocar la ejecución de un método
00:31:44
De un objeto es imprescindible conocer su dirección
00:31:46
Almacenada a la variable de tipo referencia
00:31:48
¿Vale? O sea, necesito tener una referencia
00:31:50
A un objeto para poder llamar su método
00:31:52
¿Vale? Esta dirección
00:31:54
la ha de guardar en primera instancia
00:31:55
que el código en el que se haga
00:31:57
el new, ¿vale? o sea cuando
00:31:59
hago c1 es igual a new
00:32:01
coche, pues ahí ese c1
00:32:03
es la referencia a mi objeto
00:32:06
y ahora puedo hacer c1.frenar
00:32:07
c1.acelerar
00:32:10
y todas esas cosas, ¿vale?
00:32:11
hay una excepción para esta regla ya que
00:32:13
si un objeto quiere ejecutar un método
00:32:15
propio, lo cual es bastante habitual
00:32:17
necesita conocer su propia dirección
00:32:19
¿sí?
00:32:22
Si yo desde dentro
00:32:23
La misma declaración de los métodos
00:32:25
Quiero acceder a otro método
00:32:28
Tendré que llamarlo sobre este objeto
00:32:30
Para hacerlo, uso el dis
00:32:32
Luego en realidad
00:32:36
Dentro del mismo objeto
00:32:44
Se puede no usar el dis, pero
00:32:46
Es más claro
00:32:48
Veremos en futuro
00:32:49
Vendrán momentos en que el dis
00:32:53
Queda claro
00:32:55
Entonces la última cosa
00:32:57
y que nos queda para ver es el concepto del método estático vale ahora hemos entendido los
00:32:59
métodos para objetos los métodos estáticos son esos objetos que si llamados sobre objetos
00:33:05
distintos proporcionen la misma el mismo resultado o sea que no cambia el resultado si lo llevamos a
00:33:11
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 15
- Fecha:
- 2 de diciembre de 2024 - 14:24
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 33′ 22″
- Relación de aspecto:
- 16:10 El estándar usado por los portátiles de 15,4" y algunos otros, es ancho como el 16:9.
- Resolución:
- 1152x720 píxeles
- Tamaño:
- 134.03 MBytes