160 likes | 298 Views
PATRONES DE INDIRECCION Y VARIANTES PROTEGIDAS. HERNÁN HIDELBERG GÓMEZ CÓDIGO 0410287 UNIVERSIDAD DEL VALLE DEPTO DE SISTEMAS. INTRODUCCIÓN.
E N D
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.
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);