Documentos de Académico
Documentos de Profesional
Documentos de Cultura
03-Herencia 3en1 PDF
03-Herencia 3en1 PDF
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
Herencia
Polimorfismo
La clase Object
Clases abstractas
Bibliografa
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
3.1 Herencia
Vehculo
Relacin de herencia:
todos los coches son vehculos
Coche
superclase
subclase
padre
hijo
M. Aldea y M. Gonzlez
8/03/10
Vehculo
Coche
3
Herencia de operaciones
Al extender una clase
se heredan todas las operaciones del padre
se puede aadir nuevas operaciones
La nueva clase puede elegir para las operaciones heredadas:
redefinir la operacin: se vuelve a escribir
- la nueva operacin puede usar la del padre y hacer ms
cosas: programacin incremental
- o puede ser totalmente diferente
dejarla como est: no hacer nada
La herencia se puede aplicar mltiples veces
da lugar a una jerarqua de clases
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
Lnea
Crculo
-puntoInicio
-puntoFin
+dibuja()
+borra()
superclase
-centro
-radio
+dibuja()
+borra()
+rellena()
subclases
Prcticas de Programacin
Ejemplo
Clase que representa un vehculo cualquiera
Vehculo
-color: int
-numSerie: int
+color(): int
+numSerie(): int
+pinta(nuevoColor: int)
+cambiaNumSerie(nuevo: int)
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
/**
* Obtener el numero de serie
*/
public int numSerie()
{
return numSerie;
}
/**
* Obtener el color
*/
public int color()
{
return color;
}
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
/**
* Cambiar el numero de serie
*/
public void cambiaNumSerie(int numSerie)
{
this.numSerie=numSerie;
}
/**
* Pintar el vehculo de un color
*/
public void pinta(int nuevoColor)
{
color = nuevoColor;
}
}
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
Coche
+numSerie(): int
+pinta(nuevoColor: int)
+cambiaNumSerie(nuevo: int)
-cilindrada: int
+cilindrada(): int
+cambiaCilindrada(nueva: int)
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
10
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
11
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
12
Coche
-cilindrada: int
Barco
+cilindrada(): int
+cambiaCilindrada(nueva: int)
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
13
: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
heredados
aadidos
color(): int
numSerie(): int
pinta(nuevoColor: int)
cambiaNumSerie(nuevo: int)
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
14
Redefiniendo operaciones
Una subclase puede redefinir (override) una operacin en lugar
de heredarla directamente
En muchas ocasiones (no siempre) la operacin redefinida invoca
la de la superclase
se usa para ello la palabra super
se refiere a la superclase del objeto actual
Invocacin del constructor de la superclase:
super(parmetros...);
Invocacin de un mtodo de la superclase:
super.nombreMtodo(parametros...);
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
15
Herencia y Constructores
Los constructores no se heredan
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(parmetros...) {
// invoca el constructor de la superclase
super(parmetros para la superclase);
// inicializa sus atributos
...
}
la llamada a super debe ser la primera instruccin del
constructor de la subclase
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
16
Prcticas de Programacin
17
M. Aldea y M. Gonzlez
8/03/10
18
M. Aldea y M. Gonzlez
8/03/10
19
No repetimos el cdigo
(es igual que en el ejemplo anterior)
{...}
{...}
/**
* Obtener un texto con los datos
* del vehculo
*/
public String toString() {
return "Vehculo -> numSerie= "+
numSerie+", color= "+nombre[color];
}
}
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
20
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
21
M. Aldea y M. Gonzlez
8/03/10
22
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
23
M. Aldea y M. Gonzlez
8/03/10
24
M. Aldea y M. Gonzlez
8/03/10
25
Resumen Herencia
Las clases se pueden extender
la subclase hereda los atributos y mtodos de la superclase
Al extender una clase se pueden redefinir sus operaciones
si se desea, se puede invocar desde la nueva operacin a la de
la superclase: programacin incremental
A la subclase se le pueden aadir nuevas operaciones y atributos
M. Aldea y M. Gonzlez
8/03/10
26
3.2 Polimorfismo
La palabra polimorfismo viene de mltiples formas
Las operaciones polimrficas son aquellas que hacen funciones
similares con objetos diferentes
Ejemplo:
suponer que existe la clase Figura y sus subclases
- Crculo
Figura
- Cuadrado
+dibuja()
- Polgono
+borra()
Todas ellas con las operaciones:
- dibuja
- borra
Prcticas de Programacin
Crculo
Cuadrado
Polgono
+dibuja()
+borra()
+dibuja()
+borra()
+dibuja()
+borra()
M. Aldea y M. Gonzlez
8/03/10
27
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
28
Polimorfismo en Java
El polimorfismo en Java consiste en dos propiedades:
1. Una referencia a una superclase puede apuntar a un objeto de
cualquiera de sus subclases
Vehculo v1=new Coche(Vehiculo.rojo,12345,2000);
Vehculo v2=new Barco(Vehiculo.azul,2345);
2. La operacin se selecciona en base a la clase del objeto, no a
la de la referencia
v1.toString()
usa el mtodo de la clase Coche, puesto que v1 es un coche
v2.toString()
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
29
M. Aldea y M. Gonzlez
8/03/10
30
Prcticas de Programacin
31
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
32
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
33
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
34
M. Aldea y M. Gonzlez
8/03/10
35
M. Aldea y M. Gonzlez
8/03/10
36
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
37
";
} // clase RegistroDeVehculos
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
38
M. Aldea y M. Gonzlez
8/03/10
39
Resumen
El polimorfismo nos permite abstraer operaciones
podemos invocarlas sin preocuparnos de las diferencias
existentes para objetos diferentes
el sistema elige la operacin apropiada al objeto
El polimorfismo se asocia a las jerarquas de clases:
una superclase y todas las subclases derivadas de ella directa
o indirectamente
El polimorfismo en Java consiste en dos propiedades:
1. Una referencia a una superclase puede apuntar a un objeto de
cualquiera de sus subclases
2. La operacin se selecciona en base a la clase del objeto, no a
la de la referencia
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
40
Object
equals
toString
...
...
String
Vehculo
Coche
...
Barco
Figura
Crculo
...
Cuadrado
M. Aldea y M. Gonzlez
8/03/10
41
Mtodo equals
Se encuentra definido en la clase Object como:
public class Object {
...
public boolean equals(Object obj) {
return this == obj;
}
...
}
es decir, compara referencias, no contenidos
M. Aldea y M. Gonzlez
8/03/10
42
aconsejable cuando se
redefine un mtodo para
detectar errores
@Override
public boolean equals(Object obj) {
Coordenada c = (Coordenada) obj;
return c.x == x && c.y == y;
}
Redefine el mtodo
equals de la
clase Object
}
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
43
M. Aldea y M. Gonzlez
8/03/10
44
Mtodo toString
Se encuentra definido en la clase Object como:
public class Object {
...
public String toString() {
return ...;
}
...
}
es utilizado por el sistema cuando se concatena un objeto con
un string, por ejemplo:
println("Valor coordenada:" + c);
por defecto retorna un string con el nombre de la clase y la
direccin de memoria que ocupa el objeto
Coordenada@a34f5bd
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
45
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
46
M. Aldea y M. Gonzlez
8/03/10
47
M. Aldea y M. Gonzlez
8/03/10
48
Mtodos abstractos
Una clase abstracta puede tener mtodos abstractos
se trata de mtodos sin cuerpo
que es obligatorio redefinir en las subclases no abstractas
ejemplo de mtodo abstracto
public abstract int mtodoAbstracto(double d);
no tiene cuerpo
Subclase
redefinido
(ya no es abstracto)
abstractos
mtodo1
mtodo2
mtodo1
mtodo2
M. Aldea y M. Gonzlez
8/03/10
Prcticas de Programacin
49
Figura1D
Figura2D
-ptoIni
-ptoFin
-colorRelleno
+cambiaRelleno
Recta
Curva
-radio
+borra
+dibuja
Prcticas de Programacin
+borra
+dibuja
Crculo
-xCentro
-yCentro
-radio
+borra
+dibuja
Cuadrado
-x0
-y0
-x1
-y1
+borra
+dibuja
M. Aldea y M. Gonzlez
8/03/10
50
M. Aldea y M. Gonzlez
8/03/10
51
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
52
M. Aldea y M. Gonzlez
8/03/10
53
M. Aldea y M. Gonzlez
8/03/10
54
M. Aldea y M. Gonzlez
8/03/10
55
3.5 Bibliografa
King, Kim N. Java programming: from the beginning. W. W.
Norton & Company, cop. 2000
Francisco Gutirrez, Francisco Durn, Ernesto Pimentel.
Programacin Orientada a Objetos con Java. Paraninfo, 2007.
Ken Arnold, James Gosling, David Holmes, El lenguaje de
programacin Java, 3 edicin. Addison-Wesley, 2000.
Eitel, Harvey M. y Deitel, Paul J., Cmo programar en Java,
quinta edicin. Pearson Educacin, Mxico, 2004.
Prcticas de Programacin
M. Aldea y M. Gonzlez
8/03/10
56