Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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?