Está en la página 1de 9

PATRÓN DE DISEÑO INTERPRETER

INTRODUCCION
El patrón de diseño interpreter es utilizado para evaluar un lenguaje
definido como Expresiones, este patrón nos permite interpretar un
lenguaje como Java, C#, SQL o incluso un lenguaje inventado por
nosotros el cual tiene un significado; y darnos una respuesta tras
evaluar dicho lenguaje.
Interpreter es uno de los patrones de diseño más complejos debido
a que para su funcionalidad debe combinar técnicas de programación
orientada a objetos avanzada y su interpretación puede ser algo
confusa, las principales cosas con las que nos enfrentaremos son la
Herencia, Polimorfismo y la Recursividad.

Motivación

A veces es conveniente representar un problema como palabras de


algún lenguaje sencillo, como por ejemplo, evaluar expresiones
booleanas. El patrón interpreter describe como definir una
gramática, representar palabras del lenguaje y cómo interpretarlas,
se utiliza una clase para representar cada regla de la gramática.
DIAGRAMA DE CLASES

Los componentes del patrón Interpreter se explican a continuación:

 Client:Actor que dispara la ejecución del interpreter.


 Context:Objeto con información global que será utilizada
por el intérprete para leer y almacenar información global
entre todas las clases que conforman el patrón, este es
enviado al interpreter el cual lo replica por toda la
estructura.
 AbstractExpression:Interface que define la estructura
mínima de una expresión.
 TerminalExpression:Se refiere a expresiones que no
tienen más continuidad y al ser evaluadas o interpretadas
terminan la ejecución de esa rama. Estas expresiones
marcan el final de la ejecución de un sub-árbol de la
expresión.
 NonTerminalExpression:Son expresiones compuestas y
dentro de ellas existen más expresiones que deben ser
evaluadas. Estas estructuras son interpretadas utilizando
recursividad hasta llegar a una expresión Terminal.
1. El cliente crea el contexto para la ejecución del interpreter.
2. El cliente crea u obtiene la expresión a evaluar.
3. El cliente solicita la interpretación de la expresión
al interpreter y le envía el contexto.
4. La Expresión manda llamar a las Expresiones No
Terminales que contiene.
5. La Expresión No Terminal manda llamar a todas
las Expresiones Terminales.
6. La Expresión Raíz solicita la interpretación de una Expresión
Terminal.
7. La expresión se evalúa por completo y se tiene un resultado
de la interpretación de todas las expresiones terminales y no
terminales.
Ventajas y desventajas del interpreter
Ventajas:

 Fácil modificación y ampliación de los elementos gramaticales


(al ser representados mediante una jerarquía de clases).
 Su implementación es sencilla (en comparación con otros
métodos para implementar esta funcionalidad).
 La implementación de los métodos para cada elemento del
lenguaje es dinámica (puede cambiarse en tiempo de
ejecución).

Desventajas:

 No es muy eficiente.
 No cubre gramáticas complejas.
PATRÓN ESTRUCTURAL PROXY

Este es un patrón de diseño que centra su atención en la mediación


entre un objeto y otro. Se dice mediación porque este patrón nos
permite realizar ciertas acciones antes y después de realizar la
acción deseada por el usuario. El Proxy se caracteriza por que el
cliente ignora totalmente que una mediación se está llevando acabo
debido a que el cliente recibe un objeto idéntico en estructura al
esperado, y no es consciente de la implementación tras la interface
ejecutada, de esta manera el cliente interactúa con el Proxy sin
saberlo.

Estructura del patrón Proxy.

Los componentes que conforman el patrón son los siguientes:

 IObject: Representa la interface común entre el Objet y el


Proxy.
 Object: Representa el objeto al que el cliente quiere ejecutar.
 Proxy: Clase que implementa IObject y delega la
responsabilidad al Object, sin embargo, puede realizar una
acción antes y después de llamar al Object.
Diagrama de secuencia del patrón Proxy.

1. El cliente solicita al Factory un Objeto.


2. El Factory crea un Proxy que encapsule al Object.
3. El cliente ejecuta el Proxy creado por el Factory.
4. El Proxy realiza una o varias acciones previas a la ejecución
del Object.
5. El Proxy delega la ejecución al Object.
6. El Proxy realiza una o varias acciones después de la
ejecución del Object.
7. El Proxy regresa un resultado.
Tipos de proxy

Dependiendo de las responsabilidades y del comportamiento del


proxy, tendremos varios tipos que realizarán unos tipos de tarea u
otras. Los proxies más comunes son los siguientes:

 Proxy remoto: un proxy remoto se comporta como un


representante local de un objeto remoto. Se encarga
principalmente de abstraer la comunicación entre nuestro
cliente y el objeto remoto. Es el embajador de los proxies.
 Proxy virtual: se encarga de instanciar objetos cuyo coste
computacional es elevado. Es capaz de sustituir al objeto real
durante el tiempo que el verdadero objeto está siendo
construido y proporcionar funcionalidades como el lazy
loading (realizar operaciones computacionalmente costosas
únicamente cuando el acceso a el elemento es requerido).
 Proxy de protección: establece controles de acceso a un
objeto dependiendo de permisos o reglas de autorización.

CARACTERISTICAS

 Proporciona soluciones concretas en la creación de objetos


pesados.

 Proporciona soluciones técnicas para la utilización de las


cargas de objetos de gran tamaño.

 Se utilizan en situaciones frecuentes.

 Favorece la reutilización de código.


Ventajas y desventajas del proxy

Ventajas:

 Mantiene una referencia que permite al proxy acceder al


objeto real.

 Proporciona una interfaz igual que la del sujeto real.

 Controla el acceso al sujeto real, y puede ser responsable


de crearlo y borrarlo.

 El sujeto mantiene una cuenta de referencias, solo cuando


se hace objeto.

Desventajas:

 Introduce un nivel de induración adicional, que tiene muchos


posibles usos.

 Un proxy remoto puede ocultar el hecho de que un objeto

reside en otro espacio de direcciones.

 Un proxy virtual puede optimizarsarse, como crear objetos


de bajo demanda.

También podría gustarte