08/08/2010
GESTION DE PROYECTOS
DE TI
Diseño de Software
Tema:
Patrones de Software
1
08/08/2010
Agenda
1. Algunos aspectos generales sobre patrones.
2. Clasificación de Patrones.
1.- Algunos aspectos
generales sobre
patrones
2
08/08/2010
1.- Aspectos generales sobre Patrones de Software
Un patrón captura la estructura esencial de
soluciones comprobadas a problemas recurrentes
en un cierto contexto y sistema de fuerzas.
1.- Aspectos generales sobre Patrones de Software
Historia
El arquitecto Christopher Alexander escribió varios libros sobre
planificación urbana y arquitectura de edificios e introdujo el
concepto de patrón.
1987 - Ward Cunningham y Kent Beck usaron varias de las ideas
de Alexander para desarrollar un pequeño lenguaje de patrones
para programadores noveles de Smalltalk.
1991 - Jim Coplien publica Advanced C++ Programming Styles
and Idioms que compila un catálogo de idioms para C++.
1994 - Se publica el libro Design Patterns : Elements of
Reusable ObjectOriented Softwarepor GoF.
3
08/08/2010
1.- Aspectos generales sobre Patrones de Software
Ventajas
Ayudan a los desarrolladores de software a resolver problemas
comunes encontrados durante todo el proceso de la Ingeniería del
Software.
Ayudan a crear un vocabulario y un lenguaje compartidos para
comunicar experiencias sobre dichos problemas y sus soluciones.
Comunican las razones de determinadas decisiones de diseño y
no únicamente las soluciones. Lo hacen dando un nombre y
codificando formalmente dichos problemas y sus soluciones.
1.- Aspectos generales sobre Patrones de Software
Tipos de Patrones
El foco inicial, sobre todo a raíz del libro de GoF, fue sobre
patrones de diseño. Pero existe otros tipos:
Patrones de análisis
Patrones organizativos
Organización del desarrollo
Proceso software
Planificación de proyectos
Ingeniería de requerimientos
4
08/08/2010
2.- Clasificación de Patrones:
Tipos de Patrones
Según Frank Buschman los patrones se pueden clasificar en:
Arquitectura: Expresan una estructura fundamental de
organización de los sistemas SW.
Diseño: Proporcionan un esquema para refinar subsistemas o
componentes. Resuelven problemas específicos de diseño.
Idioms: Son específicos de un lenguaje de programación.
Describen cómo implementar ciertos aspectos de un problema
utilizando las características de un lenguaje de programación.
2.- Clasificación de Patrones:
Tipos de Patrones
Teniendo en cuenta el nivel de detalle:
Arquitectura: Afectan a la estructura
global del sistema.
Diseño: Definen microestructuras de
subsistemas y componentes.
Idioms: Se centran en detalles de la
estructura y comportamiento de un
componente.
5
08/08/2010
2.- Clasificación de Patrones:
Patrones de Arquitectura
2.- Clasificación de Patrones:
Del Caos a la Organización
a.- Capas (Layers)
Descompone una aplicación en un
conjunto de capas independientes y
ordenadas jerárquicamente.
Cada nivel o capa usa los servicios de
la capa inmediatamente inferior y ofrece
servicios a la capa inmediatamente
superior.
6
08/08/2010
2.- Clasificación de Patrones:
Del Caos a la Organización
a.- Capas (Layers) : Estructura
2.- Clasificación de Patrones:
Del Caos a la Organización
a.- Capas (Layers)
7
08/08/2010
2.- Clasificación de Patrones:
Del Caos a la Organización
a.- Capas (Layers)
2.- Clasificación de Patrones:
Del Caos a la Organización
b.- Pipes y Filters
Provee una estructura para sistemas que procesan un flujo de
datos. Cada etapa del proceso es encapsulada como un filtro.
Los datos se pasan entre filtros adyacentes mediante Pipes.
c.- Blackboard
Útil para sistemas en que no se conoce una solución o estrategia
determinista. Varios subsistemas especializados ensamblan su
conocimiento para construir una posible solución parcial.
8
08/08/2010
2.- Clasificación de Patrones:
Sistemas Distribuidos
a.- Broker o Intermediario
Este patrón de arquitectura se usa para organizar
sistemas distribuidos con componentes débilmente
acoplados que interactúan entre sí invocando
servicios remotos.
El broker es responsable de coordinar la
comunicación: cursa las peticiones de servicios
remotos al servidor que corresponda en cada caso, y
transmite a los usuarios los resultados de sus
peticiones y las eventuales excepciones, si las hay.
2.- Clasificación de Patrones:
Sistemas Distribuidos
a.- Broker o Intermediario: Ejemplo
9
08/08/2010
2.- Clasificación de Patrones:
Sistemas Distribuidos
a.- Broker o Intermediario: Estructura
El cliente es una aplicación que accede a los servicios de uno o más
servidores a través del broker.
El servidor implementa unas ciertas funcionalidades (servicios). Se registra
en el broker indicándole su nombre y ubicación.
La pasarela es un componente opcional que encapsula detalles de
implementación si en el sistema hay dos o más brokers que usan diferentes
protocolos de red.
Los filtros del cliente y del servidor están para realizar operaciones del
tipo:
Traducción de los datos a formatos independientes de la máquina.
Encapsular funciones específicas de la máquina del cliente o del servidor.
El broker está entre los clientes y los servidores, que se comunican a través de
él.
2.- Clasificación de Patrones:
Sistemas Distribuidos
a.- Broker o Intermediario
10
08/08/2010
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-Controlador
El patrón Modelo-Vista-Controlador (MVC) descompone una
aplicación interactiva en tres grandes bloques:
El modelo contiene los datos y la funcionalidad de la aplicación.
Es independiente de la representación de los datos.
Las vistas muestran la información al usuario de una cierta
forma. Existen todas las que se necesite definir.
Cada vista tiene un controlador asociado. Los controladores
reciben entradas en forma de eventos que responden a mandos
realizados por el usuario a través del ratón o del
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-Controlador: Estructura
11
08/08/2010
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-Controlador: Estructura
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-Controlador: Estructura
12
08/08/2010
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-
Controlador:
Diagrama de
Clases
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-
Controlador:
Dinámica
13
08/08/2010
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-
Controlador:
2.- Clasificación de Patrones:
Sistemas Interactivos
a.- Modelo-Vista-
Controlador:
14
08/08/2010
2.- Clasificación de Patrones:
Sistemas Interactivos
b.- Presentación-Abstracción-Control
Se usa en aplicaciones interactivas que requieren una interfaz
de usuario flexible.
Se tiene por lo tanto un problema idéntico al que resuelve el
patrón Modelo-Vista-Controlador (MVC). Sin embargo, la
solución es algo diferente.
Se basa en el empleo de agentes. Lo que se busca es un
mayor grado de modularidad y de portabilidad.
2.- Clasificación de Patrones:
Sistemas Interactivos
b.- Presentación-Abstracción-Control: Niveles
Almacén de Datos
Acceso a Datos Agente de Nivel Superior
Agente de Nivel
Formulario Coordina Vistas Intermedio
Agentes de Nivel Gráfico de Tarta Gráfico de Barras Distribución
Básico Escaños
15
08/08/2010
2.- Clasificación de Patrones:
Sistemas Interactivos
b.- Presentación-
Abstracción-
Control:
Diagramas de
Clases
2.- Clasificación de Patrones:
Sistemas Interactivos
b.- Presentación-Abstracción-Control: Diagramas de Clases
16
08/08/2010
2.- Clasificación de Patrones:
Sistemas Adaptables
a.- Microkernel
Este patrón se aplica en sistemas software cuyos
requisitos deben de poder modificarse a lo largo del
tiempo. Es apropiado cuando se necesita desarrollar
una familia de aplicaciones similares que usan
interfaces de programación parecidos para acceder a
una funcionalidad básica común pocos recursos del
sistema (memoria, tiempo de CPU, etc.)
La funcionalidad que no se encuentra en el
microkernel se ubica en otros dos tipo de paquetes:
servidores internos (a los que sólo el microkernel
tiene acceso directo) y servidores externos, con los
que comunican los clientes
2.- Clasificación de Patrones:
Sistemas Adaptables
b.- Reflexión
Este patrón se usa para diseñar sistemas software muy flexibles
y fácilmente modificables.
Se trata de poder modificar la estructura o el comportamiento
del sistema dinámicamente.
Este patrón permite cambios en la estructura de los datos
internos del sistema y en los mecanismos de llamada de las
funciones.
17
08/08/2010
2.- Clasificación de Patrones:
Sistemas Adaptables
b.- Reflexión
Ejemplo: Una aplicación que
necesita guardar objetos en
disco y volverlos a leer de
nuevo. Si se hace un método
especifico para cada tipo de
objeto, eso es poco flexible y
es una posible fuente de
errores. Si cambia la
estructura de clases de la
aplicación, se ha de
modificar estos métodos!!!!!
2.- Clasificación de Patrones:
Sistemas Adaptables
b.- Reflexión
Cambiar un sistema software es una tarea complicada y con alto riesgo
de error. Es fácil que un cambio en la funcionalidad afecte a múltiples
módulos. Aparte, cada cambio debe ser verificado posteriormente. Todo
lo que sea prever la posibilidad de cambios es una mejora del producto.
18
08/08/2010
2.- Clasificación de Patrones:
Sistemas Adaptables
b.- Reflexión
Solución!!!
Diferenciar en el sistema entre nivel abstracto o metanivel y nivel
básico.
El metanivel contiene una representación de la estructura interna
del software. Esta compuesto de metaobjetos.
Los metaobjetos tienen información sobre la estructura interna del
sistema.
El nivel básico define la funcionalidad del sistema. Utiliza los
metaobjetos para no depender de aquellos aspectos del sistema que
pueden cambiar. No cambian, pues las modificaciones las gestiona el
metaobjeto.
2.- Clasificación de Patrones:
Sistemas Adaptables
b.- Reflexión
En el sistema de almacenamiento de objetos en disco que
se ha puesto de ejemplo, la información sobre la
estructura interna de un objeto dado está accesible y es
posible iterar con ella sobre cualquier estructura de datos
de tipo arbitrario dividiéndola en tipos básicos que el
método de almacenamiento sabe cómo almacenar en
disco.
Cuando se cambia la estructura interna de los objetos, el
componente de almacenamiento de los objetos en disco,
se modifica automáticamente de acuerdo a la nueva
estructura.
19
08/08/2010
2.- Clasificación de Patrones:
Patrones de Diseño
Cada patrón de diseño se centra en un problema de diseño
particular y describe cuando es o no aplicable a la luz de otras
restricciones de diseño.
Clasificación de patrones de diseño (Tipo)
2.- Clasificación de Patrones:
Patrones de Diseño
Clasificación de patrones de diseño (Ámbito)
20
08/08/2010
2.- Clasificación de Patrones:
Patrones Creacionales
a.- Abstract Factory
Proporcionar una interfaz para crear familias de objetos
relacionados o dependientes sin especificar sus clases concretas.
Es aplicable:
Cuando un sistema deba ser independiente de la creación, composición y
representación de sus productos.
Cuando un sistema deba ser configurado con una de las múltiples familias
de productos.
Cuando un conjunto de objetos relacionados se diseña para ser usado
conjuntamente.
Cuando se desea proporcionar una biblioteca de productos de los que sólo
se quiere conocer su interfaz.
2.- Clasificación de Patrones:
Patrones Creacionales
a.- Abstract Factory
21
08/08/2010
2.- Clasificación de Patrones:
Patrones Creacionales
a.- Abstract Factory
Abstract Factory: declara una interfaz para operaciones que
crean productos abstractos.
Fabrica Concreta: implementa las operaciones para crear
productos concretos.
ProductoAbstracto: declara una interfaz para un tipo de
producto.
ProductoConcreto: define un producto para ser creado por la
fabrica concreta correspondiente. Implementa la interfaz del
producto abstracto
Cliente: usa solamente las interfaces de las fábricas y los
productos abstractos.
2.- Clasificación de Patrones:
Patrones Creacionales
b.- Singleton
Propósito:
Asegurar que una clase tiene una instancia única y proporcionar
un punto de acceso global a ella.
Aplicable cuando:
Se quiere que una clase tenga una instancia única
globalmente accesible.
La instancia única podría ser extensible por una
subclase, y los clientes podrían usar una instancia
extendida sin modificar su código.
22
08/08/2010
2.- Clasificación de Patrones:
Patrones Creacionales
b.- Singleton: Estructura
2.- Clasificación de Patrones:
Patrones estructurales
a.- Composite
Componer objetos en una estructura de árbol para representar
relaciones todo-parte y que los clientes traten uniformemente
objetos simples y compuestos
Es aplicable:
Cuando se requiere representar jerarquías todo-parte
Los clientes deben ignorar las diferencias entre objetos
individuales y objetos compuestos.
23
08/08/2010
2.- Clasificación de Patrones:
Patrones estructurales
a.- Composite: Estructura
2.- Clasificación de Patrones:
Patrones estructurales
a.- Composite: Estructura
Componente: Declara la interfaz para los objetos de
la composición implementa comportamiento por
defecto para dicho interfaz declara interfaz para
acceder y manipular objetos hijos.
Compuesto: Define el comportamiento de los
objetos que pueden contener a otros y almacena
componentes hijos.
Hoja: Define el comportamiento de los objetos
primitivos
Cliente: Interacciona los objetos de la composición a
través del interfaz Componente
24
08/08/2010
2.- Clasificación de Patrones:
Patrones estructurales
b.- Proxy
Proporcionar un sustituto o suplente para otro objeto, de
forma que controle el acceso a él.
Es aplicable:
Cuando se desea hacer transparente el acceso a un objeto que
puede estar en el mismo espacio de direcciones o en otro.
Cuando se desea controlar la creación de objetos ‘costosos’.
Cuando se desea añadir seguridad o control al acceso sobre un
objeto existente.
2.- Clasificación de Patrones:
Patrones estructurales
b.- Proxy: Estructura
25
08/08/2010
2.- Clasificación de Patrones:
Patrones estructurales
b.- Proxy: Estructura
Proxy:
Mantiene la referencia que le permite el acceso al
ElementoReal.
Proporciona una interfaz idéntica a la de Elemento,
de forma que el Proxy puede ser sustituido por el
ElementoReal.
Controla el acceso sobre el ElementoReal.
Realiza las tareas especificas para proporcionar
acceso remoto, carga diferida o protección y seguridad.
Elemento: Define la interfaz común para el
ElementoReal y para el Proxy.
ElementoReal: Define el objeto real al que el Proxy
representa.
2.- Clasificación de Patrones:
Patrones de Comportamiento
a.- Iterator
Proporcionar acceso secuencial a un agregado sin exponer su
representación
Es aplicable:
Para acceder a un agregado sin exponer su estructura interna.
Para soportar distintos tipos de recorrido en un mismo agregado.
Para proporcionar un interfaz común para recorrer diferentes
estructuras de agregados (iteración polimórfica).
26
08/08/2010
2.- Clasificación de Patrones:
Patrones de Comportamiento
a.- Iterator: Estructura
2.- Clasificación de Patrones:
Patrones de Comportamiento
a.- Iterator: Estructura
Iterador: define la interfaz para acceder y recorrer los
elementos
IteradorConcreto:
Implementa la interfaz de Iterador
Realiza el seguimiento de la posición actual en el
recorrido del agregado
Agregado: define la interfaz para la creación de un
objeto Iterador
AgregadoConcreto: Implementa la interfaz de
creación del Iterador devolviendo una instancia del
IteradorConcreto Adecuado
27
08/08/2010
2.- Clasificación de Patrones:
Patrones de Comportamiento
b.- State
Permite que un objeto modifique su comportamiento cuando
cambie su estado interno. Parecerá que el objeto cambie de
clase.
Es aplicable:
El comportamiento de un objeto depende de su estado y debe
cambiar en tiempo de ejecución dependiendo de ese estado.
Las operaciones tienen sentencias condicionales múltiples que
dependen del estado del objeto, que normalmente se representa con
una constante. A menudo varias operaciones tienen la misma
estructura.
2.- Clasificación de Patrones:
Patrones de Comportamiento
b.- State: Estructura
28
08/08/2010
2.- Clasificación de Patrones:
Patrones de Comportamiento
b.- State: Estructura
Contexto: define el interfaz de interés para los
clientes, manteniendo una instancia de la subclase
EstadoConcreto que define el estado actual.
Estado: define una interfaz para encapsular el
comportamiento asociado a un estado particular de
Contexto.
EstadoConcretoA, EstadoConcretoB,...: cada
subclase implementa un comportamiento asociado
con un estado de Contexto.
Actividad 1:
Utilización de Patrones
29
08/08/2010
Resumen
Un patrón es una solución de diseño de software a un problema,
aceptada como correcta, a la que se ha dado un nombre y que puede ser
aplicada en otros contextos.
La importancia de los patrones radica principalmente en que ayudan a
los desarrolladores de software a resolver problemas comunes
encontrados durante el desarrollo del software.
Además permiten comunicar las razones de determinadas decisiones de
diseño y no únicamente las soluciones.
Resumen
Existen los siguientes tipos de patrones:
Patrones de análisis
Patrones organizativos
Organización del desarrollo
Proceso software
Planificación de proyectos
Ingeniería de requerimientos
Además dichos patrones se pueden clasificar en:
Patrones de arquitectura
Patrones de diseño
Patrones de lenguaje
30