Clasificación Estática
ext(C0) = ? ext(Ci) ? completa
ext(Ci) ? ext(Cj) = ? ? disjunta
Generalización
C0
C1
Cn
{ static }
Clasificación Dinámica
ext(C0) = ? ext(Ci) ? completa
extt(Ci) ? extt(Cj) = ? ? disjunta en t
extt1(Ci) ? extt2(Cj) ? ? ? posiblemente
no disjunta en
diferentes
instantes
Generalización
C0
C1
Cn
{ dinámica }
Ejemplo: varias especializaciones a partir de la misma clase padre, usando discriminadores:
Generalización
Vehículo Aéreo
Avión
Helicóptero
Comercial
Militar
estructura
uso
Clasificación Múltiple (herencia múltiple)
Se presenta cuando una subclase tiene más de una superclase
La herencia múltiple debe manejarse con precaución. Algunos problemas son el conflicto de nombre y el conflicto de precedencia
Se recomienda un uso restringido y disciplinado de la herencia. Java y Ada 95 simplemente no ofrecen herencia múltiple
Herencia Múltiple
Uso disciplinado de la herencia múltiple: clasificaciones disjuntas con clases padre en hojas de jerarquías alternativas
Animal
Bípedo
Cuadrúpedo
Con Pelos
Con Plumas
Con Escamas
Herbívoro
Carnívoro
cubertura
cobertura
cobertura
comida
nro patas
nro patas
comida
Conejo
Principio de Sustitución
El Principio de Sustitución de Liskow (1987) afirma que:
“Debe ser posible utilizar cualquier objeto instancia de una subclase en el lugar de cualquier objeto instancia de su superclase sin que la semántica del programa escrito en los términos de la superclase se vea afectado.”
Principio de Sustitución
Dado que los programadores pueden introducir código en las subclases redefiniendo las operaciones, es posible introducir involuntaria-mente incoherencias que violen el principio de sustitución
El polimorfismo que veremos a continuación no debería implementarse sin este principio
Polimorfismo
El término polimorfismo se refiere a que una característica de una clase puede tomar varias formas
El polimorfismo representa en nuestro caso la posibilidad de desencadenar operaciones distintas en respuesta a un mismo mensaje
Cada subclase hereda las operaciones pero tiene la posibilidad de modificar localmente el comportamiento de estas operaciones
Polimorfismo
Ejemplo: todo animal duerme, pero cada clase lo hace de forma distinta
dormir
?
?
Polimorfismo
Dormir()
{
en un árbol
}
Dormir()
{
sobrela espalda
}
Dormir()
{
sobre el vientre
}
Dormir()
{
}
Animal
dormir()
León
dormir()
Oso
dormir()
Tigre
dormir()
Polimorfismo
La búsqueda automática del código que en cada momento se va a ejecutar es fruto del enlace dinámico
El cumplimiento del Principio de Sustitución permite obtener un comportamiento y diseño coherente
Página anterior | Volver al principio del trabajo | Página siguiente |