Prog2324 Objetos y Clases - 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, muy bien, estoy grabando estas clases, por lo tanto, si hay alguna pregunta o habláis, pues me dais la autorización a que esté grabado en este vídeo, ¿vale?
00:00:00
Entonces, decíamos que hasta ahora nosotros hemos trabajado con programación estructurada.
00:00:11
Programación estructurada se basa en pocos conceptos como son las variables, como son los arrays, como son los if, como son los while, bueno, más que if y while,
00:00:17
los operadores, los comandos condicionales y los comandos iterativos, ¿vale?
00:00:29
Luego pueden ser de varias formas, el while, the while, the for, más o menos son todo lo mismo, pero son más útiles en un caso o otro, ¿vale?
00:00:35
La dentro, lo vimos al principio, si miráis las transparencias iniciales cuando introducimos el concepto de programación estructurada,
00:00:43
la unidad básica de la programación estructurada es lo que es la función o el método, ¿vale?
00:00:52
Nosotros no nos hemos enfocado muchísimo en esto, lo hemos utilizado, lo hemos visto algunos ejemplos, pero no hemos hecho mucho hincapié
00:00:59
porque ahora ese concepto de función o procedimiento se sustituirá con otro concepto que es prácticamente igual,
00:01:09
pero bueno, tiene algunos matices, que es el método, ¿vale?
00:01:17
En Java, tanto las funciones como los procedimientos, todo lo que hemos hecho oficialmente se llaman métodos, ¿sí?
00:01:20
Y ahora sí que eso será fundamental, ¿vale? A partir de ahora los métodos tenemos que utilizarlo, ¿vale?
00:01:28
Hasta ahora ha sido una introducción, ahora haremos más hincapié allí y cuando estructuraremos lo que es una clase, lo que son,
00:01:36
crearemos objetos, pues veremos para qué sirven los métodos y cómo tenemos que crear los métodos.
00:01:43
Entonces hoy empezamos con la programación orientada a objetos, es un cambio de paradigma, es un cambio de paradigma grande, ¿vale?
00:01:50
Nosotros tenemos la suerte de que ya esto existe y está implementado y que funciona bastante bien,
00:01:58
tened en cuenta que el cambio de estructurada a objetos es un cambio fuerte, ¿vale?
00:02:06
Es un cambio muy interesante porque permite hacer las tareas de programación que hemos hecho hasta ahora
00:02:12
y que haréis por el resto de vuestra vida si seréis programadores, de una forma más intuitiva, de una forma más sólida, de una forma más reutilizable, ¿vale?
00:02:24
Entonces la programación orientada a objetos, ¿vale?
00:02:35
Que P-O-O-O-O-O-P es como se suele encontrar por allí para no escribir todo, es un paradigma de programación
00:02:38
cuyo elemento estructural principal es el objeto, ¿vale?
00:02:46
Entonces antes el elemento estructural era la función, hemos dicho, pues ahora pasamos a un nuevo elemento estructural.
00:02:49
Mis programas no están basados en hago funciones, están basados en pienso objetos, construyo objetos, ¿qué es un objeto?
00:02:56
Ahora lo vamos a ver con K, ¿vale?
00:03:05
Pero todo el planteamiento de solución de mis algoritmos, de mis estructuras, de mi sistema, está basado en clases y objetos
00:03:07
y veremos las relaciones entre clases y objetos, ¿sí?
00:03:17
El elemento estructural de este paradigma de programación imperativo, programación imperativo estructural era la función, ¿vale?
00:03:21
Ahora ya no.
00:03:27
Las mejoras que aportan las programaciones orientadas a objetos son, primero, mejora en el análisis, ¿vale?
00:03:28
La mente humana es más orientada a pensar los problemas y las soluciones a los problemas en términos de objetos
00:03:34
que en términos de procesos y datos separados, ¿vale?
00:03:43
Entonces, cuando ahora veremos que es un objeto, cuando empezaremos a decidir el objeto,
00:03:47
la idea del objeto es que sea algo que se acerque un poquito más a como nosotros pensamos lo que nos rodea alrededor, ¿vale?
00:03:51
Y, por lo tanto, debería ser más intuitivo programar orientado a objetos que programar de forma estructural.
00:04:00
Escalabilidad, es más fácil enfrentarse a problemas que crecen, ¿vale?
00:04:08
Cuando hablamos de escalabilidad dentro del ámbito informático es ponerse de frente a un problema que puede crecer, que puede escalar, ¿vale?
00:04:15
Entonces, cuando un problema es muy sencillo, normalmente cualquier solución básica nos vale.
00:04:26
Cuando los problemas se van complicando, si no nos hemos hecho un esquema mental, un esquema práctico de la solución bien hecho,
00:04:33
pues puede ser que la solución ya no funcione, la solución se vuelva demasiado ineficiente,
00:04:45
puede ser que la solución no me valga para grandes números o por muchos datos o por acceso a problemas complejos, ¿sí?
00:04:50
La orientación a objeto mejora esta posibilidad, mejora la posibilidad de, vale, yo he hecho esta solución,
00:05:00
he visto que cubre este problema a una cierta escala, cuando el problema se vuelve más complejo,
00:05:09
pues solo tengo que retocar algunas cosas de los objetos y posiblemente mi sistema sigue funcionando, si lo he estructurado bien, etc.
00:05:17
Pero tiene, digamos, una facilidad mejor con respecto a lo que era la programación iterativa estructurada, que es lo que hemos hecho hasta ahora.
00:05:25
Y también reutilización de código, es una cosa muy importante.
00:05:33
La idea es que nosotros crearemos clases y crearemos objetos y estos objetos, si los creamos bien, los podemos reutilizar en otros proyectos.
00:05:38
Si yo me creo una serie de clases, objetos, etc., etc., que simulan una persona y, por lo tanto,
00:05:48
ahí dentro hay todos los datos y las funciones y los procedimientos que puede hacer una persona,
00:05:56
si ahora creo un proyecto totalmente nuevo que tiene que ver con personas,
00:06:01
puedo recoger todas las clases y los objetos que he creado de las personas en el proyecto anterior y reutilizarlos completamente en el nuevo.
00:06:06
Antes, como no había objetos, había más bien funciones, tenía que ir en mi proyecto eligiendo cuáles eran las funciones que sí me pueden valer en el nuevo proyecto
00:06:16
para reutilizarlo desde el viejo.
00:06:30
Ahora mismo, con la orientación a objetos, es un poco distinto, porque en un cierto sentido ya los tengo empaquetados.
00:06:33
Yo tendré mi clase persona con los datos de la persona y con los métodos de la persona,
00:06:40
entonces, cuando quiero utilizar otro sistema donde hay una persona, pues reutilizo esa clase, reutilizo ese código.
00:06:45
Entonces, la idea de por qué esto ha sido importante y es todavía importante es porque mejora estos campos y los hace más intuitivos y más interesantes.
00:06:54
Características de la programación orientada a objetos.
00:07:06
Nosotros vamos a crear clases.
00:07:10
Nosotros ya hemos creado clases.
00:07:13
Cuando vosotros empezáis cualquier programa, ¿con qué palabras empezáis el programa?
00:07:15
Public class.
00:07:23
Public class y el nombre de la clase.
00:07:25
Todos los ejercicios que habéis hecho desde el principio han sido clases.
00:07:27
Ya sabéis crear una clase.
00:07:33
Si os acordáis, también las primeras veces, cuando vimos el Hello World, el primer programa,
00:07:35
decíamos, esto es System.AutoTune.Println.HelloWorld.
00:07:41
Hola mundo.
00:07:45
Fenomenal.
00:07:46
Esto es lo que nos interesa.
00:07:47
Todo el resto, ¿por qué está allí?
00:07:48
Y os dije en esos días, ¿por qué estamos orientados?
00:07:50
Java es un lenguaje orientado a objetos, pero nosotros por ahora ignoraremos la parte orientada a objetos.
00:07:54
Por lo tanto, me lo escribe él.
00:08:00
Me escribe el public class.
00:08:02
Yo no sé qué es.
00:08:04
Por ahora me fío y ya veremos en un futuro.
00:08:05
Ahora es ese futuro en el que empezaremos a entender qué es también la parte del principio y la parte del final.
00:08:07
Las clases definen dos cosas sustancialmente.
00:08:19
Cuando yo escribo una clase, tengo que definir dos cosas.
00:08:23
Los datos que voy a utilizar en esta clase y los comportamientos que pueda hacer esta clase.
00:08:25
¿Sí?
00:08:32
La clase de ejemplo de persona, pues yo tendré que definir una persona en general,
00:08:33
qué datos son relevantes para esta persona.
00:08:39
Vosotros tenéis que modelizar una persona.
00:08:43
¿Qué datos consideráis interesantes?
00:08:46
¿Qué datos consideráis interesantes?
00:08:49
¿Altura?
00:08:54
¿Qué más?
00:08:57
¿Peso?
00:08:58
¿Qué más?
00:08:59
¿DNI?
00:09:01
¿Qué más?
00:09:02
¿Nombre?
00:09:03
¿Edad?
00:09:05
¿Vale?
00:09:06
Puedo saber qué es importante en una persona, así seguro.
00:09:07
¿De qué dependerá una persona?
00:09:15
Los datos importantes de una persona.
00:09:18
En general dependerá del contexto.
00:09:23
¿Para qué es mi programa?
00:09:25
Si mi programa es para la ciudadanía, para hacer un censo electoral,
00:09:27
la altura de la gente no me interesa.
00:09:31
Si mi programa es un gimnasio con orientación también a perder peso,
00:09:34
a tener que ver con qué se come, formaciones nutricionales y cosas por el estilo,
00:09:44
pues a lo mejor saber cuánto es alto y cuánto pesa una persona,
00:09:51
pues puede ser interesante.
00:09:54
Puede ser que el mismo concepto de persona en varios contextos,
00:09:57
en varios sistemas, en varios programas,
00:10:05
pues tenga una definición un poco distinta.
00:10:08
¿Vale?
00:10:12
Pero a lo mejor puedo pillar cosas básicas que sí me valdrían para todos.
00:10:13
¿Vale?
00:10:18
A lo mejor, ¿eh?
00:10:19
No lo sé, en algunos casos se puede hacer.
00:10:20
Si yo estoy modelizando a una persona, saber su nombre, apellido,
00:10:22
pues puede ser útil tanto en un gimnasio como si hago un censo para el estatal,
00:10:28
no sé, como si puede ser una aplicación médica o lo que sea.
00:10:35
¿Vale?
00:10:38
Un identificador como el DNI, pues me podría valer para todas esas cosas.
00:10:39
¿Sí?
00:10:43
A lo mejor no lo llamo DNI porque a lo mejor si lo uso en otra nación
00:10:44
no me vale el DNI, pues lo llamo identificador o ID de la persona,
00:10:49
pero podría ser útil.
00:10:53
¿Vale?
00:10:55
Y luego veremos que la programación a objetos me permite decir,
00:10:56
vale, ya he hecho una persona, la he hecho así, vale, perfecto,
00:10:59
la pillo y la puedo reutilizar en otro sistema.
00:11:01
Y es más, puedo pillar como base lo que ha creado otra persona
00:11:04
o otro programador sobre persona y luego adaptarla a mis necesidades.
00:11:08
Yo tengo una persona ya hecha que tiene solo nombre, apellido e identificador
00:11:14
y ahora quiero hacer mi gimnasio, pues necesito más datos aquí,
00:11:21
pues puedo pillar la persona ya como está hecho y extenderla
00:11:25
y crear datos adicionales y métodos adicionales para una persona
00:11:30
que es para mi contexto concreto.
00:11:35
Eso lo veremos más adelante.
00:11:38
Además de los datos, yo necesito definir los comportamientos.
00:11:41
¿Qué puede hacer esta clase, esta entidad que yo estoy modelizando?
00:11:49
Una persona.
00:11:57
Una persona puede, tiene su nombre y tiene su apellido, vale,
00:11:58
esto lo hemos dicho, son los datos, vale, los datos puros de esta persona.
00:12:01
¿Pero qué puede hacer una persona?
00:12:05
En mi programa, en mi modelo de lo que estoy modelizando de una persona,
00:12:08
¿qué son las actividades que puede hacer una persona?
00:12:14
Y lo tengo que pensar y ver en mi contexto.
00:12:18
Por ejemplo, en un gimnasio la persona podría hacer, usar una máquina
00:12:21
o hacer ejercicio, vale, entonces tendré un método que será hacer ejercicio
00:12:26
que se llamará sobre las personas, o sea, las personas podrán hacer ejercicio
00:12:33
y cuando sea una persona, un objeto persona, una cosa persona por ahora,
00:12:37
ya veremos la diferencia entre falsos objetos,
00:12:42
llama el método hacer ejercicio, pues allí estará el código
00:12:44
que tiene que hacer, que le pasa este objeto a esta persona
00:12:48
cuando yo ejecuto el método hacer ejercicio.
00:12:53
¿Sí? A lo mejor por algún lado tengo una variable de calorías gastadas hoy
00:12:58
y el método hacer ejercicio pues aumenta el número de calorías gastadas, no lo sé.
00:13:04
Entonces, estas son las dos cosas interesantes de una clase,
00:13:12
cuando yo defino una clase, defino sus datos y sus comportamientos, vale,
00:13:16
y la cosa interesante también es que todo esto va empaquetado,
00:13:20
esto es un único bloque, una única clase que me define sus datos,
00:13:24
todos los datos necesarios para modelizar esa clase
00:13:29
y todos los posibles comportamientos, todos los posibles métodos,
00:13:34
todas las posibles acciones, en cierto sentido, que puede hacer esa clase,
00:13:40
esa persona en nuestro caso.
00:13:46
¿Dudas?
00:13:49
Una clase no puede estar dentro de otra clase, ¿no?
00:13:50
Una clase, sí, pero esto ya, muy avanzado.
00:13:53
En un fichero solo yo puedo declarar varias clases y hay mecanismos
00:13:58
para lo que se llama las clases anónimas, para crear una clase dentro de otra clase.
00:14:02
Los objetos colaboran entre ellos para conseguir algo, ¿vale?
00:14:11
La idea es que antes nosotros utilizamos un solo fichero,
00:14:15
yo tenía mi fichero, ahí dentro tenía todos los datos, todas las funciones,
00:14:19
todo lo que tenía que hacer, ejecutaba el main y ya está, se acabó.
00:14:23
Ahora, la idea es que yo voy a crear varias clases,
00:14:27
cada clase que me representa algo del sistema en que yo estoy trabajando, ¿vale?
00:14:32
Y luego tendré un main o varios mains o lo que sea,
00:14:38
que en un cierto sentido hace relacionarse entre ellos estos objetos, estas clases.
00:14:42
Por ejemplo, puedo tener la clase Persona,
00:14:48
y puedo tener la clase Gimnasio, que tiene dentro objetos de tipo máquina,
00:14:50
para que luego yo pueda pillar una persona, asociarla a una máquina determinada,
00:14:56
es decir, oye, esta persona está usando esta máquina.
00:15:01
Para luego, a lo mejor, si mi sistema es una gestión de un gimnasio,
00:15:05
donde yo tengo que configurar que, oye, mira,
00:15:12
a media hora una persona ha pillado esta máquina,
00:15:14
entonces esta máquina está bloqueada, no la puede pillar otra persona,
00:15:16
pues entonces tendré que jugar con estas cosas.
00:15:19
A lo mejor habrá un objeto, una clase, que sea Suscripción,
00:15:23
que se asociará con una persona para saber qué tipo de abono tiene esta persona,
00:15:26
si tiene clases solos, si viene todos los días, todos los martes,
00:15:32
o si tiene 30 horas a la semana, no lo sé.
00:15:36
Todo eso dependerá de mi sistema, cuánto lo quiero complicar y cosas así.
00:15:39
Está claro que al principio nosotros haremos ejemplos muy sencillos
00:15:43
y iremos complicando un poco las cosas.
00:15:46
Los programas reales son sistemas relativamente complejos,
00:15:48
que vosotros sabréis en el tercer trimestre del próximo curso.
00:15:53
Con un poco de suerte.
00:15:59
Entre objetos, la forma de colaborar es pasándose mensajes.
00:16:02
Es decir, entre objetos que están trabajando,
00:16:06
entre personas, o entre una persona y una máquina,
00:16:09
se mandan mensajes.
00:16:12
Esto de mandarse mensajes es muy a alto nivel.
00:16:14
En la realidad, siendo más concretos, son llamadas a métodos.
00:16:18
Cuando yo llamo a un método de otro objeto, de otra clase,
00:16:23
lo que está haciendo, en un cierto sentido, es mandarle un mensaje,
00:16:27
pedirle cosas.
00:16:30
Le mando parámetros, los parámetros que estaban entre paréntesis
00:16:32
en la declaración, ¿os acordáis?
00:16:36
Y él me devuelve, o no, porque puede que no le mande nada,
00:16:38
o puede que no me devuelva nada, un resultado, ¿vale?
00:16:42
Que es las funciones y los procedimientos que teníamos antes.
00:16:47
Ahora los llamamos métodos, pero la idea es esta, ¿vale?
00:16:51
Entonces, si yo tengo una persona, y tendré su método,
00:16:54
salúdame, que cuando yo lo llamo, me dice hola.
00:16:57
Y tendré el método, dime cómo te llamas,
00:17:01
y cuando yo le diré, dime cómo te llamas,
00:17:03
me dirá, me llamo, y va a pillar dentro de sus datos
00:17:05
su nombre y su apellido.
00:17:08
¿Se entiende?
00:17:11
¿Dudas?
00:17:13
Pero ahora estamos a muy alto nivel.
00:17:15
No hemos empezado con ejemplos concretos.
00:17:17
Vamos adelante para empezar a mueblar lo que es,
00:17:19
luego, los ejemplos prácticos que haremos después.
00:17:23
Cada clase va a ocuparse de lo que es su responsabilidad.
00:17:26
Otra cosa interesante.
00:17:29
No voy a hacer como ahora, que yo tengo un programa
00:17:31
y pongo todo allí, ¿vale?
00:17:35
Estoy haciendo mi programita,
00:17:37
tengo solo el main y algunas funciones que tengo por allí,
00:17:39
pues pongo todo dentro de la misma clase,
00:17:42
como hemos estado haciendo ahora, dentro del mismo fichero,
00:17:44
y allí está mezclado todo lo que hace mi programa.
00:17:46
Ahora no.
00:17:50
Ahora lo que intento hacer es dividir y modelizar las cosas
00:17:51
de forma más en módulos, en bloques, en paquetes distintos.
00:17:55
¿Vale?
00:18:01
Entonces, estoy en el gimnasio.
00:18:02
Bueno, no, ahora estoy en un taller de coches.
00:18:05
¿Vale?
00:18:09
Entonces, ¿a mí qué me interesa de este taller de coches?
00:18:10
Bueno, me interesarán los coches,
00:18:14
por lo tanto ahí tendré una clase que representa
00:18:16
todos los datos del coche y todo lo que puede hacer sobre un coche.
00:18:18
Luego me interesarán los clientes,
00:18:22
pues entonces tendré una parte, una clase, unos objetos clientes
00:18:24
que tendrán dentro todos los datos de los clientes.
00:18:31
Si han pagado, no.
00:18:34
Si quieren facturas y no sé qué.
00:18:35
¿Vale?
00:18:37
Todo ahí.
00:18:38
Tendré los mecánicos, que son otros tipos de personas,
00:18:39
pero que son los que puedan arreglar los coches.
00:18:43
Si no tengo un mecánico disponible, no puedo arreglar el coche, etc.
00:18:45
Cada una de estas entidades dentro de mi sistema
00:18:48
será una clase aparte y solo se empaquetará dentro de esa clase
00:18:53
los datos y los métodos que se refieren a esa clase.
00:18:59
¿Vale?
00:19:04
Es su responsabilidad.
00:19:05
No pondré en un coche si ha pagado o no,
00:19:06
porque no es el coche que paga.
00:19:10
No sé si me explico lo que quiero decir.
00:19:12
¿Sí?
00:19:14
Luego, no es una cosa absoluta.
00:19:15
Es una cosa de cómo yo defino mi sistema, mi programa
00:19:19
y para qué sirve.
00:19:24
¿Vale?
00:19:25
A lo mejor el programa que estoy haciendo yo no es de contabilidad
00:19:26
y por lo tanto no le interesa al cliente.
00:19:29
Es solo para los mecánicos
00:19:31
y la gestión de qué mecánico repara qué coche.
00:19:33
Entonces en mi programa me da igual saber quién es el cliente de este coche.
00:19:38
A mí me interesa tener coches mecánicos
00:19:44
y una forma de que el mecánico diga
00:19:46
oye, mira, este coche lo he pillado yo
00:19:48
entonces lo bloquea
00:19:50
y si viene otro mecánico
00:19:51
intenta ver si este coche está libre para repararlo
00:19:52
dice no, ya está un mecánico asignado
00:19:55
y por lo tanto lo deja en paz.
00:19:57
No lo sé.
00:19:59
¿Vale?
00:20:00
Son todos... cosas.
00:20:01
¿Vale?
00:20:04
Aquí, ejemplo.
00:20:05
Un coche puede ser un ejemplo de clase.
00:20:06
¿Vale?
00:20:08
Con las características y las funcionalidades propias.
00:20:09
Un coche puede tener como características
00:20:11
dependiendo de lo que sea
00:20:13
pues un color, la marca, el modelo y la matrícula.
00:20:15
Para mi programa yo decido que la cosa importante de un coche
00:20:19
es que quiero saber cuál es su color, su marca, su modelo y su matrícula.
00:20:23
Estos son los cuatro datos que me interesan.
00:20:27
¿Y qué son estos?
00:20:29
Int, string...
00:20:31
¿Qué son?
00:20:33
No lo sé.
00:20:35
Depende.
00:20:36
¿Vale?
00:20:37
¿Una matrícula qué es?
00:20:38
Un string, porque tiene números y cartas.
00:20:43
¿Color qué es?
00:20:46
String, si lo quiero guardar como azul, verde, naranja.
00:20:51
Si yo tengo una tabla de colores
00:20:56
y el uno es el negro, el dos es el verde, el tres es...
00:20:59
pues es un int.
00:21:02
Si yo lo quiero guardar como RGB
00:21:03
pues serán tres int.
00:21:06
¿Entendéis lo que quiero decir?
00:21:10
Esto yo tengo que definir
00:21:12
cuáles son las características de la clase
00:21:14
y además tengo que definir
00:21:16
cada uno de estas características,
00:21:19
cada uno de estos atributos, como se llamarán,
00:21:21
cada una de estas variables
00:21:24
qué tipo tiene.
00:21:26
¿Vale?
00:21:28
En base a mis exigentes.
00:21:29
Las funcionalidades que me interesan del coche,
00:21:32
estoy definiendo el coche,
00:21:36
es desplazarse o parar.
00:21:38
He decidido que mi coche puede hacer dos cosas.
00:21:40
Puedo llamar el método desplazarse,
00:21:42
que entonces se moverá de un kilómetro, qué sé yo,
00:21:44
o el método parar,
00:21:47
que entonces quiere decir que lo paro,
00:21:49
se apaga y se queda ahí.
00:21:51
¿Por qué?
00:21:53
No lo sé.
00:21:54
Es una gente.
00:21:55
¿Vale?
00:21:56
Podría hilar más fino
00:21:57
y tener que el coche tiene el método arrancar,
00:21:58
el método apagar el coche,
00:22:01
el método desplazarse
00:22:03
y que cuando llamo el método desplazarse,
00:22:04
si antes no he llamado el método arrancar,
00:22:06
pues no me tiene que funcionar.
00:22:08
Entonces tendré un booleano por ahí
00:22:10
para saber si el motor está encendido o no
00:22:12
y cuando llamo arrancar,
00:22:14
comprobaré si hay gasolina,
00:22:16
porque aquí tengo otra característica
00:22:18
que es litros en el depósito,
00:22:20
qué sé yo.
00:22:24
¿Vale?
00:22:25
Depende de lo que estamos nosotros modelizando.
00:22:26
Está claro que aquí no le voy a poner
00:22:28
qué sé yo,
00:22:32
tamaño de las ruedas,
00:22:35
si en mis sistemas el tamaño de las ruedas
00:22:37
no me sirve de nada.
00:22:39
¿Vale?
00:22:41
A lo mejor, pero ahí está,
00:22:42
porque yo he dicho,
00:22:43
oye, mira,
00:22:44
otro proyecto que hemos hecho ya antes,
00:22:45
pues tiene ya un coche,
00:22:47
pillo ese coche
00:22:50
y en ese coche,
00:22:51
porque en ese sistema servía,
00:22:52
pues está la información
00:22:54
de tamaño de las ruedas.
00:22:56
Pero yo,
00:22:58
para no rehacer todo el trabajo otra vez,
00:22:59
pues pillo esa misma clase,
00:23:01
la uso y en mi sistema luego,
00:23:03
pues ese dato o no se pone
00:23:06
o no se lee nunca
00:23:08
y por lo tanto está allí,
00:23:10
ocupa un poco de espacio,
00:23:11
pero me da igual.
00:23:12
Dependerá también de mis exigentes.
00:23:13
Una clase de coche
00:23:16
se responsabilizará de manejar
00:23:18
todo aquello que tenga que ver con el coche.
00:23:20
Un garaje con muchos coches
00:23:22
puede hacer uso de ella
00:23:24
o un conductor también.
00:23:26
¿Vale?
00:23:28
Entonces yo tengo mi clase de coche
00:23:29
y todo lo referente al coche
00:23:30
está allí dentro.
00:23:32
Pero luego,
00:23:34
¿cómo uso este coche?
00:23:35
Pues puedo tener taller
00:23:36
que esté dentro del coche.
00:23:38
Puedo tener garaje
00:23:40
que es,
00:23:42
porque tengo una mansión
00:23:43
y 27 coches,
00:23:44
entonces me he hecho un sistema
00:23:45
para ver qué coches
00:23:47
están aparcados
00:23:48
en mis 27 plazas de garajes
00:23:50
y cuáles no.
00:23:52
O puedo hacer
00:23:53
que hay una otra clase
00:23:54
que se llama conductor
00:23:56
que está asociado
00:23:57
o piloto o lo que sea,
00:23:58
que está asociado con el coche
00:23:59
y usará ese coche.
00:24:01
No lo sé.
00:24:02
Ya veremos cómo hacemos
00:24:03
todas estas cosas
00:24:04
y las asociamos.
00:24:05
Lo que tiene que quedar claro
00:24:06
es que ahora yo tengo una clase
00:24:07
que define
00:24:09
cuáles son las características
00:24:10
y cuáles son las funcionalidades
00:24:12
de esa clase
00:24:14
que se puede hacer
00:24:15
y que todo va empaquetado allí.
00:24:16
Si es la clase coche,
00:24:18
todo lo de coche está allí.
00:24:19
Si es la clase persona,
00:24:21
todo lo de persona
00:24:22
tiene que estar allí.
00:24:23
No puedo tener otra clase
00:24:24
que tiene un dato de persona.
00:24:25
No puedo hacer
00:24:28
la clase persona con el nombre
00:24:29
y luego la clase identificación
00:24:30
con el apellido de esa persona.
00:24:32
Pues no.
00:24:34
El apellido de esa persona
00:24:35
tiene que estar dentro de persona.
00:24:36
¿Dudas?
00:24:39
Cuando queramos
00:24:43
que un coche se desplace
00:24:44
en un garaje,
00:24:45
tendremos que comunicarnos
00:24:47
con el coche específico
00:24:48
y darle la dirección
00:24:49
a la que queremos que se desplace.
00:24:50
Aquí se asume que desplazar
00:24:53
tiene como parámetro
00:24:55
una dirección
00:24:56
y tú haces desplazar a este sitio
00:24:57
y él se desplaza a este sitio.
00:25:00
Cuando yo quiero
00:25:04
que el garaje tendrá una dirección
00:25:05
y yo quiero poner un coche
00:25:08
dentro de ese garaje,
00:25:09
en un main tendré que decir
00:25:10
píllame este coche
00:25:12
sobre este coche
00:25:15
dile desplázate a la dirección
00:25:16
del garaje
00:25:20
y entonces él se desplazará.
00:25:21
¿Dudas?
00:25:25
¿Se entiende más o menos
00:25:26
esta idea en general?
00:25:27
Entonces ¿qué es una clase?
00:25:32
Una clase es lo que
00:25:35
en el lenguaje de programación
00:25:36
nos va a permitir
00:25:37
definir o construir
00:25:38
uno o varios objetos.
00:25:39
Una clase es un molde.
00:25:41
Es la definición abstracta
00:25:44
de los objetos.
00:25:47
La clase es persona.
00:25:49
Luego está la persona
00:25:51
que se llama Estefano,
00:25:52
la persona que se llama Carlos,
00:25:53
la persona que se llama Sara.
00:25:55
Todas las personas concretas
00:25:59
son objetos de la clase persona.
00:26:01
Todos tienen la misma estructura.
00:26:07
Todos tienen nombre,
00:26:10
apellido, identificador.
00:26:11
Porque la clase me dice
00:26:13
que una persona tiene
00:26:14
nombre, apellido,
00:26:16
identificador.
00:26:17
Pero la clase no me dice
00:26:18
qué nombre, qué apellido
00:26:19
y qué identificador.
00:26:21
En el momento en que yo creo
00:26:24
un nuevo objeto de una clase,
00:26:25
o sea una persona específica,
00:26:28
al crearla le diré
00:26:30
tú eres una persona
00:26:32
por lo tanto tu estructura
00:26:33
y tu comportamiento
00:26:34
son lo que están definidos
00:26:35
en la clase.
00:26:36
Pero tú en particular
00:26:37
tienes nombre Estefano,
00:26:38
tienes apellido quiesa,
00:26:40
tienes identificador,
00:26:41
lo que sea.
00:26:43
Entonces normalmente,
00:26:46
en un cierto sentido,
00:26:47
la clase una
00:26:48
y a partir de una clase
00:26:50
puedo crear un montón de objetos.
00:26:52
Los objetos son instancias
00:26:55
de una clase.
00:26:58
Yo pillo una clase
00:26:59
en la instancia de un objeto.
00:27:01
La clase es un molde vacío
00:27:04
cuando yo relleno
00:27:07
los varios campos de esa clase
00:27:09
estoy creando un objeto de esa clase
00:27:11
y puedo crear todos los objetos
00:27:13
que quiero.
00:27:15
Pregunta para vosotros.
00:27:16
¿Puedes volver a repetirlo?
00:27:19
Sí.
00:27:24
Esto no sería igual
00:27:25
que las tablas en base de datos.
00:27:27
Si tienes una tabla
00:27:29
con ciertos atributos,
00:27:31
por ejemplo,
00:27:33
persona, tienes DNI,
00:27:34
tienes...
00:27:36
Si una tabla es la clase,
00:27:37
cada registro es un objeto.
00:27:40
Vale.
00:27:43
Pero no son ni clases ni objetos.
00:27:45
¿Vale?
00:27:47
Porque faltaría toda la parte del método.
00:27:48
En base de datos no lo hay.
00:27:50
Pero como paralelo,
00:27:52
¿por qué no?
00:27:53
La tabla te dice,
00:27:54
mira, aquí va nombre,
00:27:55
apellido y edad.
00:27:57
¿Vale?
00:27:59
Y no te ha dicho nada.
00:28:00
Te ha dicho la estructura,
00:28:01
pero no te ha dicho
00:28:03
qué hay dentro.
00:28:04
Y luego tú vas rellenando con record.
00:28:05
Sí.
00:28:07
Esto es parecido.
00:28:08
La clase te dice,
00:28:09
en general,
00:28:11
qué características tiene
00:28:12
lo que estamos modelizando
00:28:14
y qué puede hacer,
00:28:17
qué métodos puede ejecutar
00:28:19
este objeto.
00:28:23
¿Vale?
00:28:24
Y a partir de allí,
00:28:25
tú dices,
00:28:26
vale, yo me puedo crear
00:28:27
un objeto concreto
00:28:28
rellenando sus campos
00:28:29
y luego utilizándolo con sus métodos.
00:28:31
¿Sí?
00:28:33
Y...
00:28:34
Entonces, la clase, repito,
00:28:37
es un molde,
00:28:39
es una abstracción,
00:28:40
¿vale?
00:28:43
Una categoría,
00:28:44
una clase de lo que estoy modelizando.
00:28:45
Los objetos son instancias concretas.
00:28:49
Son, píllame este molde
00:28:53
y asígnale,
00:28:55
allá donde había campos vacíos,
00:28:56
porque no sé,
00:28:58
yo sé que tiene que poner un nombre,
00:28:59
pero no sé cuál nombre,
00:29:00
pues ahora asígnale un nombre.
00:29:01
Y yo desde una clase sola
00:29:03
puedo hacer muchos objetos distintos.
00:29:05
Cada objeto será un trocito de memoria,
00:29:07
será como una variable,
00:29:10
pero no una variable sencilla
00:29:11
como el tipo int,
00:29:13
que es un cuadradito con dentro el número.
00:29:15
Será un cuadrado grande
00:29:17
con varios campos,
00:29:19
con muchas cosas,
00:29:20
pero es un bloque único
00:29:21
guardado por algún lado en la memoria,
00:29:22
en una zona de la memoria
00:29:24
que se llama el heap,
00:29:26
heap,
00:29:28
¿vale?
00:29:29
Que es donde la Java Virtual Machine
00:29:30
crea los objetos.
00:29:32
Pregunta, dos preguntas para vosotros.
00:29:35
¿Cómo se creará un nuevo objeto?
00:29:37
New, ¿vale?
00:29:41
Cuando veis new,
00:29:43
la palabra new,
00:29:45
y nosotros la hemos visto por ejemplo
00:29:47
en los array, ¿vale?
00:29:48
Allí es que se está creando un nuevo objeto.
00:29:50
Cuando nosotros crearemos nuevos objetos
00:29:53
de una clase,
00:29:55
pues pondremos new y ese nombre,
00:29:57
nombre de la clase, ¿sí?
00:29:59
Y le pasaremos los parámetros necesarios
00:30:01
para que construya lo que tiene que construir.
00:30:03
Y a ese punto se creará un objeto.
00:30:05
Y si yo lo llamo diez veces el new,
00:30:07
pues me he creado diez objetos distintos.
00:30:09
¿El objeto puede tener heredad?
00:30:12
¿Puede partir de distintas clases?
00:30:15
No, no heredamos.
00:30:18
La herencia viene después.
00:30:21
Por ahora son objetos separados
00:30:23
y cosa por este, ¿vale?
00:30:24
Esto de la herencia os lo digo
00:30:26
porque luego lo haremos, lo veremos.
00:30:27
Pero por ahora vamos a lo básico.
00:30:29
Y no, en Java no puede.
00:30:32
En C++ sí.
00:30:35
Depende del lenguaje programado.
00:30:37
Podemos decir que son moldes para construir objetos.
00:30:40
Estos moldes tienen que ser escritos o programados
00:30:43
y cada molde va a tener unas características
00:30:46
que son el nombre de este molde,
00:30:48
cómo se llama la clase, la clase persona,
00:30:51
los atributos,
00:30:53
que son las características propias de esta clase,
00:30:55
y los métodos, o sea, las funcionalidades
00:30:58
que ofrece esta clase.
00:31:01
Entonces, clase animal.
00:31:03
Nombre de la clase animal.
00:31:12
Atributos de la clase animal.
00:31:15
¿Qué nos interesa?
00:31:18
¿Qué nos oye?
00:31:24
Peso. Peso del animal.
00:31:26
¿Qué es peso?
00:31:28
Es un string, es un boolean.
00:31:30
Double. ¿Qué representa?
00:31:35
Gramos, kilos, toneladas, gramos.
00:31:37
Pues entonces yo pondría peso en gramos.
00:31:41
Así, peso en mayúscula M, gramos.
00:31:44
¿Qué más nos interesa del animal?
00:31:49
Alimentación.
00:31:54
¿Qué pilla alimentación?
00:31:56
¿Qué tipo es?
00:31:59
Un string.
00:32:03
¿Vale? Puedo poner cualquier cosa.
00:32:04
Vale.
00:32:06
¿Qué más me interesa del animal?
00:32:09
Color, raza.
00:32:15
Pongo todo lo que sea en atributos.
00:32:16
¿Vale?
00:32:18
Esto será que cada objeto animal que creo
00:32:19
tendrá su peso en gramos,
00:32:22
su raza, su color,
00:32:24
su alimentación.
00:32:27
¿Vale?
00:32:29
Estas son las cosas.
00:32:30
¿Y por qué hay alimentación?
00:32:31
Porque posiblemente este es un animal
00:32:32
que utilizaré en un sistema de un zoo.
00:32:35
¿Vale?
00:32:39
Y tengo que saber cada animal que está comiendo
00:32:40
para luego poderle dar la comida correcta.
00:32:42
¿Sí?
00:32:45
O es un sistema de preservación animal
00:32:46
de especies raras
00:32:50
y por lo tanto tengo que saber
00:32:52
en qué hábitat y qué comen cada uno de ellos.
00:32:54
Lo sé.
00:32:56
Está claro que si es una cosa
00:32:57
en que la alimentación no tiene sentido,
00:32:59
pues quito la alimentación.
00:33:01
¿Se entiende eso?
00:33:03
¿Y qué puede hacer un animal?
00:33:04
Comer.
00:33:06
¿Vale?
00:33:08
Cuando yo llamaré el método comer,
00:33:09
que le paso un objeto que come, por ejemplo,
00:33:11
o sea, un algo que come,
00:33:14
él comprobará que la alimentación sea correcta
00:33:17
porque si no, no lo come,
00:33:20
y si lo come, subirá su peso.
00:33:22
Lo sé.
00:33:24
Tamagotchi.
00:33:27
Tamagotchi total.
00:33:28
¿Vale?
00:33:29
¿Se entiende esto?
00:33:30
¿Dudas?
00:33:32
¿Idea de clase?
00:33:35
Cuando hablo de clase,
00:33:37
hablo de algo general.
00:33:38
¿Vale?
00:33:40
Es la abstracción.
00:33:41
Yo puedo tener aquí veinte personas,
00:33:43
veinticinco personas.
00:33:46
¿Vale?
00:33:47
Lo que estoy haciendo es hacer
00:33:48
que tenéis en común
00:33:51
para abstraer y decir,
00:33:53
vale, todos vosotros tenéis un nombre,
00:33:54
todos vosotros tenéis un apellido,
00:33:56
todos vosotros tenéis un...
00:33:58
¿Vale?
00:33:59
Y a este punto,
00:34:00
cada uno de vosotros tendrá estanciado
00:34:01
el nombre, apellido y los otros atributos
00:34:03
con lo vuestro.
00:34:06
¿Sí?
00:34:08
Yo soy una persona, como todos vosotros,
00:34:09
pero soy una persona que en el nombre tiene Stefano
00:34:11
y en el apellido tiene Kiki.
00:34:14
¿Verdad?
00:34:16
¿Pensaba una clase?
00:34:19
Siempre como ejemplo persona.
00:34:20
Se define en un fichero que tiene el mismo nombre
00:34:22
y extensión.
00:34:24
O sea, que la clase persona,
00:34:25
normalmente, se define en persona.java,
00:34:27
que es lo que hemos hecho nosotros.
00:34:30
En realidad, toda la clase que es pública,
00:34:32
la que se llama public class,
00:34:35
tiene que estar dentro de...
00:34:37
O sea, la public class persona
00:34:39
tiene que estar en persona.java.
00:34:41
La class persona no,
00:34:43
pero lo veremos más adelante.
00:34:45
La palabra reservada class
00:34:48
es la que define una clase.
00:34:49
Definimos los atributos datos relevantes
00:34:52
y los métodos comportamientos de la clase.
00:34:54
Aquí existe una cosa que es el UML,
00:34:56
Universal Modeling Language.
00:35:00
No sé si habéis visto,
00:35:03
o habéis empezado a ver en...
00:35:05
Hay algunos de los diagramas que aprenderéis
00:35:10
y que aprenderéis a amar,
00:35:13
que se llama diagrama de clases,
00:35:15
donde podéis definir las clases
00:35:17
para que luego se mezclen entre ellas, etc.
00:35:20
Entonces, por ejemplo, la clase persona
00:35:23
puede ser esta cosa aquí,
00:35:26
que es una descripción de...
00:35:32
¿Cómo se llama la clase persona?
00:35:34
¿Qué atributos tiene?
00:35:37
Tiene un string, que es su nombre,
00:35:39
e un int, que es su edad.
00:35:42
¿Y qué puede hacer?
00:35:44
¿Cuáles son los métodos de personas?
00:35:46
El escribir, que no pilla ningún variable
00:35:48
y no devuelve nada.
00:35:52
Esta persona, por como me la han definido,
00:35:56
tiene un solo método,
00:35:59
tiene un solo comportamiento,
00:36:00
una sola funcionalidad,
00:36:01
que es escribir.
00:36:02
¿Y qué hace esto?
00:36:03
No lo sé.
00:36:04
¿Vale?
00:36:05
No sé por qué no está escrito.
00:36:06
¿Cómo podría extender esto?
00:36:08
Pues persona con nombre, apellido, edad,
00:36:10
dirección e identificador.
00:36:13
¿Vale?
00:36:15
Estos irían aquí, porque son atributos.
00:36:16
¿Y qué funciones tiene?
00:36:18
Pues podría tener la función mudanza,
00:36:20
que me cambia la dirección.
00:36:23
Podría tener la función saludar,
00:36:25
que me dice hola, me llamo no sé qué,
00:36:28
tengo no sé cuántos años y te saludo.
00:36:30
No lo sé.
00:36:35
Depende de lo que estoy haciendo.
00:36:36
No.
00:36:42
Podría...
00:36:43
No, no es, no sé.
00:36:44
¿Vale?
00:36:45
Podría que haya funciones que no tocan estas cosas.
00:36:46
Sería raro.
00:36:49
¿Vale?
00:36:50
Porque normalmente lo que estoy haciendo aquí
00:36:51
es empaquetar datos
00:36:53
y cómo se manejan esos datos,
00:36:55
en un cierto sentido,
00:36:58
las funcionalidades.
00:36:59
Está claro que si la persona puede hacer una cosa
00:37:00
que no tiene nada que ver con lo que
00:37:02
tiene como atributos,
00:37:04
puede pasar,
00:37:06
pero me debería preguntar muy bien
00:37:08
por qué este método está en persona.
00:37:11
Porque a lo mejor no es un método de persona.
00:37:13
Si aquí yo tengo el método de conduce coche,
00:37:15
que lo que hace es mover un coche,
00:37:19
pues a lo mejor no es de persona.
00:37:21
A lo mejor lo debería buscar,
00:37:23
meter en coche mismo
00:37:25
y que luego la persona como atributo
00:37:27
tenga un coche
00:37:29
y entonces pueda acceder a ese coche y moverlo.
00:37:30
¿Por qué?
00:37:35
Y aquí a lo mejor me adelanto un poco.
00:37:36
Estos atributos
00:37:38
claramente son tipos primitivos.
00:37:40
Pero también pueden ser objetos.
00:37:43
Entonces yo puedo asignar a una persona
00:37:46
un objeto casa
00:37:50
que tendrá su domicilio,
00:37:53
tendrá el color de las ventanas,
00:37:55
tendrá cuántas plantas son
00:37:57
y los metros cuadrados.
00:37:59
Entonces aquí yo tendré un atributo
00:38:00
que no es mi casa dos puntos string,
00:38:02
es mi casa dos puntos casa con la C mayúscula.
00:38:06
¿Y qué es casa?
00:38:09
Pues una clase.
00:38:10
Me puedo ir a mirar esa clase
00:38:12
y ver qué hay ahí.
00:38:14
Y luego puedo instanciar una casa
00:38:16
y tener mi casa
00:38:19
con mis 2.500 metros cuadrados mínimo
00:38:21
con alquiler 25 euros al mes.
00:38:25
¿Sí?
00:38:29
¿Dudas?
00:38:30
Ahora, ¿cómo se traduce esto
00:38:32
en esto?
00:38:35
Public las personas.
00:38:41
¿Vale?
00:38:43
Aquí es donde va el nombre.
00:38:44
Con las nomenclaturas típicas de Java, ¿vale?
00:38:46
Las clases empiezan por mayúsculas.
00:38:53
¿Ok?
00:38:55
De esta forma, cuando yo veo una cosa así,
00:38:56
puedo saber si es una clase,
00:38:58
si es un método,
00:39:00
si es una variable,
00:39:01
si es un lo que sea.
00:39:02
¿Sí?
00:39:03
Aquí va el método escribir,
00:39:05
que hemos dicho que es void
00:39:09
porque no pilla nada
00:39:11
y devuelve nada,
00:39:12
por lo tanto es así.
00:39:13
Si pusiera que aquí escribe un string,
00:39:15
pues aquí dentro podría ser string,
00:39:18
saludo,
00:39:20
y que aquí escriba el saludo,
00:39:21
no lo sé.
00:39:22
¿Vale?
00:39:23
Y aquí el cuerpo de este método.
00:39:24
O sea, ¿qué hace este método?
00:39:26
Una clase puede o no tener el main.
00:39:27
¿Os acordáis qué era el main?
00:39:31
¿Cómo os definí yo el main?
00:39:34
El punto de acceso a mi programa.
00:39:37
Y hasta ahora tenía sentido.
00:39:40
O sea, tengo una clase,
00:39:43
le tengo que decir que este es el punto de acceso,
00:39:44
pues no, es esa clase.
00:39:46
Pero ahora en un sistema
00:39:48
donde yo tengo varias clases,
00:39:49
tengo persona,
00:39:51
tengo casa,
00:39:52
tengo coche,
00:39:53
tengo taller,
00:39:54
pues en todos estos
00:39:55
habrá al menos una clase
00:39:57
que tendrá un main.
00:39:59
Y eso es de donde se empieza a ejecutar.
00:40:01
Será aquí donde yo empezaré a crear
00:40:04
los objetos personas,
00:40:06
luego los asocio con los objetos casa,
00:40:08
luego los asocio con los objetos coche,
00:40:10
y voy creando mi sistema y hacer cosas.
00:40:12
Si tuviera un menú que dice
00:40:15
crea un nuevo coche,
00:40:17
crea una nueva casa,
00:40:18
crea una nueva persona,
00:40:19
asocia persona con casa,
00:40:20
pues el menú sería aquí.
00:40:21
Y este main no necesariamente
00:40:25
está en todas las clases,
00:40:27
que es también una cosa nueva.
00:40:28
Hasta ahora una clase tiene un main,
00:40:30
una clase tiene un main.
00:40:32
Ahora, si yo tengo tres clases,
00:40:33
tengo dos clases,
00:40:35
tengo persona y coche,
00:40:36
para asociar luego personas y coches,
00:40:38
tengo que elegir
00:40:40
si el main está en persona
00:40:42
o si el main está en coche.
00:40:44
O me creo una tercera persona,
00:40:46
que es una tercera clase,
00:40:48
que es mi clase,
00:40:50
ejecutar ejemplo persona coche,
00:40:51
¿vale?
00:40:56
Y lo que hago es que en esta clase aquí
00:40:57
no es una clase destinada a crear objetos,
00:40:59
es una clase estática,
00:41:01
que sustancialmente lo que hace
00:41:06
es tener solo el main.
00:41:07
Entonces, yo tengo aquí mi persona
00:41:09
con la cosa de persona,
00:41:11
mi coche con la cosa de coche,
00:41:12
y cuando quiero ejecutar,
00:41:13
trabajar con ellos,
00:41:15
pues ejecuto esta tercera clase,
00:41:16
la clase ejecutar.
00:41:18
Y la clase ejecutar,
00:41:21
pues lo que hace
00:41:22
es empezar a crear persona,
00:41:23
crear coches
00:41:24
y asociarlo entre ellos.
00:41:25
¿Dudas?
00:41:28
Esto es semi nuevo,
00:41:33
casi nuevo,
00:41:35
porque con Raquel
00:41:37
algunos de vosotros lo han visto,
00:41:38
pero nosotros en la vida
00:41:40
hemos escrito aquí.
00:41:42
Nosotros estas cosas de aquí
00:41:43
las hacemos en el main.
00:41:45
Y ahora en vez,
00:41:47
las sacamos del main.
00:41:49
Es más,
00:41:50
las sacamos de todos los métodos.
00:41:51
Las variables que se ponen aquí,
00:41:56
fuera de cualquier método posible,
00:41:59
son lo que son los atributos.
00:42:01
Las variables propias
00:42:04
que luego utilizaré
00:42:08
dentro de la persona
00:42:10
para hacer objetos.
00:42:11
Cuando yo creo un objeto persona,
00:42:13
pues tendrá un string de nombre
00:42:15
y un int de data.
00:42:17
Oye, pero este es nombre,
00:42:19
este es data,
00:42:20
¿cuáles son?
00:42:21
¿Cómo se llama esta persona?
00:42:22
No lo sé.
00:42:23
Este es el molde.
00:42:24
Esto me está diciendo
00:42:25
que tendrá un nombre,
00:42:26
tendrá una edad.
00:42:27
Luego a partir de allí
00:42:29
vamos a ver
00:42:31
cómo se le da
00:42:32
y qué persona es.
00:42:33
A partir de este molde de aquí
00:42:34
yo puedo crear
00:42:37
cuántas personas quiero.
00:42:38
¿Dudas?
00:42:42
¿Preguntas?
00:42:44
Pregunta para vosotros entonces.
00:42:50
¿Esta variable nombre?
00:42:52
¿Qué visibilidad tiene?
00:42:54
¿Qué ámbito tiene?
00:42:56
¿Qué scope tiene?
00:42:58
¿Dónde la puedo usar?
00:42:59
¿Recuerdas cuál era el ámbito
00:43:11
de una variable?
00:43:12
¿Dónde existe una variable?
00:43:13
Si yo creo una variable
00:43:18
en algún lado,
00:43:19
¿hasta dónde existe esa variable?
00:43:20
Dentro de su bloque.
00:43:24
Y aquí empieza un bloque
00:43:28
que acaba al final.
00:43:30
Es decir,
00:43:32
que esta variable nombre
00:43:33
la puedo usar
00:43:35
en cualquier lado de esta clase.
00:43:36
En cualquiera
00:43:38
de los métodos de la clase.
00:43:39
Cualquier método de la clase
00:43:41
puede acceder a ese nombre.
00:43:43
Lo puedo usar aquí dentro,
00:43:45
como lo puedo usar aquí dentro,
00:43:47
como lo puedo usar en otro método.
00:43:48
Como estos son los parámetros,
00:43:50
los atributos,
00:43:52
las características de esta clase,
00:43:54
y los métodos,
00:43:56
aquí lo que van a hacer
00:43:58
es modificar estos atributos,
00:43:59
pues estos atributos
00:44:01
son accesibles
00:44:02
desde cualquier punto de la clase.
00:44:03
Veremos que,
00:44:10
si son públicos,
00:44:11
son hasta accesibles
00:44:13
desde fuera de esta clase.
00:44:14
Si son privados,
00:44:16
solo esta clase
00:44:18
los puede modificar.
00:44:21
Eso dependerá de mí,
00:44:23
cuando veremos ahora los modificadores,
00:44:24
lo veremos más.
00:44:26
Pero si yo tengo aquí
00:44:27
un dato especial,
00:44:28
que no quiero que alguien fuera cambie,
00:44:30
a menos que no pase
00:44:32
por un método mío,
00:44:34
que lo que va a hacer
00:44:36
es comprobar
00:44:37
que los datos que me has dado
00:44:38
son correctos,
00:44:39
imaginaos que aquí
00:44:40
hay un string DNI.
00:44:41
Y yo cuando tú
00:44:43
configuras el DNI,
00:44:44
no quiero que tú puedas poner gato,
00:44:46
porque gato no es un DNI,
00:44:48
un DNI tiene que ser
00:44:50
ocho números y una letra.
00:44:51
Entonces a lo mejor yo me digo,
00:44:53
oye mira,
00:44:55
este DNI es privado,
00:44:56
y te doy un metodito aquí
00:44:58
que puede ser
00:45:00
configuraDNI,
00:45:01
y dentro del metodito
00:45:03
configuraDNI,
00:45:04
tú cuando accedes allí
00:45:05
me comprueba
00:45:06
antes de asignarlo
00:45:07
que es efectivamente
00:45:08
ocho números más una letra.
00:45:09
Pero bueno,
00:45:12
me estoy adelantando.
00:45:13
Lo que sacamos de aquí es,
00:45:15
creo una clase,
00:45:17
la clase es un molde,
00:45:19
tiene los atributos aquí,
00:45:21
y tiene los métodos aquí,
00:45:23
¿vale?
00:45:25
Puede o no tener un main,
00:45:26
si tiene el main
00:45:28
es el punto de acceso
00:45:29
de mi programa,
00:45:30
si no tiene el main,
00:45:31
no.
00:45:32
Pregunta para vosotros,
00:45:33
¿puede haber un programa
00:45:35
sin main?
00:45:36
Programa sin main
00:45:42
no sería ejecutable,
00:45:45
no sé de dónde empezar.
00:45:47
Entonces en un sistema,
00:45:49
por algún lado
00:45:51
un main tiene que estar.
00:45:52
¿Puedo tener
00:45:54
tres clases y tres main?
00:45:56
¿Puedo tener persona con su main,
00:46:03
coche con su main,
00:46:05
o casa con su main?
00:46:07
Lo puedo tener, ¿vale?
00:46:12
Pero normalmente,
00:46:14
la idea es que haya uno de estos
00:46:16
que sea mi sistema,
00:46:18
este es un main
00:46:20
que cuando lo lanzo
00:46:22
empieza mi sistema
00:46:23
de gestión de cosas y casas
00:46:24
de personas, ¿sí?
00:46:25
Mientras que en cada clase
00:46:27
hay un main
00:46:29
que hace pruebas
00:46:30
sobre esta clase.
00:46:32
Cuando ya he creado la clase persona
00:46:34
para probar la clase persona
00:46:35
y crear tres, cuatro personas
00:46:37
y hacerle hacer algo,
00:46:38
pues me he creado un main
00:46:39
para ver de utilizar las personas,
00:46:40
los objetos personas, ¿vale?
00:46:43
Y que se lanza esto,
00:46:45
hace algo,
00:46:46
pero no es mi sistema,
00:46:47
es una prueba concreta de este.
00:46:48
¿Sí?
00:46:51
En general,
00:46:52
lo que debería haber
00:46:53
es un main
00:46:54
y las clases que quiero
00:46:55
y que necesito.
00:46:57
¿Dudas?
00:46:59
¿Sí?
00:47:01
Una variable existe
00:47:09
solo dentro de su bloque.
00:47:11
Cuando tú haces for, int,
00:47:13
no sé qué,
00:47:14
dentro que hagas int aux
00:47:15
y la usas,
00:47:19
cuando sale del for,
00:47:20
aux no existe,
00:47:21
no la puedes usar fuera del for.
00:47:22
Porque el ámbito de una variable
00:47:24
es el bloque en el que crea.
00:47:26
Ahora, nosotros normalmente
00:47:28
creamos las variables
00:47:29
dentro de este bloque.
00:47:30
Entonces,
00:47:31
solo existen en el main,
00:47:32
pero no existen,
00:47:33
por ejemplo,
00:47:34
en escribir,
00:47:35
porque la he creado aquí dentro.
00:47:36
Ahora,
00:47:38
lo que he hecho es
00:47:39
sacar estas variables aquí fuera.
00:47:40
Al sacarlas aquí fuera,
00:47:43
existen en el bloque persona.
00:47:44
Por lo tanto,
00:47:48
existen tanto en escribir
00:47:49
como en main.
00:47:50
Por lo tanto,
00:47:52
las puedo utilizar
00:47:53
tanto en escribir
00:47:54
como en main,
00:47:55
como en cambia nombre,
00:47:56
como en saluda,
00:47:57
como en todos los métodos
00:47:58
que están aquí.
00:48:00
Aquí hay como
00:48:02
tres niveles de variables,
00:48:05
digamos así.
00:48:07
Hay las variables locales,
00:48:08
que son locales a un método.
00:48:10
Las variables atributos,
00:48:13
que son comunes a toda la clase,
00:48:16
las puedo usar en todos los métodos.
00:48:18
Y luego veremos
00:48:20
que hay las variables estáticas
00:48:21
o globales,
00:48:24
que prácticamente no dependen
00:48:25
del objeto,
00:48:27
pero son las mismas
00:48:28
en todos los objetos.
00:48:29
Pero digo,
00:48:31
si no se supone que cada,
00:48:32
por ejemplo,
00:48:34
persona y escribir
00:48:35
son clases que van...
00:48:36
Escribir no es una clase.
00:48:39
Es un método de la clase persona.
00:48:41
Si se supone que persona es una clase
00:48:44
que existe en un lado
00:48:46
y luego lo tengo que utilizar
00:48:49
en el main, por ejemplo...
00:48:51
Persona es una clase.
00:48:53
Nombre lo puedes usar aquí.
00:48:57
Si quieres crear una persona,
00:49:03
aquí en el main o en otro main
00:49:05
puedes crear una persona.
00:49:07
No hemos visto todavía
00:49:08
cómo creamos los objetos.
00:49:09
Ahora simplemente
00:49:12
estamos hablando del molde.
00:49:13
Estamos hablando de la clase.
00:49:15
Aquí yo estoy haciendo
00:49:17
una descripción
00:49:18
de cómo es una persona.
00:49:19
De cómo es y lo que hace.
00:49:21
El cuerpo de uno de estos...
00:49:24
es cómo lo hace.
00:49:27
No sé si veis las tres preguntas.
00:49:29
¿Qué tiene la persona?
00:49:33
Sus atributos.
00:49:35
¿Qué hace la persona?
00:49:36
Sus métodos.
00:49:38
¿Cómo hace las cosas?
00:49:39
Pues la descripción
00:49:41
de la implementación del método.
00:49:42
Yo puedo tener escribir
00:49:45
y aquí dentro
00:49:47
tener implementaciones distintas.
00:49:48
Si la haces tú,
00:49:50
haces una implementación.
00:49:51
Si la haces tú,
00:49:52
haces una implementación.
00:49:53
Hacen la misma cosa
00:49:54
porque los dos sabrán escribir
00:49:55
sea lo que sea
00:49:56
lo que quiere decir escribir,
00:49:57
pero el tuyo lo hace
00:49:58
de una forma
00:49:59
y el tuyo lo hace de otra.
00:50:00
El cómo lo hacen
00:50:01
son de formas distintas.
00:50:02
A lo mejor una es más eficiente
00:50:03
y otra no.
00:50:05
Como cuando yo daba los ejercicios
00:50:07
y uno lo resolvía
00:50:08
de una forma
00:50:09
y uno de otra.
00:50:10
Los dos ejercicios
00:50:11
hacen lo mismo
00:50:12
y son correctos
00:50:13
pero uno tarda un segundo
00:50:14
y uno tarda diez horas.
00:50:15
Lo están haciendo
00:50:17
de formas distintas
00:50:18
pero lo están haciendo a mí.
00:50:19
Eso depende
00:50:20
de la implementación.
00:50:21
Siempre clases.
00:50:25
En un archivo
00:50:26
solo puede haber
00:50:27
una clase public.
00:50:28
Puede haber más clases
00:50:30
pero public una clase solo.
00:50:31
Puede haber
00:50:34
otras contenidas
00:50:35
pero no accesibles
00:50:36
desde el exterior.
00:50:37
Cuando yo no pongo public
00:50:38
quiere decir que
00:50:40
fuera de este fichero
00:50:41
código escrito
00:50:42
fuera de este fichero
00:50:43
no puede acceder
00:50:44
a estas clases.
00:50:46
Están como protegidas.
00:50:47
En realidad
00:50:49
hay cuatro niveles
00:50:50
de protección
00:50:51
desde público a privado.
00:50:53
La privada es la más estricta.
00:50:56
La pública es la menos estricta.
00:50:58
Y luego hay en el medio
00:51:02
cosas que son
00:51:04
a nivel de package
00:51:05
o a nivel de herencia.
00:51:06
Como no sabemos
00:51:08
que son estas cosas
00:51:09
por ahora no lo sabemos.
00:51:10
Los atributos de una clase
00:51:12
son propios de la misma
00:51:13
y se podrán consultar
00:51:15
internamente
00:51:16
por parte
00:51:17
de los métodos de la misma.
00:51:18
O sea, todos los métodos
00:51:19
pueden toquetear
00:51:20
pueden modificar
00:51:22
y leer
00:51:23
todos los atributos
00:51:24
dentro de una misma clase.
00:51:26
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento
- Visualizaciones:
- 10
- Fecha:
- 20 de diciembre de 2023 - 12:00
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 51′ 37″
- 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:
- 130.20 MBytes