Patrones de diseño de software

En ingeniería de software se conoce como patrón de diseño a una solución estandarizada, probada y repetible a un problema común en el diseño de software. Un patrón de diseño es una descripción o plantilla sobre cómo resolver un problema que se puede utilizar en muchas situaciones diferentes.

El uso de patrones de diseño permite acelerar el proceso de desarrollo al proporcionar paradigmas probados y comprobados en el diseño de software. Estandarizar las soluciones a problemas comunes permite también mejorar la comunicación entre desarrolladores ya que se emplean nombres bien conocidos y entendidos a la hora de describir un problema de diseño y como abordar su solución.

“Los patrones de diseño son el esqueleto de las soluciones a problemas comunes en el desarrollo de software”

Para clasificar los patrones voy a segur el método creado por The Gang of Four - GoF, que es como se conoce a los autores del libro 'Design Patterns - Elements of Reusable Object-Oriented Software' publicado en 1994 por Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides. Según estos autores, los patrones de diseño se basan principalmente en dos principios de diseño orientado a objetos:

  • Programa una interfaz, no una implementación
  • Favorece la composición de objetos sobre la herencia

Los patrones que describen GoF se dividen en tres categorías: Creacionales, Estructurales y de Comportamiento.

Creacionales

Abstraen el proceso de crear instancias y configuración de objetos. Tenemos los siguientes patrones creacionales:

Estructurales

Se ocupan de agrupar clases y objetos para formar estructuras más complejas. Separan la interfaz de la implementación. Entre los patrones estructurales tenemos:

  • Adaptador ( Adapter )
    Convierte una interfaz de una clase en otra
  • Puente ( Bridge )
    Desacopla una abstracción de su implementación permitiendo modificarlas independientemente
  • Objeto Compuesto ( Composite )
    Construiye objetos complejos a partir de otros más simples, utilizando para ello la composición recursiva y una estructura de árbol
  • Envoltorio ( Decorator )
    Permite añadir dinámicamente funcionalidad a un objeto existente, evitando heredar sucesivas clases para incorporar la nueva funcionalidad
  • Fachada ( Facade )
    Permite un interface unificado para un conjunto de interfaces en un subsistema
  • Peso Mosca ( Flyweight )
    Emplear un uso compartido para eliminar o reducir la redundancia cuando tenemos gran cantidad de objetos con información idéntica
  • Apoderado ( Proxy )
    Proporciona un objeto sustituto para controlar el acceso a otro

De Comportamiento

Describen la responsabilidad de los objetos y la forma en que se comunican entre ellos. Son los siguientes:

Otros Patrones

En este grupo se incluyen algunos patrones que no están dentro del GoF pero son utilizados frecuentemente en el diseño de aplicaciones

  • Inyección de Dependencias ( Dependency Injection )
    Las dependencias de una clase (que son componentes que una clase necesita) se facilitan 'inyectándolos' en la clase (normalmente en el constructor)
  • Localizador de Servicio ( Service Location )
    Para facilitar una dependencia o servicio de una clase se utiliza un 'localizador' que a petición devuelve la información necesaria para realizar una determinada tarea
  • MVC ( Model View Controler )
    Este patrón plantea la separación del problema en tres capas: la capa model, que representa la realidad; la capa controler , que conoce los métodos y atributos del modelo, recibe y realiza lo que el usuario quiere hacer; y la capa vista, que muestra un aspecto del modelo y es utilizada por la capa anterior para interaccionar con el usuario

 

Detalle de cada patrón y ejemplos de código

A lo largo de las semanas iré sacando entradas con los detalles de cada uno de los patrones. Para los ejemplos de código utilizare el lenguaje Vala.

En el libro de GoF 'Design Patterns - Elements of Reusable Object-Oriented Software' los ejemplos están en C++. Posteriormente hay muchos textos con ejemplos principalmente en Java como 'Desing Patterns' de la serie 'Head First'. Además de C++ y Java no es difícil encontrar ejemplos en C#, PHP, Ruby, Python, Go, Swift, o TypeScript, pero no he encontrado nada en Vala.

Como he comentado alguna vez en este blog, Vala es un lenguaje de programación compilado, orientado a objetos y centrado en los objetos de la biblioteca GObject. Su diseño permite crear aplicaciones de forma rápida y sencilla, sin imponer requisitos de tiempo de ejecución adicionales y sin usar un ABI diferente en comparación con las aplicaciones y bibliotecas escritas en C. El empleo nativo de las bibliotecas GTK/GNOME para desarrollo de interfaces gráficos hace su uso muy sencillo e intuitivo por lo que no es de estañar que sea ampliamente usado para desarrollar aplicaciones de escritorio en GNU/Linux. Es el lenguaje usado en el sistema operativo ElementaryOS, no solo en las extensiones sino en todo su parque de aplicaciones.

Además Vala es un lenguaje con una estructura y codificación muy estándar. Es muy parecido al pseudo-código empleado en algunos textos para representar ideas o conceptos. De esta manera es muy fácil adaptar la idea a cualquier otro lenguaje de programación orientado a objetos.

Conforme vayan estando disponibles las entradas de cada patrón iré actualizando los enlaces de esta página que ahora están deshabilitados.

 

 

Modificado por última vez enLunes, 26 Octubre 2020 08:44
(1 Voto)
Etiquetado como :

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.