20250121 Herencia_ClasesAbstractas_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 pues reconectemos
00:00:00
en que estábamos
00:00:03
que nos habíamos dado cuenta de
00:00:05
que nunca íbamos a instanciar
00:00:08
figuras geométricas
00:00:10
pero el método perímetro tiene que estar
00:00:11
el método perímetro
00:00:14
tiene que estar aquí
00:00:16
porque como el método perímetro
00:00:17
no esté aquí
00:00:20
el compilador no me deja seguir
00:00:21
vale
00:00:24
vale
00:00:24
el método perímetro tiene que estar
00:00:26
Pero como no tiene sentido implementar ahí nada, abstracto.
00:00:29
Luego la clase se vuelve abstracta.
00:00:34
¿Es un problema?
00:00:36
Es un problema si quisiéramos instanciar figuras geométricas en mi aplicación.
00:00:38
¿Vamos a querer instanciar figuras geométricas en la aplicación?
00:00:43
No, pues entonces no es un problema.
00:00:46
Luego, figura geométrica nos sirve como una especie de plantilla,
00:00:49
porque no se van a crear objetos de ella.
00:00:53
de plantilla que nos dice
00:00:55
oye, las figuras geométricas van a tener
00:00:58
nombre, número de lados
00:01:00
estos métodos, además nos ofrece
00:01:01
constructores como este
00:01:04
y diríais, ¿qué sentido tiene un constructor
00:01:05
en una clase de la que nunca se van a instanciar
00:01:08
objetos?
00:01:10
Pues el único sentido que tiene
00:01:11
es facilitarnos la construcción
00:01:13
de los constructores de las
00:01:16
subclases pudiendo
00:01:18
llamar yo al super
00:01:20
porque con el super llama al constructor
00:01:21
de la superclase
00:01:24
luego ese constructor no la voy a usar
00:01:25
para instanciar objetos
00:01:27
figura geométrica
00:01:29
pero lo estoy llamando desde aquí abajo
00:01:30
cuando instanciar haya triángulos
00:01:32
luego me está ayudando para construir
00:01:34
código más fácil
00:01:37
¿vale? y sobre todo he ganado
00:01:38
lo siguiente
00:01:41
esto sí que es lo bueno y lo que he ganado
00:01:41
no sólo que ya
00:01:45
prohíbo que alguien por error
00:01:47
instancie una figura geométrica
00:01:49
ya por error
00:01:51
nadie lo va a poder instanciar en la aplicación
00:01:52
Porque es abstracta, sino lo siguiente
00:01:54
Ah, la aplicación se amplía
00:01:56
Y ahora ya resulta que
00:01:58
Ah, vamos a empezar a trabajar con pentágonos
00:02:00
Venga, pues vamos a meter un pentágono
00:02:02
Ala
00:02:04
Vamos a meter un pentágono
00:02:13
Como un pentágono
00:02:17
Es una figura geométrica
00:02:18
Pues lo haríamos heredar de figura geométrica
00:02:20
¿Vale?
00:02:23
Vamos a hacerle el constructor
00:02:26
Antes que nada
00:02:27
Para que
00:02:28
el error del constructor no nos lo dé
00:02:30
venga, tiene el constructor
00:02:36
como no le he puesto propiedades adicionales
00:02:39
el constructor lo único que haría
00:02:42
sería llamarle la superclase y ya está
00:02:44
yo aquí le pondría
00:02:46
las propiedades de pentágono que serían el lado
00:02:47
o los cinco lados
00:02:50
si es un pentágono irregular
00:02:52
yo qué sé, aunque el pentágono
00:02:53
siempre es un polígono regular, creo
00:02:56
por definir
00:02:58
porque si no sería un polígono de cinco lados
00:02:58
Sí, pero que tú puedes construir un pentágono
00:03:02
Irregular, ¿verdad?
00:03:06
O sea, físicamente puedes, igual que un triángulo
00:03:08
Puedes construir un triángulo irregular
00:03:10
Pero creo que pentágono se refiere a que tengan los mismos lados
00:03:11
Si no, diríamos un polígono
00:03:14
¿No? Me imagino
00:03:16
Polígono de cinco lados, diríamos
00:03:17
Bueno, da igual, a lo que vamos
00:03:20
Y esto es lo que ya he ganado
00:03:22
Que esto sí que es lo mejor del mundo
00:03:24
Yo he hecho la clase pentágono
00:03:25
Porque estoy ampliando mi aplicación
00:03:28
Y le digo
00:03:30
cómo va a ser figura geométrica
00:03:32
y se me pone en rojo
00:03:33
y que me dice el compilador
00:03:36
me dice
00:03:38
haz el favor
00:03:39
si tú que te has incorporado
00:03:40
aquí a la pandilla de figuras
00:03:43
si te has incorporado a la pandilla de figuras
00:03:45
quieres ser figura geométrica
00:03:47
lo siento mucho
00:03:49
pero tienes que concretar
00:03:51
lo que es abstracto
00:03:54
todo lo que sea abstracto lo tienes que concretar
00:03:55
antes no
00:03:58
cuando yo había optado por la otra opción
00:04:00
y yo había
00:04:03
dicho, venga, no, perímetro no tengo
00:04:04
ni idea, pero me obligan a hacerlo para que el
00:04:06
compilador se calle, pues hago cualquier cosa
00:04:08
y ya está, y sigo, y no pasa nada porque lo voy a
00:04:10
sobrescribir, pues en este
00:04:12
caso, cuando yo ampliaba
00:04:14
toda mi pandilla de figuras
00:04:17
con el pentágono, hacía
00:04:18
stents y no pasaba nada
00:04:20
¿qué ocurre? que a mí se me olvida
00:04:22
hacer perímetro y cuando luego
00:04:24
alguien desde otra clase, otro
00:04:26
desarrollador, llama
00:04:28
al objeto pentágono
00:04:29
punto perímetro, como a mí se me ha olvidado hacerlo
00:04:31
no pasa nada, toda la aplicación funciona
00:04:33
y todo estupendo, pero va a llamar a este
00:04:35
retun9, y estupendo
00:04:37
el usuario se cree que será
00:04:39
ah, es que será un pentágono
00:04:41
de perímetro 9, pues no es un pentágono de
00:04:43
perímetro 9, lo que pasa es que el que hizo
00:04:45
la clase pentágono no lo sobrescribió
00:04:47
y está estirando el de arriba
00:04:50
bueno, pues con la otra
00:04:51
opción de diseño, al
00:04:53
hacerlo abstracto, decimos
00:04:57
ojo, todo el
00:04:59
que herede de mí, va a tener que
00:05:01
obligatoriamente implementar
00:05:03
esto, porque yo le he dejado
00:05:05
a medias
00:05:07
con el punto y con.
00:05:09
Entonces, tú, pentágono,
00:05:12
que te incorporas a la pandilla de figuras
00:05:14
geométricas y quieres
00:05:15
ser figura geométrica, pues
00:05:17
lo siento, estás obligado. Entonces, ya
00:05:19
si es que yo no era consciente,
00:05:21
el compilador me lo
00:05:24
dice, me dice, ah, espérate, yo estoy hablando
00:05:25
de figura geométrica. Figura geométrica la ha hecho
00:05:27
otro desarrollador que tiene que ver conmigo.
00:05:29
dice, ojo, si quiero entrar a formar
00:05:31
parte de la aplicación
00:05:33
tengo que dar una versión de perímetro
00:05:34
¿vale? pues como estoy
00:05:37
obligado es que no puedo seguir
00:05:39
no puedo seguir hasta que no la sobrescriba
00:05:41
y yo aquí ya la sobrescribo
00:05:43
y ya hago lo que sea, bueno, si el pentágono
00:05:45
tiene su propiedad al lado
00:05:47
pues aquí sería retunlado por 5
00:05:48
y ya está, el override
00:05:57
este lo podemos quitar, recordad que significa
00:06:06
que este método sobrescribe una de las superclases
00:06:07
pero
00:06:10
vale, entonces
00:06:10
ha sido obligatorio
00:06:13
ponerlo, no he podido seguir
00:06:15
porque tenía errores de compilación, si no lo pongo
00:06:16
y esa es la principal ventaja de las clases
00:06:18
abstractas, primero
00:06:22
dar una estructura jerárquica a mis
00:06:24
aplicaciones, unificar todo
00:06:26
lo que comparte
00:06:28
esencia, todo lo que comparte
00:06:30
lo hago heredar de lo mismo y así ya comparten
00:06:33
información común, y eso
00:06:35
permite que puedan entrar en referencias comunes
00:06:36
en arrays comunes, en todo común
00:06:39
porque comparten esa esencia
00:06:40
y luego aparte, si son abstractas
00:06:41
hacen una especie de compromiso
00:06:45
y decir, vale, muy bien
00:06:48
tú vas a heredar de aquí, vas a entrar a formar parte de esto
00:06:51
pues te obligo a que lo hagas
00:06:54
con todas las consecuencias, que es
00:06:57
dándole un cuerpo a perímetro y a todo lo que haya abstracto
00:07:00
que podría haber aquí más métodos abstractos
00:07:03
aquí tendría sentido que hubiera además otro método abstracto
00:07:05
para el área, y lo mismo
00:07:09
todo el que quiera ser figura geométrica
00:07:14
el que hace la aplicación figura geométrica
00:07:18
dice, vale, yo hago la superclase
00:07:21
pero todo el que quiera ser figura geométrica
00:07:22
lo siento, todo el que quiera
00:07:25
tiene que hacer perímetro y área
00:07:27
y ahora ya se empiezan a incorporar los demás
00:07:29
y los demás se van incorporando
00:07:32
y lo primero que hacen según se van incorporando
00:07:34
es, ojo, que me están diciendo
00:07:36
que tengo que incorporar área
00:07:38
pues incorporo área
00:07:39
como veis, triángulo, cuadrado, círculo
00:07:41
se me ha puesto de golpe todo rojo
00:07:45
porque no he sobrescrito en ellas el método ARIA
00:07:46
que acabo de poner aquí
00:07:51
luego la clase abstracta fuerza
00:07:52
fuerza una obligación de que todas las herederas
00:07:55
tienen que darle cuerpo a eso de ahí
00:07:59
y todo esto de nuevo son herramientas
00:08:01
para que los diseños tengan muchísimo más sentido
00:08:05
tengan más significado
00:08:09
se facilite el desarrollo de otras clases
00:08:10
se eviten errores por efectos secundarios
00:08:14
de cosas que uno no se ha dado cuenta
00:08:17
se amplíen las cosas de manera que tenga mucho más sentido
00:08:18
son herramientas que hay que usar correctamente para eso
00:08:21
porque una aplicación se puede hacer de mil formas distintas
00:08:26
buenas y malas
00:08:29
y a lo mejor todas te funcionan exactamente igual
00:08:31
todas te funcionan igual
00:08:34
pero las buenas serán las que estén bien diseñadas
00:08:36
utilizando herencia
00:08:39
y estas cosas que estamos viendo
00:08:40
y las malas, las que tengan mil clases
00:08:42
cada una tirando por libre
00:08:45
en las buenas
00:08:47
podremos incorporar
00:08:50
modificaciones de forma muy sencilla
00:08:52
y muy fácil, en las malas cada cambio
00:08:54
ya será una locura y ya lo estropearé
00:08:55
¿vale?
00:08:57
bueno, pongo aquí este método área comentado
00:09:01
para que no se me rompan todas las clases de abajo
00:09:03
porque me obliga
00:09:05
a sobre escribirlo y ya está
00:09:07
¿vale?
00:09:08
y ahora ya
00:09:12
podríamos seguir y vais a seguir
00:09:14
vale, pues vamos a hacer
00:09:18
ya que tenemos las tres clases
00:09:20
triángulo, cuadrado, círculo
00:09:21
bueno, nos hemos inventado a nosotros
00:09:23
pues vamos a hacer una clase
00:09:26
manejador de figuras
00:09:28
que esta ya es
00:09:29
una clase que representa
00:09:32
un objeto que es el que
00:09:34
va a hacer cosas con las figuras
00:09:36
su propiedad va a ser
00:09:38
una raíz de las figuras que tenga
00:09:40
bueno, pues este es el
00:09:42
manejador de cuadrados
00:09:51
va a heredar de esta
00:09:53
y un main con estas funcionalidades
00:09:54
de aquí
00:09:59
vale, pues este es el trabajo que os queda por hacer a vosotros
00:10:00
junto con el main este de aquí
00:10:03
todo lo atrasado que tengáis
00:10:05
estudiaroslo todo
00:10:07
ver los vídeos
00:10:09
etcétera, etcétera
00:10:10
junto con tomar la decisión
00:10:12
de si queréis seguir
00:10:15
en esto, que espero que sí
00:10:17
Que espero que sí
00:10:19
¿Vale?
00:10:21
Porque si salís sabiendo
00:10:23
Programar y sabiendo Java
00:10:25
Sabéis muchísimo
00:10:27
Sabéis un montón
00:10:29
¿Vale?
00:10:31
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 8
- Fecha:
- 21 de enero de 2025 - 17:42
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 10′ 34″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 48.79 MBytes