Sei sulla pagina 1di 91

Ingeniera de Sistemas

Introduccin.

Patrones.
Descripcin de los Patrones.
Ejemplo: Patrones en el MVC de Smalltalk.
El catlogo de patrones.

Patrones de Creacin.
Patrones Estructurales.
Patrones de Comportamiento.

Una arquitectura orientada a objetos bien


estructurada est llena de patrones. La
calidad de un sistema orientado a objetos se
mide por la atencin que los diseadores han
prestado a las colaboraciones entre sus
objetos.
Los patrones conducen a arquitecturas ms
pequeas, ms simples y ms comprensibles
G. Booch

Disear software orientado a objetos es


difcil pero disear software orientado a
objetos reutilizable es ms difcil todava.
Diseos generales y flexibles son muy
difciles de encontrar la primera vez
Qu conoce un programador experto que
desconoce uno inexperto?
Reutilizar soluciones que funcionaron en el
pasado: Aprovechar la experiencia
4

habitualmente
Hardware

Software

Poder reusar componentes y


lograr un mantenimiento fcil.
Lograr un software flexible

Problema

Solucin

Patrones de diseo

Un esquema que se usa para solucionar un


problema.
El esquema ha sido probado extensivamente, y
ha funcionado. Se tiene experiencia sobre su uso.
Elementos principales:

Nombre
Problema
Solucin: Descripcin abstracta
Consecuencias

Reutilizar diseos abstractos que no incluyan

detalles de la implementacin.
Un patrn es una descripcin del problema y
la esencia de su solucin, que se puede
reutilizar en casos distintos.
Es una solucin adecuada a un problema
comn.
Asociado a orientacin a objetos, pero el
principio general es aplicable a todos los
enfoques de diseo software.

Nombre del patrn.

Problema.

Solucin.

Consecuencias.

Describe el problema de diseo, junto con sus soluciones y


consecuencias.
Vocabulario de diseo.
Describe cundo aplicar el patrn.
Explica el problema y su contexto.
Elementos que forman el diseo, relaciones, responsabilidades.
No un diseo concreto, sino una plantilla que puede aplicarse en
muchas situaciones distintas.
Resultados, ventajas e inconvenientes de aplicar el patrn.
ej.: relacin entre eficiencia en espacio y tiempo; cuestiones de
implementacin etc.

Separar los objetos con los datos ( modelo),


sus visualizaciones (vistas) y el modo en que
la interfaz reacciona ante la entrada al
usuario (controlador).
Separar estos componentes, para aumentar la
flexibilidad y reutilizacin.
Desacoplar vistas de modelos, mediante un
protocolo de subscripcin/notificacin.
Cada vez que cambian los datos del modelo,
avisar a las vistas que dependen de l. Estas
se actualizan.

Asignacin de Responsabilidades Larman


GRASP

Creacin Gamma y Grand

Fcatory Method, Abstract Factory, Builder, Prototype,


Singleton, etc.

Estructurales Gamma y Grand

Adapter, Iterator, Bridge, facade, Flyweight, Virtual


Proxy, etc.

Arquitecturales Bushman

Distribuidos, Interactivos, adaptables, etc

Larman
Gamma
Bushman
Grand

10
23
17
41

patrones
patrones
patrones
patrones

Experto
Creador
GRASP

Bajo acoplamiento

Alta Cohesin
PATRONES

Controlador

GOF

Creacionales

Instancia nica,
mtodo de fabricacin ,
Fabrica, constructor, prototipo .

Estructurales

Adaptador, puente, objeto


Compuesto, envoltorio, fachada,
Peso ligero, proxy

Comportamiento

Cadena responsabilidad, orden,


Intrprete, iterador, mediador, recuerdo,
Observador, estado, estrategia,
mtodo plantilla, visitante

Son para la asignacin de responsabilidades,


"General Responsibility Assignment Software
Patterns".
Son una serie de "buenas prcticas" de
aplicacin recomendable en el diseo de
software.
Patrones GRASP:
Experto,
Creador,
Bajo Acoplamiento,
Alta Cohesin,
Controlador

En que consiste la responsabilidad?


Obligaciones o contratos de una clase

Dos clases de responsabilidades


Conocer: informacin del objeto
Hacer: acciones con otros objetos

Es la abreviacin del grupo Gang of Four,


compuesto por Erich Gamma, Richard Helm,
Ralph Jhonson y John Vlisides, quienes en su
publicacin Design Patterns describen 23
patrones de diseo comnmente utilizados y
de gran aplicabilidad en problemas de diseo
usando modelamiento UML.

Documentar la experiencia en el diseo, en


forma de un catlogo de patrones.
Categoras de patrones:
De creacin: implica el proceso de instanciar
objetos.
Estructurales: composicin de objetos.
De comportamiento: cmo se comunican los
objetos, cooperan y distribuyen las
responsabilidades para lograr sus objetivos.

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.
Antes de comenzar a usar un patrn
primero debe ser creado como un diagrama
estndar de UML o existir como tal en
algn repositorio

Permite a una clase usar datos y servicios


provistos por otras clases independientes
proveyendo un acceso uniforme.

1.

2.

3.

4.

5.

Instancia nica (Singleton) : Asegure que una clase slo tiene


una instancia , y proporcionarle un punto global de acceso a
dicha instancia
Mtodo fabricacin(Factory Method) : Define un interfaz
para crear un objeto, pero dejar a subclases decidir sus
instancias . El Mtodo De la fbrica deja a una clase la
creacin de ejemplares o copias a subclases.
Fabrica abstracta (Abstract Factory) : Proporciona un interfaz
para crear las familias de objetos relacionados o
dependientes sin especificar sus clases concretas.
Constructor (Builder): Separa la construccin de un objeto
complejo de su representacin , de modo que el mismo
proceso de construccin pueda crear representaciones
diferentes.
Prototipo(Prototype) : Crea nuevos objetos crendolos de una
instancia ya existente.

6.

7.
8.
9.

10.

11.

12.

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
Puente ( bridge) :Desacopla una abstraccin de su implementacin
de modo que los dos puedan variar por separado.
Peso ligero (Flyweight ) :Reduce la redundancia cuando gran
cantidad de objetos poseen idntica informacin.
Fachada (Facade) : Proporciona un interfaz unificada a un juego de
interfaces en un subsistema. La fachada define un interfaz de nivel
ms alto que hace el subsistema fcil de usar.
Envoltorio (Decorator) :Adjunta responsabilidades adicionales a un
objeto dinmicamente. Los decoradores proporcionan una
alternativa flexible a la subclasificacin para ampliar la
funcionalidad.
Objeto compuesto (Composite) :El objeto compuesto permite
tratar a jerarquas de objetos en individuales y composiciones de
objetos uniformemente como si se tratase de objetos simples
Proxy : Mantiene un representante de un objeto

13.

14.

15.

16.

17.
18.

Cadena responsabilidad (Chain of Responsibility ): Encadena los objetos de


encubrimiento y pasa la peticin a lo largo de la cadena hasta que un objeto
la maneja. Permite establecer la lnea que deben llevar los mensajes para
que los objetos realicen la tarea indicada.
Orden (Command) : Encapsula una operacin en un objeto, permitiendo
ejecutar dicha operacin sin necesidad de conocer el contenido de la
misma.
Intrprete (Interpreter) :Considerando un lenguaje , define un representacin
para su gramtica con un intrprete que usa la representacin para
interpretar sentencias en el mismo lenguaje.
Iterador (Iterator) :Proporciona un modo de tener acceso a los elementos de
un objeto agregado secuencialmente sin exponer su representacin
subyacente.
Mediador (Mediator) :Define un objeto que coordine la comunicacin entre
objetos de distintas clases, pero que funcionan como un conjunto.
Recuerdo (Memento) : Sin violar encapsulacin, captura y externaliza el
estado interno de un objeto de modo que el objeto pueda ser restaurado a
este estado ms tarde.

19.

20.
21.

22.

23.

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
da automticamente.
Estado (State) :Permite que un objeto modifique su comportamiento
cada vez que cambie su estado interno
estrategia (Strategy) : Define una familia de algoritmos (mtodos),
encapsula cada uno, y los hace permutables. La estrategia deja al
algoritmo (mtodo) variar por separado de los clientes (objetos)
que lo usan o invocan .
mtodo plantilla ( template method) :Define el esqueleto de un
algoritmo en una operacin, aplazando algunos pasos a subclases.
El Mtodo de Plantilla deja a subclases redefinir los ciertos pasos de
un algoritmo sin cambiar la estructura del algoritmo.
Visitante (Visitor) :Permite definir nuevas operaciones sobre una
jerarqua de clases sin modificar las clases sobre las que opera.

Singleton
Factory Method
Abstract Factory
Builder
Prototype

Abstraen el proceso de creacin de


instancias.
Ayudan a hacer a un sistema independiente
de cmo se crean, se componen y se
representan sus objetos.
Un patrn de creacin de clases usa la
herencia para cambiar la clase de la instancia
crear.
Un patrn de creacin de objetos delega la
creacin de la instancia en otro objeto.

Objetivo:

Garantiza que una clase slo tenga una instancia, y


proporciona un punto de acceso global a ella

Nombres:
nico

Ejemplo:

Una nica cola de impresin para mltiples


impresoras

Cuando deba haber una nica instancia de


una clase

Acceso controlado a la nica instancia


Espacio de nombre reducido
Ms flexible que las operaciones de clase

Objetivo:

Define una interfaz para crear un objeto, pero deja


que sean las subclases quienes decidan qu clase
instanciar

Nombres:

Virtual Constructor, Mtodo de Fabricacin

Ejemplo:

Conexiones mltiples

Una clase no puede prever la clase de objetos


que debe crear
Una clase quiere que sean sus subclases
quienes especifiquen los objetos que sta
crea
Las clases delegan la responsabilidad en una
de entre varias clases auxiliares

Creador
<<Abstract>>
Producto

MetodoDeFabricacion()
UnaOperacion()

CreadorConcreto
ProductoConcretoA

ProductoConcretoB
MetodoDeFabricacion()
<<creates>>

...
producto = MetodoDeFabricacion()
...

return new ProductoConcreto

Contabilidad
<<Abstract>>
Conexion

MetodoDeFabricacion()
UnaOperacion()

Fabrica
SqlConexion

OracleConexion
creaConexion()
<<creates>>

...
miConexion= miFab.creaConexion()
...

return new OracleConexion

Conexion conx = new OracleConexion()


Conexion conx = new SQLConexion()
Conexion conx = new MySqlConexion()
Conexion conx = new PostgreSqlConexion()

Fabrica
Oracle

MySql

Sql
Server

PostgreSql

Conexion

<<Abstract>>
Conexion

OracleConexion

SqlConexion

Fabrica
OracleConexion
creaConexion()
<<creates>>

Objetivo:

Proporciona una Interfaz para crear familias de objetos


relacionados sin especificar clases concretas

Nombres:

Kit, Fbrica Abstracta

Ejemplo:

Toolkit de interfaces de usuario en Windows, Linux, Mac

<<Interface>>
IFabricaAbstracta
Cliente
CrearProductoA()
CrearProductoB()

IProductoA

FabricaConcreta1
CrearProductoA()
CrearProductoB()

FabricaConcreta2

<<creates>>

ProductoA2

ProductoA1

CrearProductoA()
CrearProductoB()

IProductoB

<<creates>>
ProductoB2
<<creates>>

ProductoB1

<<Interface>>
FabricaAbstracta
Pagos
creaConexion() : Conexion

Conexion

FabricaHeredada
CrearConexion()

<<creates>> OracleConexion

SqlConexion

<<Interface>>
FabricaAbstracta
creaConexion() : Conexion

FabricaHeredada
CrearConexion()

Conexion

OracleConexion

SqlConexion

Objetivo:

Permitir que el cdigo cliente controle el proceso de


construccin de los objetos.
Separar la construccin de un objeto de su
representacin, de manera que el mismo procesos de
construccin pueda crear diferentes representaciones

Nombres:

Constructor

Ejemplo:

Robot constructor de hamburguesas

El algoritmo para crear un objeto complejo


debiera ser independiente de las partes de
que se compone dicho objeto y de cmo se
ensamblan
El proceso de construccin debe permitir
diferentes representaciones del objeto que
est siendo construido

Permite variar la representacin interna de un


producto
Asla el cdigo de construccin y
representacin
Proporciona un control ms fino sobre el
proceso de construccin

Cliente
(from Logical View)

Director

-constructor
Constructor

Construir()
ConstruirParte()

para todos los objetos {


constructor->ConstruirParte()
}

ConstructorConcreto

<<creates>>
Producto

ConstruirParte()
ObtenerResultado()

Cliente
(from Logical View)

Builder
Construir()

-constructor
<<interface>>
Robot
trabajar()
cargaAcciones()

para todos los objetos {


robot->cargaAcciones ()
}
RobotHamburguesa

RobotHotDog

trabajar()
cargaAcciones()

trabajar()
cargaAcciones()

<<creates>>
ProductoHam

ProductoHot

<<interface>>
Robot
trabajar()
cargaAcciones()

RobotHamburguesa

RobotHotDog

trabajar()
cargaAcciones()

trabajar()
cargaAcciones()

RobotHamburguesa
trabajar()
cargaAcciones()

RobotHotDog

cargaAcciones()

Builder
Construir()

-constructor
<<interface>>
Robot
trabajar()
cargaAcciones()

Objetivo:

Crear nuevos objetos copiando una instancia


prototpica

Nombres:
Prototipo

Ejemplo:

Editor de partituras musicales

Cuando las clases a instanciar sean


especificadas en tiempo de ejecucin
Para evitar jerarquas de clases de fbricas
con jerarqua de clases de productos
Cuando las instancias de clases puedan tener
un estado de entre un conjunto reducido

Aadir y eliminar productos en tiempo de


ejecucin
Especificar nuevos objetos modificando
valores
Especificar nuevos objetos variando la
estructura
Reduce la herencia
Configurar dinmicamente una aplicacin con
clases

Prototype

Cliente
prototipo

p = prototipo->Clonar()

Clonar() : Prototype

PrototipoConcreto1
Clonar() : Prototype

devuelven una copia


a s mismos

PrototipoConcreto2
Clonar() : Prototype

devuelven una copia


a s mismos

prototipo

p = circulo.Clonar()

Figura

PruebaFiguras

Clonar() : Figura

Circulo

Cuadrado

Clonar() : Figura

Clonar() : Figura

devuelven una copia


a s mismos

devuelven una copia


a s mismos

Potrebbero piacerti anche