La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.

Presentaciones similares


Presentación del tema: "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia."— Transcripción de la presentación:

1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia y Polimorfismo Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

2 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 PROGRAMACIÓN ORIENTADA A OBJETOS La programación orientada a objetos propone abordar el diseño de una aplicación a partir de la definición de una estructura de clases relacionadas entre sí. La dependencia modela un vínculo del tipo usa-un. La asociación modela un vínculo del tipo tiene-un. La herencia modela un vínculo del tipo es-un. Introducción a la Programación Orientada a Objetos IPOO - 2015 2

3 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 HERENCIA Si hablamos de abstracción cuando en la etapa de diseño clasificamos los objetos del problema, podemos llamar superabstracción al proceso de agrupar clases específicas en otras más generales utilizando el mecanismo de herencia. Los lenguajes soportan el mecanismo de herencia de manera diferente, algunos de manera más compleja y flexible, otros brindan alternativas más simples pero menos poderosas. Introducción a la Programación Orientada a Objetos IPOO - 2015 3

4 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 HERENCIA La herencia simple exige que el proceso de clasificación se realice de manera tal que cada subclase corresponda a una única clase base. Gráficamente la estructura de clases forma un árbol que describe la jerarquía de herencia. En cada rama del árbol las clases superiores son los ancestros de las clases inferiores, que son sus descendientes. La herencia múltiple permite que una clase derivada pueda heredar de dos o más clases más generales. Es una alternativa poderosa pero más compleja. Introducción a la Programación Orientada a Objetos IPOO - 2015 4

5 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 HERENCIA Cuando la herencia es simple el árbol puede construirse desde la raíz hacia las hojas o en sentido inverso. Es decir, el proceso de clasificación puede hacerse partiendo de una clase muy general y descomponiéndola en otras más específicas identificando las diferencias entre los objetos. El proceso continúa hasta alcanzar subclases homogéneas, hablamos de especialización. Introducción a la Programación Orientada a Objetos IPOO - 2015 5

6 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 HERENCIA Alternativamente es posible partir del dominio de todas las instancias y agruparlas en clases según sus similitudes, hablamos entonces de generalización. Estas clases serán a su vez agrupadas en otras de mayor nivel hasta alcanzar una única clase muy general. Introducción a la Programación Orientada a Objetos IPOO - 2015 6

7 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Una empresa mantiene información referida a sus empleados y clientes, en el primer caso con el objetivo fundamental de liquidar sueldos y en el segundo para mantener el saldo en cuenta corriente que se actualiza a partir de ventas y cobros. El sueldo de un empleado se calcula a partir de su antigüedad en la empresa, su salario básico y la cantidad de hijos. Esto es, al salario básico se le suma $1000 si tiene entre 10 y 15 años de antigüedad y $2000 si tiene más de 15 años de antigüedad. A este valor se le suma un valor dado por cada hijo. Los días de vacaciones se calculan a partir de la antigüedad. Una semana cuando cumple 1 año, 2 semanas cuando cumple 5 años y 3 semanas cuando su antigüedad es mayor a 10 años. Introducción a la Programación Orientada a Objetos IPOO - 2015 7

8 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Cada empleado tiene un nombre y algunos datos postales como calle, número, teléfono y dirección de correo electrónico, una fecha de ingreso a la empresa, un salario básico y una cantidad de hijos. Durante su permanencia en la empresa pueden modificarse los datos postales, el salario o la cantidad de hijos. Introducción a la Programación Orientada a Objetos IPOO - 2015 8

9 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Cada cliente tiene un nombre y algunos datos postales como calle, número, teléfono y dirección de correo electrónico, una ciudad, un saldo adeudado, un número de CUIT y una categoría de IVA. El saldo aumenta cada vez que se registra una operación de venta y disminuye con los cobros. Los clientes también pueden tener hijos pero esta información no es relevante para la empresa. Del mismo modo aunque los empleados también viven en una ciudad, todos viven en la misma, de modo que no es necesario representarla como una variable de instancia. Introducción a la Programación Orientada a Objetos IPOO - 2015 9

10 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS El cliente efectúa compras y pagos de facturas. Ninguno de estos servicios tiene significado para un Empleado, así como no tiene sentido calcular el sueldo de un Cliente. En realidad podría darse el caso que un Empleado de la empresa en ocasiones sea Cliente de la misma. En ese caso una misma entidad del problema está cumpliendo dos roles, pertenece a dos clases. El modelo es entonces un poco más complejo, por el momento no nos ocuparemos de este tipo de situaciones. Introducción a la Programación Orientada a Objetos IPOO - 2015 10

11 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Persona > nombre : String calleNro : String telefono : String email : String > Persona(nom: String) Persona(nom: String, cn: String, t: String, e: String) Inicializa todos los atributos con cadenas nulas Introducción a la Programación Orientada a Objetos IPOO - 2015 11

12 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Persona > nombre : String calleNro : String telefono : String email : String > … > establecerCalleNro(d: String)… > obtenerCalleNro(): String Introducción a la Programación Orientada a Objetos IPOO - 2015 12

13 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Cliente > saldo: real ciudad: String cuit: String cateIVA: char > Cliente (nom : String) Cliente(nom: String, cn: String, t: String, e: String, s: real, c: String, cu: String, ci: char) Introducción a la Programación Orientada a Objetos IPOO - 2015 13 Inicializa saldo en 0, ciudad con “Bahía Blanca” CUIT con 12 espacios y categoría de IVA con “I”

14 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Cliente > saldo: real ciudad: String cuit: String cateIVA: char > … > registrarVenta(m: real) registrarCobro(m: real) > obtenerSaldo(): real Introducción a la Programación Orientada a Objetos IPOO - 2015 14

15 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Empleado > basico: real cantHijos: entero fechaIngreso: Fecha > Empleado(nom: String) Empleado(nom: String, cn: String, t: String, e: String, b: real, ch: entero, fi: Fecha) Introducción a la Programación Orientada a Objetos IPOO - 2015 15 Inicializa básico en 1000, cantHijos en 0 y fechaIngreso en 1/1/2005

16 Empleado > basico: real cantHijos: entero fechaIngreso: Fecha >… > establecerBasico(sb: real) aumentarBasico(a: real)… > masAntiguo(e: Empleado): booleano obtenerBasico(): real sueldoNeto(mh: real): real diasVacaciones(): entero premioAnual(): real Al salario básico se le suma $1000 si tiene entre 10 y 15 años de antigüedad y $2000 si tiene más de 15 años de antigüedad. A este valor se le suma $h por cada hijo. Una semana cuando cumple 1 año, 2 semanas cuando cumple 5 años y 3 semanas cuando su antigüedad es mayor a 10 años. Retorna verdadero si el empleado que recibe el mensaje es más antiguo que el argumento La mitad de un sueldo básico

17 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Introducción a la Programación Orientada a Objetos IPOO - 2015 17 Persona Cliente Empleado

18 Introducción a la Programación Orientada a Objetos IPOO - 2015 18 Persona > nombre : String calleNro : String telefono : String email : String > … > establecerCalleNro (d: String) … > obtenerCalleNro () : String Cliente > saldo : real ciudad : String CUIT : String cateIVA :char > registrarVenta ( m : real) registrarCobro (m:real) > obtenerSaldo () : real Empleado > basico : real cantHijos : entero fechaIngreso : Fecha >… > establecerBasico (real sb) aumentarBasico (real a)… > masAntiguo(Empleado e) : booleano obtenerBasico () : real sueldoNeto (mh : entero) : real diasVacaciones () : entero premioAnual():real

19 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Las clases Cliente y Empleado especializan a la clase Persona. Cliente y Empleados son subclases o clase derivadas de la superclase o clase base Persona. Las instancias de una clase Empleado son también instancias de la clase Persona, de modo que heredan sus atributos y métodos. El acceso a los atributos y servicios de una clase desde sus clases derivadas depende del nivel de encapsulamiento. Introducción a la Programación Orientada a Objetos IPOO - 2015 19

20 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS La empresa decide establecer un monto por productividad, un presupuesto y un monto diario para viáticos para los ejecutivos. Además se decide que todos los ejecutivos tengan 20 días de vacaciones. Si definimos una clase Ejecutivo con los atributos y comportamiento específico estamos realizando un proceso de especialización. Algunos objetos de software van a corresponder a la clase Empleado y otros a la clase Ejecutivo. Introducción a la Programación Orientada a Objetos IPOO - 2015 20

21 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Ejecutivo > productividad: real presupuesto: real viaticos: real > establecerPresupuesto(p: real ) aumentarPresupuesto(a: real )… > obtenerPresupuesto(): real sueldoNeto(mh: real): real diasVacaciones(): entero premioAnual(p: real): real 21 20 días A partir del sueldo neto de cualquier empleado, se suma la productividad La mitad de un sueldo básico más p

22 22 Persona > Empleado > Ejecutivo >

23 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Introducción a la Programación Orientada a Objetos IPOO - 2015 23 Persona Cliente Empleado Ejecutivo

24 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Persona { //Atributos de instancia protected String nombre; protected String calleNro; protected String telefono; protected String email; … } 24 Introducción a la Programación Orientada a Objetos IPOO - 2015 Encapsulamiento

25 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Empleado extends Persona { //Atributos de instancia protected float basico; protected Fecha fechaIng; protected int hijos; … } 25 Introducción a la Programación Orientada a Objetos IPOO - 2015 Encapsulamiento

26 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Ejecutivo extends Empleado { //Atributos de instancia protected float presupuesto; protected float viaticos; protected float productividad; } 26 Introducción a la Programación Orientada a Objetos IPOO - 2015 Encapsulamiento

27 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 //Constructores public Persona(String nom){ nombre = nom calleNro = new String(); telefono = new String(); email = new String(); } 27 Introducción a la Programación Orientada a Objetos IPOO - 2015 Constructores public Persona (String nom, String cn, String tel, String em){ nombre = nom; calleNro = cn; telefono = tel; email = em; } CASO DE ESTUDIO: CLIENTES Y EMPLEADOS

28 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS //Constructores public Empleado(String nom){ super(nom); basico = 1000; cantHijos = 0; fechaIngreso = new Fecha(1,1,2005); } 28 Introducción a la Programación Orientada a Objetos IPOO - 2015 Constructores

29 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS public Empleado(String nom, String cn, String te, String em, float sb, int ch, Fecha f ){ super(nom,cn,te,em); basico = sb; cantHijos = ch; fechaIngreso = f; } 29 Introducción a la Programación Orientada a Objetos IPOO - 2015 Constructores

30 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS public Ejecutivo(String nom){ super(nom); presupuesto = 0; viaticos = 0; productividad = 0; } 30 Introducción a la Programación Orientada a Objetos IPOO - 2015 Constructores

31 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 DEROGACIÓN DE MÉTODOS Un mismo nombre puede utilizarse para definir un método en la clase base y otro en la clase derivada. Si en la clase derivada se define un método con el mismo nombre, número y tipo de parámetros que un método definido en la clase base, el método de la clase base queda derogado. Decimos que la definición de la clase derivada redefine al método de la clase base. Introducción a la Programación Orientada a Objetos IPOO - 2015 31

32 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Si la clase Persona se modifica para agregar un atributo DNI, el cambio requiere modificar el método toString() en Empleado. Derogación de Métodos class Persona { public String toString (){ return nombre+” “+calleNro+” “+ telefono+” “+email;} } class Empleado extends Persona { public String toString (){ return nombre+” “+calleNro+” “+ telefono+” “+email+” “+basico+ ” “ + cantHijos+fechaIngreso.toString();} }

33 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Si la clase Persona se modifica para agregar un atributo DNI, el cambio NO requiere modificar el método toString() en Empleado. Derogación de Métodos class Persona { public String toString (){ return nombre+” “+calleNro+” “+ telefono+” “+email; } } class Empleado extends Persona { public String toString (){ super.toString()+ basico+” “+cantHijos+” “+ fechaIngreso.toString(); } }

34 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Ejecutivo extends Empleado{ public String toString(){ String cad = super.toString(); return cad+” “+ productividad+” “+viaticos+ “ “+presupuesto; } } 34 Introducción a la Programación Orientada a Objetos IPOO - 2015 Derogación de Métodos

35 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Ejecutivo extends Empleado{ public String toString (){ String cad = super.super.toString(); … } 35 Introducción a la Programación Orientada a Objetos IPOO - 2015 Derogación de Métodos La palabra clave super no puede utilizarse para acceder a la clase base de la clase base.

36 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Un método derogado o redefinido conserva la signatura de la definición propuesta en la clase base, esto es tiene exactamente el mismo nombre y el mismo número y tipo de parámetros, así como también el mismo tipo de resultado. 36 Empleado > diasVacaciones () : real Ejecutivo > diasVacaciones () : real Derogación de Métodos

37 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Empleado extends Persona{ … public int diasVacaciones() { /*Una semana cuando cumple 1 año, 2 semanas cuando cumple 5 años y 3 semanas cuando es mayor a 10 años*/ int ant = fechaIng.difHoy(); int vac = 0; if (ant > 10) vac = 3; else if (ant >= 5) vac = 2; else if (ant > 0) vac = 1; return vac; } 37 Derogación de Métodos 1

38 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Ejecutivo extends Empleado{ … public int diasVacaciones () { //20 días return 20; } 38 Derogación de Métodos 2

39 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Empleado emp = new Empleado(e1); Ejecutivo eje = new Ejecutivo(e2); System.out.println(emp.diasVacaciones()); System.out.println(eje.diasVacaciones()); 39 Derogación de Métodos 2 1 Dadas las siguientes declaraciones:

40 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS 40 Empleado > sueldoNeto(mh: real): real Ejecutivo > sueldoNeto(mh: real): real Derogación de Métodos

41 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Empleado extends Persona { … public float sueldoNeto(float h){ /* Al salario básico se le suma $1000 si tiene entre 10 y 15 años de antigüedad y $2000 si tiene más de 15 años de antigüedad. A este valor se le suma $h por cada hijo. */ int ant = fechaIng.difHoy(); float sn = basico + hijos * h; if (ant > 15) sn = sn + 2000; else if (ant >= 5) sn = sn + 1000; return sn; } } 41 Derogación de Métodos 1

42 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS class Ejecutivo extends Empleado{ … public int sueldoNeto (float h){ /*A partir del neto de cualquier empleado más la productividad */ float s = super.sueldoNeto (h); return s + productividad; } } 42 Derogación de Métodos 2

43 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Empleado emp = new Empleado(e1); Ejecutivo eje = new Ejecutivo(e2); System.out.println(emp.sueldoNeto(800)); System.out.println(eje.sueldoNeto(800)); 43 Derogación de Métodos 2 1 Dadas las siguientes declaraciones:

44 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 MODIFICADORES En ocasiones es conveniente que un método no sea redefinido en una clase derivada o incluso que una clase completa no pueda ser extendida. Se utiliza entonces el modificador final, que tiene significados levemente distintos según se aplique a una variable, a un método o a una clase. –Para una clase, final significa que la clase no puede extenderse. Es, por tanto el punto final de la cadena de clases derivadas. –Para un método, final significa que no puede redefinirse en una clase derivada. –Para una variable, final significa también que no puede ser redefinido en una clase derivada, pero además su valor no puede ser modificado. 44

45 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Un método sobrecargado tiene el mismo nombre pero diferente signatura. Un método puede estar sobrecargado en una misma clase o en clases diferentes. 45 Empleado > premioAnual(): real Ejecutivo > premioAnual(p: real): real Derogación de Métodos

46 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Sobrecarga de Métodos class Empleado extends Persona { … public float premioAnual(){ /* La mitad del sueldo básico*/ return basico/2; } class Ejecutivo extends Empleado { … public float premioAnual(float p){ /* La mitad del sueldo básico más p*/ return basico/2 + p; } 2 1

47 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Empleado emp = new Empleado(e1); Ejecutivo eje = new Ejecutivo(e2); System.out.println(emp.premioAnual()); System.out.println(eje.premioAnual()); System.out.println(emp.premioAnual(500)); System.out.println(eje.premioAnual(500)); Sobrecarga de Métodos 1 1 Dadas las siguientes declaraciones: 2 E Es muy probable que la segunda instrucción provoque un error de aplicación, son los más difíciles de detectar.

48 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 SOBRECARGA & DEROGACIÓN Cuando en una clase se define un método con el mismo nombre que otro método dentro de la misma clase o de alguna clase ancestro, pero con diferente número o tipo de parámetros, el método queda sobrecargado. Cuando en una clase derivada se define un método con el mismo nombre que en alguna clase ancestro y con el mismo número y tipo de parámetros, el método queda redefinido. 48

49 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 VARIABLES POLIMÓRFICAS Dada la siguiente declaración: La variable emp se dice polimórfica porque puede referenciar a objetos de su propia clase o de cualquier clase derivada. 49 Empleado emp ;

50 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 ASIGNACIÓN POLIMÓRFICA La asignación: La asignación se dice polimórfica, una variable declarada de una clase queda ligada a un objeto de una clase derivada. 50 emp = new Ejecutivo(“Marini”);

51 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 LIGADURA DINÁMICA El mensaje: Se liga al método definido en la clase Ejecutivo. Es la clase del objeto la que determina la ligadura entre el mensaje y el método. 51 emp.diasVacaciones();

52 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: PLANTA DE EMPLEADOS 52 Persona ClienteEmpleado Ejecutivo PlantaEmpleados La empresa mantiene la información referida a sus empleados en una colección.

53 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: PLANTA DE EMPLEADOS Un método sobrecargado tiene el mismo nombre pero diferente signatura. Un método puede estar sobrecargado en una misma clase o en clases diferentes. Empleado > PlantaEmpleados Empleado [] t cantEmpleados: entero … > insertar(a: Empleado) … > existeEmpleado(a: Empleado): boolean… contarMasVacaciones(d: entero): entero

54 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: PLANTA DE EMPLEADOS import java.util.*; class PlantaEmpleados{ private Empleado[] t; private int cantEmpleados; } 54 El arreglo mantiene referencias a objetos de clase Empleado o de alguna de sus subclases.

55 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: PLANTA DE EMPLEADOS 55 t … length :Empleado :Ejecutivo

56 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: PLANTA DE EMPLEADOS El arreglo t está constituido por una colección de variables polimórficas. Cuando una componente del arreglo reciba un mensaje su comportamiento dependerá de la clase a la que pertenezca esta componente. 56

57 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: PLANTA DE EMPLEADOS public int contarMasVacaciones (int d){ int c = 0; for (int i = 0; i <cantElementos();i++) { if (t[i].diasVacaciones() >= d) c++; } return c; } 57 t[i] es una variable polimórfica. La ligadura con el método diasVacaciones() se establece de acuerdo a la clase del objeto referenciado por t[i].


Descargar ppt "0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia."

Presentaciones similares


Anuncios Google