Un Patrón, en general, se refiere al diseño particular que ayuda a realizar ciertas tareas con facilidad. Técnicamente, los patrones pueden considerarse dispositivos que ayudan al programa a compartir el conocimiento de su diseño.
El término patrón de diseño se utiliza en la terminología orientada a objetos para realizar tareas tales como definir objetos, clases, jerarquía de interfaces y factorizarlos en clases con relaciones. Una vez que todos estos pasos se consideran como un patrón, pueden reutilizarlos aplicándolos a varios problemas comunes.
Un patrón de diseño se puede considerar como una solución reutilizable para los problemas que ocurren comúnmente en el diseño de software. Un patrón de diseño no es un diseño terminado, sino una plantilla para resolver el problema en muchas soluciones diferentes.
El trabajo más influyente sobre patrones de diseño fue realizado por Gamma, Helm, Jonson y Vlissides, comúnmente conocidos como Group of Four (GOF). El patrón de diseño GoF se puede describir como una comunicación entre clases y objetos que se personalizan para resolver un problema de diseño en un contexto específico.
Elemento esencial del patrón de diseño:
Hay cuatro elementos esenciales de un patrón de diseño. Son los siguientes:
- Nombre del patrón : es un nombre único que describe un problema de diseño. El nombre del patrón es conciso y significativo, mejora la comunicación entre los desarrolladores y ayuda a diseñar patrones en niveles más altos de abstracción.
- Problema: establece el problema y su contexto, por ejemplo, cómo representar el algoritmo como objetos (asegura cuándo se aplica el patrón y qué condición se debe cumplir antes de usar el patrón).
- Solución: Proporciona una Descripción de los elementos que conforman el patrón de diseño como su responsabilidad, relación y colaboración). Las soluciones de patrones no pueden describir una implementación en particular porque los patrones son como plantillas que se aplican a varias situaciones similares. La solución da un arreglo genérico de clases y objetos para resolver un problema.
- Consecuencias: como su nombre lo indica, estos resaltan el resultado, los pros y los contras de aplicar los patrones, etc.
El Catálogo de Patrones de Diseño:
Los patrones de diseño están organizados en forma de catálogo. Estos patrones de diseño ayudan colectivamente en la ingeniería de software al encontrar objetos, especificar implementaciones de objetos, interfaces de objetos, determinar la granularidad de los objetos, implementar mecanismos de reutilización, etc. Los intentos especifican lo que hace el patrón de diseño. Algunos de los patrones con sus nombres e intenciones son los siguientes:
- Abstract Factory: Indica qué factoría se va a instanciar, proporciona una interfaz para crear familias de objetos (relacionados/dependientes) sin ninguna especificación de sus clases concretas.
- Adaptador: Id. Adapta o convierte una interfaz de una clase en otra de acuerdo con las expectativas del cliente y, por lo tanto, supera el problema de las interfaces incompatibles, lo que permite que las clases funcionen juntas.
- Bridge: Separa la abstracción de su implementación para independizarlas.
- Constructor: Separa las construcciones de objetos complejos de su representación para crear diferentes representaciones con el mismo proceso de construcción.
- String de Responsabilidad: Habilita el manejo de objetos de comando pasándolos a otros objetos usando la lógica presente en el procesamiento de objetos. En otras palabras, desacopla al remitente y al receptor formateando una string de objetos receptores para pasar la solicitud hasta que un objeto la maneje.
- Comando: encapsula la acción y sus parámetros y, por lo tanto, permite parametrizar las diferentes requests de los clientes, como requests largas o en cola. También ayuda a las operaciones que se pueden deshacer.
- Compuesto: Representa los objetos en una estructura de árbol donde cada objeto representa la misma interfaz. Esto permite a los clientes tratar los objetos individuales y sus composiciones de manera uniforme.
- Decorador: agrega funcionalidad adicional a una clase en tiempo de ejecución. Esto permite flexibilidad a la subclase para agregar funcionalidad.
- Fachada: crea una interfaz simplificada/unificada de las interfaces existentes en los subsistemas para manejar fácilmente las tareas comunes.
- Factory Method: Se enfoca en la creación de objetos de implementación específica. permite que la subclase decida qué clase se va a instanciar.
- Flyweight: realiza el intercambio de propiedades de objetos comunes por una gran cantidad de objetos para ahorrar espacio.
- Intérprete: Se ocupa de la implementación de un lenguaje informático específico que resuelve problemas específicos. Interpreta oraciones en lenguaje representando la gramática del lenguaje junto con un intérprete.
- Iterador: Habilita elementos de objetos agregados secuenciales ocultando sus representaciones subyacentes.
- Mediador: Proporciona una interfaz unificada al conjunto de interfaces de un subsistema. Proporciona un acoplamiento débil que permite que los objetos se refieran a cada uno explícitamente y también varía la interacción de los objetos de forma independiente.
- Momento: admite el mecanismo de reversión al permitir que los objetos se restablezcan a su estado anterior sin violar la encapsulación.
- Observador: cada vez que un objeto cambia su estado, genera un evento que notifica a otros objetos y los actualiza automáticamente. Esto define una dependencia de uno a muchos entre los objetos.
- Prototipo: aquí la instancia prototípica determina el tipo de objetos que se crearán. Se crean más objetos nuevos mediante la clonación de este prototipo.
- proxy: proporciona una ilusión al aplicar marcadores de posición a otros objetos para tener control sobre ellos.
- Singleton: proporciona restricciones para instanciar una clase en un solo objeto y también lo hace accesible globalmente.
- Estado: Permite una alteración en el comportamiento del objeto con alteración en su estado. Es decir, permite cambiar el tipo de objetos en tiempo de ejecución.
- Visitantes: Describe el esqueleto de un programa, permite que las subclases definan algunos pasos del algoritmo y también redefinan ciertos pasos sin afectar la estructura del algoritmo.
- Estrategia: Define la Familia de algoritmos y su selección en función de los clientes.
Usos de patrones de diseño en ingeniería de software:
Un patrón de diseño en el contexto de la ingeniería de software es una plantilla o solución reutilizable para problemas comunes que ocurren en el diseño de software. Esto generalmente se representa con clases y objetos, interfaces, etc. La única aplicación de un patrón de diseño es «Reutilización de soluciones». Al usar la solución probada, los usuarios pueden resolver problemas de desarrollo de software que permiten el desarrollo de módulos altamente cohesivos con acoplamiento. .
Necesidad de patrón de diseño:
- Permite una comunicación eficiente entre los diseñadores.
- Resuelve un problema simplemente refiriéndose al nombre del patrón.
- Mejora la legibilidad del código para los programadores.
- Reduzca el tiempo para encontrar la solución reutilizando paradigmas de desarrollo probados y comprobados.
- Reduzca el tiempo de los programadores.
- Introduce niveles adicionales de direccionamiento indirecto para lograr flexibilidad.
- Reducir el tiempo de comprensión del diseño.
- Evitar aquellas alternativas que evitan la reutilización reduciendo así las variaciones.
- Mejora la comprensión del diseño y la documentación.
- Ayuda a comprender los conceptos básicos del diseño orientado a objetos de forma más fácil y rápida.
Publicación traducida automáticamente
Artículo escrito por najeebsparks y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA