PDF de programación - Tema 3: Herencia en Java

Imágen de pdf Tema 3: Herencia en Java

Tema 3: Herencia en Javagráfica de visualizaciones

Publicado el 24 de Enero del 2017
2.282 visualizaciones desde el 24 de Enero del 2017
484,6 KB
132 paginas
Creado hace 15a (15/10/2008)
Tema 3: Herencia en Java

Programación Orientada a Objetos

Curso 2008/2009
Begoña Moros Valle

Índice

Introducción
Herencia y Ocultamiento de la Información
Redefinición de características
Herencia y creación
Polimorfismo
Herencia y Sistema de tipos
Ligadura dinámica
Clase Object
Genericidad y Herencia
Genericidad restringida

Clases comportamiento: Iteradores

Clases abstractas

Herencia Múltiple

Tema 3

Herencia

2

Introducción

Las clases no son suficientes para conseguir los objetivos

de:
(A) REUTILIZACIÓN: Necesidad de mecanismos para
generar código genérico:
Capturar aspectos comunes en grupos de estructuras similares
Independencia de la representación
Variación en estructuras de datos y algoritmos
(B) EXTENSIBILIDAD: Necesidad de mecanismos para
favorecer:
“Principio abierto-cerrado” y “Principio Elección Única”
Estructuras de datos polimórficas.

Tema 3

Herencia

3

Introducción

Entre algunas clases pueden existir relaciones

conceptuales:
Extensión, Especialización, Combinación

EJEMPLO:

Libros y Revistas tienen propiedades comunes
Una Pila puede definirse a partir de una Cola o viceversa
Un Rectángulo es una especialización de Polígono
Puede haber distintos tipos de Cuentas

¿Tiene sentido crear una clase a partir de otra?
La herencia es el mecanismo que:

sirve de soporte para registrar y utilizar las relaciones

conceptuales existentes entre las clases

posibilita la definición de una clase a partir de otra

Tema 3

Herencia

4

Jerarquías de herencia

La herencia organiza las clases en una estructura

jerárquica formando jerarquías de clases

Ejemplos:

PUBLICACION

FIGURA

LIBRO

REVISTA

POLIGONO

CIRCULO

LIBRO_TEXTO

INVESTIGACION MAGAZINE

RECTANGULO

No es tan sólo un mecanismo para compartir código
Consistente con el sistema de tipos del lenguaje

Tema 3

Herencia

5

Introducción

Si una clase B hereda de otra clase A

entonces:
B incorpora la estructura (atributos) y

comportamiento (métodos) de la clase A

B puede incluir adaptaciones:

B puede añadir nuevos atributos
B puede añadir nuevos métodos
B puede redefinir métodos

Refinar: extender el uso original
Reemplazar: mejorar la implementación

Las adaptaciones son dependientes del

lenguaje

Tema 3

Herencia

6

El proceso de herencia es transitivo

A

B

C

B hereda de A

A es la superclase y B la subclase

C hereda de B y A

B y C son subclases de A
B es un descendiente directo de A
C es un descendiente indirecto de A

Tema 3

Herencia

7

Tipos de herencia

D

B

B

E

A

C

Herencia simple

Una clase puede heredar de una única

clase.

Ejemplo: Java, C#

A

C

Herencia múltiple

Una clase puede heredar de varias

clases.

Clases forman un grafo dirigido acíclico

Ejemplos: Eiffel, C++

Tema 3

Herencia

8

Diseño de jerarquías de herencia

Generalización (Factorización)

Se detectan clases con un comportamiento común
Ejemplo: Libro y Revista son Publicaciones

Especialización (Abstracción)

Se detecta que una clase es un caso especial de otra
Ejemplo: Rectangulo es un tipo de Poligono

No hay receta mágica para crear buenas

jerarquías

Problemas con la evolución de la jerarquía

Tema 3

Herencia

9

Polígonos y Rectángulos
Tenemos la clase Poligono y necesitamos
representar rectángulos:

¿Debemos crear la clase

Rectangulo partiendo de cero?

Podemos aprovechar la existencia de similitudes

y particularidades entre ambas clases

Tema 3

Herencia

10

Polígonos y Rectángulos

Un rectángulo tiene muchas de las características de un

polígono (rotar, trasladar, vértices,..)

Pero

tiene características especiales

(diagonal) y

propiedades especiales (4 lados, ángulos rectos)

Algunas

polígono
implementarse más eficientemente (perímetro)

características

de

pueden

class Rectangulo extends Poligono{

...Características específicas

}

Tema 3

Herencia

11

public class Poligono {

//Un polígono se implementa como una lista de
//puntos sucesivos
private List<Punto> vertices;
private int numVertices;
public Poligono(List<Punto> puntos) {

vertices = new LinkedList<Punto>(puntos);
numVertices = puntos.size();

return numVertices;

}
public int getNumVertices(){
}
public void rotar (Punto centro,
public void trasladar (double a, double b){…}
public void visualizar(){…}
public double perimetro(){…}


double angulo){…}

3
/
1

o
n
o
g
í
l
o
P

e
s
a
C

l

}
Tema 3

Herencia

12

/**
* Desplaza a horizontalmente y b verticalmente
*/
public void trasladar (double a, double b){
for (Punto pto : vertices)

pto.trasladar(a,b);

}

3
/
2

o
n
o
g
í
l
o
P

e
s
a
}C

l

/**
* Rota el ángulo alrededor del centro
*/
public void rotar (Punto centro, double angulo){
for (Punto pto : vertices)

pto.rotar(centro, angulo);

Tema 3

Herencia

13

/**
* Suma las longitudes de los lados
*/
public double perimetro(){

3
/
3

o
n
o
g
í
l
o
P

e
s
a

l

}C

double total = 0;
Punto anterior;
Punto actual = vertices.get(0);
for (int index = 1; index < numVertices; index++){

anterior = actual;
actual = vertices.get(index);
total = total + actual.distancia(anterior);

}
total=total+actual.distancia(vertices.get(0));
return total;

Tema 3

Herencia

14

public class Rectangulo extends Poligono{

Clase Rectangulo
private double lado1, lado2; //Nuevos atributos
private double diagonal;
public Rectangulo(List<Punto> vertices,

double lado1, double lado2){

super(vertices);
this.lado1 = lado1;
this.lado2 = lado2;

}
@Override //Redefine perímetro
public double perimetro(){
}
public double diagonal() {//Nuevos métodos
}

return (2*(lado1 + lado2 ));

return Math.sqrt(lado1*lado1 + lado2*lado2);

}

Tema 3

Herencia

15

Clase Rectángulo

Rectángulo hereda todos los métodos definidos

en Polígono, no hay que repetirlos:
Rectangulo.trasladar(0.0,0.0);

Añade nuevas características:

Atributos: lado1, lado2
Constructor que invoca al constructor de Poligono
Métodos: diagonal

Redefine características heredadas:

Reemplaza la implementación de perímetro

Tema 3

Herencia

16

Herencia y creación

El constructor de la clase hija refina el comportamiento

del padre

En Java los constructores no se heredan
La primera sentencia del constructor de la clase hija
SIEMPRE es una llamada al constructor de la clase
padre.

La llamada al constructor del padre puede ser:

Implícita:

Explícita:

Si se omite, se llamará implícitamente al constructor por defecto
Equivale a poner como primera sentencia super();
Si no existe el constructor por defecto en la clase padre dará un

error en tiempo de compilación

super(); o super(a,b); o …
Dependiendo de si el constructor al que invocamos tiene o no

argumentos

Tema 3

Herencia

17

Acceso protegido
Una subclase hereda todos los atributos definidos en la

superclase, pero no puede acceder a los campos
privados.

Para permitir que en un método de la subclase se

pueda acceder a una característica (atributo/método)
de la superclase, éste tiene que declararse como
protected
Es discutible la visibilidad protegida para los atributos
Es útil la visibilidad protegida para los métodos

Protected: características visibles a las subclases y

al resto de clases del paquete

Tema 3

Herencia

18

Resumen modificadores de acceso

De más restrictivo a menos:

private

visible sólo en la clase donde se define

Sin modificador (por defecto)
visible a las clases del paquete

protected

visible a las subclases y al resto de clases del paquete

public

visible a todas las clases

Tema 3

Herencia

19

Redefinición

La redefinición reconcilia la reutilización con la

extensibilidad:
“Es raro reutilizar un componente software sin necesidad de

cambios”

Los atributos no se pueden redefinir, sólo se ocultan
Si la clase hija define un atributo con el mismo nombre que un

atributo de la clase padre, éste no está accesible

El campo de la superclase todavía existe pero no se puede

acceder

Un método de la subclase con la misma signatura

(nombre y parámetros) que un método de la superclase
lo está redefiniendo.
Si se cambia el tipo de los parámetros se está sobrecargando el

método original

Tema 3

Herencia

20

Redefinición de métodos

Una clase hija puede redefinir un método de la

clase padre por dos motivos:

Reemplazo:

Mejorar implementación.

Ej: redefinir perímetro en la clase Rectangulo.

Otra diferente (aunque con la misma semántica).

Ej: el método dibujar en la jerarquía de Figura

Refinamiento:

Método del padre + acciones específicas

Ej: ingreso en una CuentaAhorro calcula un beneficio

Tema 3

Herencia

21

Refinamiento: super
Si un método redefinido refina el

comportamiento del método original puede
necesitar hacer referencia a este
comportamiento

super se utiliza para invocar a un método de
la clase padre:
super.met();
Se “rompe” la l
  • Links de descarga
http://lwp-l.com/pdf2097

Comentarios de: Tema 3: Herencia en Java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad