T2 herencia

41
Diseño y Programación Orientada a Objetos Herencia TEMA # 2: Herencia y Polimorfismo Profesor: MSc. José Luis Alonso Correo: [email protected]

Transcript of T2 herencia

Page 1: T2 herencia

Diseño y Programación Orientada a Objetos

HerenciaTEMA # 2: Herencia y Polimorfismo

Profesor: MSc. José Luis AlonsoCorreo: [email protected]

Page 2: T2 herencia

Contenido 1ra parte• Herencia• Relaciones que la definen• Representación en UML• Implementación en Java

Page 3: T2 herencia

Categorías de objetos Animal

Mamífero

Cánido

Perro Lobo

PersonaComerciante

Florista

•iguales características•igual comportamiento

Objetos de una

categoría

Animal

Mamífero

Cánido

Perro Lobo

Persona

Comerciante

Florista

Page 4: T2 herencia

Relaciones de herenciaEs–un o es-un-tipo-de: presente entre dos conceptos cuando uno es un ejemplar especializado del otro. Ejemplos:• Un Perro es un Mamífero• Un Círculo es una Figura

Generalización/especialización

Page 5: T2 herencia

HerenciaForma de reutilización del software. Se crean nuevas clases (hijas, derivadas) a partir de clases existentes (base, ancestros).A través de la herencia las clases derivadas "heredan", o sea, tienen acceso a los datos y comporta-miento de la clase base.

Page 6: T2 herencia

Reperesentación en UML

Propiedades • No conmutativa• Transitiva • Extensiva

Generalaización/especialización

A

B C

D

Page 7: T2 herencia

Herencia reutilización• clase derivada hereda todas las

características y comportamiento, datos y métodos, de sus ancestros directos e indirectos.

• clase derivada puede agregar nuevas características y comportamiento, datos y métodos.

• clase derivada puede redefinir el comportamiento, métodos.

Page 8: T2 herencia

Administradornombre

NIdpto

salario

nombre() …

horario

horario()

Estudiante

carrera

nombreNI

notas

nombre() …

Profesornombre

dptosalario

NI

categoríanombre() …

EjemploPersonanombre

NInombre()

carrera

Estudiantenotas

Administradordpto

salario

salario() …

carrera()

Profesordpto

salariocategoría

…salario()categ()

horario

horario()

Page 9: T2 herencia

EjemploPersonanombre

NInombre()

carrera

Estudiantenotas

…carrera()

Trabajadordptosalario

salario()…

Profesorcategoríacateg()

Administradorhorariohorario()

Page 10: T2 herencia

Implementación en Javaclass Object

• Clase predefinida• Padre de toda la jerarquía de

clases• Ancestro directo o indirecto de

todas las clases

Page 11: T2 herencia

Implementación en Javapublic class Person {

private String name;private String NI;public Person(String name,String NI){..public String getName(){..public String getNI(){..public void setName(String name){..public void setNI(String NI){..public int age(){..

}

Page 12: T2 herencia

public class Student extends Person {private String course;private IntArray marks;public Student(String name, String NI,

String course) {..public String getCourse(){..public void setCourse(String course){..public void addMark(int mark){..public float average(){..

}

Page 13: T2 herencia

public class Worker extends Person {private String depart;private float salary;public Worker(String name, String NI,

String dpto, float salary) {..public String getDpto(){..public void setDpto(String course){..public String getSalary(){..public void setSalary(float salary){..

}

Page 14: T2 herencia

public class Teacher extends Worker {private String category;public Teacher(String name, String NI,

String depart, float salary, String category) {..

public String getCategory(){..public void setCategory(String

category){..}

Page 15: T2 herencia

public class Admin extends Worker {private String schedule;public Admin(String name, String NI,

String depart, float salary, String schedule) {..

public String getSchedule(){..public void setSchedule(String

schedule){..}

Page 16: T2 herencia

Construcción de objetos de clases derivadas

public Worker(String name, String NI, String depart, float

salary) {super(name,NI); this.depart= depart;this.salary= salary;}

Person(…)

¿Teacher(…)?

Page 17: T2 herencia

Otro uso de super• Para acceder a la versión heredada de un

miembro redefinido.• Sintaxis:

super.miembro

Dato Método

Page 18: T2 herencia

Miembros protegidos• protected• Pueden ser accedidos por la clase y

sus derivadas, directas e indirectas.public class Worker extends Person

{private String depart;protected float salary;…

}

Page 19: T2 herencia

public class Teacher extends Worker { …

public void incExperience(float amount) {

salary= salary + amount; }…}

Miembros protegidos

Page 20: T2 herencia

Visibilidad en jerarquías de clases

Los atributos y métodos se heredan con el mismo nivel de visibilidad que fueron declarados en la clase padre. Este nivel de visibilidad puede ser aumentado, a través de la redefinición pero nunca restringido.

Page 21: T2 herencia

Mecanismo del compilador para responder a un mensaje

Page 22: T2 herencia

Ejemplo Personname

NIgetName()course

Studentmarks

…getCourse()

Workerdptosalary

getSalary()…

TeachercategorygetCateg()

Adminschedule

getSchedule()

Admin a, b;a = new Admin(..)…a.getName()…b= a.clone();

Object

Page 23: T2 herencia

Contenido 2da parte• Otras relaciones entre clases. • Compatibilidad de tipos para la

asignación. –Conversión implícita o hacia arriba–Conversión explícita o hacia abajo

Page 24: T2 herencia

Otras relaciones …Utiliza-un: cuando un objeto colabora con otro para llevar a cabo algunas funciones. En la implementación, no es más que funciones miembros del objeto cliente, que acceden a un objeto servidor al cual se le hacen solicitudes en el cuerpo de la función.Ejemplos:• Persona utiliza un automóvil• Estudiante utiliza una PC

Page 25: T2 herencia

Otras relaciones …Conoce-un o conoce-a: cuando un objeto, en cualquier momento de su vida, conoce de la existencia de otro objeto de otra clase. En la implementación, no es más que un miembro del objeto conocedor, que “apunta” al objeto conocido.Ejemplos:• Estudiante conoce a su(s) profesor(es)• Jugada, Jugador conocen a reloj.

Page 26: T2 herencia

“Utiliza-un” y “Conoce-a”A B

1 1

Jugada RelojSolicita hora

1 1

Page 27: T2 herencia

Compatibilidad de tipos para la asignación

Page 28: T2 herencia

Conversión implícita o hacia arriba

• Herencia “Es-un”• Instancia de clase derivada es una

instancia de clase base• Una instancia es compatible para la asig-

nación, con cualquiera de sus ancestros. • Una instancia puede referenciar una

instancia de cualquier tipo descendiente. • Lo contrario no es posible, una instancia

de clase base nunca es una instancia de clase derivada.

Page 29: T2 herencia

EjemploPerson p;Student s= new Student(“Juan”,

“80010111111”, “DPOO”);p= s;

“Donde cabe un padre cabe cualquiera de sus

hijos”

Page 30: T2 herencia

s= p

Conversión explícita o hacia abajo

ERROR!!!

s= (Student)p;

TypeCast

Page 31: T2 herencia

Utilidad de la conversión hacia arriba

public class PersonCollection {private Person[] persons;private int count;…

Page 32: T2 herencia

Utilidad de la conversión hacia arriba

public boolean add(Person person) {

… persons[count++]= person; …}

Page 33: T2 herencia

public class Controler {private PersonCollection persons;…public boolean addAdmin(String name;..){ Admin a= new Admin(name,…); persons.add(a); }public boolean addTeacher(String name;..){ Teacher t= new Teacher(name,…); persons.add(t); }…}

Page 34: T2 herencia

Utilidad de la conversión hacia arriba

public int find(String name) { …

if(persons[i].getName().equalsIgnoreCase(name));

…}

…}

Instancias de clases derivadas tratadas como instancias de

clase base

Page 35: T2 herencia

Operador instanceof• Permite conocer de qué tipo de clase es un

objeto.• Sintaxis

<instancia> instanceof <clase>

Page 36: T2 herencia

Operador instanceofpublic class PersonCollection { private Person[] persons; … public int countAdmin() { int c= 0; for (int i= 0;i < count; i++) if (persons[i] instanceof Admin) c++; return c; } …}

Page 37: T2 herencia

Conclusiones• Herencia: mecanismo de la POO que

garantiza el mayor nivel de reusabilidad de código. Permite implementar nuevas clases en función de otras ya existentes.

• Al diseñar los modelos de clases: analizar cada uno de los conceptos del problema buscando características y comportamien-to común, para crear clases ancestrales.

Page 38: T2 herencia

Conclusiones• Muchas veces se diseñan clases de las

cuales no existirán ejemplares, y cuya única razón de ser es aportar caracterís-ticas y comportamiento para la herencia.  

• Clases descendientes que no incorporan nuevo comportamiento ni redefinen el comportamiento heredado de sus ancestros son indeseadas.

Page 39: T2 herencia

Motivación Personname

NIgetName()course

Studentmarks

…getCourse()

Workerdptosalary

getSalary()

TeachercategorygetCateg()

Adminhour

getHour()

Person p;p = new Admin(..)¿…p.pay()…?

pay()

pay() pay()

Page 40: T2 herencia

Estudio Independiente• Bibliografía: Texto básico. Capítulo 6:

Reusing Classes. –Inheritance syntax. Pág 261.–Initializing the base class. Pág 264–Combining composition and

inheritance. Pág 267.–protected. Pág 276.

Page 41: T2 herencia

Estudio Independiente• Caso de estudio: Control de las

publicaciones de una biblioteca.