Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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?
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
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.
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
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
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
Define el esqueleto del algoritmo de una operacin o comportamiento comn. Deja a las subclases redefinir los pasos particulares del algoritmo. (Diferencias)
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).
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.
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.
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
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.
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.
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.
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
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