Sei sulla pagina 1di 0

J ava: Clases Abstractas e Interfaces

Franco Guidi Polanco


Escuela de Ingeniera Industrial
Pontificia Universidad Catlica de Valparaso, Chile
fguidi@ucv.cl
Actualizacin: 8 de marzo de 2006
07-03-2007 Franco Guidi Polanco 2
Clases abstractas e interfaces
A nivel conceptual, las clases abstractas e interfaces
permiten definir qu puede hacer un conjunto o familia de
clases relacionadas.
Ejemplo en el contexto de la universidad:
Persona
Administrativo Profesor Alumno
Las personas (esto es,
alumnos, profesores y
administrativos)
conocen y retornan su
RUT, nombre, telfono y
direccin
07-03-2007 Franco Guidi Polanco 3
Clases Abstractas
Una clase es declarada abstracta cuando no
es posible crear instancias de ella.
Una clase debe ser declarada abstracta si
posee al menos un mtodo declarado
abstracto.
Un mtodo abstracto es aqul que no provee
implementacin.
Pablo Picasso, Toro (11)
Una subclase de una clase abstracta
puede ser instanciada (es decir, puede
ser no abstracta) slo si provee
implementacin para todos los
mtodos abstractos de la superclase.
En caso contrario, debe tambin ser
declarada abstracta.
07-03-2007 Franco Guidi Polanco 4
Ejemplo de Clase Abstracta
public abstract class Poligono {
int lados;
public int setLados(int l){
lados =l;
}
public abstract double getArea();
...
}
public class Cuadrado extends Poligono {
int longitud;
public double getArea(){
return longitud*longitud;
}
...
}
Clase abstracta
Clase concreta
que extiende la
clase abstracta.
Polgono
07-03-2007 Franco Guidi Polanco 5
Interfaces
Una interfaz define un tipo de dato.
Contenido de una interfaz:
Nombre y visibilidad
Eventuales otras interfaces
extendidas
Declaraciones de mtodos
Constantes (declaradas como
static final)
Una interfaz no provee:
Variables de instancia o de clase
Implementacin para los mtodos
tiles cuando una clase debe usar objetos de distintas clases, pero que
operan de la misma forma (ej. un temporizador para videograbador,
radio, etc.)
07-03-2007 Franco Guidi Polanco 6
Analoga
Modelos de cabezas
De tornillos
Destornillador
Tornillos
Clase que debe usar ciertos
objetos
Interfaces
Clases que implementan
alguna de las interfaces
07-03-2007 Franco Guidi Polanco 7
Ejemplo de Interfaz
public interface Despertable {
public static final int DORMIDO =1;
public static final int DESPIERTO =2;
public void despierta();
}
La interfaz
Despertable
Una clase que
implementa la
interfaz
Despertable
public class Persona implements Despertable{
int estado =DESPIERTO;
public void dormir() {
estado =Despertable.DORMIDO;
}
public void despierta(){
estado =DESPIERTO;
}
...
}
07-03-2007 Franco Guidi Polanco 8
Ejemplo de Interfaz (cont.)
public class Alarma {
...
public static void despertar(Despertable d);
d.despierta();
}
}
La Alarma es
capaz de despertar
cualquier objeto
que implemente la
interfaz
Despertable.
public class Ejemplo {
public static void main(String[] arg){
Persona p1 =newPersona();
Alarma.despertar(p1);
Despertable p2 =newPersona();
Alarma.despertar(p2);
}
}
07-03-2007 Franco Guidi Polanco 9
Uso de Interfaces
Una clase puede implementar mltiples interfaces:
Una interfaz puede extender otras interfaces.
Algunos enuncian que el uso de interfaces representa una
forma de enfrentar el problema de la herencia mltiple en
J ava.
public class Anfibio implements Terrestre, Acutico {... }
public interface Anfibio extends Terrestre, Acutico {... }
07-03-2007 Franco Guidi Polanco 10
Interfaces y excepciones
Las excepiones declaradas en los mtodos de una
interfaz (clusula throws) tambin deben ser
declaradas en los mtodos de las clases que
implementan la interfaz.
07-03-2007 Franco Guidi Polanco 11
Ejemplo
El Aerosub (Viaje al fondo del mar)
public interface Areo {
public void despegar();
public void acuatizar();
}
public interface Acutico {
public void emerger();
public void sumergirse();
}
public class Aerosub implements Areo, Acutico{
public void despegar(){}
public void acuatizar(){}
public void emerger(){}
public void sumergirse(){}
}
07-03-2007 Franco Guidi Polanco 12
Ejemplo (cont.)
Clase que accede a las funciones del Aerosub:
public class Comandante {
public Aerosub vehculo;
public Comandante(Aerosub v){
vehculo = v;
}
public void comandar(){

vehculo.emerger();

vehculo.despegar();

vehculo.acuatizar();

vehculo.sumergirse();

}
}
07-03-2007 Franco Guidi Polanco 13
Ejemplo (cont.)
Clases que acceden al Aerosub con funcionalidades limitadas:
public class Aviador {
public Areo vehculo;
public Aviador(Areo v){
vehculo = v;
}
public void pilotear(){

vehculo.despegar();

vehculo.acuatizar();

}
}
public class Marino {
public Acutico vehculo;
public Marino(Acutico v){
vehculo = v;
}
public void navegar(){

vehculo.sumergirse();

vehculo.emerger();

}
}
07-03-2007 Franco Guidi Polanco 14
Atencin en el uso de la herencia e implementacin de
Interfaces
Deben considerarse relaciones con valor semntico en el dominio del
problema. Ejemplos como este pueden no tener sentido:
public class ReyDeLaSelva implements Elefante, Pistola
A menos que
07-03-2007 Franco Guidi Polanco 15
Ejercicio 1
Una empresa desarrolladora de software de monitoreo debe crear aplicaciones
capaces de obtener datos desde distintos tipos de sensores (de contaminacin
por partculas, ruido, voltaje, etc.) y mostrar dichos valores por pantalla. Cada
aplicacin se desarrolla para trabajar con un tipo de sensor. Los sensores son
manejados por clases especficas (e.g. TemperatureSensor, DustSensor, etc.) y
proveen tres mtodos: (1) un mtodo para activarlo; (2) un mtodo que
retorna un double correspondiente al valor percibido por el sensor en el
momento; y (3) un mtodo para desactivarlo.
Los siguientes son ejemplos de aplicaciones desarrolladas por esta empresa:
public class Muestra {
public static void main( String[] arg ){
TempSensor t = new TempSensor();
t.activa();
for(int i=0; i<10000; i++ )
System.out.println( t.leeTemp() );
t.desactiva();
}
}
Para manejar un
sensor de
Temperatura
07-03-2007 Franco Guidi Polanco 16
Ejercicio 1 (cont.)
A pesar de lo similar de las aplicaciones, en cada ocasin es necesario reescribir
no slo la clase de sensor que se utilizar, sino tambin las invocaciones
correspondientes a sus mtodos especficos, lo cual hace el desarrollo
ineficiente.
Se pide determinar una arquitectura que permita a la empresa simplificar su
trabajo de desarrollo.
public class Muestra {
public static void main( String[] arg ){
DustSensor t = new DustSensor();
t.on();
for(int i=0; i<10000; i++ )
System.out.println( t.readMeasure() );
t.off();
}
}
Para manejar un
sensor de polvo
ambiental
07-03-2007 Franco Guidi Polanco 17
Ejercicio 2
Disee y programe las clases e interfaces que permiten
resolver el siguiente problema:
Se desea construir una clase que permita mantener una coleccin
de objetos ordenados ascendentemente.
Los objetos a ordenar pueden ser de cualquier clase. Los objetos
debern implementar un mtodo que permita determinar si un
objeto es mayor que otro.
07-03-2007 Franco Guidi Polanco 18
La necesidad de clases abstractas e interfaces
Situacin 1:
Contexto: se est desarrollando una
aplicacin que trabaja con CDs,
DVDs y discos de vinilo.
Problema: se establece que a pesar
de tener sus propios atributos, todos
ellos disponen de cdigo, sello
discogrfico y autor. Se desea evitar
duplicidad de cdigo.
Decisin: se determina la
conveniencia de crear la clase
ProductoMusical, que agrupa las
propiedades comunes de los tres
tipos de productos. La clase
ProductoMusical no es instanciable,
por lo tanto se lo declara abstracto.
ProductoMusical
{abstract}
Vinilo DVD CD
cdigo
sello
autor
La superclase aparece por factorizacin
de propiedades comunes
07-03-2007 Franco Guidi Polanco 19
La necesidad de clases abstractas e interfaces
(cont.)
Situacin 2:
Contexto: se est desarrollando una
clase Timer para programar distintos
objetos temporizables (ej. relojes,
grabadoras, alarmas, etc.)
Problema: Los objetos temporizables
pueden ser distintos, y al momento
de desarrollar el Timer no se sabe
exactamente de qu clase son.
Decisin: se define una interfaz (o
una clase abstracta, si hay cdigo
en comn) que implementarn
todos los objetos temporizables. El
Timer accede a los objetos
temporizables a travs de esta
interfaz.
Temporizable
{abstract}
Grabadora Reloj
Timer
La superclase o interfaz
es impuesta a las subclases.
07-03-2007 Franco Guidi Polanco 20
Discusin
Tanto clases abstractas como
interfaces permiten describir
propiedades comunes de
familias de clases.
Cundo conviene utilizar unas
u otras?

Potrebbero piacerti anche