0:03 0 0
Patrones de programación

Patrones de programación

  DrUalcman |  diciembre 152022

Hace un tiempo estaba en una reunion con otros programadores, hablado de todo un poco y durante la conversación se comentó el tema de los patrones de programación. Como es algo de lo que no tengo mucha experiencia, decidí ponerme manos a la obra y comenzar a investigar un poco sobre ello. Por lo que he decidido hacer una seria de blogs relacionados con este tema, comenzando por este, en el que vamos a hablar de una forma muy general sobre los patrones de programación sin centrarnos en ningún lenguaje en concreto.

Que son los patrones de programación

Los patrones de programación (también conocidos como patrones de diseño) son soluciones comunes y probadas a problemas recurrentes que se presentan en el diseño de software. Son descripciones de las soluciones a problemas que se han utilizado en el pasado y que se han demostrado eficaces.

Los patrones de programación se presentan como modelos generales que se pueden aplicar a una amplia variedad de situaciones en el diseño de software. Estos modelos pueden ser vistos como "plantillas" que describen cómo resolver un problema específico en el código de una manera organizada, coherente y escalable.

Hay varios tipos de patrones de programación, entre los más comunes están:

1. Patrones creacionales: se utilizan para crear objetos y estructuras de objetos de manera eficiente y flexible.

2. Patrones estructurales: se utilizan para definir la estructura y composición de las clases y objetos de un sistema.

3. Patrones de comportamiento: se utilizan para definir cómo los objetos interactúan entre sí y cómo los algoritmos se ejecutan en un sistema.

Los patrones de programación pueden ser muy útiles para los programadores porque les permiten resolver problemas comunes de manera más rápida y eficiente. Además, al utilizar patrones de programación, el código resultante suele ser más legible, mantenible y escalable, lo que puede ahorrar tiempo y esfuerzo en el largo plazo.

Cada uno de los patrones tiene sus propias ventajas y desventajas, y es importante seleccionar el patrón correcto para cada situación en particular.

Principales patrones creacionales

* Singleton: se utiliza para garantizar que solo exista una instancia de una clase en todo el sistema.

* Factory Method: se utiliza para crear objetos sin especificar la clase exacta del objeto que se va a crear. El Factory Method delega la creación de objetos a las subclases.

* Abstract Factory: proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas.

* Builder: se utiliza para construir objetos complejos paso a paso. Permite a los desarrolladores producir diferentes tipos y representaciones de un objeto utilizando el mismo código de construcción.

* Prototype: se utiliza para crear nuevos objetos a partir de un objeto original, clonando el original y modificando la copia según sea necesario.

Principales patrones estructurales

* Adapter: se utiliza para permitir que objetos con interfaces incompatibles trabajen juntos. Se utiliza una clase adaptadora para hacer que un objeto funcione con otro objeto que de otra manera no sería compatible.

* Bridge: se utiliza para separar la abstracción de la implementación para que ambas puedan variar de manera independiente.

* Composite: se utiliza para crear estructuras de objetos jerárquicos y compuestos en los que los objetos individuales se tratan de la misma manera que los grupos de objetos.

* Decorator: se utiliza para agregar comportamiento a un objeto existente dinámicamente sin modificar su estructura interna.

* Facade: se utiliza para proporcionar una interfaz simplificada a un conjunto complejo de clases. Un objeto de fachada actúa como un punto de entrada a un sistema más grande y complejo.

* Flyweight: se utiliza para reducir la cantidad de objetos creados y mejorar el rendimiento. Se reutilizan objetos similares en lugar de crear nuevos cada vez que se necesitan.

* Proxy: se utiliza para proporcionar un objeto sustituto o marcador de posición para otro objeto. El objeto proxy controla el acceso al objeto original y puede proporcionar funcionalidad adicional, como el control de acceso y la administración de recursos.

Principales patrones de comportamiento

* Chain of Responsibility: se utiliza para encadenar objetos receptores y pasar una solicitud a través de la cadena hasta que un objeto receptor pueda manejar la solicitud.

* Command: se utiliza para encapsular una solicitud como un objeto, lo que permite que las solicitudes se parametricen y se pasen como argumentos.

* Interpreter: se utiliza para definir una gramática para un lenguaje y proporcionar un intérprete que convierta el código fuente en objetos que se puedan ejecutar.

* Iterator: se utiliza para proporcionar una manera de acceder secuencialmente a los elementos de una colección sin exponer su estructura interna.

* Mediator: se utiliza para definir un objeto que coordina las interacciones entre un conjunto de objetos relacionados, permitiendo que los objetos se comuniquen sin conocerse directamente.

* Memento: se utiliza para capturar y almacenar el estado interno de un objeto sin violar su encapsulamiento, de modo que el objeto pueda volver a este estado más tarde.

* Observer: se utiliza para permitir que los objetos se notifiquen y actualicen automáticamente cuando cambie el estado de otro objeto.

* State: se utiliza para permitir que un objeto altere su comportamiento cuando cambia su estado interno.

* Strategy: se utiliza para definir una familia de algoritmos, encapsular cada uno como un objeto y hacer que sean intercambiables para permitir que el objeto cambie el algoritmo que utiliza en tiempo de ejecución.

* Template Method: se utiliza para definir el esqueleto de un algoritmo en una clase base, permitiendo que las subclases reemplacen o amplíen partes del algoritmo sin cambiar su estructura general.

* Visitor: se utiliza para definir una nueva operación para un conjunto de clases relacionadas sin modificar las clases mismas.

Otros patrones muy utilizados

* Object Pool: se utiliza para mejorar el rendimiento de las aplicaciones al reducir la cantidad de objetos que se crean y destruyen, y reutilizar objetos previamente creados.

* Publish-Subscribe: se utiliza para permitir que los objetos se suscriban y reciban notificaciones de eventos de otros objetos.

* Service Locator: se utiliza para proporcionar un punto centralizado para buscar y obtener servicios en una aplicación.

* Null Object: se utiliza para proporcionar un objeto de "no hacer nada" que pueda ser utilizado en lugar de un objeto nulo para evitar excepciones y errores.

* Data Access Object: se utiliza para proporcionar un conjunto de métodos para acceder a una base de datos u otro tipo de almacenamiento de datos, y ocultar la complejidad de la implementación de la capa de acceso a datos.

Patrones comunes en arquitecturas limpias

La arquitectura limpia de software es un enfoque de diseño de software que promueve la separación de preocupaciones y la independencia de capas para facilitar el mantenimiento, la evolución y la escalabilidad del sistema. Entre los patrones de programación más utilizados en la arquitectura limpia de software, se encuentran los siguientes:

1. Patrón Modelo-Vista-Presentador (MVP): Este patrón separa la lógica de presentación de la lógica de negocio, permitiendo una mayor flexibilidad y facilidad de mantenimiento. El MVP utiliza un presentador como intermediario entre la vista y el modelo para manejar la comunicación y la lógica de presentación.

2. Patrón Inversión de Dependencias (IoC): Este patrón permite una mayor modularidad y flexibilidad en el diseño del software al invertir la dependencia entre los componentes. En lugar de que un componente dependa directamente de otro, el IoC utiliza una capa de abstracción para separar las dependencias.

3. Patrón Inyección de Dependencias (DI): Este patrón es una implementación práctica del IoC, que se utiliza para inyectar las dependencias en los componentes en tiempo de ejecución. La DI permite una mayor flexibilidad y mantenimiento en el diseño del software, ya que las dependencias pueden ser reemplazadas sin modificar el código fuente.

4. Patrón Repositorio: Este patrón se utiliza para abstraer la lógica de almacenamiento de datos del resto del sistema. El repositorio proporciona una interfaz para interactuar con los datos, lo que permite una mayor modularidad y flexibilidad en el diseño del software.

5. Patrón Estrategia: Este patrón se utiliza para definir una familia de algoritmos y encapsular cada uno de ellos para que sean intercambiables. La estrategia permite que la implementación de un algoritmo cambie independientemente de los clientes que lo utilizan, lo que mejora la flexibilidad y la reutilización de código.

Estos son solo algunos de los patrones de programación más utilizados en la arquitectura limpia de software, pero hay muchos otros que pueden ser útiles dependiendo de los requerimientos del proyecto y las preferencias del equipo de desarrollo.


Conclusiones

Poco a poco iré ampliando información sobre cada tema o sobre cada uno de los patrones. Si conoces algun otro o quieres que comente algun otro no dudes en comentar.


Actualizado: 20 de Mayo 2023


0 Comentarios

 
 
 

Archivo