Sei sulla pagina 1di 55

Concepto de Patrones

Patrones en otras reas


diseo de ropa en la arquitectura en la escritura de documentos: desde

documentos cortos (cartas) hasta novelas

Patrones
Un patrn es una solucin a un problema en un determinado contexto Christopher Alexander
Alexander hablaba de problemas y soluciones

relacionados con la construccin de casas y ciudades Mismo concepto puede ser aplicado al diseo OO
Objetivo reutilizar la experiencia de quienes ya

se han encontrado con problemas similares y han encontrado una buena solucin

Ejercicio 1 - Filesystem
Disear un sistema que simula un filesystem de un SO Se pueden tener archivos y carpetas En las carpetas se pueden tener archivos u otras carpetas Se quieren tener operaciones como:

Tamao

En un archivo es el tamao del mismo En una carpeta es el tamao de los archivos que contiene

Cmo se disea?

Ejercicio 1 - Filesystem

Ejercicio 2 - Editor Grfico


Modelar un editor grfico. En particular el manejo de figuras
Posibles figuras:

Lneas Crculos Texto - Dibujo

Un dibujo contiene uno o varios de estos objetos


Un dibujo se dibuja dibujando las partes

componentes Cmo se disea?

Ejercicio 2 Editor Grfico

Conclusin
Puntos en comn del problema/solucin de los ejercicios? Recurrencia Una vez diseado el primer ejercicio, cost trabajo hacer el segundo? Qu se reutiliz?

Objetos? El esquema de la solucin?

Principio de Patrones de Diseo

Conclusin

Composite
Permite construir objetos de complejidad mayor mediante otros ms sencillos de forma recursiva. Para el cliente es transparente

Composite
Participantes: Cliente: manipula los objetos indistintamente Leaf: define comportamiento de los objetos primitivos Composite: define el comportamiento de objetos compuestos Component: define el protocolo

Composite
Permite a los clientes manejar estructuras

complejas y simples de manera uniforme.

El cliente no debe preocuparse por saber con

que tipo de objetos est tratando

Patrones de Diseo
Describe un problema que ocurre frecuentemente

en un contexto y muestra el ncleo de la solucin a ese problema, tal que pueda ser utilizada infinitas veces.

Muchos patrones pueden ser extrapolados a otros

contextos sin perder validez.

Los Patrones. Evolucin

Se utiliza inicialmente en el campo de la Arquitectura. Christopher Alexander. Mitad de los 70. 1977. A pattern language: Towns/Builder/Construction 1979, The Timeless Way of Building La idea se extrapola al terreno de la informtica 1989, Cunningham y Beck => Smalltalk (Interfaces grficas) 1991, Coplien => Idioms (Patrones en C++) 1994, Gang of Four (GoF) => Design patterns 1997, Brad Appleton publica Patterns and Software: Essential Concepts and Terminology 1998/99, Mark Grand Patterns in Java

Caractersticas
Solucionar un problema

Capturan soluciones, no slo principios o estrategias abstractas

Ser un concepto probado Capturan soluciones demostradas, no teoras o especulaciones

La solucin no es obvia Los mejores patrones generan una solucin a un problema de forma indirecta
Describe participantes y relaciones entre ellos Describen mdulos, estructuras del sistema y mecanismos complejos El patrn tiene un componente humano significativo Todo software proporciona a los seres humanos confort y calidad de vida (esttica y utilidad)

Patrones en Software
Patrones de arquitectura

Proporciona un conjunto de subsistemas predefinidos y sus responsabilidades Proporciona esquemas para refinar subsistemas o componentes de un sistema Describen la implementacin de aspectos de componentes

Patrones de diseo

Patrones de programacin

Patrones de anlisis

Prcticas que aseguran la consecucin de un buen modelo de un problema y su solucin

Partes esenciales de un Patrn


Nombre: Comunica el objetivo del patrn en una o dos palabras.
Problema: Describe el problema que el patrn soluciona y su contexto. Solucin: Indica cmo resolver el problema en trminos de elementos, relaciones, responsabilidades y colaboraciones

Consecuencias: Indica los efectos de aplicar la solucin.

Ejercicio: Empresa
En una empresa existen dos tipos de empleados Los empleados de planta permanente, que cobran

la cantidad de horas trabajadas por $30, un bono por antigedad y un monto fijo por salario familiar. Asimismo tienen un descuento por la obra social. Los empleados de planta temporaria, que cobran la cantidad de horas trabajadas por $20, salario familiar (no cobran antigedad ni pagan obra social).

Solucion

Template Method Lo que aplicamos fue el patrn Template Method


Define el esqueleto del algoritmo de una operacin o comportamiento comn. Deja a las subclases redefinir los pasos particulares del algoritmo. (Diferencias)

Patrn Template Method


Problema:

En el caso que sea necesario definir el invariante de un algoritmo y permitir que las subclases modifiquen sus partes variables. En el caso que se encuentre comportamiento comn en un conjunto de subclases que pueda ser refactorizado en la superclase. Para brindar puntos de extensin a la clase en forma controlada (hooks).

Patrn Template Method


Solucin:

Definir una clase abstracta que implemente la estructura del algoritmo haciendo llamados a otros mensajes (template method). Las subclases concretas deben definir los mtodos de los pasos del algoritmo. De esta forma el orden de los pasos queda fijo, pero cada clase puede realizar las variaciones de comportamiento necesarias en cada paso.

Template Method Continuacin


Participantes: AbstractClass: define de forma abstracta las operaciones primitivas e implementa un template method con el esqueleto de una operacin. ConcreteClass: implementa las operaciones primitivas.

Patrn Template Method


Consecuencias:
Inversin de control.
Permite factorizar comportamiento comn. Permite reutilizar dicho comportamiento.

Cambios en ese comportamiento se aplican

automticamente a todas las subclases.

Patrn Template Method


Existen varios tipos de mensajes a los que puede

invocar un template method:


Mensajes concretos (en la clase abstracta o subclase). Mensajes abstractos que deben ser redefinidos por las subclases. Mtodos hook, con implementaciones generalmente vacas o nulas en su contexto.

Ejercicio: Medicina Prepaga


Sea una empresa de medicina prepaga que

brinda diferentes servicios. Consideramos solamente las prestaciones de internacin y consulta mdica.

Una internacin comprende un monto de dinero en concepto de gastos de internacin y un monto de dinero en concepto de materiales utilizados. Una consulta tiene un monto de dinero en concepto de honorarios del mdico.

Medicina Prepaga
La prepaga trabaja con slo tres tipos de

prestadores: clnicas, hospitales y sanatorios. A fin de mes los prestadores le facturan a la prepaga por los asociados que atendieron segn las prestaciones que se hayan realizado. Por ejemplo, si el asociado Martn Marson se intern en un sanatorio, el sanatorio le factura a la prepaga un monto de dinero por haber atendido a Martn Marson.

Medicina Prepaga
Las prestaciones cuestan diferente segn el tipo

de prestador que las realice. La tabla de precios es la siguiente:


Hospital Clnica Sanatorio Consulta Internacin Costo del material Gratuito $15 + Gastos de $10 internacin $15 + Gastos de $15 + Honorarios internacin + del mdico Costo del material

Patrn Double Dispatch


Objetivo: Seleccionar un comportamiento que

depende de dos clases de objetos. Problema: En algunos casos es necesario escribir cdigo cuyo comportamiento dependa de la clase del parmetro de un mtodo. En la programacin procedural este tipo de problemas se resuelve usando un case. En el paradigma de objetos tenemos la ventaja del polimorfismo.

Patrn Double Dispatch


Solucin:

Escribir un mtodo secundario por cada clase. Su nombre ser similar al principal, con el agregado del nombre de la clase. Al llamarse al mtodo principal, ste delegar en el parmetro llamando al mtodo secundario asociado con su clase. En el caso de ser necesario, se puede pasar al objeto receptor del mensaje primario como parmetro del mensaje secundario.

Patrn Double Dispatch


Consecuencias:

Double Dispatch elimina las sentencias del estilo case basadas en la clase del parmetro. Esto hace que el cdigo escale y pueda ser mantenido en forma relativamente sencilla. Una vez que se conoce el patrn se sabe qu receta seguir.

A pesar de esto no es una panacea; al agregar una nueva clase hay que escribir un mtodo nuevo en todas las clases. De todas maneras, sta ltima desventaja es preferible a la sentencia case.

Sensores
Modelar un sistema en el que tenemos un sensor

y una alarma, y queremos que cuando el sensor detecte una temperatura mayor a 50 grados suene la alarma.

Cmo modificara el sistema si desea agregar ms alarmas? Cmo modificara el sistema si quisiera agregar un rociador de agua o un telfono que avise sobre la emergencia?

Sensores
Podemos aplicar algo similar al adaptador del

enchufe?

Sensores y adaptadores

Patrn Adapter
Objetivo: Convertir la protocolo de una clase en

otra, que es la que el objeto cliente espera. Problema: Muchas veces, clases que fueron pensadas para ser reutilizadas no pueden aprovecharse porque su protocolo no es compatible con el protocolo especfico del dominio de aplicacin con el que se est trabajando.

Deseamos utilizar una clase existente, cuyo protocolo no encaja con la que necesitamos. Deseamos crear una clase que puede llegar a cooperar con otros objetos cuyo protocolo no podemos predecir de antemano.

Patrn Adapter
Solucin: Crear una clase que se encargue de transformar los nombres de los mensajes.
Consecuencias:

Permite el reuso de un componente Cunto trabajo realiza el adaptador? Mayor cantidad de objetos Otro ejemplo de adaptadores: interfaces grficas en VisualWorks Smalltalk.

Ejercicio: Distribuidora de chocolates


Modele el funcionamiento de una distribuidora de

productos dulces. La misma posee tres estados: recepcin de monedas, seleccin del producto y devolucin del cambio en caso de que sea posible. Analice los posibles problemas que se plantean en cada caso.

Patrn State
Objetivo:

Modificar el comportamiento de un objeto cuando su estado interno se modifica. Externamente parecera que la clase del objeto ha cambiado. Muchas veces el comportamiento de un objeto depende del estado en el que se encuentre. En la programacin procedural se suelen utilizar enumerativos y sentencias condicionales. El cdigo no escala. En objetos tenemos delegacin y polimorfismo.

Problema:

Patrn State
Solucin: Desacoplar el estado interno del objeto en una jerarqua de clases. Cada clase de la jerarqua representa un estado concreto en el que puede estar el objeto. Todos los mensajes del objeto que dependan de su estado interno son delegados a las clases concretas de la jerarqua (polimorfismo).

Patrn State
Consecuencias:

Localiza el comportamiento relacionado con cada estado. Las transiciones entre estados son explcitas. En el caso que los estados no tengan variables de instancia pueden ser compartidos. Quin define las transiciones? Relacin entre el estado y su contexto. Tabla de transicin de estados

Implementacin:

Validacin de Strings
Supongamos que estamos diseando un

formulario para ingresar datos. Los input fields deben ser validados, pero la validacin depende del dominio del texto ingresado

Telfono. Nmero entero. E-mail. Direccin. ...

No podemos preveer de antemano todas las

posibles formas de validacin.

Validacin de Strings
Solucin: Encapsular el algoritmo de validacin en un objeto.

Patrn Strategy
Objetivo: Desacoplar un algoritmo del objeto que lo necesita. Permitir cambiar el algoritmo que un objeto utiliza en forma dinmica. Brindar flexibilidad para agregar nuevos algoritmos que lleven a cabo una funcin determinada.

Patrn Strategy
Contexto: Existen muchos algoritmos para llevar a cabo una tarea. No es deseable codificarlos todos en una clase y seleccionar cual utilizar por medio de sentencias condicionales. Cada algoritmo utiliza informacin propia. Colocar esto en los clientes lleva a tener clases complejas y difciles de mantener. Es necesario cambiar el algoritmo en forma dinmica.

Patrn Strategy
Solucin: Definir una familia de algoritmos, encapsulando a cada uno en un objeto. Consecuencias: Las implementaciones concretas se pueden cambiar en forma dinmica. Son independientes de los clientes que los usan. Los clientes no conocen los detalles de implementacin. Se eliminan los condicionales.

Spooler
Se debe modelar un spooler de impresin que

coordina un conjunto de impresoras. El spooler recibe peticiones para imprimir documentos, los cuales debe encolar (estructura FIFO) en el caso que todas las impresoras estn ocupadas. Sabemos que existe una clase Impresora que responde al mensaje bool : libre(). Cuando la impresora se libera el spooler recibe el mensaje impresoraLibre(i : Impresora)
Cmo impedimos que se creen varios spoolers?

Patrn Singleton
Objetivo: Controlar la creacin de instancias de una clase.
Contexto: En algunos sistemas es crtico que no se cree ms de una instacia de una clase. Asimismo la forma de acceder a esa nica instancia debe ser bien conocida. Ejemplos de esto pueden ser spoolers, filesystems, manejadores de ventanas, etc.

Patrn Singleton
Solucin: Delegar la responsabilidad de mantener una nica instancia y de definir el protocolo de acceso a dicha instancia a la clase.
Consecuencias: Hay un acceso controlado (por parte de la clase) a su nica instancia. Se eliminan variables globales. Se adapta bien al refinamiento por subclasificacin.

Composite
Permite

Composite
Permite

Composite
Permite

Composite
Permite

Composite
Permite

Composite
Permite

Composite
Permite

Composite
Permite

Composite
Permite

Potrebbero piacerti anche