PDF de programación - Prácticas de Programación - Tema 3. Herencia y Polimorfismo

Imágen de pdf Prácticas de Programación - Tema 3. Herencia y Polimorfismo

Prácticas de Programación - Tema 3. Herencia y Polimorfismográfica de visualizaciones

Publicado el 14 de Enero del 2017
1.588 visualizaciones desde el 14 de Enero del 2017
239,9 KB
19 paginas
Creado hace 14a (03/03/2010)
Prácticas de Programación

Tema 1. Introducción al análisis y diseño de programas
Tema 2. Clases y objetos

Tema 3. Herencia y Polimorfismo

Tema 4. Tratamiento de errores
Tema 5. Aspectos avanzados de los tipos de datos
Tema 6. Modularidad y abstracción: aspectos avanzados
Tema 7. Entrada/salida con ficheros
Tema 8. Verificación y prueba de programas

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

Tema 3. Herencia y Polimorfismo



1



3.1. Herencia
3.2. Polimorfismo
3.3. La clase Object
3.4. Clases abstractas
3.5. Bibliografía

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

3.1 Herencia
Relación de herencia:

• todos los coches son vehículos

© M. Aldea y M. González

8/03/10

2

3.1 Herencia

Vehículo

Coche

La herencia es un mecanismo por el que se pueden crear nuevas
clases a partir de otras existentes,

• heredando, y posiblemente modificando, y/o añadiendo

operaciones

• heredando y posiblemente añadiendo atributos

Observar que una operación o atributo no puede ser suprimido en
el mecanismo de herencia
Nomenclatura

clase original
clase extendida

superclase
subclase

padre
hijo

Vehículo
Coche

Prácticas de Programación

© M. Aldea y M. González

8/03/10

3

Tema 3. Herencia y Polimorfismo

Herencia de operaciones
Al extender una clase

3.1 Herencia

• se heredan todas las operaciones del padre
• se puede añadir nuevas operaciones

La nueva clase puede elegir para las operaciones heredadas:

• redefinir la operación: se vuelve a escribir

- la nueva operación puede usar la del padre y hacer más

cosas: programación incremental
- o puede ser totalmente diferente
• dejarla como está: no hacer nada

La herencia se puede aplicar múltiples veces

• da lugar a una jerarquía de clases

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

Herencia en un diagrama de clases

3.1 Herencia

Figura

-Color
+dibuja()
+borra()
+cambiaColor()

superclase

Línea

-puntoInicio
-puntoFin

+dibuja()
+borra()

subclases

Círculo

-centro
-radio

+dibuja()
+borra()
+rellena()

• Los atributos y métodos de la superclase no se repiten en las

subclases
- salvo que se hayan redefinido

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

Ejemplo
Clase que representa un vehículo cualquiera

3.1 Herencia

Vehículo

-color: int

-numSerie: int

+color(): int

+numSerie(): int

+pinta(nuevoColor: int)

+cambiaNumSerie(nuevo: int)

Prácticas de Programación

© M. Aldea y M. González

8/03/10

4

5

6

Tema 3. Herencia y Polimorfismo

Ejemplo: clase Vehículo

3.1 Herencia

public class Vehículo
{
// constantes estáticas finales para los colores
public static final int
rojo=1,
verde=2,
azul=3;

// atributos
private int color;
private int numSerie;

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

7

3.1 Herencia

Ejemplo: clase Vehículo (cont.)

/**
* Obtener el numero de serie
*/
public int numSerie()
{
return numSerie;
}


/**
* Obtener el color
*/
public int color()
{
return color;
}

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

8

3.1 Herencia

Ejemplo: clase Vehículo (cont.)

/**
* Cambiar el numero de serie
*/
public void cambiaNumSerie(int numSerie)
{
this.numSerie=numSerie;
}

/**
* Pintar el vehículo de un color
*/
public void pinta(int nuevoColor)
{
color = nuevoColor;
}
}

Prácticas de Programación

© M. Aldea y M. González

8/03/10

9

Tema 3. Herencia y Polimorfismo

Ejemplo: extensión a la clase Coche

3.1 Herencia

Vehículo

-color: int

-numSerie: int

+color(): int

+numSerie(): int

+pinta(nuevoColor: int)

+cambiaNumSerie(nuevo: int)

Coche

-cilindrada: int

+cilindrada(): int

+cambiaCilindrada(nueva: int)

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

10

3.1 Herencia

Ejemplo: extensión a la clase Coche (cont.)

public class Coche extends Vehículo
{
// cilindrada del coche
private int cilindrada;

/** Obtiene la cilindrada del coche */
public int cilindrada(){
return cilindrada;
}

/** Cambia la cilindrada del coche */
public void cambiaCilindrada(int nuevaCilin) {
this.cilindrada=nuevaCilin;
}
}

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

Ejemplo: extensión a la clase Barco

11

3.1 Herencia

Se puede hacer herencia sin añadir métodos y/o atributos

public class Barco extends Vehículo
{

}

Prácticas de Programación

© M. Aldea y M. González

8/03/10

12

Tema 3. Herencia y Polimorfismo

Ejemplo: jerarquía de clases

3.1 Herencia

Vehículo

-color: int

-numSerie: int

+color(): int

+numSerie(): int

+pinta(nuevoColor: int)

+cambiaNumSerie(nuevo: int)

Coche

-cilindrada: int

Barco

+cilindrada(): int

+cambiaCilindrada(nueva: int)

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

13

3.1 Herencia

Ejemplo: objetos y herencia
Vehículo v = new Vehículo();
Coche c = new Coche();
Barco b = new Barco()

c

:Coche

color: int
numSerie: int
cilindrada: int
color(): int
numSerie(): int
pinta(nuevoColor: int)
cambiaNumSerie(nuevo: int)
cilindrada(): int
cambiaCilindrada(nueva: int)

:Barco

color: int
numSerie: int

color(): int
numSerie(): int
pinta(nuevoColor: int)
cambiaNumSerie(nuevo: int)

heredados
añadidos

© M. Aldea y M. González

8/03/10

14

v

:Vehículo

color: int
numSerie: int

color(): int
numSerie(): int
pinta(nuevoColor: int)
cambiaNumSerie(nuevo: int)

b

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

Redefiniendo operaciones
Una subclase puede redefinir (“override”) una operación en lugar
de heredarla directamente
En muchas ocasiones (no siempre) la operación redefinida invoca
la de la superclase

3.1 Herencia

• se usa para ello la palabra super
• se refiere a la superclase del objeto actual
Invocación del constructor de la superclase:

super(parámetros...);

Invocación de un método de la superclase:

super.nombreMétodo(parametros...);

Prácticas de Programación

© M. Aldea y M. González

8/03/10

15

Tema 3. Herencia y Polimorfismo

Herencia y Constructores
Los constructores no se heredan

3.1 Herencia

• las subclases deben definir su propio constructor

Normalmente será necesario inicializar los atributos de la
superclase

• para ello se llama a su constructor desde el de la subclase

/** constructor de una subclase */
public Subclase(parámetros...) {
// invoca el constructor de la superclase
super(parámetros para la superclase);
// inicializa sus atributos
...
}

• la llamada a “super” debe ser la primera instrucción del

constructor de la subclase

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

16

3.1 Herencia

Herencia y Constructores (cont.)

Si desde un constructor de una subclase no se llama
expresamente al de la superclase

• el compilador añade la llamada al constructor sin parámetros

public Subclase(int i){
this.i=i;
}

se convierte en

public Subclase(int i){
super();
this.i=i;
}

• en el caso de que la superclase no tenga un constructor sin

parámetros se produciría un error de compilación

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

Ejemplo: constructores y redefinición de

operaciones

17

3.1 Herencia

Modificamos la clase Vehículo para añadir un constructor y un
método que retorna en un String los datos del objeto

Vehículo

-color: int

-numSerie: int

+Vehiculo(color: int,
numSerie: int)

+numSerie(): int

+color(): int

+pinta(nuevoColor: int)

+toString(): String

(En el capítulo 3.3 veremos porqué llamamos toString al método)
18

© M. Aldea y M. González

Prácticas de Programación

8/03/10

Tema 3. Herencia y Polimorfismo

3.1 Herencia

Ejemplo: clase Vehículo
public class Vehículo {
// constantes estáticas para los colores
public static final int rojo=1, verde=2, azul=3;
public static final String[] nombre=
{"error", "rojo", "verde", "azul"};
// atributos privados
private int color;
private int numSerie;

/**
* Constructor al que le pasamos el color
* y el número de serie
*/
public Vehículo(int color, int numSerie) {
this.color = color;
this.numSerie = numSerie;
}

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

19

3.1 Herencia

Ejemplo: clase Vehículo (cont.)

public int numSerie() {...}

public int color() {...}

No repetimos el código

(es igual que en el ejemplo anterior)

public void cambiaNumSerie(int numSerie) {...}

public void pinta(int nuevoColor) {...}

/**
* Obtener un texto con los datos
* del vehículo
*/
public String toString() {
return "Vehículo -> numSerie= "+
numSerie+", color= "+nombre[color];
}

}

Prácticas de Programación

Tema 3. Herencia y Polimorfismo

© M. Aldea y M. González

8/03/10

Ejemplo: Extensión al Coche

public class Coche extends Vehículo {

// cilindrada del coche
private int cilindrada;

20

3.1 Herencia

/**
* Constructor al que le pasamos el color, el
* numero de serie y la cilindrada
*/
public Coche(int color, int numSerie,
int cilindrada) {
super(color, numSerie);
this.cilindrada = cilindrada;
}

Prácticas de Programación

© M. Aldea y M. González

8/03/10

21

Tema 3. Herencia y Polimorfismo

3.1 Herencia

Ejemplo: Extensión al Coche (cont.)

/** Obtiene la cilindrada del coche */
public int cilindrada() {
return cilindrada;
}

/** Cambia la cilindrada del coche */
public void cambiaCilindrada(int nueva) {
cilindrada = nueva;
}

/** Retorna un texto con los datos del coche */
@Override
public String toString() {
r
  • Links de descarga
http://lwp-l.com/pdf980

Comentarios de: Prácticas de Programación - Tema 3. Herencia y Polimorfismo (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