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

Imágen de pdf Tema 3: Herencia ej Java

Tema 3: Herencia ej Javagráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.158 visualizaciones desde el 14 de Enero del 2017
395,3 KB
134 paginas
Creado hace 14a (12/10/2009)
Tema 3: Herencia en Java

Programación Orientada a Objetos

Curso 2009/2010
Begoña Moros Valle

Índice

Introducción


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


Interfaces

Colecciones en Java (paquete java.util)
Patrones de diseño:

Método plantilla, Patrón Estrategia y Patrón Composite

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

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

Caso de estudio: Gestión bancaria
Además de abrir cuentas en el banco se pueden

contratar depósitos.

Un depósito permite a los clientes obtener una

rentabilidad por su dinero

Un depósito se caracteriza por:

Estructura: titular, capital, plazo en días, tipo de

interés

Comportamiento:

liquidarel depósito una vez cumplido el plazo con lo que se

devuelve al cliente el capital invertido más los intereses

Consultar los interesesproducidos al final del periodo.

Tema 3

Herencia

10

Clase Depósito (1/2)

public class Deposito {

private Persona titular;
private double capital;
private int plazoDias;
private double tipoInteres;
public Deposito(Persona titular, double capital,
int plazoDias, double tipoInteres) {

this.titular = titular;
this.capital = capital;
this.plazoDias = plazoDias;
this.tipoInteres = tipoInteres;

} …

Tema 3

Herencia

11

Clase Depósito (2/2)

return (plazoDias * tipoInteres * capital)/365;

return getCapital() + getIntereses();

public double liquidar() {
}
public double getIntereses() {
}
public double getCapital() {…}
public int getPlazoDias() {…}
public double getTipoInteres() {…}
public Persona getTitular() {…}

}

Tema 3

Herencia

12

Caso de estudio: Gestión bancaria

Existe un tipo de depósito que se denomina depósito

estructurado

Un depósito estructurado es un tipo de depósito que se

caracteriza por tener una parte del capital invertido a
interés fijo y otra parte a interés variable
Comparte las características de depósito
Añade características nuevas

¿Debemos crear la clase depósito estructurado

desde cero?

¿Podemos aprovechar la existencia de similitudes y

particularidades entre ambas clases?
DepositoEstructurado hereda de Deposito

Tema 3

Herencia

13

Deposito y DepositoEstructurado

Tema 3

Herencia

14

Clase DepositoEstructurado
public class DepositoEstructurado extends Deposito {
private double tipoInteresVariable;
private double capitalVariable;
public DepositoEstructurado( … ) { … }
public double getInteresesVariable() {

return (getPlazoDias() * tipoInteresVariable

* capitalVariable)/365;

}
public double getTipoInteresVariable() { … }
public void setTipoInteresVariable(
public double getCapitalVariable() { … }

double tipoInteresVariable){ … }

}

Tema 3

Herencia

15

Clase DepositoEstructurado
Depósito estructurado hereda todas las

características de depósito:
Hereda todos los atributos aunque no los vea
porque se han definido como privados (Principio
Ocultamiento de la Información)

Puede utilizar todos los métodos heredados como si

fueran propios (por ejemplo, getPlazoDias)

Añade nuevas características:

Atributos: capitalVariable, tipoInteresVariable
Métodos: getCapitalVariable, setCapitalVariable,

getTiopInteresVariable.

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

Clase DepositoEstructurado

public class DepositoEstructurado extends Deposito {

private double tipoInteresVariable;
private double capitalVariable;
public DepositoEstructurado(Persona titular, double capital,
int plazoDias, double tipoInteres, double tipoInteresVariable,
double capitalVariable) {

//Llamada explícita al constructor del padre
super(titular, capital, plazoDias, tipoInteres);
this.tipoInteresVariable = tipoInteresVariable;
this.capitalVariable = capitalVariable;

}


}

Tema 3

Herencia

18

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

19

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

20

Redefinición

¿Son válidos todos los métodos heredados de la

clase depósito para un depósito estructurado?
getCapital: debe devolver la suma del capital fijo más el

capital variable en el caso del depósito estructurado

getIntereses: debe devolver la suma del interés fijo y el

variable para un depósito estructurado

Al heredar es posible redefinir los métodos para

adaptarlos a la semántica de la nueva clase.

La redefinición reconcilia la reutilización con la

extensibilidad
Es raro reutilizar una clase sin necesidad de hacer cambios

Tema 3

Herencia

21

Redefinición

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
  • Links de descarga
http://lwp-l.com/pdf596

Comentarios de: Tema 3: Herencia ej 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