Ejercicios de repaso y autoevaluación
Capítulo 1Despliegue de componentes
1.Introducción
El desarrollo basado en componentes, o CBD (Component-Based Development), ofrece la posibilidad de crear sistemas basados en componentes prefabricados por los propios desarrolladores o adquiridos a terceros. Aplicando la filosofía de construir un sistema ensamblando diversos componentes, en lugar de desarrollarlo desde cero, se logran reducir los costes y tiempos de desarrollo, además de posibilitar la reutilización de esos mismos componentes en posteriores proyectos.
Para entender el desarrollo basado en componentes es necesario comprender también los diferentes modelos de componentes de software. Estos modelos definen lo que es un componente, cómo se relaciona con el resto de componentes y cómo puede ser ensamblado dentro de un sistema.
En este capítulo se ofrecerán diferentes perspectivas de modelado a partir de clasificación en cuatro categorías, apoyándose en ejemplos usando tecnologías diversas con el fin de adquirir las nociones básicas sobre la materia.
2.Modelos de despliegue
Para conocer y entender los modelos de despliegue basados en componentes se tienen que estudiar los conceptos que los integran: componentes, diseño, repositorio y ejecución, entre otros.
2.1.Conceptos básicos
A continuación se muestran los conceptos relacionados con los componentes.
Componentes
Un componente, según Szypersky, queda englobado en la siguiente definición: “Es una unidad de composición con interfaces bien definidas, que puede ser desplegada independientemente y está sujeta a composición por parte de terceros”.
Es muy importante el detalle de interfaz bien definida. Las interfaces de un componente pueden proporcionar varios tipos de servicios:
Para representar los servicios anteriores en un componente se usa el concepto de puerto.
Definición
Puerto
Un puerto es una representación del servicio del componente, modelando las diferentes formas de uso de los interfaces del dicho componente. El enlace se lleva a cabo a través de conectores, de tal manera que un puerto puede representar tanto un servicio requerido como demandado, según la óptica del componente usado como referencia.
Una vez que se sabe lo que es un componente se necesita de algún tipo de lenguaje que permita “materializarlo”. Para llevar a cabo su especificación se hace necesario un lenguaje de definición de componentes, mientras que la implementación del mismo se llevará a cabo a través de un lenguaje de implementación. Estos dos lenguajes pueden diferir, pero hay veces en que coinciden. Por ejemplo, en caso de modelos orientados a clases que usen Java el lenguaje de definición coincide con el de implementación. En modelos en los cuales los componentes son tratados como unidades arquitectónicas no se especifica lenguaje de implementación, pudiéndose elegir la opción que se considere más conveniente.
Composición de componentes
Según Sommerville, la composición es “el proceso de ensamblar componentes para crear un sistema”. Como se ha dicho, un componente presenta interfaces bien definidas, manifestadas a través de puertos. Pues bien, la composición, básicamente, se lleva a cabo enlazando estos puertos. Este proceso, en una situación teórica ideal, puede tener lugar durante tres fases diferentes del ciclo de vida de los componentes:
En la siguiente imagen se muestra con un mayor grado de detalle un ciclo de vida estándar de una serie de componentes. Se presupone que la composición va a tener lugar en la fase de diseño. Hay una estructura de tres bloques, cada una de ellas representando una fase (diseño, despliegue y ejecución). En la fase de diseño los componentes se encuentran en un repositorio. Como se puede apreciar, el componente A es introducido en el repositorio, mientras que B y C son retirados para dar lugar a la composición BC (que será también almacenada en el repositorio). Esta composición es indicada por un círculo.
En la fase de despliegue se retiran los componentes requeridos, incluido el previamente compuesto por B y C, generándose sus binarios. Una vez ya en la fase de ejecución se procede a la instanciación y ejecución dentro del sistema.
La diferenciación entre una fase y otra y, sobre todo, el concepto de repositorio, permitirá establecer cuatro diferentes categorías de modelos de composición de componentes. Estas categorías se enumeran a continuación:
2.2.Diseño sin repositorio
Esta es la primera categoría dentro de los modelos de despliegue. No usa repositorio y se propondrá UML 2.0 como ejemplo.
Diseño y ejecución sin despliegue
La composición tiene lugar en la fase de diseño, construyendo los componentes desde cero y definiendo la arquitectura del sistema conectando dichos componentes. Generalmente este diseño se apoya en una herramienta visual, sin contemplar la fase de despliegue puesto que se