Download La Herencia Múltiple

Document related concepts
no text concepts found
Transcript
La Herencia Multiple-Interfaces
1.
2.
3.
Presentación basada en:
Java 2., Curso de programación. Fco. Javier Ceballos. Ed. Alfoomega&RA-MA, 2003.
Apuntes del Curso Programación Orientado a Objetos. Pablo Castells. Escuela Politécnica Superior,
Universidad Autonoma de Madrid.
Apuntes del Curso de java. Luis Hernández y Carlos Cervigón. Facultad de Informática. Universidad
Católica de Madrid.
La Herencia Múltiple
„
„
Es aquella en la que cada clase puede
heredar métodos y variables de
cualquier número de superclase.
Ejemplo
Compañía
Japonesa
Es una
Fabricante de motos
Es una
Fabricante de motos
japonesas
1
La Herencia Múltiple
„
Lenguajes que soportan Herencia Multiple
„
„
„
„
„
C++
CLOS
Objetive-C
Algunas versiones de Smalltalk
Problemas de ambigüedad
„
La propiedad referida solo está en una de las subclases
padres
„
No hay Problema
a b
m1(a)
C
a b c
m1(a) m2(c)
c
m2(c)
D
A
E
B
a d
a c d
m2(c)
La Herencia Múltiple
„
Problemas de ambigüedad
„
La propiedad concreta existe en más 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)
C
a
m1(a)
A
D
b
a
m1(a)
Colisión de
nombres y
métodos
2
La Herencia Múltiple
Resolución de conflictos [booch]
„
„
La semántica del lenguaje puede considerar una colisión de
nombres como ilegal y rechaza la compilación de la clase.
„
Smalltalk y Eiffel
„
La semántica del lenguaje puede considerar el mismo
nombre introducido por clases diferentes con referencia al
mismo elemento conflictivo
„
La semántica del lenguaje puede permitir el choque, pero
requiere que todas las referencias de nombres califiquen la
fuente de su declaración
„
„
ORIONÆ Categoriza las clases
C++ (::)
La Herencia Múltiple
„
La Herencia Repetida
„
Cuando una clase hereda de 2 ó más superclases
que a su vez heredan de la misma superclase
D obj = crear D
obj.x
obj.y
x
La mayoría de los lenguajes de
programación no permiten la
duplicación estática de la clase
A
y
t
B
C
D
Caso (a)
x
y
z
t
y
z
Existen excepciones
A
A
B
C
D
Caso (b)
3
La Herencia Múltiple
„
La Herencia Repetida
„
Métodos para tratar la Herencia Repetida
„
Tratar la ocurrencia de herencia repetida como ilegal
„
„
„
„
Smalltalk y Eiffel
Se permite la duplicación de superclases, pero requiere
el uso de nombres cualificados totalmente para referirse
a los miembros de una copia específica.
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 Múltiple en JAVA
„
„
Java no permite herencia múltiple (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 sólo puede
tener definidos métodos abstractos y constantes (static/final).
„
„
„
„
Ni atributos ni implementaciones de métodos.
Se crea igual que las clases, pero utilizando interface en lugar
de class:
public interface Comparable { // interfaz estándar
public int compareTo(Object obj); // sin abstract
}
Esta interfaz define un único método, 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 raíz de la jerarquía.
4
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
5
Interfaces:Ejemplo(2)
Mainclase.java
¿Para qué sirve una interfaz?
„
„
Una interfaz impone un protocolo de métodos a implementar
Una interfaz introduce un nuevo tipo
„
„
Las interfaces posibilitan la herencia múltiple en cuanto a
jerarquía de tipos:
„
„
Las clases que implementan la interfaz son compatibles con este
tipo
Una interfaz define un tipo Æ una clase puede tener múltiples
supertipos
Sin embargo una interfaz no tiene contenido que heredar:
„
„
„
los métodos no tienen código
las variables se heredan pero son inamovibles (son estáticas y
constantes)
Una interfaz no proporciona funcionalidad a un objeto, sino la
posibilidad de ser objeto de la funcionalidad de otros objetos
6
La interfaz vs Clase Abstracta
„
Si Ordenable es una
clase abstracta:
„
„
„
Obliga a derivar desde la
cima de la jerarquía
Obliga a definir el
método 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
¿Cuándo es posible?
¿Por qué es mejor?
Detalles de las Interfaces
„
„
„
„
„
„
Una interfaz puede derivar de varias otras interfaces con
extends
Las interfaces también pertenecen a un package
Las interfaces pueden ser public o del package
Los métodos 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 métodos que coincidan
con métodos definidos en sus
superclases
Hacer un cast de un objeto a
Directivo
cualquier interfaz es siempre
sintácticamente legal (aunque
Se pierde la
puede haber error en ejecución)
definición de f()
dada en Persona
7
Consulta
„
Estudiar las siguientes interfaces
predefinidas y su aplicación en casos
específicos:
„
„
„
„
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 programación
Paginas 371 a la 396.
8