Escolar Documentos
Profissional Documentos
Cultura Documentos
Abstraction Implementador
operacion() operationImp()
operationImp() operationImp()
participantes
Abstraction :
• define una interface abstracta. Mantiene una referencia a un objeto de tipo
Implementor.
RefinedAbstraction:
• extiende la interface definida por Abstraction
Implementor :
• define la interface para la implementación de clases. Esta interface no se tiene que
corresponder exactamente con la interface de Abstraction; de hecho, las dos interfaces
pueden ser bastante diferente. Típicamente la interface Implementor provee sólo
operaciones primitivas, y Abstraction define operaciones de alto nivel basadas en estas
primitivas.
ConcreteImplementor :
• implementa la interface de Implementor y define su implementación concreta.
colaboración:
• Abstraction redirige las peticiones de los clientes a su objeto implementor
EJEMPLO: dibujar un rectangulo
classRectangulo
{
publicvoiddibujar()
{
dibujar_linea(x1, y1, x2, y1);
dibujar_linea(x2, y1, x2, y2);
dibujar_linea(x2, y2, x1, y2);
dibujar_linea(x1, y2, x1, y1);
}
Abstractprotected voiddibujar_linea( doublex1, doubley1, doublex2, doubley2);
}
classV1RectanguloextendsRectangulo
{
dibujar_linea( doublex1, doubley1, doublex2, doubley2)
{
PD1.DrawLine( x1, y1, x2, y2);
}
}
classV2RectanguloextendsRectangulo
{
dibujar_linea( doublex1, doubley1, doublex2, doubley2)
{
PD2.DibujarLinea( x1, x2, y1, y2);
}
}
Y si queremos dibujar además un
circulo??
abstractclassForma
{
abstractpublicvoiddibujar();
}
abstractclassRectanguloextendsForma
{
publicvoiddibujar() {... }
abstractprotectedvoiddibujar_linea();
}
classV1RectanguloextendsRectangulo
{
....
}
classV2RectanguloextendsRectangulo
{
....
}
abstractclassCirculo extendsForma
{
publicvoiddibujar() {dibujar_circulo( x,y,r);}
abstractprotectedvoiddibujar_circulo( double x, double y, double r);
}
classV1CirculoextendsCirculo
{
protectedvoiddibujar_circulo() {PD1.DrawCircle(x, y, r);}
}
classV2CirculoextendsCirculo
{
protectedvoiddibujar_circulo() { PD2.DibujarCirculo(x, y, r);}
}
PERO ... TENDRIAMOS UN
PROBLEMA??...