1
Arquitectura software y patrones
“Una arquitectura orientada a objetos bien estructurada está llena de patrones. La calidad de un sistema orientado a objetos se mide por la atención que los diseñadores han prestado a las colaboraciones entre sus objetos.”
“Los patrones conducen a arquitecturas más pequeñas, más simples y más comprensibles”
G. Booch
2
Diseño orientado a objetos
“Diseñar software orientado a objetos es difícil pero diseñar software orientado a objetos reutilizable es más difícil todavía. Diseños generales y flexibles son muy difíciles de encontrar la primera vez”
¿Qué conoce un programador experto que desconoce uno inexperto?
Reutilizar soluciones que funcionaron en el pasado: Aprovechar la experiencia
3
Patrones
Describen un problema recurrente y una solución.
Cada patrón nombra, explica, evalúa un diseño recurrente en sistemas OO.
Elementos principales:
Nombre
Problema
Solución: Descripción abstracta
Consecuencias
4
Patrones
Patrones de código
Nivel de lenguaje de programación
Frameworks
Diseños específicos de un dominio de aplicaciones.
Patrones de diseño
Descripciones de clases cuyas instancias colaboran entre sí que deben ser adaptados para resolver problemas de diseño general en un particular contexto.
Un patrón de diseño identifica: Clases, Roles, Colaboraciones y la distribución de responsabilidades.
5
Patrones y frameworks
Un framework es una colección organizada de clases que constituyen un diseño reutilizable para una clase específica de software.
Necesario adaptarlo a una aplicación particular.
Establece la arquitectura de la aplicación
Diferencias:
Patrones son más abstractos que los frameworks
Patrones son elementos arquitecturales más pequeños
Patrones son menos especializados
6
Observer
Estructura
7
Observer
Colaboración
8
Modelo-Vista-Control
Utilizado para construir interfaces de usuario en Smalltalk-80.
Basado en tres tipos de objetos:
Modelo: objetos del dominio
Vista: objetos presentación en pantalla (interfaz de usuario)
Controlador: define la forma en que la interfaz reacciona a la entrada del usuario.
Desacopla el modelo de las vistas.
1tr
3tr
4tr
2tr
(Gp:) 1tr. 2tr. 3tr. 4tr.
Este 20 25 90 20
Oeste 30 38 32 32
Norte 47 47 45 45
Vistas
t1=20
t2=25
t3=90
t4=20
Modelo
10
Modelo-Vista-Control
Utiliza los siguientes patrones:
Observer
Composite
Strategy
Decorator
Factory method
11
Plantilla de definición
Nombre
Propósito
¿Qué hace?, ¿Cuál es su razón y propósito?, ¿Qué cuestión de diseño particular o problema aborda?
Sinónimos
Motivación
Escenario que ilustra un problema particular y cómo el patrón lo resuelve.
12
Plantilla de definición
Aplicabilidad
¿En qué situaciones puede aplicarse?, ¿Cómo las reconoces?, ejemplos de diseños que pueden mejorarse.
Estructura
Diagramas de clases que ilustran la estructura
Participantes
Clases que participan y sus responsabilidades
Colaboraciones
Diagramas de interacción que muestran cómo colaboran los participantes.
13
Plantilla de definición
Consecuencias
¿Cómo alcanza el patrón sus objetivos?, ¿Cuáles son los compromisos y resultados de usar el patrón?, Alternativas, Costes y Beneficios
Implementación
Técnicas, heurísticas y consejos para la implementación
¿Hay cuestiones dependientes del lenguaje?
Ejemplo de Código
Usos conocidos
Patrones relacionados
14
Clasificación
Ámbito
(Gp:) Propósito
(Gp:) Estructural
(Gp:) Comportamiento
(Gp:) Creación
(Gp:) Herencia
(Gp:) Compo-
sición
(Gp:) Factory Method
(Gp:) Adapter
(Gp:) Interpreter
Template Method
(Gp:) Abstract Factory
Builder
Prototype
Singleton
(Gp:) Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
(Gp:) Chain of Responsability
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
15
¿A qué ayudan los patrones?
Encontrar clases de diseño
Especificar interfaces
“Programar hacia la interfaz, no hacia la implementación”
No declarar variables de clases concretas sino abstractas.
Patrones de creación permiten que un sistema esté basado en términos de interfaces y no en implementaciones.
Favorecen la reutilización a través de la composición en vez de la herencia
16
Herencia vs. Clientela
Relación fija
Reuso “caja blanca”
Relación variable
Reuso “caja negra”
Clase abstracta
Interfaz
Página siguiente |