La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

PATRONES DE DISEÑO. A lo largo de los años diseñadores con experiencia en programación orientada a objetos han desarrollado soluciones que sirven para.

Presentaciones similares


Presentación del tema: "PATRONES DE DISEÑO. A lo largo de los años diseñadores con experiencia en programación orientada a objetos han desarrollado soluciones que sirven para."— Transcripción de la presentación:

1 PATRONES DE DISEÑO

2 A lo largo de los años diseñadores con experiencia en programación orientada a objetos han desarrollado soluciones que sirven para resolver ciertos problemas. Estas soluciones generalmente consisten de un conjunto de clases relacionadas mediante herencia, composición o delegación, denominadas patrones de diseño. Si se dispone de un conjunto suficientemente completo de patrones de diseño (que abarquen la mayoría de los problemas que usualmente encuentra el diseñador) se cuenta con una herramienta poderosa para el diseño de software orientado a objetos. Patrones de diseño

3 En este caso el mecanismo de diseño consiste en identificar cual patrón de diseño sirve para resolver determinado problema. Una vez que se ha determinado cual patrón de diseño se debe usar, éste determina las clases y objetos que se requieren Patrones de diseño

4 Un patrón tiene cuatro elementos esenciales:  El nombre del patrón: consiste en una o dos palabras que podemos usar para describir un problema de diseño, sus soluciones y consecuencias.  El problema: describe cuando aplicar el patrón. Explica el problema y su contexto.  La solución: describe los elementos que constituyen el diseño, sus relaciones, responsabilidades y colaboradores.  La solución no describe un diseño o implementación en particular. Es una plantilla que puede ser aplicada en muchas situaciones diferentes. Patrones de diseño

5 Un patrón tiene cuatro elementos esenciales:  Las consecuencias: son los resultados de aplicar el patrón.  Generalmente tienen que ver con que el programa resultante sea más o menos eficiente tanto en velocidad de ejecución como en memoria utilizada. También tienen que ver con la flexibilidad, transportabilidad y facilidad de extender el programa. Patrones de diseño

6 Ejemplo: Suponga que se desea desarrollar una aplicación con interfaz de usuario gráfica (GUI), que sea fácil de portar a dos sistemas operativos: Windows y MacIntosh. Las GUI tienen una serie de objetos, generalmente conocidos como Widgets, tales como: ScrollBar, List, Button, etc. Se presenta el problema de que la apariencia (look and feel) de estos objetos es diferente en cada sistema operativo. La aplicación debe poder crear los objetos con la apariencia apropiada para cada sistema operativo.

7 Para crear un Widget se puede usar la instrucción new: ScrollBar sb = new WindowsScrollBar(); Si se desea un ScrollBar para el MacIntosh la operación es diferente: ScrollBar sb = new MacScrollBar(); Si se crean muchos Widgets (como suele ocurrir en aplicaciones de cierta complejidad) será muy difícil cambiar de un "look and feel" a otro, dado que hay que modificar muchas instrucciones que están diseminadas por diferentes partes del programa Patrones de diseño

8 Este problema se puede solucionar con el patrón de diseño conocido como Fábrica Abstracta. Una fábrica es un objeto que se encarga de crear otros objetos. Los elementos de este patrón son:  Una fábrica abstracta y varias subclases que representan las fábricas concretas  Un producto abstracto y varias subclases que representan los productos concretos Patrones de diseño

9 Para la aplicación GUI se tiene: Una fábrica abstracta denominada GUIFactory, Dos fábricas concretas: WindowsFactory (crea Widgets con apariencia “Windows”) y MacFactory (crea Widgets con Apariencia “MacIntosh”). Patrones de diseño GUIFactory createScrollBar() createButton() createMenu() WindowsFactory createScrollBar() createButton() createMenu() MacFactory createScrollBar() createButton() createMenu()

10 Los productos son los Widgets. Se necesita una clase Widget (el producto abstracto) y varias subclases que correspondientes a los diferentes elementos de una GUI: ScrollBar, Button, Menu, etc: Patrones de diseño Widget ScrollBar scrollTo() WindowsScrollBar scrollTo() Button press() Menu popUp() MacScrollBar scrollTo()

11 Para crear un ScrollBar en lugar de invocar la operación new directamente: ScrollBar sb = new WindowsScrollBar(); Podemos invocar la fábrica: ScrollBar sb = guiFactory.createScrollBar(); La variable guiFactory debe ser inicializada al comienzo del programa con una de las fábricas concretas: GUIFactory guiFactory = new MacFactory(); Patrones de diseño

12 Descripción de patrones de diseño Nombre del patrón y clasificación Propósito. ¿Qué hace el patrón?. ¿Para qué sirve?. Qué problemas de diseño resulte? Otros nombres Justificación Aplicabilidad. En que situaciones se debe utilizar. En que situaciones no se debe utilizar. Estructura. Representación gráfica (UML) Participantes. Clases y objetos que participan y sus responsabilidades Consecuencias. Rendimiento, facilidad de mantenimiento... Patrones de diseño

13 Implementación. Consejos, técnicas, asuntos específicos de algunos lenguajes Código ejemplo Ejemplos de uso Patrones relacionados Patrones de diseño

14 ¿Qué problemas resuelven los patrones de diseño? Encontrar objetos apropiados Determinar la granularidad de los objetos Especificar las interfaces de los objetos Especificar las implementaciones de los objetos (Clases) Implementar mecanismos de reutilización de código Herencia versus Composición Delegación Patrones de diseño

15 Tipos de patrones Patrones creacionales Patrones estructurales Patrones de comportamiento

16 Patrones de diseño Patrones creacionales Ayudan a que un sistema sea independiente de cómo sus objetos son creados Patrones creacionales de clase. Usan herencia para variar las clases que son instanciadas Patrones creacionales de objeto. Delegan la creación de objetos a otros objetos Los patrones creacionales contienen conocimiento de qué clases concretas el sistema usa Esconden la forma en que los objetos son creados

17 Patrones de diseño Lo único que el sistema total conoce de los objetos son sus interfaces Dan flexibilidad con respecto a Qué es creado Quién crea los objetos Cómo se crean y cuándo La configuración puede ser estática (en tiempo de compilación) o dinámica (en tiempo de ejecución) Pueden ser competidores o pueden complementarse

18 Patrones de diseño Ejemplo: construir un laberinto para un juego enter() Room WallDoor Maze enter() setSide() getSide() roomNumber enter() enter() isOpen MapSite

19 Patrones de diseño public class MapSite { public abstract void enter() } public class Room extends mapsite() { private MapSite sides[4]; private int roomNumber; public Room(int roomNo) {... } public MapSite getSide(Direction dir) {... } public void setSide(Direction dir, MapSite site) {... }; }

20 Patrones de diseño public class Wall extends MapSite { public void enter() {... } } public class Door extends Mapsite() { public Door(Room r1, Room r2) {... } public void enter() {... } public Room otherSideFrom(Room r) {... } private Room room1; private Room room2; private boolean isOpen; }

21 public class Maze { public Maze() {... } public void addRoom(Room r) {... } public Room RoomNo(int n) {... } private... ;... }

22 Public class MazeGame { Maze createMaze() { Maze aMaze = new Maze(); Room r1 = new Room(1); Room r2 = new Room(2); Door theDoor = new Door(r1, r2); aMaze.addRoom(r1); aMaze.addRoom(r2); r1.setSide(Direction.North, new Wall()); r1.setSide(Direction.East, theDoor); r1.setSide(Direction.South, newWall); r1.setSide(direction.West, new Wall); r2.setSide(Direction.North, new Wall()); r2.setSide(Direction.East, new Wall); r2.setSide(Direction.South, newWall); r2.setSide(direction.West, theDoor); return aMaze; }

23 Patrones creacionales Abstrac Factory Propósito. Proveer una interfaz para crear familias de objetos relacionados sin especificar sus clases concretas Otros nombres. Kit Motivación. Ejemplo de interfaces de usuario.

24 Patrones creacionales Aplicabilidad. Usar este patrón cuando Un sistema debe ser independiente de como sus productos son creados, compuestos y representados Un sistema debe ser configurado con una de múltiples familias de productos Una familia de objetos relacionados está diseñada para ser usados conjuntamente Se desea proveer una biblioteca de clases de productos y sólo se desea revelar sus interfaces, no sus implementaciones

25 Patrones creacionales Estructura AbstracFactory createProductA() createProductB() createProductC() ConcreteFactory2 createProductA() createProductB() createProductC() ConcreteFactory1 createProductA() createProductB() createProductC() AbstracProductA ProductA1 ProductA2 AbstracProductB ProductB1ProductB2

26 Patrones creacionales Participantes Abstract Factory (WidgetFactory) ConcreteFactory (WindowsFactory, MacFactory) AbstractProduct (ScrollBar, Menu) ConcreteProduct(WindowsScrollBar, WindowsMenu) Client

27 Patrones creacionales Colaboraciones Normalmente se crea una única instancia de una clase concreta en tiempo de ejecución. Esta fábrica crea objetos que tienen determinada interfaz. Para crear objetos diferentes se usar una fábrica diferente Fábrica abstracta difiere la creación de objetos a las subclases concretas.

28 Patrones creacionales Consecuencias Aísla las clases concretas. Hace fácil cambiar de familia de productos Promueve la consistencia entre productos Es difícil soportar nuevos tipos de productos

29 Patrones creacionales Implementación Se puede implementar la fábrica como un singleton Creación de productos. La fabrica abstracta solo declara la interfaz de los productos Usar el patrón FactoryMethod Colocar en los métodos create un parámetro que indique lo que se desea crear

30 Patrones creacionales Singleton Propósito. Asegurar que una clase tiene una sola instancia y proveer un punto global de acceso a la misma Motivación. Hay casos en que solo debe haber un objeto de una clase: print spooler, file system, window manager Aplicabilidad. Usar cuando Debe haber exactamente una instancia de una clase Cuando la única instancia debe ser extendible y los clientes deben ser capaces de usar la instancia extendida sin modificar el código

31 Patrones creacionales Estructura Singleton static instance() singletonOperation() getSingletonData() static uniqueInstance singletonData

32 Patrones creacionales Participantes. Singleton Define una operación “instance” que permite a los clientes acceder a la única instancia Puede ser responsable de crear su única instancia Colaboraciones Los clientes acceden a la instancia única a través de la operación “instance”

33 Patrones creacionales Consecuencias Acceso controlado a la instancia única Espacio de nombres reducido (no se requieren variables globales) Permite refinamiento de operaciones y representación. La clase se puede extender. Más flexible que las operaciones de clase (métodos estáticos).

34 Patrones creacionales Implementación Class Singleton { private static Singleton instance=null; public static Singleton instance() { if (instance == null) { instance = new Singleton(); } return instance; } protected Singleton() {} }

35 Patrones creacionales Factory method Propósito. Definir una interfaz para crear objetos, dejando que las subclases decidan que clase instanciar. Motivación Aplicabilidad. Usar cuando Una clase no puede anticipar la clase de objetos que debe crear Se necesita que las subclases especifiquen los objetos a ser creados

36 Patrones creacionales Estructura Producto operacion() ProductoConcreto operacion() Creator factoryMethod() CreadorConcreto factoryMethod()

37 Patrones creacionales Participantes Producto ProductoConcreto Creador CreadorConcreto Colaboraciones El patrón Creator delega en las subclases la creación de los objetos.

38 Patrones creacionales Consecuencias Eliminan la necesidad de especificar las clases de los objetos creados El código solo trabaja con interfaces Desventaja. Es posible que los clientes tengan que crear una subclase de creador solo para crear un objeto

39 Patrones creacionales Implementación Posibles implementaciones El creador es una clase abstracta El creador es una clase concreta Métodos fábrica parametrizados

40 Patrones creacionales Builder Propósito. Separar la construcción de un objeto complejo de su representación de manera que el mismo proceso de construcción pueda crear diferentes representaciones Motivación. Ejemplo: una aplicación que convierte texto RTF a diferentes formatos: texto ascii, TeX, TextWidget.

41 Patrones creacionales Estructura

42 Patrones creacionales Aplicabilidad. Usar cuando El algoritmo para crear un objeto complejo debe ser independiente de las partes que constituyen el objeto y su ensamblaje El proceso de construcción debe permitir representaciones diferentes del objeto construido. Participantes Builder (TextConverter) ConcreteBuilder (ASCIIConverter, TeXConverter,...) Director (RTFReader). Product (ASCIIText, TeXText)

43 Patrones creacionales Colaboraciones El cliente crea el objeto Director y lo configura con el constructor (builder deseado) El director le notifica al constructor cada vez que se debe construir una parte del producto El constructor procesa solicitudes del director y agrega partes al producto El cliente obtiene el producto del constructor

44 Patrones creacionales Consecuencias Permite variar la representación interna del producto El objeto constructor provee al director con una interfaz para construir el producto. Permite aíslar el código de construcción y representación Permite un control fino del proceso de construcción. Los objetos son construidos paso por paso. Cuando el proceso termina el producto es retribuido

45 Patrones creacionales Implementación Típicamente hay una clase abstracta Builder (o interfaz) que define una operación para crear cada componente. Las clases concretas sobrecargan esas operaciones. No hay clase abstracta para el producto debido a que éstos pueden variar mucho

46 Patrones creacionales Prototype Propósito. Especificar los tipos de objetos a ser creados usando un prototipo. Crear nuevos objetos clonando el prototipo Motivación

47 Patrones creacionales Aplicabilidad. Usar cuando Las clases a instanciar se especifican en tiempo de ejecución Para evitar una jerarquía de fábricas paralelas a la jerarquía de productos

48 Patrones creacionales Estructura

49 Patrones creacionales Participantes Prototype Concrete prototype Client Colaboraciones Un cliente solicita a un prototipo que se clone a si mismo

50 Patrones creacionales Consecuencias Consecuencias similares a AbstractFactory Se pueden agregar y eliminar productos en tiempo de ejecución Menos uso de herencia Permite configurar una aplicación con clases dinámicamente.


Descargar ppt "PATRONES DE DISEÑO. A lo largo de los años diseñadores con experiencia en programación orientada a objetos han desarrollado soluciones que sirven para."

Presentaciones similares


Anuncios Google