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 |