PATRONES DE INDIRECCION Y
VARIANTES PROTEGIDAS
HERNÁN HIDELBERG GÓMEZ
CÓDIGO 0410287
UNIVERSIDAD DEL VALLE
DEPTO DE SISTEMAS
INTRODUCCIÓN
son dos de los patrones propuestos por
Larman
que
pertenecen
a los
denominadosGRASP(general responsibility
assignment software pattern).
se trata de pillar, comprender, donde se
establecen estos patrones como base para
diseñar con éxito.
OBJETIVO
Este conjunto de principios o patrones
tienen como objetivo asignar de la mejor
manera las responsabilidades de las
entidades en el DOO.
INDIRECION
* resuelve problemas como:
• ¿donde asignar responsabilidades para
evitar/reducir el acoplamiento directo entre
elementos y mejorar la reutilizacion?.
* solucion asigne la responsabilidad a un objeto
que sirva de interfaz entre otros elementos,
entonces el acoplamiento en indirecto.
EJEMPLO
Explicación
• En el diagrama de secuencia se puede apreciar que llega
un total de venta al objeto ventica que posteriormente,
para calcular el monto real debe efectuarle un impuesto.
• Este
impuesto
será
hecho por
la clase
adaptadormasterDeImpuesto que se comunica con un
subsistema externo por medio de red, que se encargara
de dar el impuesto, luego adaptadormasterDeImpuesto
recibe el impuesto que se va a aplicar y lo pasa a ventica.
• Las conexiones al subsistema no lo hace directamente
ventica sino la clase adaptadormasterDeImpuesto.
VARIACIONES PROTEGIDAS
* Problema que resuelve:
• ¿Como diseñar objetos, subsistemas y
sistemas de manera que las variaciones o
inestabilidades en estos elementos no
tengan un impacto no deseable en otros
elementos ?
* solución: identificar los
puntos de
variaciones previstas o de inestabilidad
asignando responsabilidades para crear
una interfaz estable alrededor de ellos.
Un punto de variación representa a una
variación contemplada en la especificación
de requisitos o documento de entrada del
diseño.
Por ejemplo :
El formato de compresión podrá ser PCX,
GIF, BMP, TIFF y TPEG
Un punto de evolución es un punto de
variación sobre cuya existencia se conjetura
(especula).
Por ejemplo, a partir del requisito anterior, el
diseñador puede especular sobre la
evolución del sistema y tomar la decisión de
protegerse sobre la variación del formato de
compresión para dar cabida en el futuro a
nuevos formatos (p.e a HSI-JPEG).
DISEÑOS DE OCULTACIÓN DE LA
ESTRUCTURA
Según la ley de Demeter evitar crear diseños
que recorren largos caminos de la estructura
de objetos y envían mensajes (o hablan) con
objetos distantes (extraños). Tales diseños
son frágiles con respecto a los cambios en
las estructuras de los objetos, un punto
frecuente de inestabilidad.
No hables con extraños restringe los objetos a
los que se deberían enviar los mensajes dentro
del método. establece que en un método, solo
deberían enviarse mensajes a los siguientes
objetos:
•
•
•
•
•
el objeto this (o self)
un parámetro del método
un atributo de this
un elemento de una colección que es un atributo de this.
un objeto creado en el método
EJEMPLO
Class Registro
{ private Venta venta;
public void metodoAlgoFragil()
{ //venta.getPago () envía un mensaje a un “conocido”
//pero en venta.getPago ().getCantidadEntregada se aplica a un Pago “extraño”
Dinero cantidad = venta.getPago ().getCantidadEntregada();
//…}
//…}
Este código recorre conexiones estructurales a partir de un objeto conocido (la
venta)a un objeto extraño (el pago) y le envía el mensaje. Es ligeramente frágil,
ya que depende del hecho de que los objetos Venta se conecten a los objetos
Pago. En realidad no es probable que esto sea un problema.
public void metodoMasFragil()
{
TitularCuenta titular = venta.getPago ().getCuenta ().getTitularCuenta ();
//…
}
EJEMPLO 2
Formaliza el principio de protección contra
las variaciones en implementaciones
diferentes de una interfaz, o una subclase
que extiende a una superclase.
El fragmento de código que hace referencia a
un tipo T debería trabaja r correctamente con
cualquier implementación o subclase de T
que lo sustituya
public class Rectangle
{
//variables:
protected float height, width;
public void setHeight (float h) {
height= h;
}
public void setWidth (float w){
width= w;
}
public float getHeight(){
return height;
}
public float getWidth(){
return width;
}
}//fin clase
public class Square extends Rectangle
{
public void setHeight (float h)
{
super.setHeight(h);
super.setWidth(h);
}
public void setWidth (float w)
{
super.setHeight(w);
super.setWidth(w);
}
}// fin clase.
public class LiskovTest
{
public void run()
{
Rectangle r= new Rectangle();
test(r);
Square s= new Square();
test(s);
Descargar

PATRONES DE INDIRECCION Y VARIANTES PROTEGIDAS