2. Introducción
La complejidad de los sistemas computacionales actuales nos ha
llevado a buscar la reutilización del software existente. El desarrollo de
software basado en componentes permite reutilizar piezas de código
pre elaborado que permiten realizar diversas tareas, conllevando a
diversos beneficios como las mejoras a la calidad, la reducción del ciclo
de desarrollo y el mayor retorno sobre la inversión. Al comparar la
evolución del ambiente de IT con el crecimiento de las metrópolis
actuales, podemos entender el origen de muchos problemas que se han
presentado históricamente en la construcción de software y vislumbrar
las posibles y probables soluciones que nos llevarán hacia la
industrialización del software moderno.
3. ¿Qué es un componente?
Un componente es una entidad de composición de aplicaciones software
que posee un conjunto de interfaces y un conjunto de dependencias
explícitas del contexto 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).
Estandarizado: Los componentes tienen que ajustarse a algún modelo de
estandarización.
Independiente: Tiene que ser posible desplegar un componente sin tener que
utilizar otros componentes específicos.
Componible: Todas las interacciones deben tener lugar a través de interfaces
definidas públicamente.
Desplegable: Para ser desplegable, un componente debe ser independiente y debe
ser capaz de funcionar como una entidad autónoma o sobre una plataforma de
componentes que implemente el modelo de componentes.
Documentado: Los componentes tienen que estar completamente documentados
para que los usuarios potenciales puedan decidir si satisfacen o no sus necesidades.
Características
4. Desarrollo de Software Basado en
Componentes
El modelo de desarrollo basado en componentes conduce a la
reutilización del software, y la reutilización proporciona beneficios a los
ingenieros de software. Según estudios de reutilización
La actividad de la ingeniería comienza con la identificación de clases
candidatas. Esto se lleva a cabo examinando los datos que se van a
manejar por parte de la aplicación y el algoritmo que se va a aplicar
para conseguir el tratamiento. Los datos y los algoritmos
correspondientes se empaquetan en una clase.
5. Beneficios del Desarrollo de Software basado en
Componentes
En esencia, un componente es una pieza de código pre elaborado que
encapsula alguna funcionalidad expuesta a través de interfaces estándar . Los
componentes son los "ingredientes de las aplicaciones", que se juntan y
combinan para llevar a cabo una tarea . Es algo muy similar a lo que podemos
observar en el equipo de música que tenemos en nuestra sala. Cada
componente de aquel aparato ha sido diseñado para acoplarse perfectamente
con sus pares, las conexiones son estándar y el protocolo de comunicación
está ya preestablecido
Las tecnologías de objetos proporcionan el marco de trabajo técnico para un
modelo de proceso basado en componentes para la ingeniería del software. El
paradigma orientado a objetos enfatiza la creación de clases que encapsulan
tanto los datos como los algoritmos que se utilizan para manejar los datos. Si
se diseñan y se implementan adecuadamente, las clases orientadas a objetos
son reutilizables por las diferentes aplicaciones y arquitecturas de sistemas
basados en computadora.
6. El paradigma de ensamblar componentes y escribir código para hacer que
estos componentes funcionen se conoce como Desarrollo de Software Basado
en Componentes. El uso de este paradigma posee algunas ventajas:
Reutilización del software. Nos lleva a alcanzar un mayor nivel de
reutilización de software.
Simplifica las pruebas. Permite que las pruebas sean ejecutadas probando
cada uno de los componentes antes de probar el conjunto completo de
componentes ensamblados.
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.
Beneficios del Desarrollo de Software basado en
Componentes
7. De la misma manera, comprar componentes de
terceros en lugar de desarrollarlos, posee algunas
ventajas:
Ciclos de desarrollo más cortos. La adición de una pieza dada de
funcionalidad tomará días en lugar de meses ó años.
Mejor ROI. Usando correctamente esta estrategia, el retorno sobre la
inversión puede ser más favorable que desarrollando los componentes uno
mismo.
Funcionalidad mejorada. Para usar un componente que contenga una
pieza de funcionalidad, solo se necesita entender su naturaleza, más no sus
detalles internos. Así, una funcionalidad que sería impráctica de implementar
en la empresa, se vuelve ahora completamente asequible.
8. Motivación y planteamientos generales o
Contexto
Una de las disciplinas de la ingeniería del software que más impulso está
teniendo en los últimos tiempos es aquella que describe, desarrolla y utiliza
técnicas basadas en componentes software para la construcción de sistemas
abiertos y distribuidos, como por ejemplo los sistemas de información
distribuidos bajo Web. Esta disciplina también se conoce como ingeniería
del software basada en componentes distribuidos.
Los componentes software en cierta medida surgen ante la necesidad de
hacer un uso correcto de software reutilizable dentro de las aplicaciones.
Sin embargo, la mayoría de las metodologías de reutilización actuales no
contemplan el uso de componentes comerciales ya existentes para el
desarrollo de aplicaciones software
9. Podemos definirla como el empleo de elementos de software u otros de nivel
superior, creados en desarrollo anteriores, para de este modo reducir los
tiempos y simplificar el desarrollo del software, mejorando la calidad y
reduciendo su costo.
Especificaciones de requerimientos previamente concebidas
Diseños previamente definidos (Estructuras de datos, algoritmos, etc.)
Código probado y depurado con anterioridad
Planes y casos de prueba previamente utilizados
Personal cualificado (aprovechamiento de la experiencia de los ingenieros de
un proyecto a otro)
Paquetes de software de propósito general
Elementos que intervienen en la reutilización
La Reutilización
10. Conceptos de reutilización de software
La reutilización de software aparece como una alternativa para
desarrollar aplicaciones y sistemas SW de un manera más eficiente,
productiva y rápida.
La idea es reutilizar elementos y componentes SW en lugar de tener
que desarrollarlos desde un principio.
Surge formalmente de 1968
La idea principal era producir componentes de software como si de
componentes eléctricos se tratara.
El objetivo es reutilizar lo existente sin tener que volver a rediseñarlo
desde el principio.
11. Dificultades de la reutilización
En muchas empresas no existe plan de reutilización (No se considera
prioritario)
Escasa formación
Resistencia del personal
Pobre soporte metodológico
Uso de métodos que no promueven la reutilización (Estructurados)
Necesario métodos para:
Desarrollo para reutilización
Desarrollo con reutilización
¿Quién soporta los gastos adicionales de la reutilización?
Ventajas
Reducir el tiempo de desarrollo.
Reducir los costos.
Incrementar la productividad.
No tener que reinventar las soluciones.
Facilitar la compartición de productos del ciclo de vida.
Mayor fiabilidad
Mayor eficiencia (Aunque al principio pueda parecer que no)
Consistencia y la familiaridad, los patrones dentro del software serán más
consistentes, tendiendo a facilitar el mantenimiento del producto.
12. Economía en el Mercado de Software
Basado en Componentes
Los desarrollos tradicionales de aplicaciones incurren en altos costos y
en una inversión de tiempo extensa. El Desarrollo del Software basado
en Componentes busca, dentro de otros objetivos, reducir el tiempo de
trabajo, el esfuerzo que requiere implementar una aplicación y los costos
del proyecto, y, de esta forma, incrementar el nivel de productividad de
los grupos desarrolladores y minimizar los riesgos globales. Esto
aumenta los niveles de la economía en el mercado del software.
El ensamblaje de partes de software previamente elaboradas Inspirada en
los procesos de producción de sistemas físicos: Producción de aviones,
vehículos, computadores, aparatos electrónicos, etc. Fundamentada en la
Reutilización de Software Orienta los esfuerzos hacia una industria de
partes dando un giro de 360 grados al momento de ahorrar costos , esto
abarata los márgenes de precios mejorando así una mayor demanda de
productos.
13. Arquitectura de Software
Una Arquitectura de Software, también denominada Arquitectura lógica,
consiste en un conjunto de patrones y abstracciones coherentes que
proporcionan un marco definido y claro para interactuar con el código
fuente del software.
ARQUITECTURA BASADA EN COMPONENTES.
Una arquitectura basada en componentes describe una aproximación de
ingeniería de software al diseño y desarrollo de un sistema. Esta
arquitectura se enfoca en la descomposición del diseño en componentes
funcionales o lógicos que expongan interfaces de comunicación bien
definidas. Esto provee un nivel de abstracción mayor que los principios de
orientación por objetos y no se enfoca en asuntos específicos de los objetos
como los protocolos de comunicación y la forma como se comparte el
estado.
14. La palabra inglesa framework define, en términos generales, un conjunto
estandarizado de conceptos, prácticas y criterios para enfocar un tipo de
problemática particular, que sirve como referencia para enfrentar y resolver
nuevos problemas de índole similar. En el desarrollo de software, un
framework es una estructura conceptual y tecnológica de soporte definida,
normalmente con artefactos o módulos de software concretos, con base en la
cual otro proyecto de software puede ser organizado y desarrollado.
Que es un Marco de Trabajo?
Típicamente, puede incluir soporte de programas, bibliotecas y un lenguaje
interpretado entre otros programas para ayudar a desarrollar y unir los
diferentes componentes de un proyecto.
Representa una arquitectura de software que modela las relaciones generales de
las entidades del dominio.
Provee una estructura y una metodología de trabajo la cual extiende o utiliza las
aplicaciones del dominio.
15. -Comunicación: Intensa colaboración y comunicación de los clientes. Incluye la
investigación de requisitos.
-Planeación: Establece un plan de trabajo de ingeniería de software, incluye tareas
técnicas, riesgos y recursos.
-Modelos: Creación de modelos que permiten al desarrollador y al cliente entender
mejor los requisitos del software.
-Construcción: Combina la generación de códigos y realización de pruebas necesarias
para descubrir errores.
-Despliegue: Al entregar el software al cliente este lo evalúa y proporciona información
a partir de su evaluación.
Actividades del Marco de Trabajo
16. Actividades Sombrillas
Se aplican durante el proceso del software, entre ellos
están:
*Seguimiento y control del proyecto del software
*Gestión de Riesgos
*Aseguramiento de la Calidad de Software
*Medición
*Gestión de Configuración
*Gestión de Reutilización
Actividades del Marco de Trabajo
17. Framework
El concepto framework se emplea en muchos ámbitos del desarrollo de
sistemas software, no solo en el ámbito de aplicaciones Web. Podemos
encontrar framework para el desarrollo de aplicaciones médicas, de visión
por computador, para el desarrollo de juegos, y para cualquier ámbito que
pueda ocurrírsenos. En general, con el término framework, nos estamos
refiriendo a una estructura software compuesta de componentes
personalizables e intercambiables para el desarrollo de una aplicación. En
otras palabras, un framework se puede considerar como una aplicación
genérica incompleta y configurable a la que podemos añadirle las últimas
piezas para construir una aplicación concreta.
Tipos de Framework.
Existen varios tipos de framework Web: orientados a la interfaz de usuario,
como Java Server Faces, orientados a aplicaciones de publicación de
documentos, como Coocon, orientados a la parte de control de eventos,
como Struts y algunos que incluyen varios elementos como Tapestry
18. Características de un Framework.
A continuación se mostrara una serie de características que podemos encontrar en
prácticamente todos los framework existentes.
•Abstracción de URL y sesiones: No es necesario manipular directamente las URL ni
las sesiones, el framework ya se encarga de hacerlo.
•Acceso a datos: Incluyen las herramientas e interfaces necesarias para integrarse con
herramientas de acceso a datos, en BBDD, XML, entre otros.
•Controladores: La mayoría de framework implementa una serie de controladores para
gestionar eventos, como una introducción de datos mediante un formulario o el acceso a
una página. Estos controlador es suelen ser fácilmente adaptables a las necesidades de un
proyecto concreto.
•Autentificación y control de acceso: Incluyen mecanismos para la identificación de
usuarios mediante un identificador y una contraseña donde permiten restringir el acceso
a determinas páginas a determinados usuarios.
19. Modelo – Vista – Controlador (MVC)
El patrón Modelo-Vista-Controlador es una guía para el diseño de arquitecturas de
aplicaciones que ofrezcan una fuerte interactividad con usuarios. Este patrón organiza
la aplicación en tres modelos separados, el primero es un modelo que representa los
datos de la aplicación y sus reglas de negocio, el segundo es un conjunto de vistas que
representa los formularios de entrada y salida de información, el tercero es un conjunto
de controladores que procesa las peticiones de los usuarios y controla el flujo de
ejecución del sistema.
Frameworks más populares entre las empresas y los
desarrolladores independientes
20. Sistemas Distribuidos
Son Programas concurrentes ejecutados en diferentes procesadores sin
memoria común
– Extensiones y nuevos mecanismos de concurrencia (paso de mensajes,
RPC, sockets).
– Dependen de un medio físico de comunicación: cable serie, bus interno
(transputers), red, etc.
– Problemas de fiabilidad
- Tolerancia a fallos hardware y software.
21. Sistemas Abiertos
• Sistemas distribuidos que integran programas heterogéneos e incluso
aplicaciones ya existentes (legacy systems). Necesitan modelos nuevos ya
que los mecanismos y las lógicas aplicables a la concurrencia no son
válidos.
• Actores: Objetos con un thread interno (activos)
– mensajes asíncronos
– comunicación punto a punto
– una dirección que puede transmitirse lo que permite configuraciones
dinámicas
– los actores pueden crear otros actores (dinámismo)
– Muchas versiones (sincronismo local, protocolos de interacción entre
actores, tiempo real, agrupación de actores, etc.)
•Modelos de coordinación
– Construir programas pegando diferentes piezas activas: programa, tarea,
thread, .. – Entidades a coordinar + medio de coordinación + leyes de
coordinación
– Lenguaje de coordinación: elementos lingüísticos para describir modelos
de coordinación.
– Orientados a datos: Modelos de pizarra - Linda
– Orientados al control
22. Conclusiones
La tecnología de componentes surge como una necesidad de mejorar la
calidad y la productividad de las empresas dedicadas al desarrollo de software.
Sin embargo, este nuevo paradigma y sus soluciones tecnológicas traen
consigo una serie de nuevas oportunidades y dificultades. La tecnología Java
brinda una de las opciones para generar soluciones, pero no es por sí misma
una solución, para lograrlo debe hacerse un uso adecuado de ella. Por tanto,
es importante aprovechar sus oportunidades ubicadas del lado de la
reutilización en un marco de ingeniería de dominio, en conjunto con el
desarrollo de activos reutilizables como lo son las arquitecturas de referencia,
los frameworks, patrones, entre otros. De otro lado, se deben vencer las
debilidades que se ubican del lado de las limitantes que la tecnología Java
presenta, y entre ellas, la más visible y que comparte con las otras tecnologías
de componentes, es su problema en la eficiencia reflejado en el consumo de
recursos, el cual se puede solventar con el uso de prácticas de diseño
adecuadas que permitan mejorar el desempeño de las aplicaciones
desarrolladas en la plataforma J2EE.