1a - Conceptos
1a - Conceptos
1a - Conceptos
Componentes y Servicios
Miguel A. Laguna
Objetivos del curso
Aprender los conceptos de:
Modelos de Componentes
Componentes ejecutables y Frameworks de componentes
Ingeniería de Software basada en Componentes
Servicios Web
Ingeniería de Software basada en Servicios
Micro-arquitecturas y relación con computación en la nube
Ser capaz de:
Diseñar e implementar un sistema utilizando las
herramientas, técnicas y procedimientos mostrados en el
curso
Desarrollo basado en
Componentes y Servicios
Conceptos de Desarrollo Basado en Componentes
Modelos de Componentes
Tecnologías y marcos de trabajo para desarrollo de
sistemas de componentes distribuidos.
Ingeniería del Software basada en Componentes
Lecturas complementarias
Arlow, Jim, Neustadt, Ila. “UML 2”, Anaya Multimedia, 2006
Clemens Szyperski “Component Software - Beyond Object-Oriented
Programming” – Second Edition, Addison-Wesley / ACM Press, 2002
Bibliografía general:
Tecnología
EJB/JEE
D. Panda, R. Rahman, D. Lane. EJB3 in Action. 2a Ed Manning. 2014.
ISBN: 1-933988-34-7.
SOAP/SOA
Michael Papazoglou, “Web Services and SOA: Principles and
Technology”, 2ª ed. Pearson, 2012
REST
Leonard Richardson, Sam Ruby. RESTful Web Services, Web services
for the real world. O'Reilly, 2007.
Bibliografía general:
Diseño
Generales
John Cheesman & John Daniels. UML components: a simple process for
specifying component-based software. Addison-Wesley, 2000
Martin Fowler. Patterns of Enterprise Application Architecture. Addison
Wesley, 2003.
Específicos
Derek C. Ashmore. The JEE Architect’s Handbook. DVT Press. ISBN:
2004
Microsoft patterns & practices http://msdn.microsoft.com
Conceptos de Desarrollo
Basado en Componentes
Miguel A. Laguna
Desarrollo del tema
1.0. La visión general
1.1. Reutilización de software
Enfoques
Evolución de la tecnología de componentes
1.2. Beneficios de los componentes
Mercado y estándares
1.3. Fundamentos y definiciones
Componentes frente a objetos: composición frente a
herencia
1.4. Interfaces y Contratos
1.5. CBSE: Ingeniería de Software Basada en
Componentes
Bibliografía
Sommerville, I. "Ingeniería del software" Pearson, 2011 (9ª ed.)
Lecturas complementarias
Clemens Szyperski “Component Software - Beyond Object-Oriented
Programming” – Second Edition, Addison-Wesley / ACM Press, 2002
Ivica Crnkovic, Magnus Larsson, Building Reliable Component-based
Systems, Artech House; 2002
1.0
La visión
Desarrollo basado en
componentes
Gestión de la complejidad: divide y vencerás
Bien conocido en otras disciplinas
Ingeniería Mecánica
Ingeniería Eléctrica
Arquitectura de Computadoras
Arquitectura
Desarrollo basado en
componentes
Idea principal: construir un sistema conectando
partes más pequeñas, independientes, ya existentes,
(quizás) provenientes de terceros.
Concepto “Commercial Off-The-Shelf” (COTS)
Reducir todo lo posible la creación de código nuevo
Component source:
http://www.componentsource.com/index.html
¿Variante de la programación
orientada a objetos?
La Programación orientada a objetos clásica se
centra en el código fuente (las clases) que serán
después compiladas en un programa binario
ejecutable.
Cumplimiento
de estándares
Uso efectivo Faltan especialistas
de especialistas
Niveles de Reutilización I
Artefactos de análisis y diseño
Patrones de diseño: reutilización de experiencia, adaptación
a cada caso concreto
Frameworks: arquitectura común
Familias de aplicaciones, Líneas de productos software:
arquitectura común y variable
Código fuente
Módulos, clases y herencia (OOP), separación de aspectos
(AOP)
Frameworks: esqueleto de código que hay que completar
Líneas de productos software con código fuente (común y
opcional)
Frameworks
Un marco de trabajo (o Framework) es un diseño de
un sistema incompleto formado por una colección de
clases concretas y abstractas y la interfaz entre ellas
Suelen estar diseñados con patrones
Complejos y difíciles de aprender pero muy efectivos
Construcción de interfaces usuario, GLADE, Swing,…
Conexión con BD: Hibernate
$ cat apple.txt | wc
Unix (filtros y tuberías)
Modelo de Componentes
Componentes desconocidos
Puntos de conexión: stdin/stdout
Técnica de Composición
Lenguajes de filtros: sed, awk, grep, wc
Lenguaje de Composición
Shell de Unix
Frameworks MS:
OLE, COM y ActiveX
Tecnología Microsoft (componentes locales)
Se puede insertar (o enlazar) una hoja de cálculo en
un documento Word (OLE)
O añadir controles (visuales o no) a un formulario o
una página Web (ActiveX)
Componentes COM
Modelo de Componentes Local
Componentes binarios
Puntos de conexión están estandarizados
Descrito por un lenguaje de definición de interfaces o IDL
Interfaces estándar (IUnknown...)
Técnica de Composición
Mezcla de lenguajes VB, C++
Lenguaje de Composición
Visual Basic, VBA
Componentes distribuidos:
Corba, .NET y JEE/EJB
Soporte middleware (puede estar integrado en el
sistema operativo)
Ejemplo: .NET
Independiente del lenguaje
C# sirve como IDL
CLR: lenguaje común en tiempo de ejecución
Componentes .NET y JEE/EJB
Modelo de Componentes
Componentes binarios
Puntos de conexión están estandarizados
Descrito por IDL (C# o Java)
Técnica de Composición
Sistemas distribuidos y distintos lenguajes
Lenguaje de Composición
C#, Java…
Servicios Web
Servicios Web
Procedimiento de conexión interpretado, no
compilado
Más flexible:
Aunque cambie la interfaz, no hay que recompilar
Protocolo HTTP - independiente de .NET , CORBA, etc.
Servicios Web
Modelo de Componentes
Contenido: no es importante
Puntos de conexión: se describen con XML, JSON
Procedimiento de conexión es la interpretación de
SOAP/WSDL o REST
Técnica de Composición
Sistemas distribuidos y protocolo HTTP
Lenguaje de Composición
Cualquiera
BPEL: Business Process Execution Language
Componentes “commercial-
off-the-shelf “ (COTS)
Un sistema de software que puede ser adaptado para
diferentes clientes sin cambiar el código fuente del
sistema.
Los sistemas COTS tienen características genéricas y
se puede utilizar en diferentes entornos.
Mecanismos de configuración que permiten afinar la
funcionalidad del sistema para adaptarse a las necesidades
específicas de los clientes.
Reglas de negocio
Base de datos de
la organización
Lenguajes específicos de
dominio
Un lenguaje específico de dominio (domain-specific
language, DSL) es un lenguaje dedicado a resolver
un problema en particular (Textual o Gráficamente)
Ejemplos
SQL para consultas a bases de datos
Hojas de cálculo
Mathematica
GUI-Builder
COTS o
Framework
Sistema
legado
Resumen:
Niveles de reutilización
Reutilización de diseño/código Reutilización de componentes
fuente ejecutables
Bibliotecas de módulos Bibliotecas de módulos ejecutables
Bibliotecas de clases Filtros y tuberías Unix
Frameworks (Marcos de trabajo) de Frameworks de componentes
aplicaciones (GUI, DB)
Patrones de diseño Sistemas orientados
a servicios
Líneas de productos software Envoltorios de sistemas legados,
COTS y ERP
Desarrollo del software Lenguajes específicos de dominio
orientado a aspectos /Generadores de aplicaciones, MDD
1.2. Beneficios de los
Componentes
¿Componentes?
Beneficios potenciales:
Cada componente adquirido es un producto estándar, con todas
las ventajas, pero además se puede adaptar al ensamblarlo
Peor rendimiento
Niveles de indirección, adaptadores, interacciones remotas...
Responsabilidades legales
Si un sistema falla, ¿cómo se determina el componente culpable?
1.3. Fundamentos y
definiciones
¿Qué es un componente y
…qué no lo es?
Los términos componente y objeto a menudo se
confunden…
Las similitudes hacen que la tecnología OO sea muy
apropiada para implementar componentes.
Sin embargo:
Un componente (binario, p. e. un control ActiveX) se puede
implementar mediante lenguajes no orientados a objetos (C,
VB)
Un componente puede encapsular un sistema existente
(sistema legado) en una organización, que no tiene por qué
ser OO
Componente: Definición
“Unidad de composición de aplicaciones software,
que posee un conjunto de interfaces y requisitos, y
que tiene que poder ser desarrollado, adquirido,
incorporado al sistema y compuesto con otros
componentes de forma independiente” (Szyperski)
Dos partes:
Un conjunto de interfaces (las que proporciona y las que
requiere).
Código ejecutable que se puede combinar con otros
componentes a través de esas interfaces
Características
Especificaciones claras de lo que requiere y de lo que
proporciona.
Interacciona con su entorno a través de interfaces
bien definidas.
• Interfaces: variantes
• Especificación de contratos
Interfaces
Determinan las operaciones que el componente
proporciona y las que requiere de otros componentes
durante la ejecución.
Una interfaz exportada describe los servicios proporcionados
por un componente a su entorno
Una interfaz importada especifica los servicios requeridos
por el componente del entorno
.NET (C#)
Sun JavaBeans y EJB (Java)
WSDL (Servicios Web)
CORBA IDL
Describe operaciones y parámetros de cada interfaz.
Lenguaje declarativo similar al ANSI C++.
Preprocesado
C++
Smalltalk
Java
OLE
(Visual Basic,
Delphi, Builder)
Ada Interface Definition Languaje
(IDL)
Cobol, C, etc.
Ejemplo (fragmento)
Política de seguridad de un objeto:
module CORBA {
typedef unsigned long PolicyType;
interface Policy {
readonly attribute PolicyType policy_type;
Policy copy ();
void destroy ();
}
typedef sequence<Policy> PolicyList;
}
CORBA: Interfaces
Las definiciones IDL de las interfaces se usan para
generar interfaces y esqueletos del código en
lenguajes convencionales (C++)
MS IDL (Microsoft COM)
interface ISpellCheck : IUnknown
{
HRESULT check([in] BSTR *word, [out] bool *correct);
};
library SpellCheckerLib
{
coclass SpellChecker
{
[default] interface ISpellCheck;
interface ICustomSpellCheck;
};
};
UML: interfaz proporcionada
Una clase o componente implementa una interfaz y
por tanto proporciona sus servicios
«interface»
Prestar
prestar()
devolver() Prestar
hayRetraso()
Libro CD Libro CD
UML: Interfaz requerida
Una interfaz requerida indica que un clasificador
utiliza los servicios definidos por la interfaz
Tres formas de expresar la dependencia de <<uso>>
«interface»
Prestar
1 1
prestar() Biblioteca
devolver()
hayRetraso()
Conector de Prestar
ensamblado
Libro CD
0..* 0..*
Representación: Caja negra
OrderEntry
Billing
Puertos
Un puerto especifica un punto de interacción entre
un clasificador y su entorno
Un puerto se describe por sus interfaces
proporcionadas y requeridas:
Es un conjunto semánticamente cohesivo de interfaces
Puede tener un nombre
presentación (Puerto) Visor
Libro
MedioVisualización
presentación
Visualizar
Libro
Representación: Caja blanca:
Detalle del componente
Estructura del componente
Un componente puede implementarse con clases o
puede construirse a partir de otros componentes
Las interfaces delegan en las partes internas
Se pueden mostrar los elementos anidados, conectados a él
por relaciones de dependencia (<<delegación>>) a través
de los puertos
Se pueden mostrar
Clases que realizan el componente (“Compartimento de
elementos empaquetados”)
«delegate» «delegate»
I1 I2
Compartimento de elementos
empaquetados
Estructura interna:
componentes «component»
B
I1 I3
«component»
C
I3 I2
«component»
A
«component» «component» I2
I1 B C
Vista de caja negra I3
«delegate» «delegate»
«component»
A
I1 I2 I1 I2
Estructura interna:
Partes y conectores
B y C son instancias de componentes (.ear con varios .jar)
«component»
A
estructura
interna
b:B c:C
I3
I1 I2
I1 I2
Compartimento de estructura
interna
Utilidad de las interfaces
Comprobación de tipos en el código de cliente.
Invariante:
Es una expresión sobre el estado de la interfaz que siempre
se cumple
Se puede asociar un conjunto de invariantes con una
interfaz.
Pre y post-condición
Pre-condición
Es una afirmación que el componente asume que debe
cumplirse antes de invocar la operación
En general, es una expresión con los parámetros de entrada
de la operación [y su estado]
Post-condición
Es una afirmación de lo que el componente garantiza que se
cumplirá después de que la operación haya sido invocada
(siempre que la pre-condición fueran cierta)
Es una expresión con los parámetros de entrada y salida,
[así como el estado inmediatamente antes y después de la
invocación]
Especificación de contratos:
OCL
interface ICustomSpellCheck : IUnknown
{
HRESULT add([in] BSTR *word);
HRESULT remove([in] BSTR *word);
};
Framework de
Servicios de Coordinación (transacciones, Componentes
persistencia, etc.)
Modelos de Componentes
Modelos de Componentes y Frameworks de
Componentes a veces se entremezclan
Un Modelo de Componentes define un conjunto de
estándares y convenciones usadas por los desarrolladores
Un Framework es una infraestructura de soporte para ese
modelo
Modelo de
Componentes
Relaciones entre conceptos
Interfaces que satisfacen contratos
Despliegue Modelo de
independiente Componentes
Framework de
Servicios de Coordinación (transacciones, persistencia.) Componentes
Frameworks y Contratos
Los frameworks también imponen obligaciones,
pero..
Los frameworks se centran en los “contratos generales” de
las composiciones
Los contratos son especificaciones para las relaciones
concretas entre los componentes.
1.5.
Ingeniería de Software Basada
en Componentes (CBSE)
(Sommerville)
Ingeniería de Software Basada
en Componentes
En CBSE (Component Based Software Engineering) el desarrollo
es un trabajo de adaptación y composición a partir de
componentes
Estos componentes pueden tener diversos orígenes:
desarrollados para uso genérico, comprados o desarrollados a la
medida
Objetivos
Desarrollar sistemas a partir de componentes ya
construidos.
Desarrollar componentes como entidades reutilizables.
Mantener y evolucionar el sistema a partir de la adaptación y
reemplazo de sus componentes.
Procesos CBSE
(Sommerville 9ª ed.)
Procesos CBSE
Incluyen las diferentes actividades implicadas en el
desarrollo y el uso de componentes reutilizables: