Patrones de diseño GoF y principios GRASP en programación orientada a objetos

Clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,66 KB
Actualizado el

Resumen

El documento explica qué son los patrones de diseño, sus objetivos y la clasificación de la Banda de los Cuatro (GoF) en patrones de creación, estructurales y de comportamiento. Después presenta los principios GRASP para asignar responsabilidades a objetos: Experto, Creador, Bajo acoplamiento, Alta cohesión y Controlador. Cierra con recomendaciones sobre cuándo no conviene aplicar patrones de diseño.

Puntos clave

  • Un patrón de diseño es una solución reutilizable a un problema recurrente en el desarrollo de software orientado a objetos.
  • Los patrones GoF se clasifican en de creación (Abstract Factory, Builder, Singleton), estructurales (Adapter, Bridge, Composite) y de comportamiento (Visitor, State, Memento).
  • Los patrones GRASP describen principios para asignar responsabilidades a objetos.
  • Según el principio Experto, la responsabilidad se asigna a la clase que tiene la información necesaria para cumplirla.
  • El principio Creador indica que la clase B debe crear instancias de A si B agrega, contiene, registra, utiliza o posee los datos de inicialización de A.
  • Bajo acoplamiento y alta cohesión son objetivos complementarios para facilitar el mantenimiento y la reutilización.

Resumen generado con IA a partir del documento. Ponte a prueba

¿Qué es un patrón de diseño?

Los patrones de diseño son un conjunto de estrategias o buenas prácticas que facilitan el trabajo al desarrollar aplicaciones orientadas a objetos. Estos patrones constituyen la base para resolver problemas comunes en el desarrollo de software, así como en el diseño de interacción o interfaces.

Como señala el arquitecto Christopher Alexander: "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".

Objetivos de los patrones de diseño

Los patrones de diseño pretenden:

  • Proporcionar catálogos de elementos reusables en el diseño de sistemas de software.
  • Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos.
  • Formalizar un vocabulario común entre diseñadores.
  • Estandarizar el modo en que se realiza el diseño.
  • Facilitar el aprendizaje de las nuevas generaciones de diseñadores condensando conocimiento existente.

Asimismo, no pretenden:

  • Imponer ciertas alternativas de diseño frente a otras.
  • Eliminar la creatividad inherente al proceso de diseño.

Ejemplos de patrones: La Banda de los Cuatro (GoF)

La referencia más utilizada es la Gang of Four (GoF), que clasifica los patrones en:

  • Patrones de creación: Se ocupan de la inicialización y configuración de objetos (ej. Abstract Factory, Builder, Singleton).
  • Patrones estructurales: Separan la interfaz de la implementación y definen cómo se agrupan clases y objetos (ej. Adapter, Bridge, Composite).
  • Patrones de comportamiento: Describen la comunicación entre objetos y clases (ej. Visitor, State, Memento).

Los patrones GRASP

Los patrones GRASP describen los principios fundamentales de la asignación de responsabilidades a objetos. Boch y Rumbaugh definen la responsabilidad como un contrato u obligación de un tipo o clase, categorizadas en:

  • Conocer: Estar enterado de datos privados, objetos conexos o valores calculables.
  • Hacer: Realizar acciones propias, iniciar acciones en otros objetos o coordinar actividades.

La asignación correcta de responsabilidades es crucial en el diseño orientado a objetos, especialmente durante la creación de diagramas de interacción.

GRASP: Experto

Problema: ¿Cuál es el principio fundamental para asignar responsabilidades?
Solución: Asignar la responsabilidad al experto en información, es decir, a la clase que cuenta con los datos necesarios para cumplirla.

GRASP: Creador

Problema: ¿Quién debe ser responsable de crear una nueva instancia de una clase?
Solución: Asignar a la clase B la creación de A si B agrega, contiene, registra, utiliza o posee los datos de inicialización de A.

GRASP: Bajo acoplamiento

Problema: ¿Cómo reducir la dependencia entre clases?
Solución: El acoplamiento mide la conexión entre clases. Un bajo acoplamiento evita que los cambios en una clase afecten a otras, facilitando la reutilización y el mantenimiento.

GRASP: Alta cohesión

Problema: ¿Cómo mantener la complejidad bajo control?
Solución: La cohesión mide cuán relacionadas están las responsabilidades de una clase. Una alta cohesión asegura que las clases tengan responsabilidades estrechamente relacionadas, evitando clases que hagan demasiadas cosas no afines.

GRASP: Controlador

Problema: ¿Quién debe atender un evento del sistema?
Solución: Un controlador es un objeto (no de interfaz de usuario) que maneja eventos externos. Puede ser un controlador de fachada, de tareas o de casos de uso.

¿Cuándo no utilizar patrones de diseño?

  1. Retrasar: Al igual que con la optimización, no es aconsejable aplicar patrones de diseño prematuramente.
  2. Implementación primero: Es preferible asegurar que el sistema funcione y, posteriormente, aplicar patrones para mejorar las debilidades detectadas, especialmente cuando el proyecto aún no está definido en detalle.

Preguntas frecuentes

¿Qué clasificación de patrones propone la Banda de los Cuatro (GoF)?

La GoF clasifica los patrones en de creación, estructurales y de comportamiento. Los de creación se ocupan de la inicialización de objetos, los estructurales de cómo se agrupan clases y objetos, y los de comportamiento de la comunicación entre objetos.

¿Cuál es el principio fundamental para asignar responsabilidades según GRASP?

Según el patrón Experto, la responsabilidad debe asignarse a la clase que cuenta con los datos necesarios para cumplirla.

¿Cuándo no conviene utilizar patrones de diseño?

No conviene aplicarlos prematuramente, igual que ocurre con la optimización. Es preferible que el sistema funcione primero y aplicar patrones después para corregir las debilidades detectadas, sobre todo si el proyecto no está definido en detalle.

Ponte a prueba

Tarjetas de repaso

Pulsa una tarjeta para ver la respuesta.

Test

1. ¿Qué patrón GRASP indica que la responsabilidad debe asignarse a la clase que tiene los datos necesarios?
2. ¿A qué categoría GoF pertenece el patrón Singleton?
3. ¿Qué mide el acoplamiento según el documento?
4. ¿Qué tipo de controlador puede manejar eventos externos del sistema según el texto?
5. ¿Cuál de los siguientes NO es un objetivo que pretenden los patrones de diseño según el documento?

Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.