Diseño y Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
Advertisements

Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Java RMI. Entornos orientados a objetos  Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan entre sí.  Un programa.
Herencia Multiple en Java
Clases y Objetos en Java
Unidad Didáctica 11 Reutilización Versión 1.0.0
Herencia y Clases Abstractas Reutilización de código y código genérico
Taller de Java Universidad de los Andes
Polimorfismo de ‘tipo’ (en la herencia)
Programación Avanzada
Programación Avanzada
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Herencia y Clases Abstractas
Programación orientada a objetos
Herencia Implementación en Java.
Polimorfismo y Funciones Virtuales
Diseño y Programación Orientada a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Fundamentos de la programación orientada a objetos
Colecciones Carlos Fontela, 2008.
AYUDANTÍA 6 Más sobre... ¿Faiton?.
Diseño y Programación Orientada a Objetos
Ingeniero en Computación José Alfredo Cobián Campos
Programación orientada a objetos
Medio de tele-comunicación
Clases y Objetos en Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Programación orientada a objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Diseño y Programación Orientada a Objetos
Sonia Rueda Herencia y Polimorfismo
Clases y Objetos en Java
Polimorfismo y Métodos Virtuales
Programación Orientada a Objetos I Unidad 4 Relaciones entre clases: herencia.
Herencia Agustín J. González ELO329.
Herencia en C#.
Desarrollo de Software
HERENCIA.
IPOO 2 cuatrimestre 2016 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Programacion Orientada a Objetos
Herencia en C++ Agustín J. González ELO329.
Diagrama de Clases Un diagrama de clases esta compuesto por los siguientes elementos: Clase: atributos, métodos y visibilidad. Relaciones: Herencia, Composición,
Tópicos Avanzados de Programación (TAP3501)
Curso Angularn Tema 01b 15/01/2019 Curso JavaScript.
Herencia en C++ Agustín J. González ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Tema 5 H erencia. La herencia es una forma de reutilización de software en la que las clases se crean incorporando los datos (atributos) y el comportamiento.
Herencia Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Clases abstractas e interfaces
Clases y Objetos en Java
Transcripción de la presentación:

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

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

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

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%

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

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

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; }

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.

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

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.

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

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

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

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

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

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

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; }

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>()

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

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.

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

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

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

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.

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.

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

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.