"Patrones de Diseño Elementos de software orientado a objetos reutilizable" Gamma, Helm ,Johnson & Vlidissides. Realizaremos resumen de los patrones de nuestro interés por lo que no pretendemos infringir los derechos de autor, el libro se encuentra disponible en la web. Como hemos estudiado antes el paradigma de la programación orientada a objetos que hemos definido anteriormente podremos adentrarnos en el tema de patrones de diseño con el fin de reutilizar código de manera eficiente, en nuestro caso haremos referencia al lenguaje de programación C++, y si es posible acompañarlo de un tutorial para clarificar las situaciones de cada patrón. ¿Qué es un patrón de diseño ? "Según Christopher Alexander, “cada patrón describe un problema que
ocurre una y otra vez en nues- tro entorno, así como la solución a ese
problema, de tal modo que se pueda aplicar esta solución un millón de
veces, sin hacer lo mismo dos veces”" (Gamma, Helm ,Johnson & Vlidissides,1995) Destacaremos elementos importantes sobre los patrones de diseño:
"El nombre del patrón permite describir, en una o dos palabras, un problema de diseño junto con sus soluciones y consecuencias." (Gamma, Helm ,Johnson & Vlidissides,1995)
"El problema describe cuándo aplicar el patrón. Explica el problema y su contexto" (Gamma, Helm ,Johnson & Vlidissides,1995)
"un patrón es más bien como una plantilla que puede aplicarse en muchas situaciones di-ferentes. El patrón proporciona una descripción abstracta de un problema de diseño y cómo lo resuelve una disposición general de elementos (en nuestro caso, clases y objetos)." (Gamma, Helm ,Johnson & Vlidissides,1995)
Patrones Estructurales "Los patrones estructurales se ocupan de cómo se combinan las clases y los objetos para formar es- tructuras más grandes. Los patrones estructurales de clases hacen uso de la herencia para componer interfaces o implementaciones." (Gamma, Helm ,Johnson & Vlidissides,1995)
Composite :
¿Qué proposito tiene este patrón ?
Compone 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.
Analicemos un momento cada uno de los componentes del ejemplo:
Componente (Gráfico)
Declara la Interfaz de los objetos de la composición.
Implementa el comportamiento predeterminado de la interfaz que es común a todas las clases.
Declara una Interfaz para acceder a sus componentes hijos y gestionarlos. (opcional) define una Interfaz para acceder al padre de un componente en la estructura recursiva y. si es necesario, la implementa.
Hoja (Rectángulo, Linea, Texto, etc.)
Representa objetos hoja en la composición. Una hoja no tiene hijos.
Define el comportamiento de los objetos primitivos de la composición.
Compuesto (Dibujo)
Define el comportamiento de los componentes que tienen hijos.
Almacena componentes hijos.
Implementa las operaciones de la interfaz Componente relacionadas con los hijos.
Cliente: Manipula objetos en la composición a través de la interfaz Componente.
Decorador
Proposito:
Asigna responsabilidades adicionales a un objeto dinámicamente, proporcionando una alternativa fle- xible a la herencia para extender la funcionalidad. (Envoltorio)
Use el Decorador • Para añadir objetos individuales de forma dinámica y transparente, es decir, sin afectar a otros objetos. • Para responsabilidades que pueden ser retiradas. • Cuando la extensión mediante la herencia no es viable. A veces es posible tener un gran número de extensiones independientes, produciéndose una explosión de subclases para permitir todas las combinaciones. O puede ser que una definición de una clase esté oculta o que no esté disponi- ble para ser heredada.
Patrones de Creación
Singleton: Busca crear una unica instacia de la clase
Method Factory ...
Patrones de Comportamiento
Patrón de estrategia o Politica (Policy based): El patron de estrategia nos permite crear diferentes escenarios para resolver un problema de diferentes formas este patron se puede puede aplicar cuando se encuentran los siguientes escenarios descritos por Gamma, Helm ,Johnson & Vlidissides en 1995
"Muchas clases relacionadas difieren solo en su comportamiento.Las estrategias permiten configurar una clase con un determinado comportamiento de muchos posibles
Se necesitan distintas variantes de un algoritmo
Estructura: En el siguiente video se puede observar como se representa la estructura de este patrón
Podemos ver el papel que toma cada entidad y nos referiremos a su función de la siguiente manera basandonos en lo descrito por Gamma, Helm ,Johnson & Vlidissides en 199:
Existe una entidad que se llama Estrategia esta es una clase padre y es abstracta (polimorfismo) debido a esto se van a utilizar clases hijas
Las clases EstrategiasContretas implentan sus algoritmos de acuerdo a lo que se quiera trabajar Existe una clase compuesto que es donde se configuran y mantienen una estrategia manejada por medio de la interfaz.
Para aprender C++ hay muchos recursos disponibles, no importa si sos estudiante de ingenieria o aficionado a la programación, aquí voy a poner enlaces de los que considero los mejores, estos mismos recomiendo ser acompañados por la plataforma