Está en la página 1de 28

PATRONES DE

COMPORTAMIENTO
INTERPRETER
PATTERN
PROPÓSITO

Dado un lenguaje, define una representación de su gramática junto


con un interprete que usa dicha representación para interpretar
sentencias del lenguaje.
MOTIVACIÓN

 Existen problemas particulares que pueden expresarse en


función de algún lenguaje. Es necesario construir un intérprete
de dicho lenguaje. El patrón define reglas gramaticales del
lenguaje, así como la realización y comprensión de sentencias
del mismo.
APLICABILIDAD

 Cuando tratamos con gramáticas simples, en caso contrario la


mejor opción es utilizar parsers.

 La eficiencia no es uno de los aspectos más importantes. Hay


que traducir el input a una forma inmediata.
ESTRUCTURA
PARTICIPANTES
 AbstractExpression: interfaz o clase abstracta que se encargará de ejecutar
una operación.

 TerminalExpression: define una implementación concreta para un nodo


terminal de la gramática.

 NonterminalExpression: define una implementación concreta para un nodo


no-terminal de la gramática.

 Context: Representa el contexto que envuelve al lenguaje. Puede contener


información específica aplicable a todas las expresiones. Si no hay información
específica, Context es prescindible.

 Client: Se encarga de representar las expresiones del lenguaje objetivo


mediante objetos TerminalExpression y NonterminalExpression, construyendo
el árbol sintáctico de la expresión.
COLABORACIONES

 Cliente construye una sentencia compuesta de ExpresionesTerminales y


ExpresionesNoTerminales. Luego incializa el Contexto e invoca al
interpretador
 Cada nodo correspondiente a ExpresionesNoTerminales define al
interpretador en función de subexpresiones
 Las operaciones en cada nodo utilizan el Contexto para almacenar y
acceder al estado del interpretador
AbstractExpression: Expression
TerminalExpression
NonterminalExpression: OrExpression
NonterminalExpression:
AndExpression
Main()

true
true
false

true
false
CONSECUENCIAS

 Positivas
 Es facil cambiar y extender la gramática.
 Implementar la gramática es sencillo.
 Fácil modificación y ampliación de los elementos gramaticales (al ser
representados mediante una jerarquía de clases).
 Se puede añadir nuevas interpretaciones de los símbolos.

 Negativas
 Las gramáticas complejas son difíciles de mantener.
 No cubre gramáticas complejas.
Patrones Relacionados

• Composite: La forma de las expresiones interpretadas se basa en


Composite usando nodos y hojas, y nodos rama.
•Flyweight: Se puede emplear en algunas de las expresiones, para
disminuir la cantidad de objetos similares.
• Iterator: Se implementa para recorrer el árbol de sintaxis y sus nodos.
• Visitor: Cuando este patrón se implementa Interpreter adquiere
flexibilidad.
ITERATOR
PROPOSITO

 Proporciona un modo de acceder secuencialmente a los elementos de


un objeto agregado sin exponer su representación interna.
APLICABILIDAD

 Acceder al contenido de un objeto agregado sin exponer su


representación interna
 Permitir varios recorridos sobre objetos agregados
 Proporcionar una interfaz uniforme para recorrer diferentes estructuras
agregadas
ESTRUCTURA
PARTICIPANTES

 Iterador
 Define un interfaz para recorrer los elementos y acceder a ellos
 iteradorConcreto
 Implementa la interfaz Iterador
 Mantiene la posición actual en el recorrido del agregado
 Agregado
 Define una interfaz para crear un objeto Iterador
 AgregadoConcreto
 Implementa la interfaz de creación de Iterador para devolver una instacia del
IteradorConcreto apropiado
EJEMPLO

 d
Java.útil.Iterator en Java

 F
CONSECUENCIAS

 Permite variaciones en el recorrido de un agregado

 Los iteradores simplifican la interfaz Agregado

 Se puede hacer mas de un recorrido a la vez sobre un agregado

También podría gustarte