Está en la página 1de 7

VARIACIONES RESTRINGIDAS

Principio fundamental que motiva la mayora de los mecanismos y patrones en la programacin y el


diseo, destinados a proporcionar flexibilidad y proteccin frente a las variaciones.
Este patrn para sistemas orientados a objetos es tambin conocido como la Ley de emeter, donde
solamente se permite !la c"arla con los amigos# Esta regla fue propuesta por la $niversidad del noreste
de %oston en &'() por *an +olanda. Este proyecto fue nombrado en el "onor de emeter, diosa de la
agricultura.
Esta ley es un caso especfico del principio del bajo acoplamiento, slo que se intenta mirar de una
manera m,s especifica. La motivacin que se tuvo para para la creacin de la ley de emeter es el
control de la sobrecarga en la informacin- podemos mantener solamente un sistema limitado de
artculos en la memoria a corto pla.o y es m,s f,cil mantenerlos en memoria si se relacionan de cerca.
Problema
/adica en 01mo disear sistemas de manera que las variaciones en estos elementos no tenga impacto
no deseable en los otros elementos2, es decir, a quin se le debe asignar la responsabilidad para evitar el
conocimiento sobre la estructura de objetos indirectos2
3i un objeto tiene conocimiento de las conecciones internas y la estructura de otros objetos, entonces
est, presentando alto acoplamiento. 3i un objeto cliente tiene que usar un servicio, o se tiene que
obtener informacin de un objeto indirecto, cmo se debe "acer esto sin presentar acoplamiento para
conocer la estructura interna de su servidor directo u objetos indirectos2
Solucin
3e deben identificar los puntos de variacin prevista y crear interfaces estables alrededor de ellos.
4signando la responsabilidad a un objeto directo del cliente para que colabore con el objeto indirecto,
el cliente no necesita conocer nada acerca del objeto indirecto.
Este patrn implica que los objetos directos pueden requerir nuevas operaciones que act5en como
operaciones intermediarias, de esta manera el cliente va a evitar !"ablar con extraos#.
Ejemplo
En una aplicacin de un punto de venta, se asume que la instancia POST tiene un atributo referenciando
a Sale, el cual a su ve. tiene un atributo referenciando a Payment.
Diseo parcial del diagrama de clases
3e asume que6
La instancia POST soporta la operacin paymentAmount, el cual retorna la actual cantidad ofrecida
para el pago.
La instancia Sale soporta la operacin payment, el cual retorna la instancia 7ayment asociada a Sale.
$na forma de retornar la cantidad pagada es6
Viola el principio de no hablar con extraos
La anterior muestra una violacin al principio !no "able con extraos#, debido aque la instancia POST
esta enviando un mensaje a un objeto indirecto 87ayment no es uno de los cinco candidatos familiares#8
La solucin, como el patrn lo sugiere, es dar la responsabilidad a un objeto directo 8en este caso 3ale8
para retornar la cantidad pagada a POST. Esta es una solucin general para soportar este principio.
4dem,s, una operacin paymentAmount fue adicionada a Sale para que POST no tuviera que !"ablar a
un extrao#. Esto se muestra en la siguiente figura6
Soporta el principio no hablar con extraos
ecani!mo! "#!ico!$
Diseo dirigido por los datos: 3e protege al sistema del impacto de las variaciones de los datos
registrando exactamente la variante.
Bsqueda de servicios: 3e protegen los clientes de las variaciones en la ubicacin de los servicios,
utili.ando una interfa. estable de la b5squeda del servicio.
Diseo dirigido por un intrprete: 3e protege al sistema del impacto de las variaciones lgicas
registrando externamente la lgica, leyndola, y utili.ando un intrprete.
Diseo relexivo o de meta!nivel: 3e protege al sistema del impacto de la lgica o variaciones del
cdigo mediante algoritmos reflexivos que utili.an introspeccin y servicios de metalenguaje 9Ej6
:et"od.invo;e<.
"rincipio de sustituci#n de $is%ov &"S$': El soft=are 9mtodos, clases, ...< que "ace referencia a un
tipo > 9alguna interfa. o superclase abstracta< deber, trabajar correctamente o como se espera con
cualquier implementacin o subclase de > .
Diseo de ocultaci#n de la estructura &no hable con extraos ': $n mtodo solo deber, enviar
mensajes a los siguientes objetos6
El objeto t"is o self-
$n par,metro del mtodo-
$n atributo de t"is-
$n elemento de una coleccin que es un atributo de t"is-
$n objeto creado en el mtodo.
Los objetos directos son !conocidos# del cliente, los objetos indirectos son !extraos#. $n cliente
deber, "ablar solo con conocidos y !evitar "ablar con extraos#.
En una manera m,s general se tiene que !1ada unidad debe "aber limitado solamente conocimiento
sobre otras unidades6 solamente unidades relacionadas ?de cerca? pueden comunicarse con la
unidad actual#.
Ventaja! de Variacione! Prote%ida!$
3e aaden f,cilmente las extensiones que se necesitan para nuevas variaciones-
3e pueden introducir nuevas implementaciones sin afectar a los clientes-
3e reduce el acoplamiento-
7uede disminuirse el impacto o coste de los cambios.
Indireccin$
La indireccin es un patrn grasp que se utili.a cuando se tienen diferentes mdulos independientes
entre si, para los cuales se quiere lograr un menor acoplamiento "aciendo que ellos no tengan el menor
conocimiento de la existencia del otro facilitando la reutili.acin de cdigo 9gracias a la independencia
intermodular< y aumentando la facilidad de ampliar la aplicacin.
La solucin consiste en crear otro modulo que se encargue de crear la comunicacin entre estos los
mdulos mencionados anteriormente, este deber, conocer las funcionalidades que cada modulo desea
comunicar al otro.
Ejemplo$
En una aplicacin se tienen dos mdulos, uno se encarga de calcular cuanto se debe pagar por un
servicio incluyendo el impuesto actual y el otro es quien ingresa la informacin en una base de datos.
7ara solucionar este problema es necesario crear una clase llamada en este caso 1omunicador que
cono.ca los otros mdulos y que integre los mtodos encargados de calcular el pago e ingresar la
informacin en una base de datos de las clases 1alculo y @ac"ada% respectivamente.
1on esto ganamos la posibilidad de reutili.acin del cdigo de las clases 1alculo y @ac"ada% adem,s
de disminuir el acoplamiento entre estas dos clases.
Ejemplo
public cla!! CalcularPa%o
&
double impue!to'
CalcularPa%o(double impue!to)
&
t*i!+impue!to , impue!to'
-
public double calcular(int precio)
&
double . , (double)precio'
return ./(. 0 impue!to)'
-
-
import ja1a.+!2in%+0'
public cla!! Imprimir
&
Strin% !tr'
public Imprimir(Strin% !tr)
&
t*i!+!tr , !tr'
-
public 1oid mo!trar()
&
3OptionPane+!*o2e!!a%eDialo%(null4 !tr)'
-
-
public cla!! Indireccion
&
CalcularPa%o calc'
Imprimir imp'
int totalPa%o'
Indireccion()
&
double impue!to , 5+67'
int precioini , 85555'
CalcularPa%o p , ne2 CalcularPa%o(impue!to)'
double preciofin , p+calcular(precioini)'
Imprimir imp , ne2 Imprimir
(9:n articulo con un precio$ 9/precioini/9 con impue!to de 9/impue!to/9
finalmente cue!ta$ 9/preciofin)'
imp+mo!trar()'
-
public !tatic 1oid main(Strin% a;<)
&
Indireccion ind , ne2 Indireccion()'
-
-
"iblio%rafia
"ttp6AAtranslate.google.comAtranslate2
"lBesCslBenCuB"ttp6AA===.ccs.neu.eduA"omeAlieberALo."tmlCprevBAsearc"DE@qDEDFGFFLa=
DF%ofDF%emeterDFGFFDFH"lDEesDFHlrDEDFHsaDEI
"ttp6AAlsi.ugr.esAJig&AisooAldemt."tml

También podría gustarte