You are on page 1of 8

La Herencia Multiple-Interfaces

1.
2.
3.

Presentacin basada en:


Java 2., Curso de programacin. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003.
Apuntes del Curso Programacin Orientado a Objetos. Pablo Castells. Escuela Politcnica Superior,
Universidad Autonoma de Madrid.
Apuntes del Curso de java. Luis Hernndez y Carlos Cervign. Facultad de Informtica. Universidad
Catlica de Madrid.

La Herencia Mltiple

Es aquella en la que cada clase puede


heredar mtodos y variables de
cualquier nmero de superclase.
Ejemplo
Compaa
Japonesa
Es una

Fabricante de motos
Es una

Fabricante de motos
japonesas

La Herencia Mltiple

Lenguajes que soportan Herencia Multiple

C++
CLOS
Objetive-C
Algunas versiones de Smalltalk

Problemas de ambigedad

La propiedad referida solo est en una de las subclases


padres

No hay Problema
a b
m1(a)

a b c
m1(a) m2(c)

c
m2(c)

a d

a c d
m2(c)

La Herencia Mltiple

Problemas de ambigedad

La propiedad concreta existe en ms de una superclase.


Existen diferentes tipos de conflictos que pueden ocurrir

Conflictos de nombres
Conflictos de valores
Conflictos por defecto
Conflictos de dominio
Conflictos de restricciones

Ejemplo
a b
m1(a)

a
m1(a)

D
b

a
m1(a)

Colisin de
nombres y
mtodos

La Herencia Mltiple
Resolucin de conflictos [booch]

La semntica del lenguaje puede considerar una colisin de


nombres como ilegal y rechaza la compilacin de la clase.

Smalltalk y Eiffel

La semntica del lenguaje puede considerar el mismo


nombre introducido por clases diferentes con referencia al
mismo elemento conflictivo

La semntica del lenguaje puede permitir el choque, pero


requiere que todas las referencias de nombres califiquen la
fuente de su declaracin

ORION Categoriza las clases

C++ (::)

La Herencia Mltiple

La Herencia Repetida

Cuando una clase hereda de 2 ms superclases


que a su vez heredan de la misma superclase

D obj = crear D
obj.x
obj.y

La mayora de los lenguajes de


programacin no permiten la
duplicacin esttica de la clase

A
y
t

C
D

Caso (a)

x
y
z
t

y
z

Existen excepciones
A
A
B

C
D

Caso (b)

La Herencia Mltiple

La Herencia Repetida

Mtodos para tratar la Herencia Repetida

Tratar la ocurrencia de herencia repetida como ilegal

Smalltalk y Eiffel

Se permite la duplicacin de superclases, pero requiere


el uso de nombres cualificados totalmente para referirse
a los miembros de una copia especfica.
C++ ( class B: public B { ) Caso (b)

Se puede tratar referencias a la misma clase como si


fueran la misma clase

C++ Superclases repetidas como clases base virtual


Subclase nombra otra clase como su superclase y la
marca como virtual, para indicar que es una clase
compartida ( class B: virtual public B { ) Caso (a)

La Herencia Mltiple en JAVA

Java no permite herencia mltiple (una clase extienda varias


otras), Sin embargo, por medio de los interfaces se puede
conseguir un efecto similar
Una interfaz es parecido a una clase abstracta, pero slo puede
tener definidos mtodos abstractos y constantes (static/final).

Ni atributos ni implementaciones de mtodos.

Se crea igual que las clases, pero utilizando interface en lugar


de class:
public interface Comparable { // interfaz estndar
public int compareTo(Object obj); // sin abstract
}
Esta interfaz define un nico mtodo, que indica si el objeto
receptor es menor que el proporcionado (resultado negativo), es
mayor (resultado positivo) o es igual (0 como resultado).

Recuerde que Object es la clase raz de la jerarqua.

Interfaces

Las clases pueden implementar interfaces, asegurando que incluyen la


funcionalidad descrita en la interfaz (o las interfaces).
public class Persona2 implements Comparable {
...
public int compareTo(Object obj) {
String este = nombreCompleto().toUpperCase();
String otro =
((Persona) obj).nombreCompleto().toUpperCase();
return este.compareTo(otro);
}
}

Persona2.java

Nada impide que una clase herede de otra e implemente interfaces:


public class Alumno extends Persona implements Comparable {
...

Y se pueden implementar varias interfaces (separadas por comas).

Interfaces:Ejemplo(1)
Coleccion.java

Pila.java

Interfaces:Ejemplo(2)
Mainclase.java

Para qu sirve una interfaz?

Una interfaz impone un protocolo de mtodos a implementar


Una interfaz introduce un nuevo tipo

Las interfaces posibilitan la herencia mltiple en cuanto a


jerarqua de tipos:

Las clases que implementan la interfaz son compatibles con este


tipo
Una interfaz define un tipo una clase puede tener mltiples
supertipos

Sin embargo una interfaz no tiene contenido que heredar:

los mtodos no tienen cdigo


las variables se heredan pero son inamovibles (son estticas y
constantes)
Una interfaz no proporciona funcionalidad a un objeto, sino la
posibilidad de ser objeto de la funcionalidad de otros objetos

La interfaz vs Clase Abstracta

Si Ordenable es una
clase abstracta:

Obliga a derivar desde la


cima de la jerarqua
Obliga a definir el
mtodo menor a nivel de
Persona y de
ObjetoGrafico (si no,
clases abstractas)
Problema si Persona y
Directivo son clases
definidas por distintos
programadores

En general, siempre que sea posible y


tenga sentido, mejor interfaz que
clase

Boolean menor
( Ordenable
valor)

Ordenable

Pesona

Empleado

Directivo

Cundo es posible?
Por qu es mejor?

Detalles de las Interfaces

Una interfaz puede derivar de varias otras interfaces con


extends
Las interfaces tambin pertenecen a un package
Las interfaces pueden ser public o del package
Los mtodos implementados deben ser public en las clases que
implementan las interfaces
Declara f()
Implementa f()
Al implementar una interfaz,
Pesona
Empleado
la clase pierde las definiciones
de los mtodos que coincidan
con mtodos definidos en sus
superclases
Hacer un cast de un objeto a
Directivo
cualquier interfaz es siempre
sintcticamente legal (aunque
Se pierde la
puede haber error en ejecucin)
definicin de f()
dada en Persona

Consulta

Estudiar las siguientes interfaces


predefinidas y su aplicacin en casos
especficos:

java.util.Enumeration (e.j. estudiar como se


emplea en el caso de la clase Vector)
java.util.Collection
java.util.Map
java.lang.Comparable

Lecturas

Subclases e Interfaces. Capitulo 10.

Libro: Java 2, curso de programacin


Paginas 371 a la 396.

You might also like