Grupo6

Anuncio
Bridge, Builder &
Interpreter
Herrera, Mauricio
Navia, Andrés
Villalba, Yenny
Patron Bridge
Madre de los Patrones de Diseño
Patron Bridge
> Sinopsis
•
Desacoplar
una
abstracción
de
su
implementación para que ambas puedan
cambiar independientemente.
> Contexto
Cuando una abstracción puede tener varias
posibles representaciones, una forma de
conseguirlo es a través de la herencia. Una
clase abstracta define la interface de la
abstracción y las subclases concretas.
3
Fuerzas
> Se quiere evitar un enlace permanente entre
una abstracción y su implementación.
> Tanto la abstracción como la implementación
deban ser extensibles mediante derivación
independientemente.
> Se quiere aislar a los clientes de cambios en
la implementación evitando recompilaciones
de código.
> Se quiera compartir una misma
implementación entre múltiples objetos.
4
Solucion (estructura)
5
Solucion (participantes)
> Abstracción: define la interfaz de la
abstracción y mantiene una referencia a un
objeto de tipo Implementador.
> AbstracciónRefinada: amplía la interfaz
definida por Abstracción.
> Implementador: define la interfaz para las
clases de implementación, que no tiene
porqué corresponderse exactamente con la
de Abstracción, suele ser de más bajo nivel.
> ImplementadorConcreto: implementa de
una forma concreta la interfaz de
Implementador.
6
Consecuencias
> Favorece la división en niveles de un
sistema. Los niveles superiores de un
sistema solo tienen que conocer la
abstracción y el implementador no el
implementador concreto.
> Ambas jerarquías pueden ampliarse
independientemente mediante herencia.
> Oculta a los clientes los detalles de las
implementaciones concretas.
7
Builder
Patrón de Diseño
Generalidades
> Clasificación
ƒ
Creacional.
> Intención
Separar la construcción de un objeto complejo de su
representación de modo que en el mismo proceso de
construcción se pueda crear diferentes
representaciones.
> Aplicabilidad
• El Algoritmo para la creación de un objeto complejo debe
•
9
ser independiente de las partes que conforman el objeto y
de como estas están ensambladas.
El proceso de construcción debe permitir diferentes
representaciones de los objetos que se construye.
Estructura
10
Colaboraciones
• El Cliente crea el objeto Director y lo configura con el
objeto constructor deseado.
• El Director notifica al constructor cuando parte del
producto se debe construir.
• El constructor maneja los requerimientos del director y
agrega partes al producto.
• El Cliente recupera el producto desde el constructor.
11
11
Consecuencias
• Permite variar las representaciones
internas de un producto.
• Aislamiento del código para
construcción y representación.
• Da mejor control sobre los procesos
de construcción.
12
Implementación
• Típicamente se debe crear una clase
Concrete Builder que defina
operaciones.
• Interfaces de Ensamblaje y
Construcción de Productos.
• No se recomienda tener una clase
abstracta del Producto.
• Recomienda dejar algunos métodos
vacios en la clase Abstract Builder.
13
Usos Conocidos
> Usos Conocidos:
•
•
•
Fue un patrón común para el lenguaje SmallTalk.
Aplicaciones de procesamiento de texto RTF
The Service Configurator Framework de la ACE
usa un constructor para construir componentes de
servicios de redes que son enlazados dentro de un
servidor en tiempo de corrida (run-time).
> Patrones Relacionados:
•
14
Abstract Factory (87)
Ejemplo
15
Ejemplo
16
Ejemplo
17
Interpreter
Patrón de Diseño
Introducción
> Propósito
Dado un Lenguaje, definir la representación de
una gramática y un interpretador, que pueda
computar entradas de ese Lenguaje.
> Motivación
Existen problemas particulares que pueden
expresarse en función de algún Lenguaje.
> Primer Ejemplo: Expresiones Regulares
19
Descripción (1)
Este patrón utiliza una Clase para representar
cada Regla de la Gramática, siendo los
símbolos del lado izquierdo de cada regla una
Instancia de la Clase.
20
20
Descripción (2)
Cada Expresión Regular definida por esta
gramática puede ser representada mediante un
Árbol Abstracto de Sintaxis que se elabora a
partir de cada Instancia de la Clase.
raining & (dogs | cats) *
21
21
Aplicabilidad
™ La Gramática es Simple. En caso contrario,
una mejor alternativa son los Parsers.
™ La Eficiencia no es uno de los aspectos
más importantes. En este caso hay que
traducir el input a una forma intermedia.
22
22
Estructura y Participantes
23
> El Cliente construye el Árbol Sintáctico Abstracto de
Expresiones No Terminales, e instancias de la Clase
Expresion Terminal. Luego inicializa el contexto e invoca al
Interpretador.
> Cada nodo correspondiente a Expresiones No Terminales
define al interpretador en función de subexpresiones.
> Las Operaciones en cada nodo utilizan el Contexto para
almacenar y acceder al Estado del interpretador.
23
Consecuencias
™ Gramáticas Fáciles de cambiar y extender.
Herencia.
™ Fácil Implementación.
Similitud.
™ Gramáticas Complejas son dificiles de Mantener.
Multi-Clases.
™ Agregar nuevas formas de interpretar las cosas es
Sencillo.
24
24
Implementación
™ Creación del Árbol Sintactico Abstracto: no se
especifica como crear el arbol.
Parser o Cliente
™ Definición de la operación del intérprete: no hay
que definirla en cada Clase.
Visitor
™ Compartimiento de símbolos Terminales.
Flyweight
25
25
Patrones Relacionados
> El Árbol Sintáctico Abstracto
Instancia de Composite.
es
una
> Flyweight permite compartir símbolos
terminales del Árbol Sintáctico Abstracto .
> Se puede utilizar un Iterator para recorrer
la estructura.
> Visitor puede usarse para mantener el
comportamiento en cada nodo del Árbol
Sintáctico Abstracto en una Clase.
26
Ejemplos “Teóricos”
™ Gramáticas para computar las palabras de un
Lenguaje.
™ Evaluador de expresiones booleanas.
™ Búsquedas y comparaciones de cadenas.
27
27
Un Ejemplo más “Concreto”
™ Notas Musicales:
Un sonido y su duración puede ser representado
en notación musical en un pentagrama.
Esta notación provee el Lenguaje de la Música.
Los músicos que reproducen los sonidos de la
partitura pueden imitar la nota y la duración
original de cada uno de ellos representado.
.
28
28
Descargar