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.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Definición de Clases y Variables de referencia.
Lenguaje de programación Java
Arquitectura CLARO-TECNOTREE
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
La Programación Orientado a Objetos
Herencia y Polimorfismo
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Diseño y programación de
PROGRAMACION ORIENTADA A OBJETOS
ORIENTADO A OBJETOS ESTUDIANTE JESSICA LORENA LEAL MEDINA INGENIERIA DE SOFTWARE PROGRAMA INGENIERIA DE SISTEMAS UNIVERSIDA COOPERATIVA DE COLOMBIA NEIVA-HUILA.
Programación Orientada a Objetos
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.
HERENCIA.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia y Polimorfismo en JAVA
Lic. Rosemary Torrico Bascopé
UNIVERSIDAD TECNOLÓGICA DE HERMOSILLO T.S.U. EN T.I.C., Área: Sistemas Informáticos Ing. José Padilla Duarte y estudiantes de Sistemas Informáticos Hermosillo,
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Conceptos Objeto Clase Atributo / Método Encapsulamiento Mensaje
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.

Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Clase 10: Estructuras de datos y arreglos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Material de apoyo Unidad 4 Estructura de datos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Estructuras.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Introducción a UML DIAGRAMA DE CLASES Departamento de Informática
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
UML Casos de Uso (repaso) y Diagramas de Clase
CONCEPTOS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
ORIENTACIÓN A OBJETOS El paradigma.
Programación Orientada a Objetos: CLASES Y OBJETOS
Clases “ Es una Abstracción de un elemento del mundo real ”
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Programación Orientada a Objetos Unidad 5. Los objetos son entidades que combinan estado Contiene toda la información denominados atributos REPASO Cada.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia y Polimorfismo Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

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

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

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

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

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

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

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

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

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

CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Persona > nombre : String calleNro : String telefono : String 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

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

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 Inicializa saldo en 0, ciudad con “Bahía Blanca” CUIT con 12 espacios y categoría de IVA con “I”

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

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 Inicializa básico en 1000, cantHijos en 0 y fechaIngreso en 1/1/2005

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

CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Introducción a la Programación Orientada a Objetos IPOO Persona Cliente Empleado

Introducción a la Programación Orientada a Objetos IPOO Persona > nombre : String calleNro : String telefono : String 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

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

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

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 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 Persona > Empleado > Ejecutivo >

CASO DE ESTUDIO: CLIENTES Y EMPLEADOS Introducción a la Programación Orientada a Objetos IPOO Persona Cliente Empleado Ejecutivo

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

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 Encapsulamiento

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 Encapsulamiento

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

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 Constructores

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 Constructores

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 Constructores

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

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+” “+ ;} } class Empleado extends Persona { public String toString (){ return nombre+” “+calleNro+” “+ telefono+” “+ +” “+basico+ ” “ + cantHijos+fechaIngreso.toString();} }

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+” “+ ; } } class Empleado extends Persona { public String toString (){ super.toString()+ basico+” “+cantHijos+” “+ fechaIngreso.toString(); } }

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 Derogación de Métodos

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 Derogación de Métodos La palabra clave super no puede utilizarse para acceder a la clase base de la clase base.

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

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

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

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:

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

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 ; else if (ant >= 5) sn = sn ; return sn; } } 41 Derogación de Métodos 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

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:

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

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

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

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.

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

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 ;

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”);

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

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.

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

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.

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

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

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].