Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseo de Sistemas
UNMSM-EAPIS
Nehil M.C.
2012-2
Patrones
Nehil M.C.
2012-2
Hardware
Nehil M.C.
2012-2
habitualmente
Hardware
Software
Nehil M.C.
2012-2
Problema
Solucin
Patrones de diseo
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Patrones de diseo
Son descripciones de clases y objetos relacionados que estn adaptados para resolver un problema de diseo general en un contexto determinado. Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson
Nehil M.C.
2012-2
Patrones de diseo
Ingeniero Resuelve problemas Aplicando estndares
Las buenas soluciones permanecen, las malas se rechazan. . ingenieros deben conocer y saber aplicar los estndares conocidos Los
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C.
2012-2
Patrones de diseo
Se definen con un alto nivel de abstraccin. Son independientes de los lenguajes de programacin y de los detalles de implementacin. Los patrones promueven y facilitan la reutilizacin de arquitecturas y diseos de software que han demostrado su validez en muchas aplicaciones.
Nehil M.C.
2012-2
Arquitectura
1. 2. 3.
Define la forma y la estructura de la aplicacin de software. Relacionada al propsito de la aplicacin. Arquitectura de mdulos y sus interconexiones
Patrones de diseo
9
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
o De diseo: cuando se deben hacer cambios, es ms fcil hacer cosas mal, que bien. o De entorno: entorno de desarrollo ineficiente
10
Nehil M.C.
2012-2
Cambios de requerimientos
Los cambios en un diseo de software, si no fueron
cambios previstos en el diseo original, degradan el mismo. Incluyen dependencias. Generalmente lo hacen ingenieros que no estaban relacionados con la filosofa de diseo original.
11
Nehil M.C.
2012-2
Patrones de diseo
Erich Gamma, Richard Helm, John Vlissides y Ralph Johnson Design Patterns. 1994
Nehil M.C.
2012-2
Patrones de diseo
Describe una estructura dentro de la cual catalogar y describir patrones Cataloga 23 patrones Destaca estrategias y aproximaciones basadas en el diseo de patrones
Nehil M.C.
2012-2
Patrones de diseo
No crearon los patrones descriptos en el libro. Los descubrieron como existentes dentro de la comunidad del software
Nehil M.C.
2012-2
Patrones de diseo
Porque estudiar patrones de diseo Reuso de soluciones de diseo. Establecer terminologa comn. Dan una perspectiva de alto nivel sobre el anlisis y diseo.
Nehil M.C.
2012-2
Patrn de diseo: proporciona un esquema para refinar los subsistemas o componentes de un sistema de software, o las relaciones entre ellos. Describe estructuras repetitivas de comunicacin de componentes que resuelven un problema de diseo en un contexto particular
Nehil M.C.
2012-2
Patrones de diseo
Programe para una interfaz, no para una implementacin.
Comience cualquier jerarqua que necesite para solucionar su problema con una clase abstracta, sin implementacin de mtodos. Que solo describa los mtodos que debe soportar.
Nehil M.C.
2012-2
Patrones de diseo
Favorecer la composicin frente a la herencia de clases.
Construir objetos que contengan otros objetos. No cargue con todo el peso de heredar mtodos que no necesita
18
Nehil M.C.
2012-2
Patrones de diseo
Lo que puede ser cambiado en su diseo encapslelo en una clase , para no tener necesidad de redisear.
19
Nehil M.C.
2012-2
Patrones de diseo
Herencia de clases Ventajas Se define estticamente Fcil modificacin de la implementacin Desventajas No se cambian implementaciones en tiempo de ejecucin Rompe encapsulamiento
Nehil M.C.
2012-2
Patrones de diseo
Composicin de objetos Ventajas Se define dinmicamente No se rompe encapsulamiento
Nehil M.C.
2012-2
Patrones de diseo
Que debera ser variable en su diseo
Que puede ser cambiado en su diseo, sin necesidad de redisear. Encapsule lo que puede variar. Distintos algoritmos de ordenacin de arreglos
Nehil M.C.
2012-2
Patrones de diseo
Manipular objetos en funcin de la interfaz definida por la clase abstracta, de la cual extiende, tiene dos ventajas:
Nehil M.C.
2012-2
Patrones de diseo
Los clientes no tienen que conocer los tipos especficos de los objetos que usan, basta con que estos cumplan con la interfaz que esperan los clientes.
Los clientes desconocen las clases que implementan dichos objetos; slo conocen la clase abstracta que define la interfaz.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Patrones de diseo
1. 2. 3.
25
Nehil M.C.
2012-2
clases y objetos.
Patrones
de
desacoplar
interfaz
Nehil M.C.
2012-2
Patrones de creacin
The Factory Method retorna una de las posibles subclases de una clase
abstracta dependiendo de los datos que se le provee. The Abstract Factory Method retorna una de las varias familias de objetos. The Builder Pattern separa la construccin de un objeto complejo de su representacin. Varias representaciones se pueden crear dependiendo de las necesidades del programa. The Prototype Pattern inicializa e instancia una clase y luego copia o clona si necesita otras instancias, mas que crear nuevas instancias. The Singleton Pattern es una clase de la cual no puede existir mas de una instancia.
Nehil M.C.
2012-2
Patrones estructurales
Adapter: cambia la interfaz de una clase a la de otra. Bridge: permite mantener constante la interfaz que se presenta al
cliente, cambiando la clase que se usa Composite: una coleccin de objetos Decorator: una clase que envuelve a una clase dndole nuevas capacidades. Facade: rene una jerarqua compleja de objetos y provee una clase nueva permitiendo acceder a cualquiera de las clases de la jerarqua . Flyweight: permite limitar la proliferacin de pequeas clases similares.
28
Nehil M.C.
2012-2
Patrones de comportamiento
Cadena de responsabilidad: permite que un conjunto de clases intenten
manejar un requerimiento. Interpreter: define una gramtica de un lenguaje y usa esa gramtica para interpretar sentencias del lenguaje. Iterator: permite recorrer una estructura de datos sin conocer detalles de cmo estn implementados los datos Observer: algunos objetos reflejan un cambio a raz del cambio de otro, por lo tanto se le debe comunicar el cambio de este ltimo. Strategy: cantidad de algoritmos relacionados encerrados en un contexto a travs del cual se selecciona uno de los algoritmos.
29
Nehil M.C.
2012-2
Patrones de programacin concurrente Patrones de interfaz grfica Patrones de organizacin de cdigo Patrones de optimizacin de cdigo Patrones de robustez de cdigo Patrones de fases de prueba
Nehil M.C.
2012-2
Plantilla GoF
Nombre Un buen nombre es vital porque ser parte del vocabulario de diseo Nombres Alternativos Otros nombres de uso comn para el patrn. Propsito Qu problema pretende solucionar. Motivacin Descripcin del problema y su contexto
Puede consistir en un ejemplo (un escenario) que ilustre la clase de problemas que el patrn intenta resolver. En general se entienden mejor los problemas concretos que los abstractos.
Nehil M.C.
2012-2
Plantilla GoF
Estructura Representacin grfica de las clases de los objetos que participan en el patrn y de
sus relaciones estructurales (estticas) Actualmente,lo ms comn es usar UML.
Participantes Las clases y objetos que participan en el patrn y sus responsabilidades o roles
Consecuencias Qu efectos positivos y negativos implica el uso del patrn?
o Cules son los compromisos de diseo que implica su uso? o Qu aspectos de la estructura del sistema pueden variar de forma independiente?
Nehil M.C.
2012-2
Plantilla GoF
Usos conocidos Al menos dos ejemplos de uso del patrn en aplicaciones reales. Implementacin Cmo puede implementarse el patrn en un lenguaje de programacin?
o Qu dificultades implica? o Hay aspectos dependientes del lenguaje de programacin?
Nehil M.C.
2012-2
gran escala. Capturan el conocimiento de los expertos y lo hacen accesible a toda la comunidad software. Proporcionan un cuerpo de conocimiento utilizable por toda la comunidad software. Favorecen la transmisin de conocimiento entre profesionales y entre clientes y desarrolladores Proporcionan un lenguaje comn. Los nombres de los patrones forman parte del vocabulario tcnico del ingeniero software.
Nehil M.C.
2012-2
del cdigo, aunque dicha reutilizacin se facilita mediante su uso. La integracin de los patrones en el proceso de desarrollo se hace todava de forma manual. El nmero de patrones identificados es cada vez ms grande. Las clasificaciones actuales no siempre sirven de gua para decidir cual usar.
Nehil M.C.
2012-2
que se dan en la prctica son incontables. Los patrones se validan por la experiencia y el debate, no mediante la aplicacin de tcnicas formales
Nehil M.C.
2012-2
Cmo seleccionar un patrn de diseo Considerar cmo los patrones de diseo solucionan
problemas de diseo. Buscar las intenciones de cada patrn. Estudiar cmo se interrelacionan los patrones. Estudiar patrones de propsito similar. Examinar la causa de un rediseo. Considerar que debera ser variable en un diseo.
Nehil M.C.
2012-2
colaboraciones 3.Ver un ejemplo concreto codificado del patrn 4. Elegir nombres para los participantes del patrn que sean significativos en el contexto de la aplicacin
Nehil M.C.
2012-2
Nehil M.C.
2012-2
Problema a resolver
Existe un archivo de texto, el que se debe leer en distintos momentos y bajo condiciones variables.
Como lo resuelvo?
Nehil M.C.
2012-2
Problema a resolver
Varia la estrategia de lectura
Leer solo las palabras que comiencen con t Leer las palabras de ms de 5 caracteres Leer los palndromos
Encapsular
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C.
2012-2
Singleton
Diseo de Software
UNMSM-EAPIS
Nehil M.C.
2012-2
Singleton - Introduccin
Mtodo esttico (o mtodo de clase)
Mtodos y Variables estticas Antes de nada es importante entender que son los mtodos y variables estticas en el desarrollo orientado a objetos.
Singleon
Un mtodo esttico es un mtodo perteneciente a una clase que puede ser invocado sin necesidad de instanciar esa clase. Un mtodo esttico slo puede acceder a miembros estticos de la clase a la cual pertenece. Variable esttica (o variable de clase) Es una variable propia de la clase, lo cual significa que tiene el mismo valor para todas las instancias de la misma. Dicho de otra forma, no existirn dos instancias de una misma clase con diferentes valores almacenados en una variable esttica, sino que el valor ser el mismo para ambas instancias.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Singleton
System.out.println(MiFecha.fechaEstatica); try{
Thread.currentThread().sleep(5000); }catch(InterruptedException e){}
Da/Mes/ao hh:mm:ss
Teniendo esto en cuenta, y suponiendo que la fecha en que se est ejecutando el programa es 21/05/2007 y la hora es 15:25:00, el resultado de nuestro ejemplo ser el siguiente mensaje por pantalla:
21/05/2007 15:25:00
21/05/2007 15:25:05 21/05/2007 15:25:00
Lo que se puede observar es que la variable esttica inicializ su valor en la primera referencia a la clase y no cambi ms durante la ejecucin del programa mientras que la otra variable, llamada variable de instancia, si lo hizo. Puede observarse tambin que se accedi a la variable esttica sin necesidad de instanciar la clase.
Nehil M.C.
2012-2
Singleton
Esto producir lo siguiente: 21/05/2007 15:25:00 21/05/2007 15:25:05 21/05/2007 15:25:00 21/05/2007 15:25:00
Lo cual nos muestra adems de lo dicho anteriormente, que las distintas instancias de una misma clase comparten las variables estticas. Universidad Nacional Mayor de San
Marcos
Nehil M.C. 2012-2
Asegurar que una clase tiene una nica instancia y proveer un punto de acceso global a la misma, es decir, que pueda accederse fcilmente a dicha instancia desde cualquier lugar del sistema.
Nehil M.C.
2012-2
Singleton Solucin
El Patrn Singleton debe usarse cuando:
Singleton
Debe existir una nica instancia de una clase y sta debe poder ser accesible desde un punto de acceso bien conocido. La nica instancia debera ser extensible por subclases y los clientes deberan poder usar una instancia que herede de la clase sin modificar su cdigo.
Nehil M.C.
2012-2
Singleton Solucin
Estructura
Singleton
Singleton
Nehil M.C.
2012-2
Singleton Solucin
Singleton Participantes
Singleton
- Define una operacin Instance que permite a los clientes acceder a la nica instancia. Esta operacin es una operacin de clase (ver mtodo de clase o esttico).
- Debera ser responsable de crear su propia nica instancia.
- El constructor de la clase Singleton debe ser protegido, de modo tal que sea la clase la nica que puede usarlo y as controlar la creacin de instancias de la clase.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Singleton Solucin
Singleton
Colaboraciones Los clientes acceden una instancia Singleton nicamente a travs de la operacin de instancia Singleton.
Nehil M.C.
2012-2
Singleton - Consecuencias
Singleton
Acceso controlado a la nica instancia. Dado que una clase Singleton encapsula su nica instancia, tiene un control estricto de cmo y cuando los clientes acceden a ella. Espacio de nombre reducido. El patrn Singleton es una mejora de las variables globales. Evita la contaminacin del espacio de nombres con variables globales de que almacenan una sola instancia. Permite el refinamiento de operaciones y de la representacin. La clase Singleton puede ser extendida y resulta fcil configurar una aplicacin para que utilice esta subclase. Se puede configurar una aplicacin con la instancia que sea necesaria en tiempo de ejecucin. Permite un nmero variable de instancias. El patrn permite cambiar de ideas y empezar a usar ms de una instancia con facilidad. Es ms, se puede usar el mismo enfoque para control el nmero de instancias que la aplicacin usa. Para esto lo nico necesario es modificar la operacin que garantiza el acceso a la instancia Singleton.
Nehil M.C.
2012-2
Singleton Ejemplo
Singleton
Consideremos una aplicacin para un video club que desea administrar la venta y alquiler de pelculas. Supongamos que deseamos agregarle una funcionalidad a dicho sistema la cual permita seleccionar diariamente una pelcula recomendada para ese da. Esto podra dar lugar a la existencia de una clase Recomendada. Diseando la misma como Singleton nos asegura de que a lo largo de todo el sistema (el cual podra estar distribuido entre sucursales) se determine una nica vez cul ser la pelcula recomendada para ese da y que sta sea una sola.
Recomendada
private static Recomendada instancia = null; private Pelicula pelicula
public static Recomendada instance() private Recomendada() public Pelicula getPelicula() public void setPelicula(Pelicula nuevaPelicula)
Nehil M.C.
2012-2
Factory Method
Diseo de Software
UNMSM-EAPIS
Nehil M.C.
2012-2
Framework Es un conjunto de clases cooperando entre si con el fin de obtener un diseo reusable para ciertas clases de software especfico. Estas clases son abstractas y a partir del framework en general pueden desarrollarse varias aplicaciones creando clases que implementen esas clases abstractas. Esto conlleva a crear aplicaciones mucho ms rpidamente y todas las aplicaciones desarrolladas a partir de un mismo framework tienen estructuras muy similares.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Como ejemplo de framework podramos considerar uno desarrollado con el fin de crear a partir del mismo distintos editores grficos para diferentes ramas de la produccin artstica como ser dibujo, creacin musical, retoque fotogrfico, etc. Lo importante aqu a considerar es que a pesar de que cada aplicacin de stas tengan usos aparentemente muy diferentes, todas comparten una estructura de base bien definida, como ser por ejemplo las funcionalidades crear nuevo proyecto,abrir proyecto existente, guardar proyecto, y muchos ms.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Definir una interface para crear un objeto, pero permitir que las subclases decidan que clase instanciar. Permite delegar la instanciacin a las subclases.
Los frameworks utilizan clases abstractas para definir y mantener relaciones entre objetos. Generalmente el framework tambin es responsable de crear estos objetos.
Nehil M.C.
2012-2
Factory Method
CreateDocument() NewDocument()
OpenDocument()
Imagen
AplicacionDibujo CreateDocument()
Nehil M.C.
2012-2
Nehil M.C.
2012-2
Factory Method
FactoryMethod() nuevoProducto()
Producto = FactoryMethod()
ProductoConcreto
CreadorConcreto
FactoryMethod()
Nehil M.C.
2012-2
Participantes
Producto: Define la interface de los objetos que el mtodo
FactoryMethod() crea. ProductoConcreto: implementa la interface de Producto. Creador: declara el mtodo factory, el cual retorna un objeto del tipo Producto. A su vez podra definir una implementacin por defecto para el Factory Method que retorne un objeto de ProductoConcreto por defecto. A su vez debera llamarse al FactoryMethod para crear instancias de Producto. CreadorConcreto: Implementa el mtodo FactoryMethod de la clase Creador de tal forma que este cree instancias de la clase ProductoConcreto correspondiente. Si en Creador se le dio a FactoryMethod una implementacin por defecto, CreadorConcreto puede hacer un override de la misma.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Colaboraciones
Factory Method
La clase Creador cuenta con que sus subclases implementen el factory method de forma tal de que este retorne una instancia de la clase ProductoConcreto correspondiente.
Nehil M.C.
2012-2
que crear un objeto directamente, dado que las clases padres tiene un factory method para crear objetos. Como las subclases pueden hacer override del factory method, stas podrn crear objetos adecuados a sus necesidades. Conecta jerarquas paralelas de clases. Supongamos tener una clase abstracta que hace uso de otra clase como cliente. Esta clase tendr una serie de subclases las cuales podran necesitar usar como clientes una serie de subclases de aquella de la que la clase padre es cliente. Colocando un factory mehtod en la clase padre y permitiendo que cada subclase implemente este mtodo de acuerdo a la subclase correspondiente de la clase de la cual es cliente nos lleva a tener bien definido el paralelismo entre las clases clientes y las clases servidor.
Nehil M.C.
2012-2
Factory Method
es_cliente_de
CrearManipulador()
Linea
Texto
ManipLinea
ManipTexto
CrearManipulador()
CrearManipulador()
Nehil M.C.
2012-2
OpenDocument()
Texto
AplicacionTexto
CreateDocument() return new Texto();
Nehil M.C.
2012-2
Abstract Factory
Nehil M.C.
2012-2
Abstract Factory
El patrn Abstract Factory proporciona una interfaz para crear familias de objetos relacionados o que dependen entre s, sin especificar sus clases concretas. Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre s y haciendo transparente el tipo de familia concreta que se est usando. Qu queremos decir con familias de productos? Imaginemos que tenemos una aplicacin y queremos que pueda mostrarse en mltiples sistemas de ventanas. Por ejemplo, en una ventana no queremos que se mezclen botones tipo Windows 95 con barras de desplazamiento de estilo Mac. Por esto, debemos asegurarnos que todos los objetos de interfaz de usuario que creemos pertenezcan a la misma familia.
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C. 2012-2
Abstract Factory
Proporciona una interfaz para la creacin de distintos tipos de objetos relacionados sin necesidad de especificar a qu clase concreta pertenecen.
Otros nombres
Kit o Toolkit
Nehil M.C.
2012-2
Abstract Factory
Un caso relativamente comn de uso de este patrn se da en la creacin de familias de interfaces grficos en las cuales los elementos (productos) del interfaz se mantienen constantes (por ejemplo labels, botones, cajas de texto ...) pero el dibujado de dichos elementos puede delegarse en distintas familias de forma que, en funcin de la fbrica seleccionada obtenemos unos botones u otros.
Nehil M.C.
2012-2
Nehil M.C.
2012-2
Un sistema debe ser independiente de los procesos de creacin, composicin y representacin de sus productos El uso de este patrn est recomendado para situaciones en las que tenemos una familia de productos concretos y prevemos la inclusin de distintas familias de productos en un futuro.
Permite que los clientes slo conozcan las interfaces de los productos y no sus implementaciones concretas.
Se quiere proporcionar una librera de productos y solo se quiere revelar sus interfaces
Universidad Nacional Mayor de San Marcos E.A.P. de Ingeniera de Sistemas
Nehil M.C.
2012-2
Nehil M.C.
2012-2
Abstract Factory
AbstractProduct declara la interfaz para un cierto tipo de producto y los ConcreteProduct implementan dicha interfaz y definen un tipo de producto que ser creado por la correspondiente ConcreteFactory.
Nehil M.C.
2012-2
Abstract Factory
Normalmente se crea una instancia de alguna ConcreteFactory para la creacin de los objetos ConcreteProduct. Esto es en tiempo de inicializacin. AbstractFactory delega la creacin de productos concretos (ConcreteProduct) en las ConcreteFactory.
Nehil M.C.
2012-2
Ventajas
Ayuda a controlar los objetos que se crean Encapsula la responsabilidad de creacin Hace fcil el intercambio de familias de productos Cambio de factory -> Cambio de familia Fomenta la consistencia entre productos
Nehil M.C.
2012-2
Desventajas
Puede ser difcil incorporar nuevos tipos de productos (cambiar AbstractFactory y sus factorias concretas)
Nehil M.C.
2012-2
Nehil M.C.
2012-2
Abstract Factory
Nehil M.C.
2012-2