Descarga la aplicación para disfrutar aún más
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
Compartir