La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Diseño y Programación Orientada a Objetos"— Transcripción de la presentación:

1 Diseño y Programación Orientada a Objetos
Conferencia # 8 Polimorfismo TEMA # 3: Herencia y Polimorfismo Facultad Ing. Informática ISPJAE

2 Contenido Polimorfismo. Ligadura temprana y ligadura tardía
Métodos final Arreglos polimórficos Clases Abstractas y clase concretas

3 Polimorfismo Palabra de origen griego, significa aproximadamente “muchas formas”, (poly = muchas, morphos = forma). Herencia  beneficios  polimorfismo

4 Jerarquía de personas: nuevas consideraciones
Todos cobran: salario + plus-cargo. Docentes: según la categoría, se añade un por ciento del salario básico: Instructores: 10% - Asistentes: 12% Auxiliares: 15% - Titulares: 20%

5 ¿Cómo modificar la jerarquía de clases definida para tener en cuenta las nuevas consideraciones?

6 public class Worker extends Person {
private string depart; protected float salary; private float plusCharge; pulblic float pay(){ return salary + plusCharge; }

7 public class Teacher extends Worker {
private String category; public float pay(){ float totalSalary = super.pay(); if(category.equalsIgnoreCase("Instructor")) totalSalary += salary * 0.10; if(category.equalsIgnoreCase("Asistente")) totalSalary += salary * 0.12; return totalSalary; }

8 Comportamiento en Java
Worker p = new Teacher(); float salary= p.pay(); Se invoca al método pay() de la clase Teacher, aun cuando se trata de un objeto de clase derivada tratado como clase base.

9 Utilidad public class PersonCollection { … private Person[] person;
int count; ... public float totalPay(){ float sum = 0; for(int i= 0; i < count ;i++) if(person[i] instanceof Worker) sum += (Worker)person[i].pay(); return sum; } Utilidad

10 Ligadura Casamiento o enlace que se establece entre el punto donde se invoca a una función y el código que debe ejecutarse. En la POO, como la invocación se hace desde un objeto, influye en el resultado el objeto desde donde se invoca.

11 Ejemplo Cylinder # float radius - float length +float baseArea()
+float volume() Área de la base * altura HollowCylinder - float innerRadius +float baseArea()

12 Ligadura Cylinder c= new Cylinder(10,10,5); float v= c.volume();
baseArea() Cylinder c= new Cylinder(10,10,5); float v= c.volume();

13 Cuándo se hace la ligadura
En tiempo de compilación: Temprana, estática, early binding En tiempo de ejecución: Tardía, dinámica, late binding

14 Ligadura temprana Cylinder.volume() Cylinder.baseArea()
HollowCylinder.baseArea() HollowCylinder.volume() Cylinder c= new HollowCylinder(10,9,3); float v= c.volume();

15 Ligadura tardía Cylinder.volume() Cylinder.baseArea()
HollowCylinder.baseArea() HollowCylinder.volume() Cylinder c= new HollowCylinder(10,9,3); float v= c.volume();

16 Java La ligadura es tardía, a menos que se especifique lo contrario

17 Teacher Admin pay() worker est. Eva prof. Juan admin Ana
public float totalPay(){ float sum = 0; for(int i= 0; i < count ;i++) if(person[i] instanceof Worker) sum += (Worker)person[i].pay(); return sum; }

18 public final <tipo><nombre método>()
Métodos final ¿Cómo especificar en Java que se desea una ligadura temprana? Se requiere un mecanismo que permita especificarlo. Palabra reservada: final public final <tipo><nombre método>()

19 Arreglos polimórficos
est. Eva Teacher Admin pay() worker prof. Juan admin Ana

20 Clases Abstractas y concretas
Clases de las cuales nunca existirán instancias y cuya única razón de ser es proporcionar código para ser reutilizado por clases derivadas. Ejemplo Person y Worker. En contraposición las clases que se pueden instanciar (Student, Teacher y Admin) se les conoce como clases concretas.

21 Declaración de clase abstracta
public abstract class Person { . . . } Person[] person; Person[0]= new Person(…); //ERROR

22 Métodos abstractos Shape +area() Rectangle -sideA -sideB Triangle
-base -hight Circle -radius

23 Métodos abstractos No tienen implementación.
Sólo en clases abstractas. Sintaxis: abstract<nombre de método()>

24 Consideraciones Una clase abstracta no está obligada a tener métodos abstractos. Toda clase que contenga algún método abstracto o no proporcione implementación para algún método abstracto declarado en sus superclases debe ser declarada como una clase abstracta. Los métodos abstractos deben tener la misma firma a lo largo de toda la jerarquía.

25 Conclusión Polimorfismo Teacher Admin pay() worker
Clase base y la derivada declaran funciones de igual nombre, igual tipo e iguales parámetros, o sea, funciones polimórficas, que se invocan, en tiempo de ejecución, teniendo en cuenta el tipo del objeto desde donde se invoca, aún cuando éste es tratado como clase base.

26 Motivación ¿Cómo implementar un TDA para el tratamiento de colecciones de instancias?

27 Estudio Independiente
Modificar la jerarquía de clases del caso de estudio del control de publicaciones en una biblioteca, para tener en cuenta las nuevas consideraciones que se exponen en el documento de la conferencia Proponer una jerarquía de clases para el caso de estudio del complejo lácteo.


Descargar ppt "Diseño y Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google