Henrry Harvey Vallejo Cuero – CD. 06061002 Universidad del Cauca FIET PATRONES DE DISEÑO ORIENTADOS A OBJETOS
¿Qué es un patrón de diseño? <ul><li>En general un patrón de diseño es una solución a un problema en un contexto dado. </l...
¿Qué es un patrón de diseño? <ul><li>Los patrones de diseño son también: </li></ul><ul><ul><li>Soluciones simples y elegan...
Características de un buen patrón de diseño <ul><li>Resuelve un problema: Soluciones, no principios o estrategias abstract...
Elementos principales de un patrón de diseño <ul><li>Nombre: Permite describir, en una o dos palabras, un problema de dise...
Plantilla <ul><ul><li>Nombre del patrón </li></ul></ul><ul><ul><li>Clasificación </li></ul></ul><ul><ul><li>Intención </li...
Cuando no aplicar <ul><li>No se deben utilizar patrones de diseño antes de tiempo. Retrasar la aplicación de un patrón, pe...
Algunos patrones de diseño fundamentales <ul><li>Encapsulamiento </li></ul><ul><ul><li>Problema. Los campos externos puede...
Algunos patrones de diseño fundamentales <ul><li>Herencia </li></ul><ul><ul><li>Problema. Abstracciones similares poseen m...
Clasificación (GoF) <ul><li>Los patrones de diseño pueden clasificarse según el tipo de problema que solucionan: </li></ul...
Patrones creacionales <ul><li>Abstract Factory </li></ul><ul><li>Builder </li></ul><ul><li>Factory Method </li></ul><ul><l...
Abstract Factory <ul><li>Proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar ...
Abstract Factory <ul><li>Diagrama de ejemplo </li></ul>
Abstract Factory <ul><li>El patrón se puede aplicar cuando: </li></ul><ul><ul><li>Un sistema deba ser independiente de cóm...
Builder <ul><li>Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de constr...
Builder <ul><li>Diagrama de ejemplo </li></ul>
Builder <ul><li>El patrón se puede aplicar cuando: </li></ul><ul><ul><li>El algoritmo para crear un objeto complejo debe s...
Factory Method <ul><li>Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clas...
Factory Method <ul><li>El patrón se puede aplicar cuando: </li></ul><ul><ul><li>Una clase no puede anticipar el tipo de ob...
Prototype <ul><li>Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos c...
Singleton <ul><li>Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella. </li><...
Patrones estructurales <ul><li>Decorator </li></ul><ul><li>Facade </li></ul><ul><li>Bridge </li></ul><ul><li>Adapter </li>...
Decorator <ul><li>Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la h...
Decorator <ul><li>Diagrama ejemplo </li></ul>
Decorator <ul><li>El patrón puede usarse cuando: </li></ul><ul><ul><li>Se desea añadir responsabilidades individuales a lo...
Facade <ul><li>Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de ...
Facade <ul><li>Diagrama de ejemplo </li></ul>
Facade <ul><li>El patrón puede ser usado cuando: </li></ul><ul><ul><li>Se desea proporcionar una interfaz simple a un subs...
Bridge <ul><li>Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente. ...
Otros patrones estructurales <ul><li>Adapter. Convierte la interfaz de una clase en otra distinta que es la que esperan lo...
Patrones de comportamiento <ul><li>Observer </li></ul><ul><li>State </li></ul><ul><li>Memento </li></ul><ul><li>Strategy <...
Observer <ul><li>Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se n...
Observer <ul><li>El patrón puede ser usado cuando: </li></ul><ul><ul><li>Una abstracción tenga dos aspectos, uno dependien...
State <ul><li>Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno. Parecerá que cambia...
Memento <ul><li>Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste pue...
Strategy <ul><li>Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algor...
Iterator <ul><li>Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su repre...
Template Method <ul><li>Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pa...
Otros patrones de comportamiento <ul><li>Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, a...
Otros patrones de comportamiento <ul><li>Mediator. Define un objeto que encapsula cómo interactúan un conjunto de objetos....
FIN
Upcoming SlideShare
Loading in...5
×

Patrones de diseño - Henry Vallejo

4,829

Published on

0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,829
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

Patrones de diseño - Henry Vallejo

  1. 1. Henrry Harvey Vallejo Cuero – CD. 06061002 Universidad del Cauca FIET PATRONES DE DISEÑO ORIENTADOS A OBJETOS
  2. 2. ¿Qué es un patrón de diseño? <ul><li>En general un patrón de diseño es una solución a un problema en un contexto dado. </li></ul><ul><li>“ Cada patrón describe un problema que ocurre infinidad de veces en nuestro entorno, así como la solución al mismo, de tal modo que podemos utilizar esta solución un millón de veces más adelante sin tener que volver a pensarla otra vez”. Christopher Alexander </li></ul><ul><li>En los patrones de diseño orientados a objetos, las soluciones se describen en términos de objetos, interfaces y las relaciones entre ellos. </li></ul>
  3. 3. ¿Qué es un patrón de diseño? <ul><li>Los patrones de diseño son también: </li></ul><ul><ul><li>Soluciones simples y elegantes a problemas específicos y comunes del diseño orientado a objetos. Son soluciones basadas en la experiencia y que se ha demostrado que funcionan. </li></ul></ul><ul><ul><li>Una solución estándar para un problema común de programación. </li></ul></ul><ul><ul><li>Una técnica para flexibilizar el código haciéndolo satisfacer ciertos criterios. </li></ul></ul><ul><ul><li>Un proyecto o estructura de implementación que logra una finalidad determinada. </li></ul></ul>
  4. 4. Características de un buen patrón de diseño <ul><li>Resuelve un problema: Soluciones, no principios o estrategias abstractas. </li></ul><ul><li>Es un concepto probado: Soluciones, no teorías o especulaciones. </li></ul><ul><li>La solución no es obvia. </li></ul><ul><li>Describe una relación: No describen módulos sino estructuras y mecanismos. </li></ul><ul><li>Tiene un componente humano significante: El software sirve a las personas. </li></ul>
  5. 5. Elementos principales de un patrón de diseño <ul><li>Nombre: Permite describir, en una o dos palabras, un problema de diseño junto con sus soluciones y consecuencias. </li></ul><ul><li>Problema: Describe cuándo aplicar el patrón. Explica el problema y su contexto. </li></ul><ul><li>Solución: Describe los elementos que constituyen el diseño, sus relaciones, responsabilidades y colaboraciones. </li></ul><ul><li>Consecuencias: Son los resultados, así como ventajas e inconvenientes de aplicar el patrón. </li></ul>
  6. 6. Plantilla <ul><ul><li>Nombre del patrón </li></ul></ul><ul><ul><li>Clasificación </li></ul></ul><ul><ul><li>Intención </li></ul></ul><ul><ul><li>Nombre alternativo </li></ul></ul><ul><ul><li>Motivación </li></ul></ul><ul><ul><li>Aplicabilidad </li></ul></ul><ul><ul><li>Estructuras </li></ul></ul><ul><ul><li>Participantes </li></ul></ul><ul><ul><li>Colaboraciones </li></ul></ul><ul><ul><li>Consecuencias </li></ul></ul><ul><ul><li>Implementación </li></ul></ul><ul><ul><li>Código de ejemplo </li></ul></ul><ul><ul><li>Usos conocidos </li></ul></ul><ul><ul><li>Patrones relacionados </li></ul></ul><ul><li>Cada patrón de diseño debe describir: </li></ul>
  7. 7. Cuando no aplicar <ul><li>No se deben utilizar patrones de diseño antes de tiempo. Retrasar la aplicación de un patrón, permite identificar las flaquezas de un diseño y los puntos críticos donde un patrón puede ser de gran ayuda. </li></ul><ul><li>No se debe forzar la aplicación de un patrón a los problemas de diseño encontrados. </li></ul><ul><li>Los patrones de diseño no son camisas de fuerza. Se pueden considerar como punto de partida, para solucionar un problema. </li></ul>
  8. 8. Algunos patrones de diseño fundamentales <ul><li>Encapsulamiento </li></ul><ul><ul><li>Problema. Los campos externos pueden ser manipulados directamente a partir del código externo. </li></ul></ul><ul><ul><ul><li>Genera dependencias indeseables que impiden modificaciones en la implementación. </li></ul></ul></ul><ul><ul><li>Solución. Esconda algunos componentes, permitiendo sólo accesos estilizados al objeto. </li></ul></ul><ul><ul><li>Desventajas. </li></ul></ul><ul><ul><ul><li>La interfaz no puede, eficientemente, facilitar todas las operaciones deseadas. </li></ul></ul></ul><ul><ul><ul><li>El acceso indirecto puede reducir el rendimiento. </li></ul></ul></ul>
  9. 9. Algunos patrones de diseño fundamentales <ul><li>Herencia </li></ul><ul><ul><li>Problema. Abstracciones similares poseen miembros similares (campos y métodos). </li></ul></ul><ul><ul><li>Solución. Herede miembros por defecto de una superclase, seleccione la implementación correcta a través de resoluciones sobre qué implementación debe ser ejecutada. </li></ul></ul><ul><ul><li>Desventajas. </li></ul></ul><ul><ul><ul><li>Código demasiado dividido </li></ul></ul></ul><ul><ul><ul><li>Procesamiento extra </li></ul></ul></ul>
  10. 10. Clasificación (GoF) <ul><li>Los patrones de diseño pueden clasificarse según el tipo de problema que solucionan: </li></ul><ul><ul><li>Patrones creacionales. Abstraen el proceso de creación de instancias de objetos. </li></ul></ul><ul><ul><li>Patrones estructurales. Tratan con la composición de clases u objetos. </li></ul></ul><ul><ul><li>Patrones de comportamiento. Caracterizan el modo en que las clases y objetos interactúan y se reparten la responsabilidad. </li></ul></ul>
  11. 11. Patrones creacionales <ul><li>Abstract Factory </li></ul><ul><li>Builder </li></ul><ul><li>Factory Method </li></ul><ul><li>Prototype </li></ul><ul><li>Singleton </li></ul>
  12. 12. Abstract Factory <ul><li>Proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas. </li></ul>
  13. 13. Abstract Factory <ul><li>Diagrama de ejemplo </li></ul>
  14. 14. Abstract Factory <ul><li>El patrón se puede aplicar cuando: </li></ul><ul><ul><li>Un sistema deba ser independiente de cómo son creados, compuestos y representados los objetos. </li></ul></ul><ul><ul><li>Un sistema deba ser configurado con una de múltiples familias de objetos. </li></ul></ul><ul><ul><li>Se quiere proporcionar una librería de objetos y sólo se quiere revelar sus interfaces, sin revelar la implementación. </li></ul></ul>
  15. 15. Builder <ul><li>Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones. </li></ul>
  16. 16. Builder <ul><li>Diagrama de ejemplo </li></ul>
  17. 17. Builder <ul><li>El patrón se puede aplicar cuando: </li></ul><ul><ul><li>El algoritmo para crear un objeto complejo debe ser independiente de las partes que componen el objeto y cómo estos están ensamblados. </li></ul></ul><ul><ul><li>El proceso de construcción debe permitir diferentes representaciones para el objeto construido. </li></ul></ul>
  18. 18. Factory Method <ul><li>Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos. </li></ul>
  19. 19. Factory Method <ul><li>El patrón se puede aplicar cuando: </li></ul><ul><ul><li>Una clase no puede anticipar el tipo de objeto que ésta debe crear. </li></ul></ul><ul><ul><li>Una clase delega la responsabilidad de crear los objetos a clases ayudantes </li></ul></ul>
  20. 20. Prototype <ul><li>Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo. </li></ul>
  21. 21. Singleton <ul><li>Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella. </li></ul><ul><li>El patrón puede utilizarse cuando: </li></ul><ul><ul><li>Deba existir exactamente una instancia de una clase y ésta deba ser accesible por los clientes desde un lugar bien conocido. </li></ul></ul>
  22. 22. Patrones estructurales <ul><li>Decorator </li></ul><ul><li>Facade </li></ul><ul><li>Bridge </li></ul><ul><li>Adapter </li></ul><ul><li>Composite </li></ul><ul><li>Flyweight </li></ul><ul><li>Proxy </li></ul>
  23. 23. Decorator <ul><li>Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad. </li></ul>
  24. 24. Decorator <ul><li>Diagrama ejemplo </li></ul>
  25. 25. Decorator <ul><li>El patrón puede usarse cuando: </li></ul><ul><ul><li>Se desea añadir responsabilidades individuales a los objetos, dinámicamente y transparentemente, sin afectar otros objetos. </li></ul></ul><ul><ul><li>Cuando la extensión por medio de subclases sea impráctico (demasiadas clases para cada tipo de combinación) </li></ul></ul>
  26. 26. Facade <ul><li>Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema sea más fácil de usar. </li></ul>
  27. 27. Facade <ul><li>Diagrama de ejemplo </li></ul>
  28. 28. Facade <ul><li>El patrón puede ser usado cuando: </li></ul><ul><ul><li>Se desea proporcionar una interfaz simple a un subsistema complejo. </li></ul></ul><ul><ul><li>Se desea disminuir la dependencia entre el cliente y la implementación de una abstracción. </li></ul></ul><ul><ul><li>Se desea disminuir la dependencia entre subsistemas. </li></ul></ul>
  29. 29. Bridge <ul><li>Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente. </li></ul>
  30. 30. Otros patrones estructurales <ul><li>Adapter. Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles. </li></ul><ul><li>Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos. </li></ul><ul><li>Flyweight. Usa el compartimiento para manejar un gran número de objetos de alta granularidad de forma eficiente. </li></ul><ul><li>Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste. </li></ul>
  31. 31. Patrones de comportamiento <ul><li>Observer </li></ul><ul><li>State </li></ul><ul><li>Memento </li></ul><ul><li>Strategy </li></ul><ul><li>Iterator </li></ul><ul><li>Template Method </li></ul><ul><li>Chain of Responsibility </li></ul><ul><li>Command </li></ul><ul><li>Interpreter </li></ul><ul><li>Mediator </li></ul><ul><li>Visitor </li></ul>
  32. 32. Observer <ul><li>Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos. </li></ul>
  33. 33. Observer <ul><li>El patrón puede ser usado cuando: </li></ul><ul><ul><li>Una abstracción tenga dos aspectos, uno dependiente del otro (Se encapsulan estos aspectos por separado) </li></ul></ul><ul><ul><li>Un cambio en un objeto, requiere cambiar otros objetos. </li></ul></ul><ul><ul><li>Un objeto debe ser capaz de notificar a otros objetos sin asumir cuales son estos objetos. </li></ul></ul>
  34. 34. State <ul><li>Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno. Parecerá que cambia la clase del objeto. </li></ul><ul><li>Diagrama de ejemplo </li></ul>
  35. 35. Memento <ul><li>Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde. </li></ul>
  36. 36. Strategy <ul><li>Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan. </li></ul>
  37. 37. Iterator <ul><li>Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna. </li></ul>
  38. 38. Template Method <ul><li>Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura. </li></ul>
  39. 39. Otros patrones de comportamiento <ul><li>Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto. </li></ul><ul><li>Command. Encapsula una petición en un objeto, permitiendo así parametrizar a los clientes con distintas peticiones, encolar o llevar un registro de las peticiones y poder deshacer la operaciones. </li></ul><ul><li>Interpreter. Dado un lenguaje, define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje. </li></ul>
  40. 40. Otros patrones de comportamiento <ul><li>Mediator. Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente. </li></ul><ul><li>Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera. </li></ul>
  41. 41. FIN

×