Академический Документы
Профессиональный Документы
Культура Документы
FACULTAD DE INGENIERÍA
Escuela Académico Profesional de Ingeniería de Sistemas e
Informática
INVESTIGADOR:
ASESOR:
ING. Sixto DÍAZ TELLO
2
2.2.1. Objetivo General ....................................................................................................... 11
2.2.2. Objetivos Específicos ................................................................................................ 11
2.3. Hipótesis ............................................................................................................................ 11
2.4. Fundamento Teórico ......................................................................................................... 12
2.4.1. Desarrollo Basado en Componentes.......................................................................... 12
2.4.2. Lenguaje de Programación Java ................................................................................ 22
2.4.3. Especificación JavaBean ........................................................................................... 28
2.4.4. Tecnología ActiveX .................................................................................................. 31
2.5. Metodología a Seguir ........................................................................................................ 32
2.5.1. Análisis de Requerimientos ....................................................................................... 32
2.5.2. Diseño y Modelado de los Componentes .................................................................. 32
2.5.3. Desarrollo e Implementación .................................................................................... 32
2.5.4. Pruebas y Empaquetamiento ..................................................................................... 32
2.6. Diseño de Investigación .................................................................................................... 32
2.7. Cobertura del Estudio ........................................................................................................ 33
2.7.1. Población ................................................................................................................... 33
2.7.2. Muestra ...................................................................................................................... 33
2.8. Técnicas e Instrumentos de Recolección de Datos............................................................ 33
Bibliografía y Linkografía................................................................................................................. 33
Índice de Ilustraciones
Ilustración 1. Diagrama de Gantt con el cronograma de actividades. ................................................. 5
Índice de Tablas
Tabla 1. Presupuesto de bienes y materiales. ...................................................................................... 6
Tabla 2. Presupuesto de servicios. ...................................................................................................... 6
Tabla 3. Presupuesto total. .................................................................................................................. 6
Tabla 4. Variables e indicadores. ...................................................................................................... 12
Tabla 5. Diseño Experimental. .......................................................................................................... 32
Tabla 6. Técnicas e instrumentos de recolección de datos. ............................................................... 33
3
Proyecto de Trabajo de Investigación
1. Datos Generales
1.1. Título
CREACIÓN DE UNA LIBRERÍA DE NUEVOS COMPONENTES REUTILIZABLES
EN JAVA PARA MEJORAR LA CALIDAD DE DESARROLLO DE SOFTWARE
1.2. Autor
BACH: Jonathan MUÑOZ ALEMAN
1.3. Asesor
ING. Sixto DÍAZ TELLO
1.7.2. Institución
Universidad Nacional del Santa – Ancash
4
Las actividades realizadas para la culminación del proyecto son las siguientes:
Nombre de tarea
07 jun '09 14 jun '09 21 jun '09
D L M X J V S D L M X J V S D L M X J
Elaboración del PTI
Rev isión Bibliográfica
Recopilación de Inf ormación y Datos
Identif icación de la Problemática
Análisis de Requerimientos
Diseño y Modelado de Componentes
Desarrollo e Implementación
Pruebas y Empaquetación
1.10. Recursos
1.10.1. Personal
Investigador: Bach. Jonathan MUÑOZ ALEMAN
Asesor: ING. Sixto DÍAZ TELLO
Equipos
o Computadora
o Impresora
1.10.3. Servicios
Internet
Movilidad
5
1.11. Presupuesto
1.11.1. Bienes y Materiales
ITEM Cant. Unidad Cost. Unit. Costo Total
MATERIALES DE ESCRITORIO
Memoria Flash USB 1 Unidad S/. 0.00 S/. 0.00
CD 1/2 Docena S/. 4.00 S/. 2.00
Papel Bond 1 Ciento S/. 3.50 S/. 3.50
Lapiceros 1/2 Docena S/. 3.00 S/. 1.50
EQUIPOS
Computadora 1 Unidad S/. 0.00 S/. 0.00
Impresora 1 Unidad S/. 0.00 S/. 0.00
1.11.2. Servicios
SERVICIO Cant. Unidad Cost. Unit. Cost. Total
Internet 640 Horas S/. 1.00 S/. 640.00
Movilidad 80 Viajes S/. 1.00 S/. 80.00
1.11.3. Resumen
ITEM TOTAL
Bienes y Materiales S/. 7.00
Materiales de escritorio S/. 7.00
Equipos S/. 0.00
Servicios S/. 720.00
Imprevistos S/. 72.70
TOTAL S/. 799.70
1.12. Financiamiento
El presupuesto del proyecto será financiado por el autor en su totalidad.
6
2. Plan de Investigación
2.1. Problema
2.1.1. Realidad Problemática
Los programadores procedentes del entorno Windows (en concreto Visual Basic o
PowerBuilder) sabrán inmediatamente por qué los componentes visuales reutilizables son
tan importantes. Los programadores procedentes de un entorno donde la tradición es
―volver a hacer lo mismo‖ para todas las cosas, pueden no entenderlo a la primera. Por
nuestra experiencia, los programadores que no proceden de Visual Basic, a menudo se les
hace duro entender que este lenguaje de programación es uno de los ejemplos más exitosos
de la tecnología de objetos reutilizables. Una de las razones de su popularidad se hace
evidente al considerar cómo se construye una aplicación en Visual Basic. Para quienes
nunca han trabajado con él, a continuación se tiene, en pocas palabras, cómo hacerlo:
Por ejemplo, para escribir un programa que visualiza una imagen en un marco en Java es
necesaria aproximadamente una página de código. A continuación se tiene lo que se debe
hacer en Visual Basic para crear un programa con la misma, o mayor, funcionalidad:
1. Añadir dos controles a una ventana: un control de imagen para visualizar gráficos y un
control de diálogo común para poder seleccionar un archivo.
2. Establecer la propiedad de filtro del control CommonDialog para que se visualicen
únicamente los archivos que el control de imagen puede manipular. Esto se hace en lo
que Visual Basic denomina ventana de propiedades.
A continuación, se debe escribir las tres líneas de código de Visual Basic que se activarán
cuando el proyecto empiece a ejecutarse. Esto corresponde a un evento denominado
Form_Load, de modo que el código va en el procedimiento del evento Form_Load. El
siguiente código despliega el cuadro de diálogo de manipulación de archivos (pero se
visualizan los archivos con la extensión correcta, debido a la definición de la propiedad de
filtro). Después de que el usuario selecciona un archivo de imagen, el código indica al
control Image que lo visualice. Todo el código que necesitamos para esta secuencia se
parece a éste:
7
Esto es todo. La actividad de diseño en combinación con estas tres líneas de código,
proporcionan en esencia la misma funcionalidad que una página de código del lenguaje de
programación Java. Ciertamente, es mucho más fácil aprender a soltar componentes y
establecer propiedades que escribir una página de código.
La verdad es que ahora mismo el lenguaje de programación Java es todavía una herramienta
utilizada por la mayoría de los mejores programadores que se dedican a la programación
orientada a objetos. Y, ciertamente, es improbable que dichos programadores sean tan
productivos como un buen programador de Visual Basic a la hora de diseñar la interfaz de
usuario de una aplicación cliente.
Sin embargo Visual Basic es una buena solución para todos los problemas. Está claramente
optimizado para un tipo concreto de problemas: los programas de Windows fuertemente
orientados a la interfaz de usuario. Por el contrario, la tecnología Java siempre tendrá un
rango de usos mucho más amplio.
Los beans tienen la misma funcionalidad que la mayoría de los controles comunes de
Visual Basic.
Las herramientas constructoras de la tecnología Java se han acercado mucho a la
facilidad de uso de entornos como Microsoft Visual Basic o PowerBuilder.
Una vez construido un bean, los usuarios de cualquier entorno que tengan habilitada la
tecnología JavaBeans pueden utilizarlo rápidamente. Los desarrolladores pueden, incluso, a
través de la magia de la tecnología puente ActiveX, desplegar JavaBeans en aplicaciones
Visual Basic y Microsoft Office. (Horstmann & Cornell, 2003)
8
Un programador experimentado en entornos gráficos, como Visual Basic, que desea
incursionar en la tecnología Java, no encuentra las herramientas que le ofrecían los
entornos a los que estaba acostumbrado, y termina por confundirse y desanimarse.
Un desarrollador experto en tecnología Java desea disponer de componentes que le
eviten el trabajo de ―reinventar la rueda‖; y de esta manera también incrementar su
productividad y disminuir el tiempo y costos de desarrollo.
Una cosa que se debe recordar es que los componentes para interfaces de usuario son
bastante elaborados y complejos de codificar. Esto se debe a dos razones:
1. Los componentes deben ser funcionales para los programadores inexpertos. Dichos
programadores accederán a la funcionalidad del componente con una herramienta
visual con la que no es necesario programar. Se debe proporcionar un montón de
propiedades para facilitar la personalización del comportamiento del componente.
2. El mismo componente debe poder ser utilizado en una amplia gama de contextos. Un
componente demasiado simplista para su uso en el mundo real no conseguirá mucho
respaldo. Como es lógico, ésta es la razón por la que muchas personas pueden cobrar
cientos de soles, dólares o euros por un componente profesional, como un control para
generar gráficos con todas sus características. Por ejemplo, en el momento de escribir
esta tesis, un control convencional para generar gráficos tiene:
60 propiedades 47 eventos
14 métodos 178 páginas de documentación
Es una complejidad obviamente práctica y algo que uno no querría programar desde el
principio. Desarrollando una librería de componentes como éste, otros podrán beneficiarse
de este trabajo, simplemente soltando el componente en una herramienta de desarrollo.
Por fortuna, sólo se debe dominar una pequeña cantidad de conceptos para escribir
componentes beans con un buen conjunto de comportamientos. Los beans de la librería que
se va a desarrollar, aunque no triviales, son suficientemente complejos para satisfacer las
necesidades expuestas. (Horstmann & Cornell, 2003)
2.1.4. Antecedentes
En la actualidad, existen en el mercado y en Internet una gran variedad de componentes y
herramientas desarrolladas en lenguaje Java que son utilizadas por millones de
programadores alrededor del mundo en proyectos de software de múltiple envergadura.
9
Algunas de ellas son de libre distribución y otras son comerciales regidas por su copyright.
A continuación se cita algunas de ellas:
JFreeChart es una librería de gráficos que soporta gráficos circulares (2D y 3D),
gráficos de barras (horizontales y verticales, regulares y apiladas), gráficos de línea,
dispersos, de series de tiempo, diagramas de Gantt, gráficos combinados, termómetros,
discos y más. JFreeChart puede ser usado en aplicaciones, applets, servlets y JSP. Este
proyecto es mantenido por David Gilbert. (Gilbert & Morgner)
La herramienta iReport es un constructor/diseñador de informes visual, poderoso,
intuitivo y fácil de usar para JasperReports escrito en Java. Este instrumento permite
que los usuarios corrijan visualmente informes complejos como cartas, imágenes,
subinformes, etc. iReport está además integrado con JFreeChart. Los datos para
imprimir pueden ser recuperados por varios caminos incluso múltiples uniones JDBC,
TableModels, JavaBeans, XML, etc. (Jaspersoft)
PDFOne Java es una poderosa biblioteca para la creación y administración de archivos
PDF para la plataforma Java. PDFOne Java admite la creación, llenado y lectura de
formularios PDF, compresión, protección, anexión y fusión de múltiples documentos
PDF, sellado, construcción de tabla de contenidos, establecimiento de señales de
lectura y muchas más funciones que pueden ser realizadas sobre documentos PDF.
(Gnostice Information Technologies)
jPDFViewer es un Bean Java que se puede agregar a aplicaciones Java para visualizar
documentos PDF. Con PDFViewer, se puede entregar contenido a los usuarios a través
de una aplicación sin la necesidad de instalar otros programas. jPDFViewer es
independiente de plataformas, por lo tanto puede ser usado en cualquier ambiente que
admita Java, incluyendo Windows, Mac OSX y Linux. (Qoppa Software)
2D/3D Vertical Bar Graph API Library es un componente Java Bean diseñado
específicamente para permitir a los programadores agregar fácilmente poderosa
funcionalidad de generación de gráficos a cualquier tipo de aplicación Java.
(jPowered.com)
Barcode for Java es una biblioteca desarrollada en este lenguaje para crear códigos de
barras. Es compatible con Linear, PDF417, DataMatrix y MaxiCode.
(BarcodeLib.com)
SetVB2Java es una DLL con la que se pueden convertir formularios hechos en Visual Basic
a código Java. El inconveniente con esta solución es que se necesita utilizar previamente el
entorno de Visual Basic para diseñar el formulario, convertirlo con la librería y utilizar el
código generado en una herramienta de desarrollo para Java. Este proceso es inviable.
2.1.5. Justificación
Es bien sabido que el lenguaje Java y toda la tecnología que orbita a su alrededor generó,
desde el principio, una gran expectativa en la industria del software, debido a sus
10
características y promesas. Hoy en día, esta tecnología está bastante madura y desarrollada,
además de estar presente en todo lugar, desde pequeños dispositivos móviles, servidores
empresariales y supercomputadoras científicas.
A pesar de no contar con los recursos con los que cuenta una empresa de software, resulta
cómodo y sencillo desarrollar nuevas herramientas basadas en este lenguaje, las cuales
llevarán a la tan ansiada conectividad absoluta.
Es por esta razón que el desarrollo de este proyecto sugiere un gran avance en lo que
respecta a desarrollo rápido de aplicaciones basadas en interfaces de usuario.
Se desea también poder realizar un aporte a la comunidad de software libre, agregando esta
herramienta al espectro de aplicaciones que abundan en Internet.
2.1.6. Limitaciones
El proyecto está limitado a realizar una librería de componentes visuales y no visuales
desarrollados en el lenguaje Java. EL software se distribuirá bajo la licencia GNU GPL, por
lo tanto, se pondrá a disposición la librería, el código fuente, la documentación HTML y un
manual de usuario.
2.2. Objetivos
2.2.1. Objetivo General
Crear una librería de nuevos componentes reutilizables en Java para mejorar la calidad de
desarrollo de software.
2.3. Hipótesis
La creación de una librería de nuevos componentes reutilizables en Java mejorará la calidad
de desarrollo de software.
Variables Indicadores
VI: Librería de nuevos Número de componentes desarrollados
componentes reutilizables en Java Número de propiedades de los componente
11
Tiempo de desarrollo de software
VD: La calidad de desarrollo de
Número de líneas de código escritas.
software
Costo de desarrollo
Tabla 4. Variables e indicadores.
Uno de los enfoques en los que actualmente se trabaja constituye lo que se conoce como
Desarrollo de Software Basado en Componentes (DSBC), que trata de sentar las bases para
el diseño y desarrollo de aplicaciones distribuidas basadas en componentes software
reutilizables. Dicha disciplina cuenta actualmente con un creciente interés, tanto desde el
punto de vista académico como desde el industrial, en donde la demanda de estos temas es
cada día mayor.
Las siguientes secciones pretenden servir como una breve introducción a algunos de los
conceptos y métodos fundamentales sobre los que se apoya el DSBC. En particular, se
hablará de las arquitecturas software y los marcos de trabajo, la programación orientada a
componentes, y en las plataformas de componentes distribuidas.
A. Conceptos Básicos
En primer lugar, se entiende por sistema a un 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.
12
de sus componentes es más corta que la del propio sistema. No se desea incluir en la
definición de sistema abierto la propiedad de ser distribuido, puesto que se considera que
ambas características son independientes entre sí. Sin embargo, los sistemas objeto del
presente estudio comprenden ambas propiedades, siendo tanto abiertos como distribuidos.
A partir de estas ideas nace la programación orientada a componentes (POC) como una
extensión natural de la orientación a objetos para los entornos abiertos. Este paradigma
propugna el desarrollo y utilización de componentes reutilizables dentro de lo que sería un
mercado global de software.
13
adquirido, incorporado al sistema y compuesto con otros componentes de forma
independiente, en tiempo y espacio‖
Por otro lado, un mercado global necesita también de estándares que garanticen la
interoperabilidad de los componentes a la hora de construir aplicaciones. En el mundo de
los sistemas abiertos y distribuidos estamos presenciando la clásica ‗guerra‘ de estándares
que sucede antes de la maduración de cualquier mercado. Todos los fabricantes y
vendedores de sistemas tratan de convertir sus mecanismos en estándares, a la vez que
pertenecen a varios consorcios que también tratan de definir estándares, pero de forma
independiente. Pensemos por ejemplo en Sun, que intenta imponer JavaBeans como modelo
de componentes, mientras que participa junto con otras empresas en el desarrollo de los
estándares de CORBA. Actualmente la interoperabilidad se resuelve mediante pasarelas
(bridges) entre unos modelos y otros, componentes especiales que se encargan de servir de
conexión entre los distintos componentes heterogéneos. La mayoría de los modelos
comerciales ofrecen pasarelas hacia el resto, pues reconocen la necesidad de ser abiertos.
14
B. Arquitecturas Software y Marcos de Trabajo
El disponer de componentes software no es suficiente para desarrollar aplicaciones, ya
provengan éstos de un mercado global o sean desarrollados a medida para la aplicación. Un
aspecto crítico a la hora de construir sistemas complejos es el diseño de la estructura del
sistema, y por ello el estudio de la Arquitectura Software se ha convertido en una disciplina
de especial relevancia en la ingeniería del software.
Una arquitectura software viene determinada por las diferentes instancias de cada tipo de
componentes y conectores que la componen, y por una serie de enlaces (bindings)
específicos que definen la unión de todas ellas formando una estructura. A esta estructura se
le da el nombre de configuración, y suele considerarse insertada en una jerarquía, pues toda
entidad software, independientemente de su granularidad, dispone de una estructura que
puede ser descrita mediante una arquitectura software.
Cuando lo que interesa no es obtener una configuración concreta, sino extraer los patrones
genéricos que definen a una familia de sistemas, se habla de estilos arquitectónicos. La
definición de estilos tiene una gran importancia desde el punto de vista de la reutilización, y
es un aspecto fundamental en la arquitectura del software.
En general, la arquitectura software nace como una herramienta de alto nivel para cubrir
distintos objetivos, entre los que destacamos:
15
AESOP, Arwin, Executable Connectors y LEDA. Todos ellos comparten la misma visión
arquitectónica de los sistemas, aunque cada uno de ellos utilice notaciones y formalismos
diferentes.
En cuanto al tipo de arquitectura que permiten describir los distintos LDAs, los hay que
sólo permiten las arquitecturas estáticas, en donde las conexiones entre los componentes no
varían a lo largo de la vida del sistema; la utilidad de dichos LDA estáticos se pone de
manifiesto para la descripción de sistemas hardware o sistemas eléctricos, aunque no se
muestran muy adecuados para sistemas abiertos. En este tipo de sistemas es preciso que los
LDAs permitan expresar los cambios en las conexiones e interacciones entre los
componentes en tiempo de ejecución, pues van a depender, por ejemplo, de los recursos
disponibles o del perfil de los usuarios. Los LDAs mencionados antes permiten la
descripción de arquitecturas dinámicas, así como Rapide.
Por otro lado, hay muchas propuestas a nivel de especificación de arquitecturas software
basadas en formalismos cuyos únicos objetivos son el prototipado rápido de aplicaciones y
la verificación formal de algunas de sus propiedades, entre los que podemos citar Wright y
ACME. Aunque las bondades de estas propuestas son innegables, la mayoría de ellas se
quedan a este nivel de diseño, no abordando la problemática de la generación de código a
partir de las especificaciones. De esta forma dejan una laguna importante en el ciclo de
desarrollo de las aplicaciones, perdiéndose la descomposición del sistema en componentes y
conectores cuando se llega al nivel de la implementación. Conseguir metodologías que
cubran todo el ciclo de vida de las aplicaciones a partir de su arquitectura software es otro
de los caminos de investigación abiertos actualmente.
Hasta ahora hemos hablado de LDAs de propósito general que, al menos en teoría, pueden
usarse para cualquier dominio de aplicación. Sin embargo, cada dominio tiene sus
peculiaridades específicas y de ahí surgen los Lenguajes para Dominios Específicos (LDEs),
que incorporan conceptos y funciones particulares de un dominio concreto como parte del
16
propio lenguaje. Los LDEs proporcionan grandes ventajas al arquitecto de sistemas, entre
ellas su especialización y gran expresividad en su dominio de aplicación, aunque suelen
presentar un serio problema de extensibilidad: apenas aparece un nuevo concepto
relacionado con el dominio que no estaba previsto en el lengua je, éste deja de ser útil.
Además de los LDAs y LDEs, existen otras propuestas que, teniendo su mismo objetivo,
ofrecen un punto de vista más composicional que arquitectónico para la construcción de
sistemas basados en componentes. Nos referimos a los denominados Lenguajes
Composicionales. Un lenguaje composicional es una combinación entre un LDA y un
lenguaje de configuración (scripting language), que sirven como soporte para un entorno de
composición visual. Los diferentes estilos arquitectónicos se definen a niveles de
componentes y conectores, y la unión entre ellos (glue) se define mediante el lengua je de
configuración. El objetivo es definir, a partir de un lenguaje composicional, metodologías y
entornos de desarrollo de aplicaciones software. Aunque ya se conocen las características
que deben poseer estos lenguajes composicionales para su tratamiento en entornos
arquitectónicos, todavía no existe ninguno consolidado, siendo quizá Pict el primer intento.
Pict es un lengua je basado en π-cálculo que simplifica notablemente esta notación formal,
pero permite utilizar la mayor parte de sus ventajas. Piccola es una evolución de Pict
creado como lenguaje de configuración con tipos dinámicos. Piccola trata de resolver las
dos principales desventajas que ha mostrado Pict: su demasiado bajo nivel, y la ausencia de
hooks, necesarios para especializar componentes mediante técnicas de reutilización de caja
negra.
D. Marcos de Trabajo
La reutilización de arquitecturas software se define dentro un marco de trabajo ( framework,
o abreviadamente MT). En general, un MT se suele definir de la siguiente forma:
Otra forma de expresar este concepto es: ―Un MT es el esqueleto de una aplicación que
debe ser adaptado a necesidades concretas por el programador de la aplicación‖. En ambas
definiciones podemos ver que un MT encapsula el patrón de la arquitectura software de un
sistema o de alguna de sus partes, que puede además estar parcialmente instanciada. Las
principales ventajas que ofrecen los MT son la reducción del coste de los procesos de
desarrollo de aplicaciones software para dominios específicos, y la mejora de la calidad del
pro ducto final. Sin embargo, la utilización de MT presenta actualmente ciertas dificultades,
aunque se suelen englobar todas en lo que comúnmente se denomina el problema de la
documentación de un MT. Este problema combina las dificultades que presenta la
identificación del MT y de su utilización (reutilización). En primer lugar, el desarrollador de
una aplicación se enfrenta con la dificultad de que le es muy complicado, si no imposible,
decidir si un MT es el adecuado para resolver su problema, y hasta qué grado es capaz de
resolverlo. Y en segundo lugar, si realmente el MT es el apropiado, ha de saber cómo ha de
utilizarlo (acomodándolo, especializándolo y posiblemente extendiéndolo) para integrarlo
en su implementación concreta. A esa adaptación se le denomina comúnmente extensión
del MT, y constituye la forma de reutilización de los marcos de trabajo.
17
Usualmente los MT se extienden mediante los denominados puntos de entrada (hot spots o
hooks), componentes (o procedimientos) cuya implementación depende del sistema o
entorno final en el que se ejecuta la aplicación, y que permiten adaptarla. Dichos puntos de
entrada son definidos por el diseñador del MT, cuya arquitectura debe orientar para que
estos sean la forma natural de extensión del marco.
Por tanto, sería preciso disponer de mecanismos y herramientas para describir de forma
unificada y completa la arquitectura de un MT, los problemas para los que está diseñado, y
la forma en la que hay que utilizarlo. Existen diferentes propuestas en este sentido, que
pasamos a describir.
Los contratos de reutilización pueden ser también utilizados en estos entornos para definir
la forma en la que pueden cooperar los diseñadores del MT y los encargados de adaptarlo o
extenderlo. Este enfoque define la información necesaria para documentar adecuadamente
un MT. Así, se deben documentar cada una de las clases con sus métodos, indicando los
que se consideran puntos de entrada al MT, y las relaciones de herencia, composición, etc.
Por otro lado, las extensiones que se realicen a un MT deben documentarse siguiendo el
mismo método, incluyéndose en la documentación final.
Los Patrones de Diseño (Design Patterns) son otro enfoque muy útil tanto para diseñar la
arquitectura de un MT como para documentar el diseño realizado, según postulan diferentes
autores. Un patrón de diseño ofrece una solución abstracta a un problema de diseño que
aparece muy frecuentemente, expresada mediante un conjunto de relaciones e interacciones
entre componentes. Sobre los patrones de diseño se hablara con mayor detalle en el
siguiente apartado.
18
representar tanto a los componentes como a los conectores, y definir sus enlaces. Asimismo,
permiten agregar nuevos componentes y definir nuevas relaciones entre ellos. Las
principales ventajas de estas propuestas se basan en su facilidad de uso y la rapidez con la
que permiten identificar la adecuación de un MT a una aplicación concreta, así como los
trabajos necesarios para extenderlo y adaptarlo. Por otro lado, las principales desventajas
que poseen estos métodos provienen de que no suelen permitir ningún tipo de verificación
sobre el diseño realizado, puesto que no suelen poseer ningún tipo de lengua je que sirva de
soporte a la notación gráfica, y que permita especificar más formalmente la arquitectura de
la aplicación y verificar sus propiedades. La unión de este tipo de notaciones gráficas con
los LDAs descritos anteriormente es otro de los campos en donde se está trabajando
actualmente.
E. Patrones de Diseño
Los patrones de diseño (PD) aparecen tras la tesis de E. Gamma publicados en un libro que
recoge no sólo su definición, sino todo un catálogo de PDs aplicables a la programación
básica orientada a objetos, y que cubren la mayor parte de los pequeños problemas
recurrentes que se plantean en el desarrollo de cualquier programa.
Los patrones de diseño y los marcos de trabajo son disciplinas complementarias, y por lo
general un MT suele estar compuesto por una colección de PDs. En este sentido, los PDs
suelen ser de una granularidad menor que la de un MT.
19
construcción de aplicaciones en sistemas abiertos y distribuidos, aunque cada uno trata de
realizarlo desde perspectivas diferentes.
Al principio sólo existía la programación secuencial, pues cada programa sólo se ejecutaba
en una máquina monoprocesador y aislada. Posteriormente aparecieron las máquinas
multiprocesador y los sistemas operativos multitarea, por lo que nacieron nuevos
paradigmas y mecanismos de programación. En este sentido, la programación concurrente
proporciona la noción de procesos, aportando una serie de primitivas para controlarlos y
algunos mecanismos de comunicación y sincronización. Dichos mecanismos pueden estar
basados en memoria compartida (semáforos y monitores) o en mensajes (rendez-vous y
RPCs). Por último aparece la programación distribuida, que comenzó a tomar auge cuando
la interconexión entre distintos computadores pudo hacerse de forma eficiente y económica.
Las primeras soluciones estaban basadas en una extensión de los mecanismos que ofrecía la
programación concurrente para tratar con los problemas de localización y dispersión que
presentan las aplicaciones distribuidas (sockets, XWindows, RPCs, etc.), pero en seguida se
vio que estas extensiones no eran suficientes. Incluso los paquetes comerciales existentes a
este nivel (PVM, MPI, Horus o ISIS) han probado su efectividad en cuanto a la
implementación de las aplicaciones, p ero no a la hora de diseñarlas.
En primer lugar, esas extensiones son de demasiado bajo nivel para permitir el diseño y
construcción de grandes aplicaciones distribuidas con el nivel de abstracción necesario. En
este sentido, la programación paralela había desarrollado algunos esquemas organizativos
(también llamados skeletons) de mayor nivel conceptual que los semáforos, monitores o
sockets, y que deberían poder expresarse a nivel de diseño: esquemas como maestro-
trabajadores o las granjas de procesos. Lo mismo o curre con los esquemas desarrollados
por la inteligencia artificial, como pueden ser las pizarras (blackboards) o las redes de
contratos.
Y por último, y desde un punto de vista formal, cierta propiedades del comportamiento
colectivo de los componentes (lo calidad, movilidad, seguridad, etc.) no son fácilmente
manejables utilizando las lógicas y semánticas desarrolladas para lenguajes concurrentes
convencionales.
Entre los principales modelos y paradigmas de programación que han surgido para el diseño
e implementación de aplicaciones para sistemas abiertos y distribuidos se encuentran, entre
otros la coordinación, los actores y la programación concurrente, la programación paralela
computacional, la reflexión y la meta-programación, la programación orientada a
componentes, la computación móvil, o los agentes.
Cada uno de estos paradigmas trata de solucionar los problemas mencionados anteriormente
desde un enfoque distinto, no existiendo ningún paradigma lo suficientemente general y
extendido como para abarcarlos todos. En esta lección vamos a centrarnos principalmente
20
en la programación orientada a componentes (POC), los problemas que trata de solucionar,
los conceptos sobre los que se fundamenta, y los mecanismos que ofrece.
Las entidades básicas de la POC son los componentes, en el mismo sentido que se ha
definido, cajas negras que encapsulan cierta funcionalidad y que son diseñadas para formar
parte de ese mercado global de componentes, sin saber ni quién los utilizará, ni cómo, ni
cuándo. Los usuarios conocen acerca de los servicios que ofrecen los componentes a través
de sus interfaces y requisitos, pero normalmente ni quieren ni pueden modificar su
implementación.
21
software que permite aislar la mayor parte de las dificultades conceptuales y técnicas que
conlleva la construcción de aplicaciones basadas en componentes. Cada plataforma se
apoya en los estándares y mecanismos definidos por su modelo de componentes base; en
este sentido, podemos definir una plataforma como una implementación de los mecanismos
del modelo, junto con una serie de herramientas aso ciadas. Ejemplos de estas plataformas
son ActiveX/OLE, Enterprise Beans y Orbix, que se apoyan en los modelos de
componentes COM, JavaBeans y CORBA, respectivamente.
Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus
tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java
Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software
libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java
todavía no es software libre).
A. Historia
La tecnología Java se creó como una herramienta de programación para ser usada en un
proyecto de set-top-box en una pequeña operación denominada the Green Project en Sun
Microsystems en el año 1991. El equipo (Green Team), compuesto por trece personas y
dirigido por James Gosling, trabajó durante 18 meses en Sand Hill Road en Menlo Park en
su desarrollo.
22
El lenguaje se denominó inicialmente Oak (por un roble que había fuera de la oficina de
Gosling), luego pasó a denominarse Green tras descubrir que Oak era ya una marca
comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a Java.
El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del
equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que
podría tratarse de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y Andy
Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo
otro acrónimo ambiguo más"). La hipótesis que más fuerza tiene es la que Java debe su
nombre a un tipo de café disponible en la cafetería cercana, de ahí que el icono de java sea
una taza de cafe caliente. Un pequeño signo que da fuerza a esta teoría es que los 4
primeros bytes (el número mágico) de los archivos .class que genera el compilador, son en
hexadecimal, 0xCAFEBABE. Otros simplemente dicen que el nombre fue sacado al parecer
de una lista aleatoria de palabras.
Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una
estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana
de tres días entre John Gaga, James Gosling, Joy Naughton, Wayne Rosing y Eric Schmidt,
el equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web
Mosaic, propiciaría que Internet se convirtiese en un medio interactivo, como el que
pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador,
WebRunner, que más tarde sería conocido como HotJava.
En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de
Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de
mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública Java y
HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el Director
Científico de Sun Microsystems. El acto estuvo acompañado por una pequeña sorpresa
adicional, el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de Netscape,
que Java sería soportado en sus navegadores. El 9 de enero del año siguiente, 1996, Sun
fundó el grupo empresarial JavaSoft para que se encargase del desarrollo tecnológico. Dos
semanas más tarde la primera versión de Java fue publicada.
La promesa inicial de Gosling era Write Once, Run Anywhere (Escríbelo una vez, ejecútalo
en cualquier lugar), proporcionando un lenguaje independiente de la plataforma y un
entorno de ejecución (la JVM) ligero y gratuito para las plataformas más populares de
forma que los binarios (bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier
plataforma.
El entorno de ejecución era relativamente seguro y los principales navegadores web pronto
incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web.
Java ha experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como
un enorme incremento en el número de clases y paquetes que componen la biblioteca
estándar.
23
Desde J2SE 1.4, la evolución del lenguaje ha sido regulada por el JCP (Java Community
Process), que usa Java Specification Requests (JSRs) para proponer y especificar cambios
en la plataforma Java. El lenguaje en sí mismo está especificado en la Java Language
Specification (JLS), o Especificación del Lenguaje Java. Los cambios en los JLS son
gestionados en JSR 901.
J2SE 1.2 (8 de diciembre de 1998) — Nombre clave Playground. Esta y las siguientes
versiones fueron recogidas bajo la denominación Java 2 y el nombre "J2SE" (Java 2
Platform, Standard Edition), reemplazó a JDK para distinguir la plataforma base de
J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition).
Otras mejoras añadidas incluían:
o La palabra reservada (keyword) strictfp.
o Reflexión en la programación.
o La API gráfica (Swing) fue integrada en las clases básicas.
o La máquina virtual (JVM) de Sun fue equipada con un compilador JIT (Just in
Time) por primera vez.
o Java Plug-in
o Java IDL, una implementación de IDL (Lenguaje de Descripción de Interfaz) para
la interoperabilidad con CORBA.
o Colecciones (Collections).
J2SE 1.3 (8 de mayo de 2000) — Nombre clave Kestrel. Los cambios más notables
fueron:
o La inclusión de la máquina virtual de HotSpot JVM (la JVM de HotSpot fue
lanzada inicialmente en abril de 1999, para la JVM de J2SE 1.2)
o RMI fue cambiado para que se basara en CORBA.
o JavaSound.
o Se incluyó el Java Naming and Directory Interface (JNDI) en el paquete de
bibliotecas principales (anteriormente disponible como una extensión).
o Java Platform Debugger Architecture (JPDA)
J2SE 1.4 (6 de febrero de 2002) — Nombre Clave Merlin. Este fue el primer
lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java
como JSR 59. Los cambios más notables fueron:
o Palabra reservada assert (Especificado en JSR 41)
o Expresiones regulares modeladas al estilo de las expresiones regulares Perl.
24
o Encadenación de excepciones. Permite a una excepción encapsular la excepción
de bajo nivel original.
o Non-blocking NIO (New Input/Output) (Especificado en JSR 51)
o Logging API (Specified in JSR 47)
o API I/O para la lectura y escritura de imágenes en formatos como JPEG o PNG.
o Parser XML integrado y procesador XSLT (JAXP) (Especificado en JSR 5 y JSR
63)
o Seguridad integrada y extensiones criptográficas (JCE, JSSE, JAAS)
o Java Web Start incluido (El primer lanzamiento ocurrió en marzo de 2001 para
J2SE 1.3) (Especificado en JSR 56)
25
o Incluye un cliente completo de Servicios Web y soporta las últimas
especificaciones para Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y
JAXP.
o Mejoras en la interfaz gráfica y en el rendimiento.
Además de los cambios en el lenguaje, con el paso de los años se han efectuado muchos
más cambios dramáticos en la biblioteca de clases de Java (Java Class Library) que ha
crecido de unos pocos cientos de clases en JDK 1.0 hasta más de tres mil en J2SE 5.0. APIs
completamente nuevas, como Swing y Java2D, han sido introducidas y muchos de los
métodos y clases originales de JDK 1.0 están obsoletos.
Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus
tecnologías Java bajo la Licencia pública general de GNU, de acuerdo con las
especificaciones del Java Community Process, de tal forma que prácticamente todo el Java
de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para
ejecutar los programas Java todavía no es software libre)
B. Filosofía
El lenguaje Java se creó con cinco objetivos principales:
C. Entornos de Funcionamiento
El diseño de Java, su robustez, el respaldo de la industria y su fácil portabilidad han hecho
de Java uno de los lenguajes con un mayor crecimiento y amplitud de uso en distintos
ámbitos de la industria de la informática.
D. Industria Relacionada
Sun Microsystems, como creador del lenguaje de programación Java y de la plataforma
JDK, mantiene fuertes políticas para mantener una especificación del lenguaje así como de
la máquina virtual a través del JCP. Es debido a este esfuerzo que se mantiene un estándar
de facto.
Son innumerables las compañías que desarrollan aplicaciones para Java y/o están volcadas
con esta tecnología:
26
La industria de la telefonía móvil está fuertemente influenciada por la tecnología Java.
El entorno de desarrollo NetBeans™ ha tomado un lugar importante entre la
comunidad de desarrolladores Java.
La fundación Apache tiene también una presencia importante en el desarrollo de
bibliotecas y componentes de servidor basados en Java.
IBM, BEA, IONA, Oracle,... son empresas con grandes intereses y productos creados
en y para Java.
Debido a la existencia de distintos tipos de CPUs y a los continuos cambios, era importante
conseguir una herramienta independiente del tipo de CPU utilizada. Desarrollaron un
código "neutro" que no dependía del tipo de electrodoméstico, el cual se ejecutaba sobre
una "máquina hipotética o virtual" denominada Java Virtual Machine (JVM). Era la JVM
quien interpretaba el código neutro convirtiéndolo a código particular de la CPU utilizada.
Esto permitía lo que luego se ha convertido en el principal lema del lenguaje: "Write Once,
Run Everywhere". A pesar de los esfuerzos realizados por sus creadores, ninguna empresa
de electrodomésticos se interesó por el nuevo lenguaje.
27
o fabricantes de ordenadores (threads, ejecución remota, componentes, seguridad, acceso a
bases de datos, etc.). Por eso muchos expertos opinan que Java es el lenguaje ideal para
aprender la informática moderna, porque incorpora todos estos conceptos de un modo
estándar, mucho más sencillo y claro que con las citadas extensiones de otros lenguajes.
Esto es consecuencia de haber sido diseñado más recientemente y por un único equipo.
El principal objetivo del lenguaje Java es llegar a ser el "nexo universal" que conecte a los
usuarios con la información, esté ésta situada en el ordenador local, en un servidor de Web,
en una base de datos o en cualquier otro lugar.
La compañía Sun describe el lenguaje Java como "simple, orientado a objetos, distribuido,
interpretado, robusto, seguro, de arquitectura neutra, portable, de altas prestaciones,
multitarea y dinámico". Además de una serie de halagos por parte de Sun hacia su propia
criatura, el hecho es que todo ello describe bastante bien el lenguaje Java, aunque en
algunas de esas características el lenguaje sea todavía bastante mejorable.
(Monografias.com S.A.)
Java permite hacer cosas excitantes con las páginas Web que antes no eran posibles. De
manera que en este momento la gran interactividad que proporciona Java marca la
diferencia en las páginas Web. Imagina un Web donde puedes jugar a un juego, como el
fútbol, tú y otras personas que están en lugares remotos forman parte de un equipo y otras
más del contrario, verías a los jugadores animados en la pantalla obedeciendo las
instrucciones de las personas que están jugando al juego desde sitios remotos.
Además las puntuaciones quedarían registradas. O un Web con una aplicación en donde el
usuario pueda hacer transacciones y estas se actualicen en tiempo real. O un sitio que
ofrezca pequeñas aplicaciones como hojas de cálculo o calculadoras para uso de los
visitantes. O uno que muestre figuras 3D, tales como moléculas o dinosaurios que pueden
ser rotados con un clic del ratón.
28
Si se ha utilizado Delphi o Visual Basic, ya estamos familiarizados con la idea de
componente, aunque el lenguaje de programación sea diferente. Existen componentes que
van desde los más simples como un botón hasta otros mucho más complejos como un
calendario, una hoja de cálculo, etc.
Los primeros componentes que tuvieron gran éxito fueron los VBX (Visual Basic
Extension), seguidos a continuación por los componentes OCX (OLE Custom Controls).
Ahora bien, la principal ventaja de los JavaBeans es que son independientes de la
plataforma.
Muchos componentes son visibles cuando se corre la aplicación, pero no tienen por qué
serlo, solamente tienen que ser visibles en el momento de diseño, para que puedan ser
manipulados por el Entorno de Desarrollo de Aplicaciones (IDE).
1.1.1. Definición
Para ello, se define un interfaz para el momento del diseño (design time) que permite a la
herramienta de programación o IDE, interrogar (query) al componente y conocer las
propiedades (properties) que define y los tipos de sucesos (events) que puede generar en
respuesta a diversas acciones.
Aunque los beans individuales pueden variar ampliamente en funcionalidad desde los más
simples a los más complejos, todos ellos comparten las siguientes características:
29
Un bean tiene que tener un constructor por defecto (sin argumentos)
Un bean tiene que tener persistencia, es decir, implementar el interface Serializable.
Un bean tiene que tener introspección (introspección). Los IDE reconocen ciertas
pautas de diseño, nombres de las funciones miembros o métodos y definiciones de las
clases, que permiten a la herramienta de programación mirar dentro del bean y conocer
sus propiedades y su conducta.
A. Convenciones
Para funcionar como una clase JavaBean, una clase debe obedecer ciertas convenciones
sobre nomenclatura de métodos, construcción, y comportamiento.
Estas convenciones permiten tener herramientas que puedan utilizar, reutilizar, sustituir, y
conectar JavaBeans.
B. Estructura
Dentro de un JavaBean podemos distinguir tres partes:
C. Propiedades
Una propiedad es un atributo del JavaBean que afecta a su apariencia o a su conducta. Por
ejemplo, un botón puede tener las siguientes propiedades: el tamaño, la posición, el título, el
color de fondo, el color del texto, si está o no habilitado, etc.
Un IDE que cumpla con las especificaciones de los JavaBeans sabe como analizar un bean
y conocer sus propiedades. Además, crea una representación visual para cada uno de los
tipos de propiedades, denominada editor de propiedades, para que el programador pueda
modificarlas fácilmente en el momento del diseño.
30
El IDE llama a los métodos o funciones miembro que empiezan por get, para mostrar en los
editores los valores de las propiedades. Si el programador cambia el valor de una propiedad
se llama a un método cuyo nombre empieza por set, para actualizar el valor de dicha
propiedad y que puede o no afectar al aspecto visual del bean en el momento del diseño.
Cuando el IDE carga un bean, usa el mecanismo denominado reflection para examinar
todos los métodos, fijándose en aquellos que empiezan por set y get. El IDE añade las
propiedades que encuentra a la hoja de propiedades para que el programador personalice el
bean.
Los controles ActiveX son pequeños componentes básicos de un programa pueden ser
usados para crear aplicaciones distribuidas que trabajan sobre Internet por navegadores
Web. Como ejemplos se incluyen aplicaciones personalizadas para datos crecientes, visores
de ciertas clases de archivos y mostradores de animaciones.
Los controles ActiveX pueden ser comparados en algún sentido a un applet Java, pues son
diseñados para descargados y ejecutados desde navegadores Web. Sin embargo, hay
algunas diferencias. Los applets Java pueden ejecutarse sobre casi cualquier plataforma,
mientras que los componentes ActiveX sólo son compatibles con el navegador Web Internet
Explorer de Microsoft y el sistema operativo Windows de Microsoft. Los controles ActiveX
también tienen un nivel mucho más alto de control de Windows que los applets Java,
haciéndolos más poderosos y peligrosos. Malware, como virus informáticos y spyware, a
menudo es distribuido como controles ActiveX en páginas Web.
31
Los controles ActiveX pueden ser escritos en MFC, ATL, C++, C#, Borland Delphi y
Visual Basic. Ejemplos comunes de controles ActiveX son los botones de comando, cajas
de listas, cuadros de diálogo, y aún el navegador Internet Explorer.
Grupo de Control
Preprueba (x) Postprueba(y) Diferencia(z)
Tabla 5. Diseño Experimental.
Donde:
32
Post prueba (y): Se le realizará una prueba después de implementar la librería de
componentes a los IDE basados en el lenguaje JAVA, a los Estudiantes de
Ingeniería de Sistemas e Informática de la Universidad Nacional del Santa y se
anotarán sus resultados, tomando en cuenta los indicadores que se desean medir.
2.7.2. Muestra
Los alumnos de los ciclos VII y IX de la Escuela Académico Profesional de Ingeniería de
Sistemas e Informática de la Universidad Nacional del Santa.
Bibliografía y Linkografía
BarcodeLib.com. (s.f.). Barcode for Java. Recuperado el 20 de Junio de 2009, de
http://www.barcodelib.com/java_barcode/main.html
Gilbert, D., & Morgner, T. (s.f.). Welcome to JFreeChart! Recuperado el 20 de Junio de 2009, de
http://www.jfree.org/jfreechart/
Horstmann, C., & Cornell, G. (2003). Java 2. Características Avanzadas (Cuarta ed., Vol. II).
Madrid, España: Pearson Education.
jPowered.com. (s.f.). Vertical Bar Graph Component Library - API Java Bean. Recuperado el 20 de
Junio de 2009, de http://www.jpowered.com/java-bean/graph-chart/vertical-bar-graph/
33
Monografias.com S.A. (s.f.). Manual del Java. Recuperado el 24 de Junio de 2009, de
http://www.monografias.com/trabajos42/manual-de-java/manual-de-java2.shtml?monosearch
Qoppa Software. (s.f.). jPDFViewer™ Java PDF Viewer Bean. Recuperado el 20 de Junio de 2009,
de http://www.qoppa.com/jpvindex.html
Wikimedia Foundation, Inc. (16 de Abril de 2009). JavaBean. Recuperado el 24 de Junio de 2009,
de http://es.wikipedia.org/wiki/JavaBeans
Wikimedia Foundation, Inc. (24 de Junio de 2009). Lenguaje de programación Java. Recuperado el
24 de Junio de 2009, de http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java
34