Diagrama de componentes: modelado eficiente de sistemas con módulos de software
El Unified Modeling Language (en castellano, lenguaje de modelación unificado) es la norma ISO de aplicación general para el desarrollo de software y arquitecturas de sistemas complejos. Este lenguaje de modelado, abreviado como “UML”, utiliza diferentes tipos de diagramas para los procesos de planificación y desarrollo en la programación orientada a objetos.
En la versión actual (UML 2.5) se clasifican 14 tipos de diagramas, que se dividen a grandes rasgos en diagramas de comportamiento y diagramas estructurales. Este último subgrupo incluye los diagramas de componentes. Aquí te contamos en qué consisten y utilizamos un ejemplo concreto para ilustrar cómo crear un diagrama de componentes. Además, aprenderás para qué se utilizan los diagramas de componentes UML.
- Certificado SSL Wildcard
- Registro privado
- 1 cuenta de correo electrónico por contrato
¿Qué es un diagrama de componentes?
Los diagramas de componentes UML representan las relaciones entre los componentes individuales del sistema mediante una vista de diseño estática. Pueden ilustrar aspectos de modelado lógico y físico.
En el contexto del UML, los componentes son partes modulares de un sistema independientes entre sí, que pueden reemplazarse con componentes equivalentes. Son autocontenidos y encapsulan estructuras de cualquier grado de complejidad. Los elementos encapsulados solo se comunican con los otros a través de interfaces. Los componentes no solo pueden proporcionar sus propias interfaces, sino que también pueden utilizar las interfaces de otros componentes, por ejemplo, para acceder a sus funciones y servicios. A su vez, las interfaces de un diagrama de componentes documentan las relaciones y dependencias en una arquitectura de software.
Al encapsular los elementos, se impide el acceso directo a la estructura interna de los datos. Esto sirve, por ejemplo, para proteger los datos de accesos no autorizados. Se puede regular el acceso mediante interfaces diseñadas expresamente para ello, que solo muestran al usuario los métodos y elementos de datos de un objeto relevantes para él.
Los componentes suelen encapsular clases y, por lo tanto, también se los conoce como subformas o especializaciones de clases. Al igual que las clases, tienen una estructura compuesta y pueden definirse en más detalle por medio de atributos, métodos y operaciones, por ejemplo. Los componentes pueden ser una compilación de clases y, por ejemplo, ser implementados simultáneamente por varias clases en tiempo de ejecución. Aunque los componentes se equiparan a menudo con las clases, no son lo mismo. Si bien los componentes suelen requerir interfaces para la interacción, una clase también puede acceder directamente a un método.
En la programación orientada a objetos, una clase funciona como un modelo abstracto que describe un conjunto de objetos similares. Estos pueden tener, por ejemplo, los mismos atributos, operaciones y relaciones.
El término “componente” en UML tiene una definición muy amplia. Se utiliza para denominar varias partes del sistema, como bases de datos, paquetes, archivos y bibliotecas (por ejemplo, bibliotecas de enlace dinámico/DLL). Además de los componentes técnicos, por ejemplo, para el acceso a las bases de datos, hay también componentes especializados que pueden estar relacionados con los ámbitos y procesos empresariales. Para definir estas relaciones, que pueden ser muy amplias, UML define el estereotipo <<subsystem>>.
Como los diagramas de componentes modelan los sistemas de manera orientada a la implementación, existen componentes de implementación concretos dedicados exclusivamente a ciertos aspectos relacionados con la realización. Estos componentes se pueden utilizar, por ejemplo, para implementar otros componentes, como los ejecutables (archivos ejecutables con la extensión *.exe) en Windows.
Con implementación nos referimos a la ejecución concreta de un software desarrollado o un sistema previamente planificado. Por ejemplo, puede ser la ejecución de programas diseñados a tal efecto o de funcionalidades y algoritmos individuales.
En conjunto, varios componentes forman una arquitectura de sistema más amplia. Los componentes pueden también contener otros componentes y basarse unos en otros, de modo que un componente puede presuponer la existencia de otros componentes (relación de dependencia). Asimismo, los módulos de software pueden ser aplicables a diferentes fases de realización: algunos componentes se utilizan principalmente para la planificación y la ingeniería de proyectos durante la fase de diseño, mientras que otros solo existen durante el tiempo de ejecución de un programa informático. En este contexto, también puede hablarse de los componentes de diseño y de tiempo de ejecución.
El tiempo de ejecución (en inglés, runtime) se refiere al intervalo de tiempo en que un programa se ejecuta y realiza una tarea.
¿Para qué se utilizan los diagramas de componentes UML?
Un diagrama de componentes proporciona una visión general del sistema y documenta la organización de los componentes del sistema y sus relaciones y dependencias mutuas. Los diagramas de componentes proporcionan una visión orientada a la ejecución, es decir, dan al desarrollador información sobre si un sistema funciona de forma coherente y cumple sus tareas y objetivos.
Los objetivos y propósitos más importantes de este tipo de diagrama son el modelado de sistemas de software basados en componentes, la especificación de arquitecturas de software y la división de sistemas en subsistemas (por ejemplo, interfaz gráfica de usuario/IGU, ámbito empresarial y capa de persistencia con base de datos relacional). Asimismo, se asignan tareas y funciones concretas a las subáreas y sus interfaces dentro del sistema.
Los diagramas de componentes UML son básicos para la comunicación con el cliente en el plano económico, porque, con ellos, los proyectos y planes son más tangibles y comprensibles y pueden explicarse mejor, ya que expresan los datos de manera sencilla. Los diagramas de componentes también facilitan la gestión del desarrollo de programas informáticos, por ejemplo, combinando clases en componentes manejables.
Asimismo, la naturaleza modular de este tipo de diagramas contribuye a la rentabilidad y la eficiencia de los proyectos, ya que los sistemas de software también pueden modelarse como relaciones funcionales estructuradas a partir de componentes reutilizables. Los diagramas de componentes, por ejemplo, permiten visualizar de forma clara qué bloques modulares se pueden utilizar varias veces en varios puntos de una arquitectura. Así, los sistemas se pueden diseñar para optimizar la reutilización de los componentes y su interacción eficiente.
Los sistemas de software basados en componentes ahorran tiempo y costes en la fase de planificación y durante la implementación de los sistemas, ya que los sistemas existentes se pueden reutilizar. Además, sus módulos de software de probada eficacia reducen los riesgos y las causas de error, especialmente al implementar proyectos más complejos. Como también se ofrecen módulos de terceros que se pueden adquirir para implementar los sistemas, se puede compensar la falta de conocimientos técnicos internos.
¿Qué elementos tiene un diagrama de componentes?
El lenguaje de modelado UML utiliza una notación normalizada para crear los diagramas de componentes, que se basa en su propio conjunto de caracteres y símbolos. La siguiente tabla explica los elementos más importantes para los diagramas de componentes UML 2.0:
A partir de estos elementos básicos, se puede crear un diagrama de componentes simple utilizando el software libre de código abierto JGraph.
Creación de un diagrama de componentes, con ejemplo
En nuestro ejemplo de un diagrama de componentes, mostramos cómo visualizar la estructura y la funcionalidad de un software de correo electrónico. Este modelo de componentes ilustra cómo sus tres módulos básicos interactúan a través de interfaces:
- Gestión del correo electrónico (1)
- Bandeja de entrada de correo electrónico (2)
- Bandeja de salida de correo electrónico (3)
La gestión del correo electrónico (1) es el centro de control del sistema, e interactúa con los usuarios y otros módulos de software a través de varias interfaces y puertos de servicio. Para que el usuario pueda supervisar si el sistema funciona correctamente, se proporcionan una interfaz y un puerto de servicio (management port) para administrarlo. La flecha discontinua “Use” indica que el usuario depende de esta interfaz para las tareas administrativas.
Los sistemas y componentes fuera de la arquitectura modelada se pueden integrar en el sistema a través de la interfaz “Get E-Mail”. Las funciones y los datos requeridos por el módulo Bandeja de salida de correo electrónico (3) son proporcionados por el módulo de gestión a través de la interfaz “Enviar correo electrónico”. El módulo de gestión también hace uso de servicios y funcionalidades mediante la interfaz “Recibir correo electrónico” del módulo Bandeja de entrada de correo electrónico (2). Gráficamente, las conexiones entre los componentes se ilustran con los símbolos de piruletas (lollipops) y enchufes (sockets) de las interfaces.
El gráfico de ejemplo muestra los componentes del sistema en una vista llamada de caja negra, que oculta el funcionamiento interno de estos para ofrecer una visión general más clara. En la vista de caja blanca, los diagramas de componentes muestran la estructura interna de los componentes. Por ejemplo, el componente de gestión (1) podría estar equipado con los subcomponentes funcionales “Frontend” y “Administración del sistema”, que ayudan al administrador a gestionar el sistema.
Se puede aumentar la profundidad de representación de un diagrama de componentes definiendo los elementos involucrados de forma aún más precisa siguiendo la norma UML. Por ejemplo, se pueden definir las clases utilizadas con mayor precisión utilizando atributos y operaciones. Nuestro artículo sobre diagramas de clases presenta muchas opciones para especificar las clases de forma más detallada. Los diagramas de caso de uso y los diagramas de estado ofrecen otras opciones de diseño y modelado.