prog2324 Objetos y clases 2 - 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, voy a grabar, por lo tanto, si habláis, me estáis autorizando.
00:00:00
Entonces, hemos hablado de clase, hemos dicho que la clase es un molde, ¿vale?
00:00:05
Es un molde para crear objetos.
00:00:10
Una sola clase, que es una abstracción, es una generalización de muchos objetos
00:00:12
que puedo crear.
00:00:18
A partir de una clase puedo crear muchas instancias distintas,
00:00:19
todas tendrán la misma estructura, pero cada uno tendrá valores distintos,
00:00:23
parecidos o mezclados, pues da igual, son entidades separadas que se llamarán objetos, ¿vale?
00:00:28
Cada objeto es una instancia, cada objeto es un trozo de memoria separado, ¿vale?
00:00:36
Los objetos no tienen que ver nada uno con otro, pertenecen todos a la misma clase,
00:00:41
la clase es única, los objetos son instancias distintas.
00:00:46
¿Se entiende esto?
00:00:50
¿Sí?
00:00:51
Vale.
00:00:52
Entonces un objeto es un elemento concreto de la clase definida,
00:00:53
una instancia de la clase, como se suele decir, ¿vale?
00:00:56
Cuando se habla de instancia, es que yo tengo mi molde, he pillado la arena,
00:00:59
la he puesto dentro del molde, la he puesto allí y me ha salido la figurita del elefante.
00:01:04
Vale, fenomenal.
00:01:08
Ahora ya tengo un elefante.
00:01:09
Ahora hago otro elefante al lado, tengo dos elefantes, he usado el mismo molde,
00:01:10
pero tengo dos elefantes distintos.
00:01:16
Y si modifico uno de los dos elefantes, el otro elefante se queda como ha estado antes.
00:01:18
¿Se entiende?
00:01:23
¿Puedes tener dos elefantes iguales?
00:01:25
Como yo puedo llamarme Estefano Quieres, puede haber otra persona que se llame Estefano Quieres.
00:01:29
Ahora, lo natural y lo obvio, estas son dos personas distintas,
00:01:32
si viene otra persona que se llama Estefano Quieres aquí,
00:01:37
posiblemente notáis que somos dos personas distintas,
00:01:39
no hay que decir, de repente son iguales.
00:01:42
Probablemente tú como programador quieres poderlos diferenciar
00:01:44
y es por eso que tenemos los identificadores.
00:01:50
Tú le dices, además de nombre y apellido, le pongo también el DNI
00:01:53
y entonces sé que Estefano Quieres con DNI1 no es el mismo objeto persona
00:01:58
de Estefano Quieres con DNI2.
00:02:03
Pero ahí también no es tan fácil,
00:02:07
porque tú deberías tener un método, una forma concreta y compleja
00:02:09
de verificar que si alguien intenta crear otro Estefano Quieres con DNI1,
00:02:17
debería decir, no, no puedes.
00:02:23
Y esto lo tienes que programar tú,
00:02:24
porque el fichero por sí mismo te permite crear.
00:02:26
O sea, el identificador por sí mismo no es único,
00:02:28
tienes que garantizar tú que sea único.
00:02:31
¿Cómo? Construyendo una base de datos
00:02:34
y todas las personas que crean la guardas en esa base de datos
00:02:36
y cada vez que creas una nueva te vas a esa base de datos
00:02:40
y le dices, ¿existe ya? No, pues entonces lo creo.
00:02:42
¿Existe ya? Sí, pues entonces no lo creo.
00:02:44
¿Sí? O un fichero o un...
00:02:46
En el momento de la ejecución se crean los objetos de la clase
00:02:51
para los cuales hemos escrito código.
00:02:55
Cada objeto tendrá un nombre para poder utilizarlos en nuestro programa.
00:02:57
No un nombre entendido como atributo nombre,
00:03:02
sino un identificador, ¿vale?
00:03:04
En particular, un objeto va a tener una identidad,
00:03:06
es decir, tengo que tener algo para distinguir los dos elefantes que he hecho,
00:03:10
esto lo llamo elefante 1, esto lo llamo elefante 2,
00:03:16
y ahora ya puedo distinguirlos a nivel de programación,
00:03:19
o esta es la variable A y esta es la variable B
00:03:22
y son dos personas distintas,
00:03:25
o esta es una raíz de personas y en cada celda de las personas
00:03:26
pongo una persona distinta,
00:03:29
algo para identificarlos,
00:03:33
los atributos que constituyen el estado de un objeto, ¿vale?
00:03:35
Un objeto tendrá sus 3, 4, 7, 29 variables que lo definen.
00:03:41
Nombre, apellido, edad, ¿vale?
00:03:46
En cada momento yo puedo hacer una foto a este objeto
00:03:48
y definir su estado.
00:03:54
Su estado es los valores en este momento de todos sus atributos.
00:03:56
En este momento hago una foto a la persona Stephano Chiesa,
00:04:05
pues su estado es Stephano Chiesa 18.
00:04:11
Mañana cumple los años, cumple 19,
00:04:16
pues entonces su estado se ha modificado en Stephano Chiesa 19.
00:04:19
Cada objeto tendrá su estado.
00:04:26
Si yo cumplo los años, es que las otras personas cumplen años también.
00:04:30
Solo aquellos objetos que ejecutan él,
00:04:35
hoy es mi cumpleaños, pues lo que harán es pillar edad y sumarle 1.
00:04:39
¿Vale?
00:04:46
Y también tienes unos métodos, que son los métodos definidos por la clase,
00:04:47
que definen el comportamiento de este objeto,
00:04:51
lo que puede hacer este objeto.
00:04:54
Si no tengo un método que me hace cumplir los años,
00:04:56
pues mi objeto no puede cumplir años.
00:05:00
¿Se entiende, no?
00:05:05
¿Ya?
00:05:07
La identidad, ¿vale?
00:05:13
Profundizando cada una de estas cosas.
00:05:14
Pues los objetos se crean en la memoria RAM.
00:05:16
Yo tengo un espacio en la memoria RAM
00:05:18
cuando lanzo el proceso de la Java Virtual Machine,
00:05:20
que es el intérprete de Java,
00:05:24
pues ese se crea un espacio dentro de este espacio de la RAM,
00:05:26
que lo solicita al sistema operativo.
00:05:30
El sistema operativo dice, yo necesito ejecutarme,
00:05:32
tómate estos megas, ¿vale?
00:05:35
Ok, estos son mis megas donde puedo trabajar.
00:05:38
Una parte de este espacio de aquí, que la llamará el heap,
00:05:40
¿vale?
00:05:44
Es la zona donde voy a crear los objetos.
00:05:45
Si mi programa me dice crear objetos,
00:05:47
los voy a meter allí dentro.
00:05:49
Tengo este espacio y voy a crear objetos.
00:05:51
¿Es infinito? No, porque la RAM no es infinita.
00:05:53
¿Vale?
00:05:55
Toda memoria, pues si me pongo aquí con un while true a crear objetos,
00:05:56
antes o después explota.
00:06:00
Su identidad se definirá con un valor de referencia único del objeto.
00:06:03
¿Os acordáis cuando yo os decía, hablando de los arrays,
00:06:07
que cuando yo creaba el array X dentro de la variable X
00:06:12
no había el array por sí mismo,
00:06:17
sino una referencia donde está el array?
00:06:20
Pues es esta referencia.
00:06:24
Cuando yo creo el objeto,
00:06:27
la Java Machine arranca y pilla un trozo de RAM.
00:06:36
¿Vale?
00:06:40
Este es el trozo donde puedo hacer las cosas.
00:06:41
Un trozo de esta RAM será el heap.
00:06:43
Y aquí es donde se crean los objetos.
00:06:54
Me dicen, oye mira, créate un nuevo objeto.
00:06:56
Vale, entonces aquí yo crearé un objeto.
00:06:58
Este es mi objeto persona que tiene dentro su nombre,
00:07:00
su apellido y su edad.
00:07:04
¿Vale?
00:07:06
Si creo un nuevo objeto, tendré un nuevo objeto con nombre,
00:07:07
apellido y edad.
00:07:11
¿Vale?
00:07:13
Y cada uno de estos de aquí será referenciado con una posición
00:07:14
en esta memoria.
00:07:20
Digamos así, no es exactamente así en Java,
00:07:21
pero para entendernos.
00:07:23
Y aquí por algún lado donde tendré mi variable persona1
00:07:26
y mi variable persona2,
00:07:30
pues aquí dentro lo que tengo es un puntero a este punto de aquí
00:07:32
y aquí un puntero, una referencia a este punto de aquí.
00:07:37
¿Vale?
00:07:45
Parecido a lo que era con los arrays.
00:07:46
Porque el array no es objeto.
00:07:48
String también es un objeto.
00:07:50
String funciona así, más o menos.
00:07:52
String es especial.
00:07:55
¿Sí?
00:07:57
Vale.
00:07:58
En Java no se trabaja directamente con direcciones de memoria,
00:08:01
sino con un concepto un poquito más abstrato,
00:08:04
que son los nombres simbólicos.
00:08:06
O sea, cuando tú programas en Java,
00:08:08
no vas a referirte al objeto diciendo,
00:08:10
oye, este es el objeto arroba579342.
00:08:13
Vale, vete a esa posición de memoria.
00:08:17
Pues tú le darás un nombre, le das el nombre persona1,
00:08:19
y trabajas con persona1.
00:08:22
Porque queremos un nivel de abstracción más abstrato.
00:08:24
No queremos ir a mirar la memoria dentro.
00:08:26
Quiero que la Java Virtual Machine me esconda todas estas cosas
00:08:29
para que yo sea más libre de pensar a mi problema
00:08:32
y no a los problemas técnicos de dónde está la memoria.
00:08:35
En otros lenguajes de programación, que son más a bajo nivel,
00:08:38
pues a lo mejor puedes ir a trabajar con los espacios de memoria directamente,
00:08:42
con las posiciones de memoria.
00:08:46
Tienes más control sobre lo que pasa,
00:08:48
porque puedes decidir qué hacer con la memoria literalmente,
00:08:52
pero claramente es mucho más complejo hacer cosas grandes.
00:08:56
Porque tienes que...
00:09:00
Es como...
00:09:02
¿Habéis jugado alguna vez algún juego?
00:09:04
Esto de micromanagement,
00:09:06
en el que todas las cosas que tienes que hacer tienen su opción
00:09:08
y tú tienes que controlar absolutamente todo
00:09:12
y llega un momento que mata
00:09:14
porque te ganan,
00:09:16
porque se te ha olvidado activar el no sé qué...
00:09:20
Pues es eso.
00:09:22
La diferencia entre decir
00:09:24
ataca y todo mi ejército va atacando
00:09:25
y te atropelamos aquí, te atropelamos aquí...
00:09:27
Pues es lo mismo.
00:09:29
Un objeto es un valor que se puede asignar a una variable
00:09:35
cuyo tipo es la clase.
00:09:39
La clase define el tipo,
00:09:41
el objeto es un valor específico de este tipo.
00:09:43
Es decir,
00:09:46
un objeto con pinzas
00:09:48
es un literal.
00:09:52
¿Sí?
00:09:55
¿Acordáis los int?
00:09:56
Yo tenía tres,
00:09:58
es un literal de tipo int.
00:10:00
¿Sí?
00:10:02
True es un literal de tipo boolean.
00:10:03
Un objeto...
00:10:06
Estefano pieza con la edad que tiene...
00:10:08
Pues es un literal de tipo persona.
00:10:10
La clase define un nuevo tipo.
00:10:18
Los objetos son valores de ese tipo.
00:10:25
No exactamente, sería el conjunto de actividad.
00:10:32
Porque el objeto es todo,
00:10:35
es un bloque.
00:10:37
¿Sí?
00:10:39
Tú estás definiendo un nuevo tipo
00:10:40
que no es un tipo primitivo, no es un int.
00:10:42
Porque una persona no es un int,
00:10:44
una persona es string string int.
00:10:47
Y este tipo nuevo que estoy creando,
00:10:50
que representa una persona, lo llamo tipo persona.
00:10:53
Las clases definen tipos.
00:10:57
De hecho, lo sabéis,
00:11:00
porque vosotros sabéis que string x es igual a gato.
00:11:02
Y cuando ponéis string x,
00:11:06
¿qué variable es?
00:11:08
La variable x de tipo string.
00:11:11
Y string no es una clase.
00:11:14
Pues sí, es una clase, porque es ese mayúsculo.
00:11:17
Entonces, lo habéis hecho.
00:11:20
Ahora nosotros hacemos persona.
00:11:22
Persona1 es igual a un objeto persona.
00:11:24
¿Sí? Y lo vemos en un minuto.
00:11:28
Si queremos crear un objeto tipo persona,
00:11:32
le daremos un identificador
00:11:34
para poder trabajar con él.
00:11:36
Bueno, aquí, ¿vale?
00:11:38
A esto.
00:11:40
Estoy creando una nueva variable.
00:11:43
¿Cuál es el tipo de alumno?
00:11:45
Persona.
00:11:47
¿Qué quiere decir?
00:11:48
Que un alumno es de tipo persona
00:11:49
que seguirá la estructura definida en la clase persona.
00:11:51
Es un objeto de la clase persona.
00:11:55
Cuidado, aquí todavía no hay objetos.
00:11:58
Esto es como cuando hacía int x.
00:12:00
¿Qué valor tiene x?
00:12:03
No está todavía el valor de x.
00:12:05
Pero he definido que existirá.
00:12:07
Esta es una variable
00:12:09
que contendrá un valor de tipo persona.
00:12:12
O sea que aquí dentro tiene que ir un objeto.
00:12:15
No puede hacer persona alumno es igual a 3.
00:12:17
Porque 3 no es tipo persona.
00:12:20
Es tipo int.
00:12:22
Atributos.
00:12:32
Son las características que definen un objeto.
00:12:33
Cada atributo tiene una visibilidad,
00:12:36
un tipo y un identificador del atributo.
00:12:39
¿Qué son estos?
00:12:42
La visibilidad es esto de public, private,
00:12:44
protected y lo que sea.
00:12:46
Lo veremos.
00:12:48
Por ahora son public.
00:12:50
Tiene un tipo,
00:12:52
que puede ser un tipo primitivo,
00:12:54
como antes que he hecho que mi atributo
00:12:56
era int edad.
00:12:58
O una clase, como cuando hacía string.
00:13:00
Hemos dicho que a una persona
00:13:03
yo le puedo dar una casa o un coche.
00:13:05
Yo puedo ponerle como atributo
00:13:07
Aquí.
00:13:09
Como atributo a una persona
00:13:13
le puedo poner public
00:13:15
coche con la C mayúscula
00:13:17
mi coche.
00:13:19
Y ahora lo que pasa es que una persona
00:13:21
tiene como atributo
00:13:23
un objeto de tipo coche.
00:13:25
Ahora lo hacemos.
00:13:29
O sea con ejemplos.
00:13:31
Y el nombre de este atributo.
00:13:34
Dentro de mi clase este atributo
00:13:36
se llamará edad.
00:13:38
Se llamará mi coche.
00:13:40
Se llamará segundo coche.
00:13:42
¿Qué sé yo?
00:13:44
Por ejemplo una persona
00:13:46
tiene nombre edad como atributo.
00:13:48
Por lo tanto el nombre
00:13:50
de tipo string es una clase
00:13:52
y el edad es un tipo int
00:13:54
es un tipo primitivo.
00:13:56
El estado de un objeto
00:14:00
está definido por los valores
00:14:03
de sus atributos en un momento concreto.
00:14:05
Hago una foto ahora
00:14:07
y veo cuál es
00:14:09
el nombre en este momento
00:14:11
y cuál es la edad en este momento
00:14:13
este es el estado de este objeto en este momento.
00:14:15
¿Puede variar? Sí, si yo quiero.
00:14:17
Si yo hago métodos
00:14:19
que puedan variar su edad como cumplir los años
00:14:21
pues su estado puede cambiar.
00:14:23
Ahora tiene 18 años
00:14:25
cumple edad, pues ahora tiene 19.
00:14:27
Ha cambiado su estado.
00:14:29
El estado puede variar a cambiar los valores
00:14:31
de los atributos.
00:14:33
Dudas hasta aquí.
00:14:35
Y luego están los métodos.
00:14:39
Identificación, atributos y métodos.
00:14:41
Los métodos son
00:14:43
es el contrato que
00:14:45
los objetos proporcionan
00:14:47
servicios a otros objetos.
00:14:49
Yo soy el objeto persona
00:14:51
y tengo mis métodos. ¿Qué son mis métodos?
00:14:53
Son los métodos saludar
00:14:55
y los métodos cumplir años.
00:14:57
Estos son servicios que otros pueden pedir
00:15:00
a mi como objeto
00:15:02
para que yo lo haga.
00:15:04
Si alguien pide a mi
00:15:06
como objeto, oye, saluda
00:15:08
pues yo escribiré
00:15:10
Hola, me llamo Estefano
00:15:12
y si alguien pide a mi como objeto
00:15:14
el cumpleaños
00:15:16
pues yo actualizaré mi estado
00:15:18
añadiendo uno a la edad.
00:15:20
Estos son servicios
00:15:22
a disposición de quien quiera
00:15:24
y quien quiera utilizarlos puede acceder a mis servicios
00:15:26
es decir, haz esto, y yo lo hago.
00:15:29
¿Cómo?
00:15:33
Un método suele tener
00:15:37
un nombre
00:15:39
como antes creábamos las funciones
00:15:41
le dábamos cálcula media
00:15:43
unos parámetros
00:15:45
los parámetros que poníamos entre paréntesis
00:15:47
que pero pueden no estar
00:15:49
saluda, por ejemplo
00:15:51
puede no tener parámetros
00:15:53
y lo que devuelve
00:15:56
o sea, yo hago todo el trabajo
00:15:58
y al final del trabajo, ¿qué hago?
00:16:00
te devuelvo algo
00:16:02
o no
00:16:04
lo que ya antes se llamaba función o procedimiento
00:16:06
pues ahora se llama método
00:16:08
y puede devolver algo o no
00:16:10
es igual a antes
00:16:12
porque nosotros hemos hecho eso
00:16:14
hemos impropiamente utilizado los métodos
00:16:16
como función y procedimiento
00:16:18
pero eran métodos antes también
00:16:20
Es importante saber
00:16:22
qué método implementa una clase
00:16:24
qué parámetros tienen los métodos
00:16:26
y qué devuelven
00:16:28
para que otros programas puedan utilizar esos métodos
00:16:30
es decir, que yo cuando
00:16:32
pillo la clase Persona
00:16:34
me la voy a leer y digo
00:16:36
¿qué puede hacer Persona?
00:16:38
pues tiene sus atributos, puede hacer esto, esto, esto
00:16:40
vale, ahora sé utilizarla
00:16:42
si no sé qué métodos están implementados
00:16:44
pues no puedo utilizar propiamente una clase
00:16:46
Cuidado, no es importante
00:16:48
cómo se hacen las cosas
00:16:50
sino lo que se puede hacer
00:16:53
a mí, como programador
00:16:55
me interesa de la clase Persona saber
00:16:57
que puede saludar
00:16:59
y que puede cumplir años
00:17:01
con estos dos, me vale
00:17:03
quien ha hecho esa clase
00:17:05
probablemente sabrá
00:17:07
cómo se hacen esas cosas
00:17:09
la habrá implementado él
00:17:11
pero a mí no me interesa saber cómo
00:17:13
me interesa utilizar su clase
00:17:15
y utilizarla
00:17:17
cuando vosotros utilizáis Println
00:17:19
System.8.Println
00:17:22
Println es un método
00:17:24
vosotros, ¿sabéis cómo se hace?
00:17:26
¿sabéis cómo se escribe en pantalla?
00:17:28
¿qué hace por detrás
00:17:30
para que aparezcan
00:17:32
vuestras letras en la pantalla
00:17:34
en la consola?
00:17:36
no, pero a vosotros os interesa saber
00:17:38
que existe Println para poder escribir en consola
00:17:40
¿sí?
00:17:42
la idea es siempre extraer
00:17:44
yo me hago Persona
00:17:46
cumplir los años es un código infernal
00:17:48
que pilla una base de datos
00:17:50
va a otro lado, cosa así
00:17:52
un millón de líneas de código
00:17:54
no me interesa, eso es que Persona tiene cumplir años
00:17:56
llamo cumplir años y cumple años
00:17:58
¿sí?
00:18:00
¿dónde creamos una clase?
00:18:06
oh
00:18:08
los atributos de una clase
00:18:10
son ser responsabilidad de la clase misma
00:18:12
por eso si quiero permitir
00:18:14
que se lean o se modifiquen
00:18:16
para implementar métodos adecuados para ellos
00:18:19
los getter y los setter
00:18:21
mira
00:18:23
esta es mi clase Persona
00:18:25
¿vale?
00:18:27
mi clase Persona tiene string apellido
00:18:29
y string nombre
00:18:31
¿y luego qué tiene?
00:18:33
tiene métodos
00:18:35
tiene el método que devuelve
00:18:37
un string que es get apellido
00:18:39
¿sí?
00:18:41
si yo llamo sobre un método de tipo Persona
00:18:43
sobre un objeto de tipo Persona
00:18:45
llamo el método get apellido
00:18:48
lo que hará él es pillar
00:18:50
el contenido de esta variable
00:18:52
y devolverlo
00:18:54
¿sí?
00:18:56
y luego está set apellido
00:18:58
set apellido es
00:19:00
dame un valor
00:19:02
yo este valor
00:19:04
lo voy a poner
00:19:06
dentro de esta variable de aquí
00:19:08
¿sí?
00:19:14
get nombre y set nombre
00:19:16
¿vale? estos son getter y setter
00:19:18
veremos más adelante
00:19:20
hablaremos otra vez de ellos
00:19:22
normalmente
00:19:24
lo que yo quiero es que estos
00:19:26
atributos de aquí
00:19:28
los atributos de una clase
00:19:30
no sean públicos
00:19:32
yo no quiero que desde otra clase
00:19:34
un coche pueda cambiar mi nombre
00:19:36
a Luigi
00:19:38
no puede
00:19:42
hacer otra persona desde fuera
00:19:45
es acceder a mi método
00:19:47
set nombre
00:19:49
donde me dice
00:19:51
Luigi
00:19:53
y que aquí dentro, en vez de ser tan sencillo
00:19:55
haga una prueba
00:19:57
en plan, oye, pero tú eres una persona que puede cambiar nombre
00:19:59
eres el ayuntamiento
00:20:01
si eres el ayuntamiento, tienes esta credencial
00:20:03
bla bla bla bla bla
00:20:05
código código código código
00:20:07
entonces hazlo, y si no, no
00:20:09
no sé si me explico lo que quiere decir
00:20:11
si yo no hago esto
00:20:14
y aquí permito directamente acceder a mi nombre
00:20:16
cualquiera puede acceder a mi nombre y cambiarlo
00:20:18
si yo me creo un método
00:20:20
esto lo hago
00:20:22
o así o privado, veremos la diferencia
00:20:24
¿vale? de esta forma aquí
00:20:26
no se puede hacer desde fuera
00:20:28
se puede hacer solo de dentro de aquí
00:20:30
y yo me creo un método
00:20:32
que comprueba, antes de poner aquí
00:20:34
nombre, si es válido o no
00:20:36
pues me garantizo
00:20:38
que mi nombre no se pueda cambiar
00:20:40
fijaos que el método es público
00:20:43
se puede acceder desde fuera
00:20:45
pero el acceso a la variable no
00:20:47
no sé si se nota esta cosa
00:20:49
es más bien una pincelada de emisión
00:20:51
es lo que decía antes del DNI
00:20:53
imaginaos aquí una variable DNI
00:20:55
si yo tengo
00:20:57
la variable DNI directamente
00:20:59
alguien puede acceder y decir
00:21:01
DNI ahora pon ahí dentro cocodrilo
00:21:03
y él dice vale
00:21:05
sin embargo, si yo me hago un set DNI
00:21:07
que aquí dentro
00:21:09
dice for int igual a cero
00:21:11
y menor de la longitud
00:21:13
de la string que me has pasado y más más
00:21:15
y lo que va a mirar
00:21:17
charat cero es un número, charat uno es un número
00:21:19
charat dos es un número, hasta charat sete
00:21:21
son números
00:21:23
y luego viene una letra
00:21:25
pues ya estoy comprobando
00:21:27
algo más
00:21:29
¿entendéis?
00:21:31
lo veremos, por ahora me interesa más bien
00:21:33
esta cosa aquí
00:21:35
fijaos que
00:21:37
las variables estas
00:21:40
las estoy usando en todos los métodos
00:21:42
de la clase
00:21:44
¿por qué? porque son atributos
00:21:46
¿dónde es el scope?
00:21:48
de estos dos
00:21:50
desde aquí hasta aquí
00:21:52
por lo tanto lo puedo utilizar en cualquier lado
00:21:54
otra cosa
00:21:56
que podríais haber notado
00:21:58
es que yo aquí tengo
00:22:00
string apellido
00:22:02
y aquí tengo string apellido
00:22:04
entonces ¿cómo no?
00:22:06
¿qué me confundo entre
00:22:09
esta variable
00:22:11
y esta variable?
00:22:13
podría confundirme
00:22:15
porque aquí dentro existirá
00:22:17
apellido esta variable de aquí
00:22:19
pero yo quiero utilizar esta variable de aquí
00:22:21
¿cómo las diferencio?
00:22:23
esta de esta
00:22:25
y del colorido
00:22:31
este objeto
00:22:35
esto es la variable que me han dado aquí
00:22:37
una variable local a este método
00:22:39
¿veis que el color es el mismo?
00:22:41
pero lo que me has dado tú
00:22:43
que es el nuevo apellido que quieres cambiar
00:22:45
en mi objeto, yo quiero cambiar
00:22:47
esta variable, para poder acceder
00:22:49
a esta variable, utilizo
00:22:51
this, ¿qué es this?
00:22:53
esto, ¿esto qué?
00:22:55
este objeto
00:22:57
si yo soy la persona uno y me están llamando
00:22:59
este apellido
00:23:01
será el apellido de la persona uno
00:23:03
si yo soy la persona dos
00:23:06
y le están cambiando el apellido
00:23:08
será el apellido de la persona dos
00:23:10
del objeto
00:23:12
que está ejecutando esto
00:23:14
si tú llamas esto sobre el objeto uno
00:23:16
pues lo pondrá
00:23:18
en el campo apellido
00:23:20
del objeto uno, si tú estás llamando esto
00:23:22
sobre el objeto treinta siete
00:23:24
pues lo utilizará la variable del objeto
00:23:26
treinta siete
00:23:28
el concepto de this
00:23:30
this sirve porque si yo hiciera esto
00:23:32
sin el this
00:23:36
este apellido sería este apellido
00:23:38
no habría diferencia, ¿cómo puedo saber
00:23:42
si estoy copiando esto dentro de esto
00:23:44
o esto dentro de esto
00:23:46
o esto dentro de esto
00:23:48
si son todos iguales, se llaman apellidos
00:23:50
solución
00:23:52
aquí lo llamo a
00:23:54
entonces no hay
00:23:56
ambigüedad y hago apellidos igual a
00:23:58
apellido es sólo esto
00:24:00
pero hay situaciones en que
00:24:03
this sirve
00:24:05
es para introducir cosas
00:24:07
es mucha teoría
00:24:09
pero porque quiero llegar
00:24:11
a esto y luego hacemos ejemplos
00:24:13
¿qué son los constructores?
00:24:15
¿qué son los constructores?
00:24:17
crear objetos
00:24:19
¿hemos dicho que queremos crear objetos?
00:24:21
pues para crear objetos necesitamos constructores
00:24:23
los constructores son
00:24:25
métodos especiales
00:24:27
que lo que hacen es crearme
00:24:29
un objeto
00:24:31
¿cómo se crea un objeto?
00:24:33
¿qué hará falta
00:24:35
para crear una persona?
00:24:37
¿qué es una persona?
00:24:41
yo tengo mis atributos
00:24:45
nombre, apellido y edad
00:24:47
entonces ¿qué me sirve para crear un objeto?
00:24:49
un objeto-persona
00:24:51
que tú me des valores para estos tres atributos
00:24:57
creame una nueva persona
00:25:00
que se llame Estefano
00:25:02
su apellido sea Kiesa
00:25:04
y su edad sea 42
00:25:06
además
00:25:10
una clase produce un método especial
00:25:12
que se llama constructores
00:25:14
un constructor se tiene que llamar
00:25:16
como una clase
00:25:18
los constructores
00:25:20
no devuelven nada
00:25:22
no tienen ni void ni nada
00:25:24
porque en realidad lo que están devolviendo
00:25:26
tú llamas a ese constructor
00:25:29
y te crea un objeto
00:25:31
se ejecutan en el momento de la creación del objeto
00:25:33
y se ejecutan utilizando el new
00:25:35
nosotros ya lo hemos utilizado
00:25:37
voy más rápido
00:25:41
porque quiero ver esto
00:25:43
aquí estamos
00:25:47
clase-persona
00:25:53
tiene nombre y edad
00:25:55
este señor de aquí es un constructor
00:25:58
si os fijáis es parecido
00:26:02
a un método
00:26:04
pero aquí no tiene ni void ni int ni nada
00:26:06
es public-persona
00:26:08
se llama como la clase
00:26:10
y que pilla
00:26:12
pilla un string-nom
00:26:14
y un int-e
00:26:16
entonces cuando yo llamaré este constructor
00:26:20
con la new
00:26:22
ahora lo vemos al lado
00:26:24
voy a crear una nueva persona
00:26:26
que se llama stefano,42
00:26:28
lo que hace es que pillará este stefano
00:26:32
y lo pondrá en el nombre
00:26:34
de este objeto
00:26:36
y pillará 42
00:26:38
y lo guardará dentro de la edad de este objeto
00:26:40
y me ha creado el objeto
00:26:44
esto sería col-dis
00:26:48
pero como esto y esto se llaman distintos
00:26:50
pues no me hace falta
00:26:52
si esto se llamara nombre y esto se llamara edad
00:26:55
pues aquí debería hacer
00:26:57
dis.nombre es igual a nombre
00:26:59
dis.edad es igual a edad
00:27:01
yo creo un objeto
00:27:07
una vez que lo he creado
00:27:09
si quiero poder modificar o leer
00:27:11
mis datos
00:27:13
pues tengo varias opciones
00:27:15
leerlo directamente aquí
00:27:17
si son públicos
00:27:19
pero si en este caso son privados
00:27:21
pues entonces necesito un getter and setter
00:27:24
¿por qué necesito un getter and setter?
00:27:26
porque no leo
00:27:28
o escribo directamente
00:27:30
sino que tengo más control
00:27:32
porque alguien cuando quiere leer o quiere modificar
00:27:34
tiene que pasar por mi método
00:27:36
y yo en mi método puedo poner un if
00:27:38
puedo poner un while,puedo poner un control
00:27:40
para ver si tu puedes o no acceder a esos datos
00:27:42
luego hablaremos de todas estas cosas
00:27:48
¿qué es esto?
00:27:50
¿qué es esto?
00:27:54
es otro constructor
00:28:00
pero este es un constructor que se llama
00:28:02
cuando tu tienes
00:28:04
una persona que sabe su nombre
00:28:06
pero no sabe su edad
00:28:08
entonces
00:28:10
lo llamas así
00:28:12
esto y esto crean objetos
00:28:14
solo que esto crea un objeto
00:28:16
con nombre y edad asignado
00:28:18
mientras esto aquí crea un nombre
00:28:20
un valor por defecto
00:28:22
podría hasta poner que aquí
00:28:24
edad es igual a menos uno
00:28:26
como indicar una edad desconocida
00:28:28
¿cómo se llaman estos señores?
00:28:30
así
00:28:32
sintaxis
00:28:38
nombre de la clase
00:28:40
nombre de la variable
00:28:42
es igual a new nombre de la clase
00:28:44
los parámetros
00:28:46
esto es el constructor
00:28:48
por ejemplo
00:28:51
persona, persona1
00:28:53
esta es una variable
00:28:55
de tipo persona
00:28:57
es igual, crea un nuevo objeto
00:28:59
de tipo persona
00:29:01
que se llama Lola y tiene 30 años
00:29:03
persona, persona2
00:29:07
es una nueva persona
00:29:09
que se llama Pepe y tiene 25 años
00:29:11
estos son dos objetos distintos
00:29:13
tienen nada que ver uno con otro
00:29:15
los dos son de tipo persona
00:29:17
misma estructura pero dos entidades distintas
00:29:20
y puedo utilizar persona, persona3
00:29:24
es igual a personaPaco
00:29:26
esto me crea un objeto
00:29:28
su edad será cero
00:29:30
porque por defecto un int es cero
00:29:32
y ahora puedo utilizar persona1
00:29:38
y decir persona1.cumpleaños
00:29:40
¿qué pasa con persona1.cumpleaños?
00:29:46
que este de aquí se sumará a 1
00:29:48
y se vuelve 31
00:29:50
sin afectar ni esto ni esto
00:29:52
porque son objetos distintos
00:29:54
misma clase pero objetos distintos
00:29:56
instancias distintas
00:29:58
¿alguna persona cumpleaños?
00:30:04
¿qué es el sentido?
00:30:06
si se llama Laura no puede cumpleaños
00:30:09
si dentro de cumpleaños
00:30:15
tu dices
00:30:17
if nombre.e
00:30:19
cual es Laura
00:30:21
entre comillas
00:30:23
nada
00:30:25
elce edad++
00:30:27
cuando se llama cumpleaños
00:30:31
si te llaman Laura no cumples
00:30:33
yo lo pondría
00:30:36
depende de lo que quieras hacer
00:30:38
puedes hacerlo de dos formas
00:30:40
o dentro de persona
00:30:42
dentro del método cumpleaños
00:30:44
pones eso
00:30:46
que nunca una persona
00:30:48
que se llame Laura
00:30:50
comprará los años, nunca
00:30:52
porque todas las veces que alguien que se llama Laura entra allí
00:30:54
pues no le suman los años
00:30:56
o lo puedes hacer desde fuera
00:30:58
aquí dices
00:31:00
if persona3.getName
00:31:02
.equals Laura
00:31:05
entonces no haga nada
00:31:07
y si no cumpleaños
00:31:09
pues entonces la persona Laura
00:31:11
puede cumplir
00:31:13
pero en este caso concreto
00:31:15
en tu programa no
00:31:17
¿escáner es un objeto?
00:31:25
si persona1 es igual
00:31:35
le llamas un método
00:31:37
si el método que tu llamas
00:31:45
te devuelve algo lo puedes hacer
00:31:47
si el método que tu llamas
00:31:53
te crea un objeto coche
00:31:55
porque el método de personas
00:31:57
es comprar coche
00:31:59
entonces crea un coche y te lo devuelve
00:32:01
coche, mi nuevo coche
00:32:03
es igual a persona1.compracoche
00:32:05
compracoche se llama sobre persona1
00:32:11
persona1 compra el coche
00:32:13
y gasta dinero suyo
00:32:15
crea un coche y este coche se guarda
00:32:17
en la variable
00:32:19
haremos ejemplos
00:32:21
por ahora nos paramos aquí
00:32:23
después de recreo vamos a hacer ejemplos
00:32:25
para todas estas cosas
00:32:27
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento
- Visualizaciones:
- 8
- Fecha:
- 20 de diciembre de 2023 - 12:01
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 32′ 31″
- Relación de aspecto:
- 4:3 Hasta 2009 fue el estándar utilizado en la televisión PAL; muchas pantallas de ordenador y televisores usan este estándar, erróneamente llamado cuadrado, cuando en la realidad es rectangular o wide.
- Resolución:
- 960x720 píxeles
- Tamaño:
- 86.63 MBytes