Logo Studenta

Subclasificacion, Herencia,,

¡Este material tiene más páginas!

Vista previa del material en texto

Subclasificación, Herencia y 
Polimorfismo. 
Representación de Conocimiento
⚫Una clase representa un concepto en el dominio de 
problema.
⚫Usamos las clases para representar parte del 
conocimiento que adquirimos del dominio de 
problema.
⚫¿Qué sucede cuando las clases comparten parte del 
conocimiento al cual representan?
⮚Subclasificación
Subclasificación
⚫Se reúne el comportamiento y la estructura común 
en una clase, la cual cumplirá el rol de superclase.
⚫Se conforma una jerarquía de clases.
⚫Luego otras clases pueden cumplir el rol de 
subclases, heredando ese comportamiento y 
estructura en común.
⚫Cumple la relación es-un.
Ejemplo de una Jerarquía de Clases
⚫Existen dos tipos de cuentas bancarias:
⚫Cuentas corrientes.
⚫Cajas de ahorro.
⚫Si revisamos el comportamiento nos encontraremos 
con las siguientes características en común:
⚫Ambas llevan cuenta de su saldo.
⚫Ambas permiten realizar depósitos.
⚫Ambas permiten realizar extracciones.
Ejemplo de una Jerarquía de Clases
⚫Pero cada una tiene un tipo de restricción distinto en 
cuanto a las extracciones:
⚫Cuentas corrientes: permiten que el cliente gire en 
descubierto (con un tope pactado con cada cliente).
⚫Cajas de ahorro: poseen una cantidad máxima de 
extracciones mensuales (para todos los clientes). No se 
permite girar en descubierto.
⚫¿Cómo podemos reutilizar las características en 
común?
Ejemplo de una Jerarquía de Clases
Relación es-un
⚫En toda jerarquía de clases, se debe respetar la 
relación es-un entre una clase y su superclase.
⚫Por ejemplo
⚫Una caja de ahorro es-una cuenta bancaria.
⚫Un círculo es-una figura.
⚫Una figura es-un objeto …
Ejercicio – Subclasificación
⚫¿Es correcta la siguiente jerarquía?
Herencia
⚫Es el mecanismo por el cual las subclases reutilizan el 
comportamiento y estructura reunido en sus 
superclases.
⚫La herencia permite:
⚫Crear una nueva clase como refinamiento de otra.
⚫Diseñar e implementar sólo la diferencia que presenta 
la nueva clase.
⚫Abstraer las similitudes en común.
Herencia
⚫Herencia de comportamiento
⚫Una subclase hereda todos los métodos definidos en su 
superclase.
⚫Las subclases pueden redefinir el comportamiento de 
su superclase.
⚫Herencia de estructura
⚫No hay forma de restringirla.
⚫No es posible redefinir el nombre de un atributo que se 
hereda.
Que pasa si.
⚫Defino el atributo nombre de Persona como private.
•Se hereda, pero no podemos acceder a él, salvo que 
implementemos métodos para ello (p.ej. getNombre())
⚫Implemento el constructor de la subclase asignando los 
valores a los atributos directamente en lugar de llamar a 
super
•No aprovecho la potencia de la reutilización de código
•En este caso es viable porque los atributos se han 
definido como protected (¡¡no siempre será así!!)
OK.
Method Lookup
⚫Al enviarse un mensaje a un objeto deben suceder 2 
cosas:
⚫Determinar cual es la clase del objeto.
⚫Buscar el método para responder al envío del mensaje 
en la jerarquía, comenzando por la clase del objeto, y 
subiendo a la superclases hasta llegar a la clase raíz.
⚫Esto se denomina method lookup
Method Lookup
Polimorfismo
Polimorfismo
⚫Dos o más objetos son polimórficos con respecto a 
un mensaje, si todos pueden entender ese mensaje, 
aún cuando cada uno lo haga de un modo diferente.
⚫Mismo mensaje puede ser enviado a diferentes objetos.
⚫Distintos receptores reaccionan diferente (diferentes 
métodos).
Ejemplo Cuentas Bancarias
⚫El usuario necesita extraer de su cuenta por medio de 
un cajero automático.
Que pasaría sin Polimorfismo?
⚫Veamos el siguiente método.
⚫¿Qué problema presenta?
⚫¿Qué sucede si aparece un nuevo tipo de cuenta,
⚫digamos CuentaLibre?
Que pasaría sin Polimorfismo?
⚫Hay que modificar el Código
⚫Si delegamos el código en cada cuenta el método 
sería
Ventajas del uso del Polimorfismo
⚫Código genérico.
⚫Objetos desacoplados.
⚫Objetos intercambiables.
⚫Objetos reutilizables.
El problema del “if”
⚫El if es a la Programación Orientada a Objetos lo que 
el goto era para la Programación Estructurada.
⚫Los lenguajes OO proveen if pero...
⚫If significa la falta de objetos polimórficos.
⚫Las decisiones son tomadas por los programadores.
⚫Mala asignación de responsabilidades.
⚫¿Cuándo se justifica su uso?
⚫En comparaciones simples.
El problema del “if”
⚫Entonces… ¿cómo podemos saber en que caso es correcto 
utilizar un if?
⚫Generalmente, si la condición a evaluar 
⚫No depende del receptor del mensaje.
⚫No se ve alterada en el caso de agregar nuevos tipos de 
objeto.
⚫Entonces el uso es correcto.
⚫Si la condición a evaluar
⚫Depende del receptor del mensaje.
⚫Crece al agregar nuevos tipos de objeto.
⚫El uso es incorrecto.
Trabajo Práctico Nro. 2

Continuar navegando