Download La Herencia: Teoría (1)

Document related concepts
no text concepts found
Transcript
Introducción a la Herencia
Presentación basada en:
Construcción de Software Orientado a Objetos. Bertrand Meyer.1998.
Java 2., Curso de programación. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003.
Apuntes del Curso Programación Orientado a Objetos. Pablo Castells. Escuela Politécnica
Superior, Universidad Autonoma de Madrid.
Apuntes del Curso de java. Luis Hernández y Carlos Cervigón. Facultad de Informática. Universidad
Católica de Madrid.
1.
2.
3.
4.
La Herencia: Teoría (1)
„
Mecanismo exclusivo y fundamental de la POO.
„
La herencia no está contemplada en la programación basada en tipos
(TAD).
„
Es el principal mecanismo que ayuda a fomentar y facilitar la
reutilización del software:
„
Si se necesita una nueva clase de objetos y se detectan suficientes
similitudes con otra clase ya desarrollada, se toma esa clase existente
como punto de partida para desarrollar la nueva:
„
„
Las clases como componentes de software reutilizables.
Se adoptan automáticamente características ya implementadas
Ahorro de tiempo y
esfuerzo
„
Se adoptan automáticamente características ya probadas
Menor tiempo de prueba y
depuración
1
La Herencia: Teoría (2)
„
Conceptos claves de la herencia:
„
Suficientes similitudes:
„
„
„
Todas las características de la clase existente (o la gran
mayoría de ellas) resultan adecuadas para la nueva.
En la nueva clase se ampliará y/o redefinirá el conjunto de
características.
Características de las clases que se adoptan:
„
„
Todos los miembros definidos en las clases (Atributos y
Métodos)
Dependiendo de la forma en que se aplique el mecanismo
de herencia, en la nueva clase se puede tener o no acceso
a ciertas características heredadas (a pesar de que se
adopten todas).
La Herencia: Teoría (3)
„
„
La relación de herencia se establece entre una clase
nueva y una clase ya existente.
Términos generales:
„
„
„
„
Sinónimos de la clase existente: Clase base, clase madre,
superclase (término genérico de la POO).
Sinónimos de la clase nueva: Clase derivada, clase hija,
subclase (término genérico de la POO).
También se utiliza el término derivación para referirse a la
herencia.
La clase nueva es la que tiene establecida la relación de
herencia con la clase existente.
„
La clase existente no necesita a la nueva, pero la nueva sí
necesita la presencia de la existente.
2
La Herencia: Teoría (4)
„
„
La relación de herencia se establece entre
una clase nueva y una clase existente.
Sobre la clase que hereda de la existente:
„
„
„
„
La nueva hereda todas las características de la
existente.
La nueva puede definir características
adicionales.
La nueva puede redefinir características
heredadas de la existente.
El proceso de herencia no afecta de ninguna
forma a la superclase existente.
Subclases en java(1)
„
Para que una nueva clase sea subclase
de otra existente basta con añadir:
extends ClaseExistente a continuación
del nombre de la nueva:
„
public class ClaseNueva extends ClaseExistente {
...
ClaseExistente
}
ClaseNueva
3
Subclases en java(2)
Clase
Existente
Nota: Los empleados son
personas
Clase Nueva
NOTA: Por el hecho de indicar que Empleado es
subclase de Persona, los objetos de la clase
Empleado ya tienen automáticamente 2 atributos y
un método, los heredados de la clase Persona.
Nota: Los directivos son
personas y son empleados
Conversión de tipos (1)
„
Sea:
„
„
„
„
Conversiones implícitas (generalización)
„
„
„
„
Persona p1, p2;
Empleado q, e= new Empleado ();
Directivo r, d = new Directivo ();
p1 = e;
p2 = d;
q = d;
Æ Empleado a Persona
Æ Directivo a Persona
Æ Directivo a Empleado
Un Directivo puede hacer
automáticamente el papel de
Empleado y de Persona
Conversiones explícitas (especialización)
„
„
„
r = p2;
r = (Directivo) p2;
r = (Directivo) p1;
Æ Error de compilación
Æ Persona a Directivo
Æ Error de ejecución:
p1 no es un Directivo
Una Persona puede
hacer el papel de
Directivo si
realmente es un
Directivo
4
Conversión de tipos (2)
„
Sea:
class X {
void y (Empleado p) { ... }
void z (Directivo p) { ... }
}
Directivo d = new Directivo ();
Empleado p = dir, e = new Empleado ();
X x = new X ();
„
Conversión implícita
„
Conversión explícita
„
„
„
„
x.y (d);
Æ Directivo a Empleado
x.z (p);
Æ Error de compilación
x.z ((Directivo) p); Æ Empleado a Directivo
x.z ((Directivo) e); Æ Error de ejecución: e no es un Directivo
Herencia: el Polimorfismo
„
„
Polimorfismo significa “la capacidad de adoptar
varias formas”.
En la POO lo que puede tomar varias formas es:
„
„
Una entidad variable
Ejemplo
„
„
p: Poligono; r: Rectángulo; t:Triangulo
Asignaciones básicas:
„
„
„
„
p:=r
P:=t
Reconexión de la referencia polimorfa
Definición: Compatibilidad de tipos
„
A un identificador de una clase sólo se le pueden asignar
objetos de esa clase o de cualquiera de sus subclases
5
Redefinición de variables y
métodos (1)
„
„
„
„
En una subclase se redefine las variables y los
métodos de una clase padre
La definición de la subclase ensombrece a la de la
clase padre
La definición de la clase padre accesible desde la
subclase con super
La redefinición de variables
„
„
„
„
Se reserva un espacio de memoria para cada definición
El tipo no tiene por qué coincidir
Ligadura estática
Se prefiere evitar la redefinición de variables
Polimorfismo y la redefinición
de variables y métodos (2)
„
Ejemplo de la redefinición de variables
6
Polimorfismo y la redefinición
de variables y métodos (3)
„
Ejemplo de la redefinición de métodos
Lecturas
„
Subclases e Interfaces. Capitulo 10
„
„
Libro: Java 2, curso de programación
Paginas 329 a la 371.
7
Related documents