INSTITUTO
TECNOLÓGICO DE OAXACA
UNIDAD 3
PARADIGMA
ORIENTADO A
COMPONENTES
CATEDRÁTICO:
LIC. JAIME R. LAGUNAS PIÑON
NICOLÁS
MENEZ REYNA SONIA
LICENCIATURA
EN INFORMÁTICA
22/07/2013
ÍNDICE
3
PARADIGMA ORIENTADO A COMPONENTES
3.1
CONCEPTO Y USO DE LOS COMPONENTES DE SOFTWARE
3.2
REVISIÓN
3.2.1
TIPOS
3.2.2
CARACTERÍSTICAS
3.2.3
TECNOLOGÍAS
3.3
INTERFAZ
3.4
DISEÑO
3.1 CONCEPTO Y USO DE LOS COMPONENTES DE
SOFTWARE
El objetivo de la tecnología de
componentes software es construir aplicaciones complejas mediante ensamblado de
módulos (componentes) que han sido previamente diseñados por otras personas a
fin de ser reusados en múltiples aplicaciones.
Conceptos:
·
Un
componente es una 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.( Szyperski [1998])
·
Un componente de software individual es un
paquete de software, un servicio web, o un módulo que encapsula un conjunto de
funciones relacionadas (o de datos).
·
Un componente de software:
Es
una unidad de composición con interfaces especificadas en forma de contrato
y con dependencias de contexto explícitas. Un componente de software puede ser
desplegado o instalado independientemente y es sujeto a ser composición por
terceras entidades".
·
Un componente de software se define como
un paquete de software (grupo de archivos) o modulo, que realiza un proceso en
específico, obteniendo unos resultados acordes con el proceso realizado. Un
componente de software se presenta por lo general en dos:
o
Componentes ejecutables: Que son los componentes los cuales han sufrido
procesos de compilación y ligado.
o
Componentes basados en código fuente: Los cuales
sufren el proceso de compilación(o interpretación según sea el caso),
indirectamente (ejemplo de estos componentes son los archivos hosteados en un
servidor web, los cuales son “compilados” por el servidor al enviar una
respuesta al cliente).
Un
componente de software por lo general está compuesto de uno o varios archivos,
los cuales puede estar compilados o sin compilar.
UTILIDAD
Es
utilizado para reducir los costos, tiempo y esfuerzos de desarrollo del
software, y de esta manera incrementar el nivel de productividad de los grupos
desarrolladores y minimizar los riesgos; a su vez ayuda a optimizar la
fiabilidad, flexibilidad y la reutilización de la aplicación final.
De esta manera, las pequeñas empresas pueden tener una mayor confiabilidad a la hora de realizar una inversión tecnológica.
De esta manera, las pequeñas empresas pueden tener una mayor confiabilidad a la hora de realizar una inversión tecnológica.
7 criterios [Meyer, 1999]:
•
Puede
ser usado por otros elementos de SW
•
Puede
ser usado por los clientes sin la necesidad de la intervención del
desarrollador.
•
Incluye
las especificaciones de todas las dependencias.
•
Incluye
documentación de las funcionalidades que ofrece
•
Se
puede entender su funcionamiento en base a las especificaciones.
•
Se
puede acoplar a otros componentes
•
Puede
ser incorporado a un sistema de manera suave y rápida
3.2
REVISIÓN
3.2.1
TIPOS
Componentes de despliegue o distribución
(Deployment)
Estos
componentes se usan para formar un sistema ejecutable. Un ejemplo de tal
componente es la librería de enlace dinámico y los archivos ejecutables. Otros
ejemplos son los componentes COM+, Enterprise Java Beans, componentes CORBA y
objetos de base de datos.
Componentes de Producto de Trabajo
Estos componentes
son parte del proceso de desarrollo que es esencial para el sistema. Algunos
ejemplos de componentes de producto de trabajo son los archivos fuente,
archivos de datos y tablas. Ellos son los archivos fuente y archivos de datos
que se usan para crear los componentes de distribución como Agente Analizado.Java
y AnalizadorDatos.txt.
Componentes de Ejecución
Estos
componentes son el resultado de un sistema que se está ejecutando. Cuando un
DLL es instanciado como un componente COM+, es un ejemplo de un componente de
ejecución.
Componentes
utilizados en la elaboración de software:








3.2.2
CARACTERÍSTICAS
Las características principales de un componente
software son:
Aislamiento: Un componente puede ser instalado de forma
independiente en una plataforma.
Composición: Un componente puede ser compuesto con otros para
formar aplicaciones. Es decir, una compañía o un desarrollador puede llegar y
tomar el componente y agregarlo a lo que esté haciendo, o sea haría una
composición de componentes.
Opacidad: Un componente se maneja siempre de forma opaca, sin
que los diseñadores de aplicaciones que lo manejan ni el entorno tengan que
acceder a sus detalles internos para hacer uso de él.
Reutilización: La capacidad de ser reutilizado es una característica
importante de los componentes de software de alta calidad. Un componente debe
ser diseñado e implementado de tal forma que pueda ser reutilizado en muchos
programas diferentes.
Simplifica el mantenimiento del sistema: Cuando existe un débil acoplamiento entre
componentes, el desarrollador es libre de actualizar y/o agregar componentes
según sea necesario, sin afectar otras partes del sistema.
Mayor calidad: Dado que un componente puede ser construido y luego
mejorado continuamente por un experto u organización, la calidad de una
aplicación basada en componentes mejorará con el paso del tiempo.
Es una unidad ejecutable: que puede ser implantada
independientemente (esto de implantado es que puede ser instalado).
Un componente no tiene estado (al menos
externamente visible)
Se puede
tomar a los componentes de software como una analogía a los componentes
electrónicos, la idea de esto es tener diversos componentes que puedan ser
tomados para hacer un sistema más grande, así como tomar procesadores,
integrados, memorias, etc. para hacer una computadora por ejemplo.
Definir interfaces: La característica
fundamental de un componente es la habilidad de definir interfaces.
Es genérico: Sus servicios deben servir
para varias aplicaciones.
3.2.3 TECNOLOGÍAS
La forma concreta de especificar, implementar, o empaquetar
un componente depende de la tecnología utilizada.
·
Una tecnología de
componentes incluye:
o
Modelo de
componentes: Define un marco conceptual para el desarrollo de componentes y de
aplicaciones generadas por ensamblado:
§ Define de forma
exacta que se entiende por componente, y como se especifica el componente y sus
interfaces
§ Define los modos
de interacción entre componentes
o
Plataforma de
componentes: Entorno que de una infraestructura de soporte para la ejecución de
aplicaciones basadas en componentes
§ Se basa en un
determinado modelo de componentes
§ Incluyen
servicios de soporte para los componentes: gestión de su ciclo de vida, persistencia, comunicación entre ellos, etc.
EJEMPLOS DE TECNOLOGÍAS
- Tecnologías de Objeto de negocio
- Frameworks basados en componentes para dominios
específicos
- Earth System Modeling Framework
(ESMF)
- Programación orientada a
componentes
- Paquetes definidos por la plataforma de servicios OSGi
- Common Component
Architecture (CCA) -
Foro de arquitectura de componentes comunes, Software de componentes
científico/HPC
- TASCS - SciDAC Center for Technology for Advanced Scientific Component
Software (Centro para la Tecnología para el Avance del Software
Científico de Componentes)
- Lenguaje de programación Eiffel
- Enterprise
JavaBeans de Sun
Microsystems (ahora Oracle)
- Programación basada en
flujos
- Modelo de componentes
fractal de ObjectWeb
- Framework de componentes MidCOM de Midgard y PHP
- Oberon, Component Pascal, y BlackBox Component Builder
- rCOS Método de diseño de manejo de modelo
basado en componentes diseñado desde UNU-IIST
- SOFA component system de ObjectWeb
- El espacio de nombres
System.ComponentModel
en el Microsoft .NET - Unity3D desarrollado por Unity Technologies
- UNO de la suite de oficina OpenOffice.org
- Visual Component Library (VCL) y Component
Library for Cross Platform (CLX) de Borland y la biblioteca libre similar LCL de Lazarus.
- Visual Basic Extension, OCX/ActiveX/COM y DCOM de Microsoft
- XPCOM de Mozilla
Foundation
- Tecnologías de documentos
compuestos
- Active Documents en Oberon System y BlackBox
Component Builder
- Bonobo (component model), una parte de GNOME
- Fresco
- KPart, la tecnología de documentos compuestos
de KDE
- Object linking
and embedding (OLE)
- OpenDoc
- Componentes de software de computación distribuida
- .NET Remoting de Microsoft
- 9P Protocolo distribuido desarrollado por Plan
9, y usado por Inferno y otros sistemas.
- CORBA y el CORBA Component Model del Object
Management Group
- D-Bus de la organización freedesktop.org
- DCOP de KDE (obsoleto)
- DCOM and later
versions of COM (and COM+) from
Microsoft
- DSOM y el IBM System Object Model de IBM (ahora deshechado)
- ICE de ZeroC
- Java EE de Sun
- Universal
Network Objects (UNO) de OpenOffice.org
- Servicios web
- Zope de Zope
Corporation
- La programación genética
enfatiza la separación de algoritmos de la representación de datos
- Lenguajes de descripción de
interfaces (IDLs)
- Open Service Interface Definitions (OSIDs)
- Algunas partes de COM y de CORBA
- Platform-Independent
Component Modeling Language
- SIDL - Scientific Interface Definition Language
- Algunas partes del lenguaje de Babel. Sistema de interoperabilidad de lenguaje de programación
científica (SIDL y Babel son tecnología nucleo de CCA y SciDAC TASCS Center - ver arriba.)
- SOAP IDL del World Wide Web Consortium (W3C)
- WDDX
- XML-RPC, el predecesor de SOAP
- Componentes de frameworks
Inversion of Control (IoC) y Plain Old C++/Java Object (POCO/POJO)
- Tuberías y filtros
3.3 INTERFAZ
Se llama interfaz a la parte del software del
ordenador que tiene por misión la comunicación con el usuario, así como también
se llama interfaz a los dispositivos de hardware que se encargan de
interconectar a diferentes dispositivos entre sí. Es una conexión e interacción
entre el hardware y el software, entre el hardware y el usuario o bien entre el
software y el usuario.
Especificación
de una interfaz
La interfaz representa el conjunto de operaciones y
modelo de información que se requiere para definir completamente el servicio
que se espera del componente que las oferte y lo que el cliente debe espera de
su uso.
La especificación
de una interfaz contiene:
·
El identificador de la declaración de la interface
al que se hace referencia en su instanciación dentro de un componente.
·
El modelo de información, esto es, los atributos,
tipos, asociaciones, etc. Definidos unos en función de otros hasta proporcionar
un modelo completo y cerrado.
·
La descripción de las operaciones a través de los
que el usuario puede acceder al servicio proporcionado por la interfaz. Esto
supone definir la especificación completa de cada operación (identificador,
parámetros, precondiciones y post condiciones, etc.).
·
Conjunto de invariantes y restricciones del modelo
de información de la interfaz.
·
Otras interfaces con las que tiene establecidas
relaciones de dependencia o de herencia.
Los servicios que ofrece o requiere un componente
se expresan mediante interfaces
Representan el contrato entre el componente
cliente y el componente servidor
Concepto
base en desarrollo basado en componentes => Separación entre interfaz e
implementación
![]() |
3.4 DISEÑO
El diseño a nivel de componentes establece
los datos algorítmicos que se requieren
para manipular las estructuras de datos, efectuar la comunicación entre los componentes del software por medio de las
interfaces.
Se puede definir
y usar componentes desde 3 puntos de vista:



Punto de vista
orientado a objetos
·
Desde este punto
de vista, un componente contiene un conjunto de clases que colaboran entre sí.
·
El diseño de un
componente implica añadir a la definición de clases en el análisis (dominio del
problema) información para su implementación en software.
Punto de vista
“convencional”
·
Desde este punto
de vista, un componente es un elemento funcional de un programa que incluye
lógica de procesamiento, estructuras de datos internas requeridas para
implementar dicha lógica y una interfaz que permite que el componente sea
invocado y que se le puedan pasar datos.
·
Normalmente
llamado “módulo”
Roles de un
componente “convencional”
·
Componente de
control: Coordina el llamado a otros componentes del dominio del problema
·
Componente del
dominio del problema: implementa una función completa o parcial que es
requerida por el usuario
·
Componente de
infraestructura: responsable de las funciones que apoyan el procesamiento
requerido en el dominio del problema
·
Utilizan cartas
de estructura para describir sistemas
Punto de vista relacionado
al proceso
·
Reutiliza
software
·
Cuando se
desarrolla la arquitectura, se escogen componentes o patrones de diseño de un
catálogo, los cuales fueron creados para ser reutilizados
Diseñando
componentes basados en clases
Hay 4 principios básicos de diseño que se pueden aplicar:
·
Principio “abierto-cerrado”: Un
componente debe estar abierto a extensiones pero debe estar cerrado para
modificaciones. El/la diseñador(a) debe
especificar el componente de manera que puede extenderse sin necesidad de hacer
modificaciones internas al código.
·
Diseñando
componentes basados en clases (2)
o
Principio de
substitución de Liskov: Las subclases
deben ser sustituibles por sus clases bases. Cualquier clase derivada de una
clase base debe cumplir con cualquier contrato implícito de la clase base con
respecto a los componentes que la usan. Un “contrato” es una precondición que
debe ser verdadera antes de que el componente use la clase base, y una
post-condición debe ser verdadera después de que el componente usa la clase
base.
·
Diseñando
componentes basados en clases (3)
o
Principio de
dependencia de inversión: “Se debe depender
de abstracciones, no de eventos concretos”
o
Principio de
segregación de interfaces: “Varias
interfaces dependientes del cliente son mejor que una interfaz de propósito
general”
·
Principios de
empaquetado
o
Principio de
equivalencia de liberación y reusó: “La
granularidad del reusó es la granularidad de liberación.” Agrupar clases
reusables en paquetes que se puedan administrar y controlar cuando una nueva
versión se genere.
o
Principio de
agrupamiento común: “Las clases que
cambian al mismo tiempo deben agruparse”
o
Principio de reusó
común: “Las clases que no se reúsan al mismo
tiempo no deben agruparse”.
Guías de diseño
ü Establecer convenciones para poner nombres
ü Utilice notación de interfaces siempre que pueda, dibújelas en el
lazo izquierdo de los diagramas y solo las que sean relevantes
ü Modele las dependencias de izquierda a derecha y la herencia de
abajo (clase derivada) hacia arriba (clase base)
Cohesión y
acoplamiento
ü La cohesión implica que un componente o clase encapsula solo
atributos y operaciones que están altamente relacionados entre ellas y con la
clase. Se busca la máxima cohesión en una clase
ü Acoplamiento es la medida cualitativa del grado en que una clase
está conectada con otra. Se busca el mínimo acoplamiento entre clases
Pasos para diseño
de componentes
- Identifique todas las clases de diseño
que correspondan al dominio del problema
- Identifique todas las clases de diseño
que correspondan al dominio de la infraestructura (GUI, sistemas
operativos, administración de datos etc.)
- Elabore todas las clases que no provienen
de clases reusadas
a)
Especifique
detalles de los mensajes entre clases que colaboran
b)
Identifique las
interfaces de cada componente
c)
Elabore atributos
y defina tipos de datos y estructuras de datos requeridas para implementarlas
d)
Describa el flujo
de procesamiento de cada componente en detalle
Pasos para diseño
de componentes (2)
- Describa fuentes de datos persistentes
(bases de datos y archivos) e identifique las clases requeridas para
manipularlos
- Desarrolle y elabore representaciones del
comportamiento de una clase o componente (diagramas de estados)
- Elabore diagramas de liberación
(deployment) para dar detalles adicionales de implementación
- Revise cada representación de diseño de
los componentes y siempre considere alternativas
Diseñando
componentes “convencionales”
Hay 3 estructuras básicas:
Secuencia,
selección e iteración
ü Los diagramas de flujo son los predecesores de los diagramas de
actividades (ver figura 11.10)
ü Las tablas de decisión se utilizan para definir procesos con una gran
cantidad de condiciones y acciones
ü Los lenguajes de diseño de programas (PDL) también llamados ingles
estructurado o pseudocódigo permiten definir el detalle de un algoritmo. [Pressman 2010]
BIBLIOGRAFÍA
Martínez, Luis F. Iribarne. Modelo de Mediacion
para el Desarrollo de Software basado en Componentes COTS. Universidad de
Almería : s.n., 2003.
Mendez, Oscar. Desarrollo de Software basado en
Componentes. msdn.microsoft.com. [En línea] http://msdn.microsoft.com/es-es/library/bb972268.aspx
www.Desarrollo de Software basado en Componentes.htm
www.Ingenier%C3%ADa%20de%20software%20basada%20en%20componentes%20-%20Wikipedia,%20la%20enciclopedia%20libre.htm