0% encontró este documento útil (0 votos)
170 vistas26 páginas

Diseno Patrones

Cargado por

Juan Banegas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
170 vistas26 páginas

Diseno Patrones

Cargado por

Juan Banegas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 26

Ingeniería de

Software II

Ingeniería de Software.
Un Enfoque Práctico
Septima edicion

Roger S. Pressman
El Diseño basado en Patrones

Roger S. Pressman

Copyright © 2011 Pearson Education, Inc.


Objetivos
A través de este capítulo el estudiante podrá:

 Diseñar la interfaz de un sistema siguiendo las etapas de


análisis y diseño de la interfaz, aplicando las reglas doradas de
la interfaz.
 Realizar la evaluación del diseño de la interfaz diseñada.
Patrones de Diseño
La historia de los patrones de software no comienza con un científico
de la computación, sino con un arquitecto constructor, Christopher
Alexander, quien reconoció que siempre que se diseñaba un edificio
era reconocible un conjunto de problemas recurrentes. Definió éstos y
sus soluciones como patrones, y los describió del modo siguiente:
Cada patrón describe un problema que ocurre una y otra vez
en nuestro ambiente, y luego describe el núcleo de su solución
en forma tal que es posible usarla un millón de veces sin
elaborarla dos veces de la misma forma.
Un patrón de diseño se caracteriza como “una regla de tres partes que
expresa una relación entre cierto contexto, un problema y una
solución”.
Para el diseño de software, el contexto permite al lector entender el
ambiente en el que reside el problema y qué solución sería
apropiada en dicho ambiente
El Diseño basado en Patrones
El Diseño basado en Patrones
Sistema de Fuerzas
Requerimiento Restricciones Limitaciones
s
Interpretación del
problema y
eficacia de la
solución

Problema
Contexto

La mayoría de problemas tienen muchas soluciones, pero sólo es eficaz aquella que
resulta apropiada en el contexto del problema existente. Es el sistema de fuerzas el
que hace que un diseñador elija una solución específica. El objetivo es proporcionar
la que satisfaga mejor al sistema de fuerzas, aun cuando éstas sean contradictorias.
Toda solución tiene consecuencias que afectan otros aspectos del software y que se
vuelven parte del sistema de fuerzas de otros problemas por resolver en el sistema
mayor.
Patrones de Diseño
Coplien caracteriza un patrón de diseño eficaz del modo siguiente:
 Resuelve un problema: los patrones entrañan soluciones, no sólo
principios o estrategias abstractas.
 Es un concepto probado: los patrones incluyen soluciones con un
historial, no teorías o especulaciones.
 La solución no es obvia: muchas técnicas de solución de problemas
(como los paradigmas o métodos de diseño de software) tratan de
obtener soluciones a partir de sus principios originales.
 Los mejores patrones generan indirectamente una solución a un
problema, enfoque necesario para los problemas más difíciles del
diseño.
 Describe una relación: los patrones no sólo describen módulos, sino
estructuras y mecanismos más profundos del sistema.
 El patrón tiene un componente humano significativo (minimiza la
intervención humana). Todo el software sirve para el confort
humano o la calidad de vida; los mejores patrones recurren
explícitamente a la estética y a la utilidad.
Patrones de Diseño Creacionales
 Patrón de fábrica abstracta: centraliza la decisión acerca de
para qué fábrica deben hacerse instancias.
 Patrón de método de fabricación: centraliza la creación de un
objeto de tipo específico para elegir una entre varias
implementaciones.
 Patrón constructor: separa la construcción de un objeto
complejo a partir de su representación, de modo que el
mismo proceso de construcción pueda crear representaciones
distintas.
 Patrón prototipo: se usa cuando el costo inherente que
implica crear un nuevo objeto en la forma estándar (como con
el empleo de una “nueva” clave) es prohibitivo para una
aplicación dada.
 Patrón de instancia única: restringe la formación de instancias
de una clase a un objeto.
Patrones de Diseño Estructurales
 Patrón adaptador: “adapta” una interfaz para una clase en otra que
espera un cliente.
 Patrón agregado: es una versión del patrón compuesto con
métodos para agregar hijos.
 Patrón de puente: desacopla una abstracción de su
implementación, de modo que las dos puedan variar en forma
independiente.
 Patrón compuesto: estructura de árbol de objetos en los que cada
uno tiene la misma interfaz.
 Patrón contenedor: crea objetos con el único propósito de que
sostengan a otros y los administren.
 Patrón de proximidad: clase que funciona como interfaz respecto
de otra cosa.
 Tubos y filtros: cadena de procesos en los que la salida de cada uno
es la entrada del siguiente.
Patrones de Diseño Conductuales
 Cadena de patrones de responsabilidad: objetos de comando que son
manejados o pasados a otros objetos por medio de otros que contienen
procesamiento lógico.
 Patrón de comando: objetos de comando que encierran una acción y sus
parámetros.
 Escucha de eventos: se distribuyen datos a objetos registrados para
recibirlos.
 Patrón intérprete: implementa un lenguaje de computadora especializado
para resolver con rapidez un conjunto específico de problemas.
 Patrón iterador: los iteradores se utilizan para acceder en forma
secuencial a los elementos de un agregado sin exponer su representación
subyacente.
 Patrón mediador: proporciona una interfaz unificada a un conjunto de
interfaces en un subsistema.
 Patrón visitante: forma de separar un algoritmo de un objeto.
 Patrón visitante de un solo servicio: optimiza la implementación de un
visitante que se haya asignado, utilizado sólo una vez y luego eliminado.
 Patrón visitante jerárquico: brinda una forma de visitar cada nodo en una
estructura jerárquica de datos, como un árbol.
Patrones Generativos
 Cuando se toman en cuenta los patrones de diseño de software, se intenta
identificar los patrones generativos. Es decir, se identifica un patrón que
describa un aspecto importante y repetitivo de un sistema, y que provea
una manera de construir dicho aspecto dentro de un sistema de fuerzas
que son únicas en un contexto determinado.
 Idealmente, podría usarse un conjunto de patrones de diseño generativos
para “generar” una aplicación o sistema basado en computadora cuya
arquitectura permita adaptarlo al cambio.
 En ocasiones se llama generatividad a “la aplicación sucesiva de varios
patrones, cada uno de los cuales incluye su propio problema y fuerzas, y
que despliega una solución más grande que emerge indirectamente como
resultado de soluciones más pequeñas”
Otros Patrones
 Los patrones arquitectónicos describen problemas de diseño de base amplia
que se resuelven con el empleo de un enfoque estructural.
 Los patrones de datos describen problemas recurrentes orientados a datos y
las soluciones de modelado de datos que pueden emplearse para resolverlos.
 Los patrones de componentes (también llamados patrones de diseño) se
enfocan a problemas asociados con el desarrollo de subsistemas y
componentes, así como a la manera en la que se comunican entre sí y su
ubicación dentro de una arquitectura mayor.
 Los patrones de diseño de la interfaz describen problemas comunes de
interfaz de usuario y su solución con un sistema de fuerzas que incluye las
características específicas de los usuarios finales.
 Los patrones de webapp enfrentan un conjunto de problemas que surgen
cuando se elaboran webapps y es frecuente que incorporen muchas de las
otras categorías de patrones mencionadas.
 En un nivel de abstracción más bajo, los idiomas describen la forma de
implementar un algoritmo específico o una parte de él, o una estructura de
datos, para un componente de software en el contexto de un lenguaje de
programación específico.
Descripción de Patrones
¿Cómo se encuentran patrones que se ajusten a las necesidades?
 Una respuesta a esta pregunta debe basarse en la comunicación eficaz del
problema al que se dirige el patrón, el contexto en el que reside ése, el
sistema de fuerzas que moldean el contexto y la solución propuesta.
 Para comunicar esta información sin ambigüedades, se requiere un formato o
plantilla estándar del documento. Aunque se han propuesto varios formatos
diferentes de patrones, casi todos contienen un conjunto importante del
contenido sugerido por Gamma et al. En el recuadro se presenta un formato
simplificado de patrón.
Descripción de Patrones. Plantilla
 Nombre del patrón: describe la esencia del patrón con un nombre corto pero
expresivo
 Problema: describe el problema al que se dirige el patrón
 Motivación: proporciona un ejemplo del problema
 Contexto: describe el ambiente en el que reside el problema, incluido el
dominio de aplicación
 Fuerzas: lista el sistema de fuerzas que afectan la manera en la que debe
resolverse el problema; incluye el análisis de las limitaciones y restricciones
que deben ser tomadas en cuenta
 Solución: hace la descripción detallada de la solución propuesta para el
problema
 Objetivo: describe el patrón y lo que hace
 Colaboraciones: describe la manera en la que otros patrones contribuyen a la
solución
Descripción de Patrones. Plantilla
 Consecuencias: describe los intercambios potenciales que deben ser
considerados cuando se implementa el patrón, y las consecuencias de usar
éste
 Implementación: identifica los aspectos especiales que deben considerarse
cuando se implemente el patrón
 Usos conocidos: da ejemplos de usos reales del patrón de diseño en
aplicaciones reales
 Patrones relacionados: menciona referencias de patrones de diseño
relacionados.
Los nombres de los patrones de diseño deben escogerse con cuidado. Uno de los
problemas técnicos clave en el diseño basado en patrones es la incapacidad de
encontrar los ya existentes entre cientos o miles de candidatos. La búsqueda del
patrón “correcto” se simplifica muchísimo con un nombre significativo para el
patrón.
El formato del patrón es un medio estandarizado para describir un patrón de
diseño. Cada una de sus entradas representa características del patrón de diseño
que pueden ser buscadas (en una base de datos, por ejemplo) a fin de encontrar
el que sea apropiado.
Lenguaje de Patrones.
 Un lenguaje de patrones es análogo a un manual de instrucciones de
hipertexto para resolver problemas en un dominio específico de aplicaciones.
 El dominio del problema primero se describe de manera jerárquica,
comenzando con problemas de diseño amplio asociados con el dominio, y
luego se refina cada uno de ellos en niveles de abstracción más bajos.
 En un contexto de software, los problemas de diseño amplio tienden a ser de
naturaleza arquitectónica y se abocan a la estructura general de la aplicación y
a los datos o contenido que le dan servicio.
 Los problemas arquitectónicos se mejoran hacia niveles más bajos de
abstracción, lo que conduce a patrones de diseño que resuelven los
subproblemas y que colaboran entre sí en el nivel de componentes (o clases).
 En vez de que un lenguaje de patrones represente una lista secuencial de
patrones, lo hace con un conjunto interconectado en el que el usuario
comienza con un problema de diseño amplio y “lo presta” a problemas
específicos no descubiertos, así como a sus soluciones.
Lenguaje de Patrones. Nivel de
Abstracción
más alto
Dominio
del Problema Patrones
problema Arquitectónicos

Sub- SP 1 SP 2 SP 3
problemas
Patrones de
Componente
s

SP SP SP SP SP Nivel de
Abstracción
más bajo
P1
Lista Patrones Lista Patrones
1. Patron 1 1. Patron 1 Registro de
2. Patron 2 2. Patron 2 P2 Patrones
3. Patron N 3. Patron n Pn
Diseño basado en Patrones.
Modelo de
Requerimientos
Comienza el Diseño

Considerar Extraer el problema, Considerar


conceptos del Fuerzas del contexto atributos de la
diseño calidad del diseño
Las describe un patrón?

Si No

Comenzar las tareas Aplicar otros métodos


de diseño basado en y notación de diseño
el patrón

Modelo de Diseño
Pensar en Patrones.
Shalloway y Trott [Sha05] sugieren el siguiente enfoque,6 que permite que
un diseñador piense en patrones:
1.Asegurarse de entender el panorama: el contexto en el que se
encuentra el software que se va a elaborar. El modelo de
requerimientos debe transmitir esa comprensión.
2. Estudiar el panorama, identificar los patrones presentes en ese nivel de
abstracción.
3. Comenzar el diseño con patrones del “panorama” que establezcan un
contexto o esqueleto para el trabajo de diseño adicional.
4. “Trabajar dentro del contexto” [Sha05] en busca de patrones en niveles
más bajos de abstracción que contribuyan a la solución del diseño.
5. Repetir los pasos 1 a 4 hasta que el diseño esté completo.
6.Mejorar el diseño, adaptando cada patrón a las especificidades del
software que se trata de elaborar.
Tareas de Diseño.
uShalloway y Trott sugieren el siguiente enfoque,6 que permite que un
diseñador piense en patrones:
1. Examinar el modelo de requerimientos y desarrollar una jerarquía del
problema.
2. Determinar si se ha desarrollado un lenguaje del patrón confiable para
el dominio del problema..
3. A partir de un problema amplio, determinar si para el mismo se
dispone de uno o más patrones arquitectónicos.
4. Con el uso de colaboraciones provistas para el patrón arquitectónico,
deben estudiarse los problemas en el nivel de subsistema o
componente, y buscar los patrones más apropiados para enfrentarlos.
5. Repetir los pasos 2 a 5 hasta que se hayan resuelto todos los
problemas amplios.
Tareas de Diseño.
 uShalloway y Trott sugieren el siguiente enfoque,6 que permite que un
diseñador piense en patrones:
 Si los problemas de diseño de la interfaz de usuario han sido aislados
(éste es el caso casi siempre), buscar los muchos depósitos de patrones
de diseño de la interfaz de usuario para encontrar patrones apropiados
 Sin importar su nivel de abstracción, si resulta promisorio un lenguaje
de patrón o un depósito de patrones o un patrón individual, hay que
comparar el problema por resolver con el patrón o patrones
presentados
 Asegurarse de refinar el diseño a medida que se obtiene de los
patrones, con el empleo de criterios de calidad como guía
Tabla de Organización de Patrones.
Repositorios de Patrones de Diseño.
Pag. 307 del libro. Presman, Revise los links
Patrones de Diseño de Web Apps.
Cuando se consideran los problemas de diseño que deben
resolverse para construir una webapp, es bueno considerar
categorías de patrones en dos dimensiones: centrarse en el diseño
del patrón y en el nivel de granularidad.
Los patrones para el diseño de webapps se desarrollan para
distintos niveles de atención, de modo que se aborden los
problemas (y sus soluciones) únicos que se encuentren en cada
nivel. Los patrones de webapps se clasifican con el empleo de los
siguientes niveles de atención en el diseño.
 Patrones de arquitectura de la información
 Patrones de navegación
 Patrones de interacción
 Patrones de presentación
 Patrones funcionales
Patrones de Diseño de Web Apps.
Granularidad del Diseño.
Cuando un problema involucra aspectos del “panorama”, debe
tratarse de desarrollar soluciones (y los patrones de uso relevantes)
que se centren en éste. A la inversa, cuando la atención es muy
estrecha (como cuando se selecciona únicamente un aspecto de un
conjunto reducido de cinco o menos de ellos), la solución (y el
patrón correspondiente) se busca con más estrechez. En términos
del nivel de granularidad, los patrones se describen en los niveles
siguientes:
 Patrones arquitectónicos
 Patrones de diseño
 Patrones de componentes
Repositorios de Patrones de Diseño para Hipermedios.
Pag. 314 del libro. Presman, Revise los links.

También podría gustarte