PAC (Presentación, Abstracción y Control)
El patrón PAC (Presentación, Abstracción y Control) se utiliza para separar una aplicación en diferentes componentes, similar a MVC. PAC introduce el concepto de «agentes» para lograr una mayor modularidad y desacoplamiento. Resulta especialmente útil en sistemas grandes y complejos, donde la modularidad y el desacoplamiento son cruciales.
Componentes:
- Presentación: Interfaz de usuario.
- Abstracción: Funcionalidad principal del sistema.
- Control: Comunicación entre la presentación, la abstracción y otros agentes.
Contexto:
- Sistemas interactivos desarrollados utilizando agentes.
- Sistemas interactivos que requieren una separación clara de funcionalidades.
- Sistemas donde la colaboración entre agentes es crucial.
Requerimientos:
- Estructurar un sistema interactivo mediante agentes que funcionan de forma integrada.
- Generar interfaces de usuario flexibles.
- Separar la presentación de la funcionalidad.
- Lograr un bajo acoplamiento entre componentes.
- Definir agentes con interfaces propias de comunicación.
- Diseñar agentes con estado y datos privados.
- Facilitar el trabajo cooperativo entre agentes.
Solución:
- Definir una estructura jerárquica de tres niveles de agentes:
- Alto nivel: Funcionalidad central del sistema e interfaz global de usuario.
- Bajo nivel: Manejo de interfaces específicas de usuario.
- Intermedio: Relación entre los agentes de alto y bajo nivel.
- Cada agente es responsable de una parte específica de la funcionalidad del sistema.
- Un agente está compuesto por:
- Presentación: Aspecto visible del agente. Define la interfaz que expone un agente a otros para la utilización de sus servicios. No se limita exclusivamente a la interfaz de usuario.
- Abstracción: Modelo de datos interno y operaciones sobre ellos.
- Control: Conexión entre la presentación y la abstracción, y comunicación con otros agentes. Coordina la comunicación entre la presentación y la abstracción, así como con otros agentes.
Implementación:
- Definir la funcionalidad central del sistema.
- Estructurar la jerarquía de agentes.
- Definir e implementar cada agente, incluyendo su funcionalidad, interfaz, modelo de datos y mecanismo de control.
Análisis:
Ventajas:
- Asignación de responsabilidades específicas: Cada agente tiene una funcionalidad y responsabilidad específica, lo que simplifica la comprensión del sistema.
- Funcionamiento independiente: Cada agente funciona de manera autónoma, lo que facilita la mantenibilidad y la incorporación de nuevos agentes.
- Soporte para multitarea: La arquitectura PAC facilita la implementación de sistemas multitarea.
Desventajas:
- Complejidad del sistema: La estructura jerárquica y la coordinación entre agentes pueden complicar el sistema.
- Baja eficiencia: Puede ser menos eficiente que un sistema monolítico debido a la necesidad de coordinación y comunicación entre agentes.
- Complejidad del mecanismo de control: La gestión de la comunicación y la coordinación entre agentes puede ser compleja.
MicroKernel
El patrón MicroKernel se utiliza para diseñar sistemas operativos y otros sistemas de software donde se busca un alto grado de modularidad, flexibilidad y robustez. Divide el sistema en un núcleo mínimo (microkernel) que proporciona los servicios más básicos y esenciales, y otros componentes o servidores que se ejecutan en el espacio de usuario y manejan las funcionalidades restantes del sistema.
El MicroKernel se basa en un núcleo mínimo que realiza funciones básicas y plugins que permiten que el núcleo se adapte a distintos entornos. Se compone de una estructura mínima (núcleo) y una extendida (plugins). Por ejemplo, si se desea que el sistema pueda reproducir música, se implementaría mediante un plugin.
Contexto:
- Sistemas que deben adaptarse a cambios en los requerimientos.
- Sistemas con requisitos cambiantes.
- Sistemas con interfaces de programación similares.
- Sistemas basados en el mismo núcleo funcional (ej. Linux).
- Sistemas como VS Code, donde el editor es el «sistema core» y las extensiones son los módulos.
Problema:
- Sistemas legacy (sistemas que han perdurado mucho tiempo, ej. Linux) que deben adaptarse a cambios en la infraestructura (hardware/software).
- Sistemas que deben ser extensibles a nuevas tecnologías.
- Sistemas que deben ser portables.
- Sistemas que deben ser adaptables a los cambios a lo largo del tiempo.
Solución:
- MicroKernel: Componente central (núcleo) que contiene la funcionalidad básica, la administración de recursos y el servicio de comunicación entre componentes. Es independiente de la plataforma donde se ejecutará.
- Servidores internos: Servicios específicos de la plataforma que interactúan con el MicroKernel.
- Servidores externos: Interfaz de acceso al núcleo.
- Adaptadores: Mecanismo de comunicación entre el cliente y el servidor externo.
- Clientes: Procesos que reciben las solicitudes de los usuarios y interactúan con el sistema a través de los adaptadores.
Análisis:
Ventajas:
- Adaptabilidad: Permite la adaptación a diferentes entornos y requisitos.
- Portabilidad: Se puede ejecutar en diferentes plataformas si se diseña de forma independiente del hardware.
- Flexibilidad: Permite responder a distintas necesidades mediante la inclusión de servidores específicos.
- Escalabilidad horizontal: Facilita la escalabilidad del sistema.
- Confiabilidad: La separación de componentes aumenta la confiabilidad del sistema.
Desventajas:
- Complejidad del sistema: La interacción entre los diferentes componentes puede ser compleja.
- Baja eficiencia: La comunicación entre componentes puede afectar la eficiencia del sistema.
- Complejidad de la implementación: La implementación del MicroKernel y sus componentes puede ser compleja.
- Punto único de falla: El MicroKernel puede ser un punto único de falla, aunque esto depende de cómo esté definido.