Professional Documents
Culture Documents
Orientada a Objetos
Herencia
TEMA # 2: Herencia y Polimorfismo
Profesor: MSc. Jos Luis Alonso
Correo: jl.alonso@ce.pucmm.edu.do
Herencia
Relaciones que la definen
Representacin en UML
Implementacin en Java
Categoras de objetos
Persona
Persona
Comerciante
Comerciante
Florista
Florista
Objetos
de una
categora
Animal
Animal
Mamfero
Mamfero
Cnido
Cnido
Perro Lobo
Perro
Lobo
iguales caractersticas
igual comportamiento
Relaciones de herencia
Esun o es-un-tipo-de: presente
entre dos conceptos cuando uno es
un ejemplar especializado del otro.
Ejemplos:
Un Perro es un Mamfero
Un Crculo es una Figura
Generalizacin/especializacin
Herencia
Forma de reutilizacin del software.
Se crean nuevas clases (hijas,
derivadas) a partir de clases
existentes (base, ancestros).
A travs de la herencia las clases
derivadas "heredan", o sea, tienen
acceso a los datos y comportamiento de la clase base.
Reperesentacin en UML
A
Generalaizacin/
especializacin
C
Propiedades
No conmutativa
Transitiva
Extensiva
Herencia reutilizacin
clase derivada hereda todas las
caractersticas y comportamiento,
datos y mtodos, de sus ancestros
directos e indirectos.
clase derivada puede agregar nuevas
caractersticas y comportamiento,
datos y mtodos.
clase derivada puede redefinir el
comportamiento, mtodos.
Estudiante
Estudiante
nombre
notas
NI
carrera
notas
carrera
carrera()
nombre()
Persona
Ejemplo
nombre
NI
nombre() Administrador
Profesor
nombre
Administrador
NI
Profesor
nombre
dpto
dpto
NI
dpto
salario
salario
dpto
salario
horario
salario
horario
categora
categora
nombre()
salario()
salario()
horario()
nombre()
horario()
categ()
Ejemplo
Persona
nombre
NI
nombre()
Trabajador
dpto
salario
salario()
Estudiante
notas
carrera
Profesor Administrador
carrera()
categora
horario
categ()
horario()
Implementacin en Java
class Object
Clase predefinida
Padre de toda la jerarqua de
clases
Ancestro directo o indirecto de
todas las clases
Implementacin en Java
public 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(){..
}
Construccin de objetos de
clases derivadas
public Worker(String name, String
NI, String depart, float
salary) {
Person()
super(name,NI);
this.depart= depart;
this.salary= salary;
}
Teacher()?
super.miembro
Dato
Mtodo
Miembros protegidos
protected
Pueden ser accedidos por la clase y
sus derivadas, directas e indirectas.
Miembros protegidos
public class Teacher extends Worker
{
public void incExperience(float
amount) {
salary= salary + amount;
}
Visibilidad en
jerarquas de clases
Los atributos y mtodos se heredan
con el mismo nivel de visibilidad que
fueron declarados en la clase padre.
Este nivel de visibilidad puede ser
aumentado, a travs de la
redefinicin pero nunca restringido.
Ejemplo
Student
marks
course
getCourse()
Person
name
NI
getName()
Object
Worker
dpto
salary
getSalary()
Teacher
Admin a, b;
Admin
a = new Admin(..) category schedule
a.getName() getCateg() getSchedule()
b= a.clone();
Otras relaciones
Utiliza-un: cuando un objeto colabora
con otro para llevar a cabo algunas
funciones. En la implementacin, no es
ms que funciones miembros del objeto
cliente, que acceden a un objeto servidor
al cual se le hacen solicitudes en el
cuerpo de la funcin.
Ejemplos:
Persona utiliza un automvil
Estudiante utiliza una PC
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
implementacin, no es ms que un
miembro del objeto conocedor, que
apunta al objeto conocido.
Ejemplos:
Estudiante conoce a su(s) profesor(es)
Jugada, Jugador conocen a reloj.
Utiliza-un y Conoce-a
B
A
1
1
Solicita hora
Jugada
Reloj
Compatibilidad de tipos
para la asignacin
Conversin implcita o
hacia arriba
Herencia Es-un
Instancia de clase derivada es una
instancia de clase base
Una instancia es compatible para la asignacin, 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.
Ejemplo
Person p;
Student s= new Student(Juan,
80010111111, DPOO);
p= s;
Conversin explcita o
hacia abajo
s= p
ERROR!!!
s= (Student)p;
TypeCast
Utilidad de la conversin
hacia arriba
public class PersonCollection {
private Person[] persons;
private int count;
Utilidad de la conversin
hacia arriba
public boolean add(Person person)
{
persons[count++]= person;
Utilidad de la conversin
hacia arriba
public int find(String name) {
if(persons[i].getName().equalsIgnoreCase
(name));
Operador instanceof
Permite conocer de qu tipo de clase es un
objeto.
Sintaxis
Operador instanceof
public class PersonCollection {
private Person[] persons;
Conclusiones
Herencia: mecanismo de la POO que
garantiza el mayor nivel de reusabilidad
de cdigo. Permite implementar nuevas
clases en funcin de otras ya existentes.
Al disear los modelos de clases: analizar
cada uno de los conceptos del problema
buscando caractersticas y comportamiento comn, para crear clases ancestrales.
Conclusiones
Muchas veces se disean clases de las
cuales no existirn ejemplares, y cuya
nica razn de ser es aportar caractersticas y comportamiento para la herencia.
Clases descendientes que no incorporan
nuevo comportamiento ni redefinen el
comportamiento heredado de sus
ancestros son indeseadas.
Motivacin
Student
marks
course
Person
name
NI
getName()
Worker
dpto
salary
getSalary()
pay()
getCourse()
Person p;
p = new Admin(..)
p.pay()?
Teacher
category
Admin
hour
getCateg()
getHour()
pay()
pay()
Estudio Independiente
Bibliografa: Texto bsico. Captulo 6:
Reusing Classes.
Inheritance syntax. Pg 261.
Initializing the base class. Pg 264
Combining composition and
inheritance. Pg 267.
protected. Pg 276.
Estudio Independiente
Caso de estudio: Control de las
publicaciones de una biblioteca.