SlideShare una empresa de Scribd logo
1 de 37
Uso de patrones de 
arquitectura 
Profesor Pedro Veloso Hernández 
Master Ingeniería de Software 
UPM
¿ que es un Patrón de diseño? 
Los patrones de diseño (design patterns) son la base para la 
búsqueda de soluciones a problemas comunes en el desarrollo de 
software y otros ámbitos referentes al diseño de interacción o 
interfaces. 
Un patrón de diseño es una solución a un problema de diseño. 
Para que una solución sea considerada un patrón debe poseer ciertas 
características. Una de ellas es que debe haber comprobado su 
efectividad resolviendo problemas similares en ocasiones anteriores. 
Otra es que debe ser reusable, lo que significa que es aplicable a 
diferentes problemas de diseño en distintas circunstancias. 
Fuente Wikipedia 
"Each pattern describes a problem which occurs over 
and over again in our environment, and then describes the core 
of the solution to that problem, in such a way that you can use this solution 
a million times over, without ever doing it the same way twice" [AIS+77]. 
Desing Patterns, Christopher Alexander 
E-book Version 
Los escaladores usan a menudo patrones de diseño, usado 
Arneses, cuerdas, mosquetones, que usan dadas ciertas 
Condiciones de soporte, forma, y para situaciones que deben 
Resolver como : salvataje, cruzar dos personas en un solo 
Intento, saltarse una gran roca, etc.
¿ que es un patrón UML? 
Los patrones UML son colaboraciones parametrizadas 
, esto es , son un grupo de clases/objetos 
colaborando entre sí que se pueden abstraer de un 
conjunto de escenarios general. 
Los patrones son un medio excelente para lograr 
reutilización y desarrollo robusto. 
A medida que los patrones se descubren en todo 
nuevo proyecto, se puede reutilizar la plantilla básica 
del patrón desde modelos previos con los nombres de 
las variables apropiadas modificados para el proyecto 
en curso. 
"Cada patrón describe un problema que ocurre infinidad de veces en nuestro entorno 
, así como la solución al mismo, de tal modo que podemos utilizar esta solución 
un millón de veces más adelante sin tener que volver a pensarla otra vez."
Condiciones para usar un patrón 
UML 
Los patrones generalmente describen cómo 
resolver un problema abstracto y la tarea 
del usuario del patrón consiste en modificar 
los elementos del patrón para cumplir las 
demandas del compromiso actual. 
Antes de comenzar a usar un patrón 
primero debe ser creado como un diagrama 
estándar de UML o existir como tal en 
algún repositorio
Vamos a un ejemplo 
Este es un ejemplo de patrones de diseño propuesto en GOF “ Abstract Factory” 
patrones descriptos en el libro "Design Patterns - Elements of Reusable Object-Oriented 
Software" de Gamma et al., más conocidos como 'La Banda de los Cuatro', 'Gang of Four‘ 
o GoF en forma abreviada.
Cuando “ no” usar patrones de 
diseño 
Del mismo modo que no es aconsejable optimizar 
prematuramente, no se deben utilizar patrones de 
diseño antes de tiempo. 
Seguramente sea mejor implementar algo primero y 
asegurarse de que funciona, para luego utilizar el 
patrón de diseño para mejorar las flaquezas; esto es 
cierto, sobre todo, cuando aún no ha identificado 
todos los detalles del proyecto ( comprensión del 
dominio del problema) 
Los patrones de diseño pueden incrementar o 
disminuir la capacidad de comprensión de un diseño o 
de una implementación,
¿ que familias de patrones de 
diseño utilizaremos? 
 Para este curso, usaremos dos 
familias de patrones de diseño 
propuestos en la bibliografía 
sugerida. Cabe destacar que existen 
muchas familias de patrones de 
diseño, por lo que nos basaremos en 
los mas usados, en función del 
objetivo que nos hemos planteado en 
este curso. 
 Las familias serán GRASP Y GAO
Descripción de familias de patrones 
GRASP : son patrones generales de 
software para asignación de 
responsabilidades, es el acrónimo de 
"General Responsibility Assignment 
Software Patterns" . 
son una serie de "buenas prácticas" de 
aplicación recomendable en el diseño de 
software. 
Patrones GRASP; Experto , Creador , Bajo 
Acoplamiento ,Alta Cohesión ,Controlador
Descripción de familias de 
patrones 
GOF: Es la abreviación del grupo Gang of 
Four, compuesto por Erich Gamma, Richard 
Helm, Ralph Jhonson y John Vlisides, 
quienes en su publicación “ Design 
Patterns” ( década de los 90s), describen 
23 patrones de diseño comúnmente 
utilizados y de gran aplicabilidad en 
problemas de diseño usando modelamiento 
UML. 
Estos patrones se agrupan en las siguientes 
categorías : Creacionales, estructurales y 
de comportamiento.
Relación de familias de patrones de 
diseño 
PATRONES 
GRASP 
GOF 
Experto 
Creador 
Bajo acoplamiento 
Alta Cohesión 
Controlador 
Creacionales 
Estructurales 
Comportamiento 
Fabrica, constructor, método 
de fabricación, prototipo , 
instancia única 
Adaptador, puente, objeto 
Compuesto, envoltorio, fachada, 
Peso ligero, proxy 
Cadena responsabilidad, orden, 
Intérprete, iterador, mediador, recuerdo, 
Observador, estado, estrategia, 
método plantilla, visitante
Patrones GRASP
Experto 
El GRASP de experto en información es el 
principio básico de asignación de 
responsabilidades en diseño O.O. 
Nos indica que la responsabilidad de la 
creación de un objeto debe recaer sobre la 
clase que conoce toda la información 
necesaria para crearlo. 
Nótese, que el cumplimiento de una 
responsabilidad requiere a menudo 
información distribuida en varias clases de 
objetos.
Ejemplo del patrón experto 
Ejemplo 
En la aplicación del punto de venta, 
alguna clase necesita conocer el 
gran total de la venta. Comience 
asignando las responsabilidades con 
una definición clara de ellas. A partir 
de esta recomendación se plantea la 
pregunta: 
¿Quién es el responsable de conocer el 
gran total de la venta? 
Desde el punto de vista del patrón 
Experto, deberíamos buscar la clase 
De objetos que posee la información 
necesaria para calcular el total. 
En conclusión, para cumplir con la responsabilidad 
de conocer y dar el total de la venta, se asignaron 
tres responsabilidades a las tres clases 
de objeto así: 
Venta ( conoce total de la venta) 
Ventaslineaproductos ( conoce subtotal de la linea de 
productos) 
Especificaciondeproducto (conoce el precio del producto)
Creador 
El patrón creador nos ayuda a identificar quién 
debe ser el responsable de la creación (o 
instanciación) de nuevos objetos o clases. 
El patrón Creador guía la asignación de 
responsabilidades relacionadas con la creación de 
objetos, tarea muy frecuente en los sistemas 
orientados a objetos. 
El propósito fundamental de este patrón es 
encontrar un creador que debemos conectar con el 
objeto producido en cualquier evento. 
Al escogerlo como creador, se da soporte al bajo 
acoplamiento.
Ejemplo patrón creador 
Ejemplo 
En la aplicación del punto de venta, ¿quién 
Debería encargarse de crear una Instancia 
VentasLineadeProducto? 
Desde el punto de vista del patrón Creador, 
deberíamos buscar una clase que agregue, 
contenga y realice otras operaciones sobre este 
tipo de instancias 
Una Venta contiene (en realidad, agrega) 
muchos objetos VentasLineadeProducto; 
por ello, el patrón Creador sugiere que 
Venta es idónea para asumir la 
responsabilidad de crear las instancias 
VentasLineadeProducto. 
Esta asignación de responsabilidades 
requiere definir en Venta un método de 
hacer-LineadeProducto.
Bajo acoplamiento 
Es la idea de tener las clases lo menos ligadas entre 
sí que se pueda. De tal forma que en caso de 
producirse una modificación en alguna de ellas, se 
tenga la mínima repercusión posible en el resto de 
clases, potenciando la reutilización, y disminuyendo 
la dependencia entre las clases 
Los beneficios de este factor es que no se afectan 
por cambios de otros componentes, son fáciles de 
entender por separado y fáciles de reutilizar.
Ejemplo bajo acoplamiento 
Ejemplo: En el caso del punto de 
Ventas se tienen tres clases 
Pago, TPDV y Venta y se quiere 
crear una instancia de Pago y 
asociarla a Venta. 
¿Que clase es la responsable de 
realizarlo? 
Según el patrón de Bajo 
Acoplamiento la relación debería 
ser a través de TPDV. 
Esta última asociación es mejor 
Dado que Venta realiza la 
creación del Pago y no TPDV por 
lo tanto se reduce la dependencia 
de este último con el resto de las clases.
Alta Cohesión 
Nos dice que la información que almacena 
una clase debe de ser coherente y está en 
la mayor medida de lo posible relacionada 
con la clase. 
La cohesión es una medida de cuán 
relacionadas y enfocadas están las 
responsabilidades de una clase. 
Una clase con alta cohesión, compartirá la 
responsabilidad de una operación, con otras 
clases 
Una clase con baja cohesión, concentrará 
las responsabilidades de una o muchas 
operaciones .
Ejemplo alta cohesión 
Ejemplo: En el caso 
del punto de ventas 
se tienen tres clases 
Pago, TPDV y Venta y 
se quiere crear una 
instancia de Pago y 
asociarla a Venta. 
Este diseño delega a Venta la responsabilidad 
de crear el pago. 
Este diseño es conveniente ya que da soporte a 
una alta cohesión y a 
un bajo acoplamiento. 
¿Qué pasa si el sistema tiene 50 
operaciones, todas recibidas por la 
clase TPDV ? 
La clase se iría saturando con tareas 
y terminaría perdiendo la cohesión
Controlador 
El patrón controlador es un patrón que sirve como 
intermediario entre una determinada interfaz y el 
algoritmo que la implementa, de tal forma que es la 
que recibe los datos del usuario y la que los envía a 
las distintas clases según el método llamado. 
Este patrón sugiere que la lógica de negocios debe 
estar separada de la capa de presentación, esto para 
aumentar la reutilización de código y a la vez tener un 
mayor control. 
Un Controlador es un objeto de interfaz no destinada 
al usuario que se encarga de manejar un evento del 
sistema. Define además el método de su operación.
Ejemplo de controlador 
Por ejemplo, cuando un 
cajero que usa un sistema 
de Terminal en el punto 
de venta oprime el botón 
"Terminar Venta”, está 
generando un evento 
sistémico que indica que 
“la venta ha terminado 
Nótese que la clase TPDVApplet - parte de la capa 
de presentación - transmite un mensaje 
introducirProducto al objeto TPDV. 
?No intervino en el proceso de la operación, ni la 
decisión de cómo manejarla, el applet se 
limitó a delegarla a la capa del dominio.
Patrones GOF
Creacionales 
1.-Fabrica abstracta (Abstract Factory) : Proporciona un interfaz 
para crear las familias de objetos relacionados o dependientes sin 
especificar sus clases concretas. 
2.-Constructor (Builder): Separa la construcción de un objeto 
complejo de su representación , de modo que el mismo proceso de 
construcción pueda crear representaciones diferentes. 
3.-Método fabricación(Factory Method) : Define un interfaz 
para crear un objeto, pero dejar a subclases decidir sus instancias . 
El Método De la fábrica deja a una clase la creación de ejemplares o 
copias a subclases. 
4.-Prototipo(Prototype) : Crea nuevos objetos creándolos de una 
instancia ya existente. 
5.-Instancia única (Singleton) : Asegure que una clase sólo tiene 
una instancia , y proporcionarle un punto global de acceso a dicha 
instancia
Estructurales 
6.-Adaptador (adapter) :Convierte la interfaz de una clase en otra 
interfaz que otra clase puede usar . debido a que la interfaces es 
incompatibles con dicha clase 
7.-Puente ( bridge) :Desacopla una abstracción de su implementación 
de modo que los dos puedan variar por separado. 
8.-Peso ligero (Flyweight ) :Reduce la redundancia cuando gran cantidad 
de objetos poseen idéntica información. 
9.-Fachada (Facade) : Proporciona un interfaz unificada a un juego de 
interfaces en un subsistema. La fachada define un interfaz de nivel más alto 
que hace el subsistema fácil de usar. 
10.-Envoltorio (Decorator) :Adjunta responsabilidades adicionales a un 
objeto dinámicamente. Los decoradores proporcionan una alternativa 
flexible a la subclasificación para ampliar la funcionalidad. 
11.-Objeto compuesto (Composite) :El objeto compuesto permite 
tratar a jerarquías de objetos en individuales y composiciones de objetos 
uniformemente como si se tratase de objetos simples 
12.-Proxy : Mantiene un representante de un objeto
Comportamiento 
13.-Cadena responsabilidad (Chain of Responsibility ): Encadena los 
objetos de encubrimiento y pasa la petición a lo largo de la cadena hasta que 
un objeto la maneja. Permite establecer la línea que deben llevar los mensajes 
para que los objetos realicen la tarea indicada. 
14.-Orden (Command) : Encapsula una operación en un objeto, permitiendo 
ejecutar dicha operación sin necesidad de conocer el contenido de la misma. 
15.-Intérprete (Interpreter) :Considerando un lenguaje , define un 
representación para su gramática con un intérprete que usa la representación 
para interpretar sentencias en el mismo lenguaje. 
16.-Iterador (Iterator) :Proporciona un modo de tener acceso a los 
elementos de un objeto agregado secuencialmente sin exponer su 
representación subyacente. 
17.-Mediador (Mediator) :Define un objeto que coordine la comunicación 
entre objetos de distintas clases, pero que funcionan como un conjunto. 
18.-Recuerdo (Memento) : Sin violar encapsulación, captura y externaliza 
el estado interno de un objeto de modo que el objeto pueda ser restaurado a 
este estado más tarde.
Comportamiento 
19.-Observador (Observer) : Define de uno a varios la 
dependencia entre objetos de modo que cuando se produce un 
cambio de estado del objeto, todos sus dependientes sean 
notificados y puestos al día automáticamente. 
20-Estado (State) :Permite que un objeto modifique su 
comportamiento cada vez que cambie su estado interno 
21.-estrategia (Strategy) : Define una familia de algoritmos 
( métodos ), encapsula cada uno, y los hace permutables. La 
estrategia deja al algoritmo ( método ) variar por separado de los 
clientes ( objetos ) que lo usan o invocan . 
22.-método plantilla ( template method) :Define el esqueleto de 
un algoritmo en una operación, aplazando algunos pasos a 
subclases. El Método de Plantilla deja a subclases redefinir los ciertos 
pasos de un algoritmo sin cambiar la estructura del algoritmo. 
23.-Visitante (Visitor) :Permite definir nuevas operaciones sobre 
una jerarquía de clases sin modificar las clases sobre las que opera.
Patrones gof 
Fabrica abstracta constructor
Patrones gof 
Método de fabricación prototipo
Patrones gof 
Instancia única adaptador
Patrones gof 
Puente Peso ligero
Patrones gof 
decorador Fachada
Patrones gof 
proxy Objeto compuesto
Patrones gof 
Cadena de responsabilidad Orden
Patrones gof 
iterador mediador
Patrones gof 
observador plantilla
Patrones gof 
Visitador
Bibliografía 
 UML y patrones ;Craig Larman. 
 Desingn Patterns; Gamma, 
Helm,johnson,vlissides. 
 Wikipedia, Internet.

Más contenido relacionado

La actualidad más candente

Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
Sergey Nemchinsky
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisis
Julio Pari
 
Tm02 introducción a uml
Tm02 introducción a umlTm02 introducción a uml
Tm02 introducción a uml
Julio Pari
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASP
Sergey Nemchinsky
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UML
Sergey Nemchinsky
 

La actualidad más candente (20)

Modelo Del Negocio con RUP y UML Parte 3
Modelo Del Negocio con RUP y UML Parte 3Modelo Del Negocio con RUP y UML Parte 3
Modelo Del Negocio con RUP y UML Parte 3
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 
Sesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisisSesion 3 2 modelo de analisis
Sesion 3 2 modelo de analisis
 
PRESENTACIÓN RUP
PRESENTACIÓN RUPPRESENTACIÓN RUP
PRESENTACIÓN RUP
 
Design Patterns - General Introduction
Design Patterns - General IntroductionDesign Patterns - General Introduction
Design Patterns - General Introduction
 
Tm02 introducción a uml
Tm02 introducción a umlTm02 introducción a uml
Tm02 introducción a uml
 
Modelos de dominio
Modelos de dominioModelos de dominio
Modelos de dominio
 
Greenfoot 8
Greenfoot 8Greenfoot 8
Greenfoot 8
 
Introduction to Design Pattern
Introduction to Design  PatternIntroduction to Design  Pattern
Introduction to Design Pattern
 
Alice 10
Alice 10Alice 10
Alice 10
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASP
 
Greenfoot 9
Greenfoot 9Greenfoot 9
Greenfoot 9
 
MVC
MVCMVC
MVC
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UML
 
Aula 04 - Diagrama de casos de uso
Aula 04 - Diagrama de casos de usoAula 04 - Diagrama de casos de uso
Aula 04 - Diagrama de casos de uso
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
UML diagrams and symbols
UML diagrams and symbolsUML diagrams and symbols
UML diagrams and symbols
 
Greenfoot 2
Greenfoot 2Greenfoot 2
Greenfoot 2
 
Diseño de patrones
Diseño de patronesDiseño de patrones
Diseño de patrones
 

Destacado

Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructurales
Juan Camilo
 

Destacado (13)

Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructurales
 
Html - Tema 3
Html - Tema 3Html - Tema 3
Html - Tema 3
 
Html - Tema 1
Html - Tema 1Html - Tema 1
Html - Tema 1
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Html - Tema 2: Enlaces, Imágenes y Listas
Html - Tema 2: Enlaces, Imágenes y ListasHtml - Tema 2: Enlaces, Imágenes y Listas
Html - Tema 2: Enlaces, Imágenes y Listas
 
Patrones diseño y arquitectura
Patrones diseño y arquitecturaPatrones diseño y arquitectura
Patrones diseño y arquitectura
 
HTML5 y CSS3
HTML5 y CSS3HTML5 y CSS3
HTML5 y CSS3
 
Html Tema 4 - Formularios
Html Tema 4 - FormulariosHtml Tema 4 - Formularios
Html Tema 4 - Formularios
 
Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EE
 
Diseño adaptativo y responsive
Diseño adaptativo y responsiveDiseño adaptativo y responsive
Diseño adaptativo y responsive
 
Introducción a JEE
Introducción a JEEIntroducción a JEE
Introducción a JEE
 
Java web 01 - servlets
Java web 01 - servletsJava web 01 - servlets
Java web 01 - servlets
 
Java Web 00 - Contexto
Java Web 00 - ContextoJava Web 00 - Contexto
Java Web 00 - Contexto
 

Similar a Uso de-patrones-de-arquitectura-capitulo-4

Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
kaolong
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
kaolong
 
Conceptos Basicos Uml
Conceptos Basicos UmlConceptos Basicos Uml
Conceptos Basicos Uml
felix17
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
2008PA2Info3
 

Similar a Uso de-patrones-de-arquitectura-capitulo-4 (20)

Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Patrones GRASP de tipo de bajo acoplamiento
Patrones GRASP de  tipo de bajo acoplamientoPatrones GRASP de  tipo de bajo acoplamiento
Patrones GRASP de tipo de bajo acoplamiento
 
Patrones de-diseño-mañana
Patrones de-diseño-mañanaPatrones de-diseño-mañana
Patrones de-diseño-mañana
 
Patrones GRASP
Patrones GRASPPatrones GRASP
Patrones GRASP
 
Patrones GRASP
Patrones GRASPPatrones GRASP
Patrones GRASP
 
Clase 29
Clase 29Clase 29
Clase 29
 
Introducción Patrones de Diseño
Introducción Patrones de DiseñoIntroducción Patrones de Diseño
Introducción Patrones de Diseño
 
El patrón Estrategia de diseño de software
El patrón Estrategia de diseño de softwareEl patrón Estrategia de diseño de software
El patrón Estrategia de diseño de software
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Clase ii patrones de diseño
Clase ii patrones de diseñoClase ii patrones de diseño
Clase ii patrones de diseño
 
Patrones de Diseño en e-learning
Patrones de Diseño en e-learningPatrones de Diseño en e-learning
Patrones de Diseño en e-learning
 
Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]Patrones de diseño [DdA-2]
Patrones de diseño [DdA-2]
 
Gonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De DisenoGonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De Diseno
 
Conceptos Basicos Uml
Conceptos Basicos UmlConceptos Basicos Uml
Conceptos Basicos Uml
 
Conceptos y definiciones de poo. alumno.juan manuel osorio baruch
Conceptos y definiciones de poo. alumno.juan manuel osorio baruchConceptos y definiciones de poo. alumno.juan manuel osorio baruch
Conceptos y definiciones de poo. alumno.juan manuel osorio baruch
 
Patrones de diseño - Henry Vallejo
Patrones de diseño - Henry VallejoPatrones de diseño - Henry Vallejo
Patrones de diseño - Henry Vallejo
 
Diagrama de dominio armando
Diagrama de dominio armandoDiagrama de dominio armando
Diagrama de dominio armando
 
Modelo informático
Modelo informáticoModelo informático
Modelo informático
 

Uso de-patrones-de-arquitectura-capitulo-4

  • 1. Uso de patrones de arquitectura Profesor Pedro Veloso Hernández Master Ingeniería de Software UPM
  • 2. ¿ que es un Patrón de diseño? Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias. Fuente Wikipedia "Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice" [AIS+77]. Desing Patterns, Christopher Alexander E-book Version Los escaladores usan a menudo patrones de diseño, usado Arneses, cuerdas, mosquetones, que usan dadas ciertas Condiciones de soporte, forma, y para situaciones que deben Resolver como : salvataje, cruzar dos personas en un solo Intento, saltarse una gran roca, etc.
  • 3. ¿ que es un patrón UML? Los patrones UML son colaboraciones parametrizadas , esto es , son un grupo de clases/objetos colaborando entre sí que se pueden abstraer de un conjunto de escenarios general. Los patrones son un medio excelente para lograr reutilización y desarrollo robusto. A medida que los patrones se descubren en todo nuevo proyecto, se puede reutilizar la plantilla básica del patrón desde modelos previos con los nombres de las variables apropiadas modificados para el proyecto en curso. "Cada patrón describe un problema que ocurre infinidad de veces en nuestro entorno , así como la solución al mismo, de tal modo que podemos utilizar esta solución un millón de veces más adelante sin tener que volver a pensarla otra vez."
  • 4. Condiciones para usar un patrón UML Los patrones generalmente describen cómo resolver un problema abstracto y la tarea del usuario del patrón consiste en modificar los elementos del patrón para cumplir las demandas del compromiso actual. Antes de comenzar a usar un patrón primero debe ser creado como un diagrama estándar de UML o existir como tal en algún repositorio
  • 5. Vamos a un ejemplo Este es un ejemplo de patrones de diseño propuesto en GOF “ Abstract Factory” patrones descriptos en el libro "Design Patterns - Elements of Reusable Object-Oriented Software" de Gamma et al., más conocidos como 'La Banda de los Cuatro', 'Gang of Four‘ o GoF en forma abreviada.
  • 6. Cuando “ no” usar patrones de diseño Del mismo modo que no es aconsejable optimizar prematuramente, no se deben utilizar patrones de diseño antes de tiempo. Seguramente sea mejor implementar algo primero y asegurarse de que funciona, para luego utilizar el patrón de diseño para mejorar las flaquezas; esto es cierto, sobre todo, cuando aún no ha identificado todos los detalles del proyecto ( comprensión del dominio del problema) Los patrones de diseño pueden incrementar o disminuir la capacidad de comprensión de un diseño o de una implementación,
  • 7. ¿ que familias de patrones de diseño utilizaremos?  Para este curso, usaremos dos familias de patrones de diseño propuestos en la bibliografía sugerida. Cabe destacar que existen muchas familias de patrones de diseño, por lo que nos basaremos en los mas usados, en función del objetivo que nos hemos planteado en este curso.  Las familias serán GRASP Y GAO
  • 8. Descripción de familias de patrones GRASP : son patrones generales de software para asignación de responsabilidades, es el acrónimo de "General Responsibility Assignment Software Patterns" . son una serie de "buenas prácticas" de aplicación recomendable en el diseño de software. Patrones GRASP; Experto , Creador , Bajo Acoplamiento ,Alta Cohesión ,Controlador
  • 9. Descripción de familias de patrones GOF: Es la abreviación del grupo Gang of Four, compuesto por Erich Gamma, Richard Helm, Ralph Jhonson y John Vlisides, quienes en su publicación “ Design Patterns” ( década de los 90s), describen 23 patrones de diseño comúnmente utilizados y de gran aplicabilidad en problemas de diseño usando modelamiento UML. Estos patrones se agrupan en las siguientes categorías : Creacionales, estructurales y de comportamiento.
  • 10. Relación de familias de patrones de diseño PATRONES GRASP GOF Experto Creador Bajo acoplamiento Alta Cohesión Controlador Creacionales Estructurales Comportamiento Fabrica, constructor, método de fabricación, prototipo , instancia única Adaptador, puente, objeto Compuesto, envoltorio, fachada, Peso ligero, proxy Cadena responsabilidad, orden, Intérprete, iterador, mediador, recuerdo, Observador, estado, estrategia, método plantilla, visitante
  • 12. Experto El GRASP de experto en información es el principio básico de asignación de responsabilidades en diseño O.O. Nos indica que la responsabilidad de la creación de un objeto debe recaer sobre la clase que conoce toda la información necesaria para crearlo. Nótese, que el cumplimiento de una responsabilidad requiere a menudo información distribuida en varias clases de objetos.
  • 13. Ejemplo del patrón experto Ejemplo En la aplicación del punto de venta, alguna clase necesita conocer el gran total de la venta. Comience asignando las responsabilidades con una definición clara de ellas. A partir de esta recomendación se plantea la pregunta: ¿Quién es el responsable de conocer el gran total de la venta? Desde el punto de vista del patrón Experto, deberíamos buscar la clase De objetos que posee la información necesaria para calcular el total. En conclusión, para cumplir con la responsabilidad de conocer y dar el total de la venta, se asignaron tres responsabilidades a las tres clases de objeto así: Venta ( conoce total de la venta) Ventaslineaproductos ( conoce subtotal de la linea de productos) Especificaciondeproducto (conoce el precio del producto)
  • 14. Creador El patrón creador nos ayuda a identificar quién debe ser el responsable de la creación (o instanciación) de nuevos objetos o clases. El patrón Creador guía la asignación de responsabilidades relacionadas con la creación de objetos, tarea muy frecuente en los sistemas orientados a objetos. El propósito fundamental de este patrón es encontrar un creador que debemos conectar con el objeto producido en cualquier evento. Al escogerlo como creador, se da soporte al bajo acoplamiento.
  • 15. Ejemplo patrón creador Ejemplo En la aplicación del punto de venta, ¿quién Debería encargarse de crear una Instancia VentasLineadeProducto? Desde el punto de vista del patrón Creador, deberíamos buscar una clase que agregue, contenga y realice otras operaciones sobre este tipo de instancias Una Venta contiene (en realidad, agrega) muchos objetos VentasLineadeProducto; por ello, el patrón Creador sugiere que Venta es idónea para asumir la responsabilidad de crear las instancias VentasLineadeProducto. Esta asignación de responsabilidades requiere definir en Venta un método de hacer-LineadeProducto.
  • 16. Bajo acoplamiento Es la idea de tener las clases lo menos ligadas entre sí que se pueda. De tal forma que en caso de producirse una modificación en alguna de ellas, se tenga la mínima repercusión posible en el resto de clases, potenciando la reutilización, y disminuyendo la dependencia entre las clases Los beneficios de este factor es que no se afectan por cambios de otros componentes, son fáciles de entender por separado y fáciles de reutilizar.
  • 17. Ejemplo bajo acoplamiento Ejemplo: En el caso del punto de Ventas se tienen tres clases Pago, TPDV y Venta y se quiere crear una instancia de Pago y asociarla a Venta. ¿Que clase es la responsable de realizarlo? Según el patrón de Bajo Acoplamiento la relación debería ser a través de TPDV. Esta última asociación es mejor Dado que Venta realiza la creación del Pago y no TPDV por lo tanto se reduce la dependencia de este último con el resto de las clases.
  • 18. Alta Cohesión Nos dice que la información que almacena una clase debe de ser coherente y está en la mayor medida de lo posible relacionada con la clase. La cohesión es una medida de cuán relacionadas y enfocadas están las responsabilidades de una clase. Una clase con alta cohesión, compartirá la responsabilidad de una operación, con otras clases Una clase con baja cohesión, concentrará las responsabilidades de una o muchas operaciones .
  • 19. Ejemplo alta cohesión Ejemplo: En el caso del punto de ventas se tienen tres clases Pago, TPDV y Venta y se quiere crear una instancia de Pago y asociarla a Venta. Este diseño delega a Venta la responsabilidad de crear el pago. Este diseño es conveniente ya que da soporte a una alta cohesión y a un bajo acoplamiento. ¿Qué pasa si el sistema tiene 50 operaciones, todas recibidas por la clase TPDV ? La clase se iría saturando con tareas y terminaría perdiendo la cohesión
  • 20. Controlador El patrón controlador es un patrón que sirve como intermediario entre una determinada interfaz y el algoritmo que la implementa, de tal forma que es la que recibe los datos del usuario y la que los envía a las distintas clases según el método llamado. Este patrón sugiere que la lógica de negocios debe estar separada de la capa de presentación, esto para aumentar la reutilización de código y a la vez tener un mayor control. Un Controlador es un objeto de interfaz no destinada al usuario que se encarga de manejar un evento del sistema. Define además el método de su operación.
  • 21. Ejemplo de controlador Por ejemplo, cuando un cajero que usa un sistema de Terminal en el punto de venta oprime el botón "Terminar Venta”, está generando un evento sistémico que indica que “la venta ha terminado Nótese que la clase TPDVApplet - parte de la capa de presentación - transmite un mensaje introducirProducto al objeto TPDV. ?No intervino en el proceso de la operación, ni la decisión de cómo manejarla, el applet se limitó a delegarla a la capa del dominio.
  • 23. Creacionales 1.-Fabrica abstracta (Abstract Factory) : Proporciona un interfaz para crear las familias de objetos relacionados o dependientes sin especificar sus clases concretas. 2.-Constructor (Builder): Separa la construcción de un objeto complejo de su representación , de modo que el mismo proceso de construcción pueda crear representaciones diferentes. 3.-Método fabricación(Factory Method) : Define un interfaz para crear un objeto, pero dejar a subclases decidir sus instancias . El Método De la fábrica deja a una clase la creación de ejemplares o copias a subclases. 4.-Prototipo(Prototype) : Crea nuevos objetos creándolos de una instancia ya existente. 5.-Instancia única (Singleton) : Asegure que una clase sólo tiene una instancia , y proporcionarle un punto global de acceso a dicha instancia
  • 24. Estructurales 6.-Adaptador (adapter) :Convierte la interfaz de una clase en otra interfaz que otra clase puede usar . debido a que la interfaces es incompatibles con dicha clase 7.-Puente ( bridge) :Desacopla una abstracción de su implementación de modo que los dos puedan variar por separado. 8.-Peso ligero (Flyweight ) :Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información. 9.-Fachada (Facade) : Proporciona un interfaz unificada a un juego de interfaces en un subsistema. La fachada define un interfaz de nivel más alto que hace el subsistema fácil de usar. 10.-Envoltorio (Decorator) :Adjunta responsabilidades adicionales a un objeto dinámicamente. Los decoradores proporcionan una alternativa flexible a la subclasificación para ampliar la funcionalidad. 11.-Objeto compuesto (Composite) :El objeto compuesto permite tratar a jerarquías de objetos en individuales y composiciones de objetos uniformemente como si se tratase de objetos simples 12.-Proxy : Mantiene un representante de un objeto
  • 25. Comportamiento 13.-Cadena responsabilidad (Chain of Responsibility ): Encadena los objetos de encubrimiento y pasa la petición a lo largo de la cadena hasta que un objeto la maneja. Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada. 14.-Orden (Command) : Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma. 15.-Intérprete (Interpreter) :Considerando un lenguaje , define un representación para su gramática con un intérprete que usa la representación para interpretar sentencias en el mismo lenguaje. 16.-Iterador (Iterator) :Proporciona un modo de tener acceso a los elementos de un objeto agregado secuencialmente sin exponer su representación subyacente. 17.-Mediador (Mediator) :Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto. 18.-Recuerdo (Memento) : Sin violar encapsulación, captura y externaliza el estado interno de un objeto de modo que el objeto pueda ser restaurado a este estado más tarde.
  • 26. Comportamiento 19.-Observador (Observer) : Define de uno a varios la dependencia entre objetos de modo que cuando se produce un cambio de estado del objeto, todos sus dependientes sean notificados y puestos al día automáticamente. 20-Estado (State) :Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno 21.-estrategia (Strategy) : Define una familia de algoritmos ( métodos ), encapsula cada uno, y los hace permutables. La estrategia deja al algoritmo ( método ) variar por separado de los clientes ( objetos ) que lo usan o invocan . 22.-método plantilla ( template method) :Define el esqueleto de un algoritmo en una operación, aplazando algunos pasos a subclases. El Método de Plantilla deja a subclases redefinir los ciertos pasos de un algoritmo sin cambiar la estructura del algoritmo. 23.-Visitante (Visitor) :Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.
  • 27. Patrones gof Fabrica abstracta constructor
  • 28. Patrones gof Método de fabricación prototipo
  • 29. Patrones gof Instancia única adaptador
  • 30. Patrones gof Puente Peso ligero
  • 32. Patrones gof proxy Objeto compuesto
  • 33. Patrones gof Cadena de responsabilidad Orden
  • 37. Bibliografía  UML y patrones ;Craig Larman.  Desingn Patterns; Gamma, Helm,johnson,vlissides.  Wikipedia, Internet.