Introducción al Software basado en Componentes Juan José Moreno Navarro Curso de Doctorado LSIIS (junto con L.A. Fredlund) Conceptos fundamentales • Sistemas con componentes software – Interfaces. – Interoperabilidad. – Composicionalidad de componentes. –Nuevas técnicas de Ingeniería de Software, Programación, Validación, etc. Conceptos fundamentales • Componente software Unidad de composición de aplicaciones software, que posee un conjunto de interfaces y un conjunto de requisitos, y que ha de poder ser desarrollado, adquirido, incorporado al sistema y compuesto con otros componentes de forma independiente, en tiempo y espacio. • Sistema basado en componentes Conjunto de mecanismos y herramientas que permiten la creación e interconexión de componentes software, junto con una colección de servicios para facilitar las labores de los componentes que residen y se ejecutan en él. 1 Conceptos fundamentales • Modelo de componentes Definición de la forma de sus interfaces y los mecanismos para interconectarlos (DCE, COM, JavaBeans, Corba, .NET framework). • Plataforma de componentes Entorno de desarrollo y de ejecución de componentes que permiten aislar la mayor parte de las dificultades conceptuales y técnicas que conlleva la construcción de aplicaciones basadas en las componentes de un modelo de componentes concreto (Windows - COM, Orbix - Corba, .NET). Conceptos fundamentales • Interfaz de un componente Determina las operaciones que el componente implementa como las que precisa utilizar de otros componentes durante la ejecución.. Usualmente son los atributos y métodos públicos que el componente implementa más los eventos que emite. • Eventos Especifican la forma en la que el componente notifica al exterior una respuesta a un estímulo externo o bien un cambio en una condición interna. Se especifica la signatura y la condición para que se produzca, pero no cómo tratarlo. Conceptos fundamentales • Interacción entre componentes Para los métodos públicos se utiliza RPC. Para los eventos: publish-and-suscribe: Comunicación directa: Los receptores se registran en el emisor que les envía los eventos cuando se producen. Comunicación indirecta: Usan distribuidores que notifican los eventos de otros emisores. O bien los receptores se registran en los distribuidores o bien se utiliza radiado total o parcial (broadcast - multicast) 2 Conceptos fundamentales • Contenedores Entidades software que permiten contener a otras entidades proporcionando un entorno compartido de interacción. Normalmente objetos y componentes visuales que a su vez pueden contener otros componente visuales. La relación se establece mediante eventos. Ejemplos: Escritorio. Conceptos fundamentales • Meta-información Información adicional de un componente que suele hacerse pública. La idea es que con esta información un componente puede saber cómo utilizar otro componente: Reflexión – Información general –Referencias externas –Descriptor de tipo –Interfaces –Clases / atributos / métodos Conceptos fundamentales • Entornos de desarrollo integrados IDE: Aplicación (visual) que permite la construcción de aplicaciones a través de componentes. Incluyen editores, browsers, ayudas, directorios de componentes, compiladores, depuradores, herramientas de control de configuración, etc. Visual Studio (Microsoft), Visual Age (IBM), VisualCafe 3 Conceptos fundamentales • Interoperabilidad Capacidad de dos o más componentes para comunicarse y cooperar de forma compatible entre sí. – Interoperabilidad sintáctica: sintáctica Signatura (tipos) de los argumentos. – Interoperabilidad a nivel de protocolos: protocolos Ordenes relativos de los mensajes recibidos y la sincronización entre ellos. – Interoperabilidad semántica: semántica Las anteriores y además la funcionalidad de las operaciones. • Estándares de interoperabilidad Garantizan la interoperabilidad - Corba, JavaBeans Características de los SBC • Distribución Los componentes residen en diversas máquinas integrantes de una red. • Heterogeneidad Se ejecutan en diferentes plataformas, sistemas operativos, escritos en diferentes lenguajes, diferentes desarrolladores. • Independencia de la extensibilidad Modificables y ampliables añadiendo nuevas componentes. • Dinamismo Sujetos a evolución por ampliación, desaparición, sustitución de componentes o reconfigurando las relaciones entre ellos. Variaciones de la noción de componente • Wallnau: Unidad de sw con funcionalidad y complejidad significativa, considerada como caja negra y de grano grueso. • Nierstrasz y Meijler: Grano grueso o grano fino (desde botones y ventanas de diálogo hasta hojas de cálculo). • Szyperski: Unidad binaria de composición carente de estado caracterizado por su interfaz, que debe definir tanto la funcionalidad como las dependencias del contexto (funcionalidad del entorno, plataforma de ejecución, etc.) 4 Variaciones de la noción de componente • Meyer: Noción fundamental: es sw orientado al cliente: que permita se utilizado por otros elementos de sw sin intervención de los autores. Implica una completa especificación de su comportamiento y funcionalidad. Típica aplicación con componentes Servicio de datos de venta Sistema de facturación Servicios internos de la corporación Servicio de identificación Servicio sw de entrega Servicio de calendario Servicio de notificación y mensajes Servicios del entorno de desarrollo Sistema de almacén Servicio de directorio de clientes y búsqueda Servicio geográfico de mapas Servicio de aceptación de tarjetas de crédito Servicios web de terceros Programación Orientada a Componentes • Variante natural de la programación orientada a objetos para los sistemas abiertos. • Nuevos elementos: los aspectos composicionales distintos a los aspectos computacionales: – Los objetos no son unidades de composición independientes de las aplicaciones. – Los interfaces de los objetos son de muy bajo nivel para la reutilización. 5 Programación Orientada a Componentes • Objetivo: Construir un mercado global de componentes (MGC) cuyos usuarios son los propios desarrolladores de aplicaciones que necesitan reutilizar componentes ya hechos y probados para construir sus aplicaciones de forma más rápida y robusta o que quieren añadir funcionalidad dependiente de terceros. PITAC: Señala las componentes y la creación de un repositorio de componentes para todo EEUU como un área prioritaria. Programación Orientada a Componentes • Entidades básicas: Componentes - cajas negras que encapsulan cierta funcionalidad y que son diseñadas para el MGC sin saber quién las utilizará, ni cómo, ni cuándo. – No se modifica su implementación – Importante: Diseño y desarrollo de componentes nuevas técnicas. Programación Orientada a Componentes Conceptos fundamentales • Composición tardía: Composición en un tiempo posterior al de la compilación de la componente (montaje, carga o ejecución) y por alguien ajeno a su desarrollo. Solo se conoce su interfaz o contrato. No se conocen detalles de la implementación. No se conoce la forma en la que fue concebido para ser usado. 6 Programación Orientada a Componentes • Entornos: Conjunto de recursos y componentes que rodean a un objeto o componente y que definen las acciones que sobre él se solicitan así como su comportamiento. Entorno de ejecución: Ambiente para el que fue construido y donde se ejecuta normalmente. Entorno de diseño: Entorno restringido que se utiliza para localizar, configurar, especializar y probar los componentes que van a formar parte de una aplicación. Programación Orientada a Componentes • Eventos Mecanismo de comunicación por el que se pueden propagar las situaciones que ocurren en un sistema de forma asíncrona. Emitidos para avisar a los componentes de su entorno de cambios en su estado o de otras circunstancias especiales (excepciones). Comunicación mediante publish-and-suscribe. Programación Orientada a Componentes • Reutilización Habilidad de un componente para ser utilizado en contextos distintos a aquellos para los que fue diseñado. Reutilizar no significa utilizar más de una vez. • Contratos Especificación que se añade a la interfaz de un componente y que establece las condiciones de uso e implementación que ligan a los clientes y proveedores del componente. Cubren aspectos funcionales y no funcionales. 7 Programación Orientada a Componentes • Polimorfismo Habilidad de un componente de mostrarse de diferentes formas, dependiendo del contexto. Usual: sobrecarga de operadores genericidad de componentes (monedas, almacenes) – Reemplazabilidad o capacidad de un componente de reeemplazar a otro sin violar los contratos. – Polimorfismo acotado, para indicar restricciones sobre los tipos sobre los que se puede parametrizar una componente. Programación Orientada a Componentes • Seguridad Garantía que debe ofrecer un componente que respeta sus interfaces y contratos. – De tipos: Asegura que las invocaciones usan parámetros adecuados (o supertipos) y que los valores que devuelven son del tipo adecuado (o subtipos). – De módulo: Asegura que solo se utilizan los servicios ajenos al componente que se han declarado. • Reflexión: Habilidad para conocer y modificar el estado de un componente 8