CAPITULO II Marco Teóricori.ufg.edu.sv/jspui/bitstream/11592/7295/3/005.74-G934s... ·...

53
16 CAPITULO II Marco Teórico En la actualidad el desarrollo de sistemas informáticos se encuentra muy ligado a la capacidad de las instituciones de implementar soluciones factibles en todos los aspectos sean estas de carácter técnico, operativo y económico. Siempre las empresas o instituciones ven el beneficio que se puede tener al implementar soluciones informáticas para solventar sus problemas o necesidades, es por ello que generalmente se busca utilizar tecnologías que proporcionen beneficios a las instituciones y que ofrezcan ser escalables con gran facilidad. En las aplicaciones desarrolladas a nivel institucional existe la necesidad de contar con la infraestructura física necesaria para sacarle el mayor provecho al software desarrollado, en la cual la implementación de una red solventa muchos de los problemas que pueden surgir si no estuviesen interconectadas las terminales que sirven como punto de acceso al sistema. El desarrollo con tecnologías del lado del servidor ofrece a los usuarios acceder al sistema mediante los navegadores Web que acostumbran utilizar. Las herramientas utilizadas en el desarrollo de sistemas pueden ser variadas, sean estas de pago o gratuitas, sin embargo, lenguajes de programación y herramientas gratuitas, proporcionan bondades que ni los mismos productos de pago ofrecen, es por ello que el uso de herramientas gratuitas va en aumento, considerando que los costos disminuyen con el uso de estos. La utilización de un lenguaje orientado a objetos permite que el desarrollo de sistemas se realice de una forma mas práctica, permitiendo que a largo plazo el mantenimiento de este tipo de aplicaciones sea menos complicado, facilitando la reutilización de código. Esto junto a la utilización de una arquitectura que permita integrarse con los recursos con que se cuenta y que

Transcript of CAPITULO II Marco Teóricori.ufg.edu.sv/jspui/bitstream/11592/7295/3/005.74-G934s... ·...

16

CAPITULO II Marco Teórico

En la actualidad el desarrollo de sistemas informáticos se encuentra muy

ligado a la capacidad de las instituciones de implementar soluciones factibles en

todos los aspectos sean estas de carácter técnico, operativo y económico.

Siempre las empresas o instituciones ven el beneficio que se puede tener al

implementar soluciones informáticas para solventar sus problemas o

necesidades, es por ello que generalmente se busca utilizar tecnologías que

proporcionen beneficios a las instituciones y que ofrezcan ser escalables con

gran facilidad.

En las aplicaciones desarrolladas a nivel institucional existe la necesidad

de contar con la infraestructura física necesaria para sacarle el mayor provecho

al software desarrollado, en la cual la implementación de una red solventa

muchos de los problemas que pueden surgir si no estuviesen interconectadas

las terminales que sirven como punto de acceso al sistema. El desarrollo con

tecnologías del lado del servidor ofrece a los usuarios acceder al sistema

mediante los navegadores Web que acostumbran utilizar.

Las herramientas utilizadas en el desarrollo de sistemas pueden ser

variadas, sean estas de pago o gratuitas, sin embargo, lenguajes de

programación y herramientas gratuitas, proporcionan bondades que ni los

mismos productos de pago ofrecen, es por ello que el uso de herramientas

gratuitas va en aumento, considerando que los costos disminuyen con el uso de

estos. La utilización de un lenguaje orientado a objetos permite que el desarrollo

de sistemas se realice de una forma mas práctica, permitiendo que a largo

plazo el mantenimiento de este tipo de aplicaciones sea menos complicado,

facilitando la reutilización de código. Esto junto a la utilización de una

arquitectura que permita integrarse con los recursos con que se cuenta y que

17

satisfaga los requerimientos de los usuarios lleva a pensar que el desarrollo de

sistemas utilizando una arquitectura multi-nivel como es la utilizada en

aplicaciones Web, es una solución con beneficio a corto, mediano y largo plazo.

2.1 ENTORNO DE PROGRAMACIÓN WEB. Hoy en día las redes informáticas dan respuesta a múltiples necesidades de

las organizaciones. Entre Internet, red de redes de alcance mundial, y la más

simple de las redes domésticas, existe todo un amplio abanico de posibilidades

de implementación, entre las que se encuentran las intranets.

Una intranet podría llegar a considerarse como un espacio propio y

particular de la compañía u organización. Nacieron como simples herramientas

de distribución de la información para llegar a convertirse en pocos años en

herramientas de gestión de la información.

La creación de una intranet va más allá de instalar físicamente una red

de área local, o el simple hecho de informatizar algunos procesos. No se

debería confundir una intranet con una simple herramienta de gestión que

integra a los distintos departamentos y sus equipos.

La intranet se configura como una red propia de una organización (o

incluso más de una red) que permite acceder a información de la compañía

utilizando los protocolos de comunicación propios de la tecnología de Internet,

en concreto el protocolo TCP/IP (Transmission Control Protocol/Internet

Protocol) y http (Hypertext Transfer Protocol).

Sólo el personal de la organización (empresas, centros educativos,...)

podrán acceder a la información que se considere como exclusiva de la intranet,

evitando el uso de la intranet al público en general. Así, los usuarios de las

intranets son, por su propia definición, usuarios de la misma organización o

18

relacionados con ella. El hecho de que las intranets utilicen la interfaz propia de

Internet reduce el tiempo de aprendizaje de sus usuarios, y simplifica la

instalación de aplicaciones. Permiten la automatización de ciertas tareas y una

reducción de costes por el hecho de manejar información de forma digital,

evitando el uso de soportes en formato papel.

2.1.1 IMPLEMENTACIÓN Y DISEÑO DE UNA INTRANET. Un buen diseño de una intranet ya desde una primera fase de

implementación puede hacer ahorrar muchos costes a la empresa. La intranet

debe adaptarse a la empresa: así, es clave un buen diseño estratégico de la

misma, para que no resulte ineficaz y sea convenientemente amortizada por los

usuarios a los que va dirigida. Bien planificada, la intranet puede resultar una

muy buena herramienta para la empresa. Además, las redes internas son

evidentemente dinámicas, y por lo tanto deberán ser ajustables a las nuevas

necesidades que vayan surgiendo dentro de la organización.

Aspectos como por ejemplo elevar el nivel de satisfacción de los usuarios

de una organización (directivos, empleados,...), ya que se están utilizando

herramientas de trabajo en equipo que potencian el grado de integración en la

organización, pueden ser un buen motivo, entre otros, para llegar a tomar la

decisión de implementar una intranet.

Es de destacar que para sacarle el máximo provecho a una intranet, es

necesario contar dentro de la organización con aplicativos que sean funcionales

para la red, actualmente existe una tendencia a que las aplicaciones a nivel

interno sean desarrolladas en entornos Web.

2.1.2 APLICACIONES WEB. Las aplicaciones Web generan dinámicamente una serie de páginas en

un formato estándar, soportado por navegadores Web comunes como HTML

19

(HyperText Markup Language) o XHTML. Se utilizan lenguajes interpretados del

lado del cliente, tales como JavaScript, para añadir elementos dinámicos a la

interfaz de usuario. Generalmente cada página Web individual es enviada al

cliente como un documento estático, pero la secuencia de páginas provee de

una experiencia interactiva.

Para tener esta idea más clara debemos hacer énfasis en el concepto de

una aplicación Web y este se define así: “Un sistema informático que los

usuarios utilizan accediendo a un servidor Web a través de Internet o de una

Intranet”.

Ahora bien las interfaces Web tienen ciertas limitantes en la funcionalidad

del cliente. Métodos comunes en las aplicaciones de escritorio como dibujar en

la pantalla o arrastrar-y-soltar no están soportadas por las tecnologías Web

estándar. Los desarrolladores Web comúnmente utilizan lenguajes

interpretados del lado del cliente para añadir más funcionalidad, especialmente

para crear una experiencia interactiva que no requiera recargar la página cada

vez. Recientemente se han desarrollado tecnologías para coordinar estos

lenguajes con tecnologías del lado del servidor.

Otra aproximación es utilizar los programas Java applets o Macromedia

Flash para producir parte o toda la interfaz de usuario. Como casi todos los

browsers incluyen soporte para estas tecnologías, usualmente por medio de

plug-in, aplicaciones basadas en Java o Flash pueden ser implementadas con

aproximadamente la misma facilidad. Como hacen caso omiso de las

configuraciones de los browsers estas tecnologías permiten más control sobre

la interfaz, aunque incompatibilidad entre implementaciones de Flash o Java

puedan traer nuevas complicaciones. Por las similitudes con una arquitectura

cliente-servidor, con un cliente un poco especializado, hay disputas sobre si

llamar a estos sistemas aplicaciones Web; un término alternativo es “aplicación

enriquecida de Internet”.

20

Una ventaja significativa en la construcción de aplicaciones Web que

soporten las características de los browsers estándar es que deberían funcionar

igual independientemente de la versión del sistema operativo instalado en el

cliente. En vez de crear clientes para Windows, Mac OS X, GNU/Linux, y otros

sistemas operativos, la aplicación es escrita una vez y es mostrada casi en

todos lados. Sin embargo, aplicaciones inconsistentes de HTML, CSS y otras

especificaciones de browsers pueden causar problemas en el desarrollo y

soporte de aplicaciones Web.

Por mencionar otras ventajas de las aplicaciones Web se tiene que:

• Son más fáciles de actualizar.

• Proporcionan acceso inmediato a la aplicación.

• Requieren menos memoria.

• Menor cantidad de errores y fallas.

• Permiten múltiples usuarios al mismo tiempo.

Para el caso de las aplicaciones Web la interacción con el usuario se

realiza mediante formularios. Un formulario se puede definir como un diálogo

que forma parte de una página Web. Este diálogo está construido por un

conjunto de elementos como:

• Campos de texto de una o varias líneas.

• Checkboxes (opciones no excluyentes).

• Radio buttons (opciones múltiples excluyentes).

• Pull-down menus.

• Botones.

Para la validación de formularios y el manejo de los datos que puedan

contener, existen numerosos lenguajes de programación utilizados para el

desarrollo de aplicaciones Web, entre los que destacan:

• Java, con sus tecnologías Java Servlets y JavaServer Pages (JSP).

• PHP.

21

• ASP/ASP.NET, que no es un lenguaje de programación sino una

arquitectura de desarrollo web en la que se puede usar por debajo distintos

lenguajes (por ejemplo VB.NET o C# para ASP.NET, o VBScript/JScript para

ASP).

• Perl.

• Ruby.

• Python.

En cuanto a las herramientas de software a utilizar, hoy en día están

adquiriendo especial relevancia las herramientas de código libre. Las ventajas

de utilizar servidores con código abierto como Apache son indudables y junto a

Java se están convirtiendo en programas muy utilizados en estos entornos, por

sus presentaciones y rendimientos equiparables o superiores a las de productos

comerciales, y lo mejor de todo es que se reducen los costos de licenciamiento

ya que no requieren pago por la utilización de estos.

2.2 TECNOLOGIA OPEN SOURCE. Open Source, podría traducirse como 'código fuente abierto': un

programa que ofrece al usuario la posibilidad de entrar en sus líneas de código

para poder estudiarlo o modificarlo. Pero no sólo hace referencia al libre acceso

al código fuente. Las condiciones de distribución de un programa Open Source

deben cumplir una serie de criterios. La intención de la 'Definición de Open

Source' es establecer que esos criterios contengan la esencia de lo que los

programadores quieren que signifique: que aseguren que los programas

distribuidos con 'licencia Open Source' estarán disponibles para su continua

revisión y mejora para que alcancen niveles de fiabilidad que no pueda

conseguir ningún programa comercial 'cerrado'.

A la idea esencial del Open Source, ofrecer programas con acceso al

código fuente, van unidas una serie de conceptos:

22

• FLEXIBILIDAD. Si el código fuente está disponible, los desarrolladores

pueden modificar los programas a su antojo. Además, se produce un flujo

constante de ideas que mejora la calidad de los programas.

• FIABILIDAD Y SEGURIDAD. Con varios programadores a la vez escrutando

el mismo trabajo, los errores se detectan y corrigen antes, por lo que el

producto resultante es más fiable y eficaz que el comercial.

• RAPIDEZ DE DESARROLLO. Las actualizaciones y ajustes se realizan a

través de una comunicación constante vía Internet.

• RELACIÓN CON EL USUARIO. El programador se acerca mucho más a las

necesidades reales de los clientes, y puede crear un producto específico

para él.

Su contraparte el Software libre, es el software que, una vez obtenido,

puede ser usado, copiado y redistribuido libremente. El software libre suele

estar disponible gratuitamente, pero no hay que asociar software libre a

software gratuito, o a precio del coste de la distribución a través de otros

medios; sin embargo no es obligatorio que sea así y, aunque conserve su

carácter de libre, puede ser vendido comercialmente.

Aunque en la práctica el software Open Source y el software libre

comparten las mismas licencias, la FSF (Free Software Foundation) opina que

el movimiento Open Source es filosóficamente diferente del movimiento del

software libre. Esto debido a que existe confusión entre ambos, ya que se

puede decir que de forma general todo software Open Source puede ser

distribuido libremente y se puede modificar, sin embargo, no se pude decir lo

mismo del Software libre ya que este se puede distribuir pero no se pude

acceder al código fuente para modificarlo.

En la actualidad existe un sin número de software que es de gran

utilidad para los desarrolladores de sistemas que pueden ser de tipo Open

23

Source o Software libre, las cuales son de mucha ayuda a la hora de elaborar

las aplicaciones. Estas herramientas abarcan los distintos campos de la

informática tales como son: SGBD, Servidores WEB, Lenguajes de

programación, IDEs, Sistemas Operativos, Software de aplicación, entre otros.

2.2.1 SISTEMAS DE GESTIÓN DE BASES DE DATOS.

Los Sistemas de gestión de base de datos son un tipo de software muy

específico, dedicados a servir de interfaz entre la base de datos, el usuario y las

aplicaciones que la utilizan. Se compone de un lenguaje de definición de datos,

de un lenguaje de manipulación de datos y de un lenguaje de consulta.

De forma sencilla, un sistema de gestión de bases de datos se puede

definir como una colección de datos interrelacionados y un conjunto de

programas para acceder a esos datos. Existen dos grandes modelos de

sistemas de gestión de bases de datos:

• Sistemas de Gestión de Bases de Datos Relacionales (SGBDR)

Las bases de datos que generan se construyen con información muy

estructurada (datos) acerca de una organización o empresa determinada.

Cuando un usuario realiza una consulta en una base de datos relacional, el

sistema presenta como resultado la respuesta exacta a lo que se busca. A este

tipo de bases de datos se les denomina bases de datos relacionales, y a los

sistemas que las gestionan, Sistemas de Gestión de Bases de Datos

Relacionales (SGBDR).

Ejemplos de bases de datos relacionales son las bases de datos de

cuentas y clientes de un banco o las bases de datos de productos creadas por

los centros comerciales o las librerías para llevar un control de sus ventas.

Entre los sistemas de gestión de bases de datos relacionales tenemos:

MySQL, Oracle, Access, Dbase, Informix, entre otros.

24

• Sistemas de Gestión de Bases de Datos Documentales (SGBDD) o Sistemas

de Recuperación de Información (SRI)

Las bases de datos que generan se construyen con información no

estructurada tipo texto (documentos) sobre uno o varios temas. Cuando un

usuario realiza una consulta en una base de datos documental, el sistema

presenta como resultado, no una respuesta exacta, sino documentos útiles para

satisfacer la pregunta del usuario. A este tipo de bases de datos se les

denomina bases de datos documentales, y a los sistemas que las gestionan,

Sistemas de Gestión de Bases de Datos Documentales (SGBDD) o Sistemas

de Recuperación de Información (SRI).

Ejemplos de bases de datos documentales son las bases de datos

bibliográficas, bases de datos de prensa, bases de datos de informes de una

empresa.

Ejemplos de sistemas de gestión de bases de datos documentales son

Knosys, Inmagic, ISIS, BRS, entre otros.

MÓDULOS DE UN SISTEMA DE GESTIÓN DE BASE DE DATOS.

La gestión de los datos supone tanto la definición de estructuras para el

almacenamiento de la información como la provisión de mecanismos para la

gestión de la información que se almacena.

Un sistema de base de datos se divide en módulos que tratan cada una

de las responsabilidades del sistema general, entre los que podemos destacar:

1. Modelo de datos.

2. Lenguaje de definición de datos.

3. Lenguaje de manipulación de los datos.

25

1. Modelo de datos. La descripción de la estructura de una base de datos es el modelo de

datos, una colección de herramientas conceptuales para describir datos,

relación de datos, semánticas de datos y restricciones de datos.

Modelo: instrumento que se aplica a una parcela del mundo real (un universo

del discurso) para obtener una estructura de datos a la que se denomina

esquema.

Modelo de datos: conjunto de conceptos, reglas y convenciones que permiten

describir los datos del universo del discurso. Definir cuál es el universo del

discurso es el primer paso en la concepción de una base de datos.

Los modelos de datos tienen su objetivo específico entre los que destacan:

Formalización: el modelo de datos permite definir formalmente las estructuras

permitidas y las restricciones para representar los datos de un sistema de

información.

Diseño: el modelo es uno de los elementos básicos (junto con los lenguajes, la

documentación, etc.) para el desarrollo de una metodología de diseño de bases

de datos. De lo que se trata es de representar el universo del discurso. Todo

universo de un discurso tiene propiedades de dos tipos:

• Estáticas: que no se modifican en el tiempo (las estructuras).

• Dinámicas: que varían con el transcurso del tiempo (los datos o valores que

se almacenan en las estructuras).

Los sistemas de bases de datos disponen de unos lenguajes: conjunto

de instrucciones que de acuerdo a una sintaxis ayudan a realizar las distintas

funciones que ha de cumplir un SGBD.

26

Si atendemos al tipo de función distinguimos: lenguajes de definición y

lenguajes de manipulación.

Si atendemos al tipo de usuarios: lenguajes orientados a informáticos y

lenguajes orientados a usuarios finales.

El usuario final no necesita normalmente tanta potencia, por ello se le da

un lenguaje de manipulación con sintaxis sencilla, a veces por medio de menús.

La estructura y sintaxis de todos esos tipos de lenguajes dependen de cada

SGBD, pero en los SGBD relacionales, SQL es un estándar muy extendido.

2. El lenguaje de definición de datos (DDL). Se almacena en un diccionario o directorio de datos. Un directorio o

diccionario de datos es un archivo que contiene metadatos, es decir, "datos

sobre datos".

Es un conjunto de instrucciones que operan de acuerdo a una sintaxis y

que permiten al administrador de la base definir los datos con facilidad y

precisión, especificando sus distintas estructuras.

• Lenguaje de definición de la estructura lógica: permite asignar nombre a los

campos, a los registros, estableciendo sus longitudes y características, así

como sus relaciones, restricciones, etc.

• Lenguaje para la definición de la estructura interna.

• Lenguaje de definición de estructuras externas: El SGBD debe poner a

disposición de los usuarios medios que les permitan recuperar o actualizar

los datos contenidos en la base, de acuerdo con la visión lógica o estructura

externa (vista) que precise cada aplicación.

3. El lenguaje de manipulación de datos (DML). Sirve para recuperar datos, insertarlos, suprimirlos o modificarlos. Son un

conjunto de instrucciones que operan de acuerdo a una sintaxis y que permiten

a los usuarios la posibilidad de referirse a determinados conjuntos de datos que

27

cumplan ciertas condiciones (criterio de selección), como que un atributo tenga

un determinado valor, o que un conjunto de atributos y valores satisfagan cierta

expresión lógica. Además del criterio de selección, es preciso indicar la

estructura externa que se desea actualizar o recuperar.

Un ejemplo práctico y muy utilizado es el gestor de bases de datos

MySQL, que es un sistema de gestión de bases de datos relacional, licenciado

bajo la GPL de la GNU. Su diseño multihilo le permite soportar una gran carga

de forma muy eficiente. MySQL fue creada por la empresa sueca MySQL AB,

que mantiene el copyright del código fuente del servidor SQL, así como también

de la marca. Aunque MySQL es software libre, MySQL AB distribuye una versión

comercial de MySQL, que no se diferencia de la versión libre más que en el

soporte técnico que se ofrece, y la posibilidad de integrar este gestor en un

software propietario, ya que de no ser así, se vulneraría la licencia GPL.

Con miles de implementaciones a escala mundial y clientes de la talla de

Facebook, Google, Nokia, Baidu o China Mobile, con más de 100 millones de

copias de MySQL descargadas y distribuidas, y diariamente se producen otras

50.000 descargas adicionales, MySQL probablemente es el gestor más usado

en el mundo del software libre, debido a su gran rapidez y facilidad de uso. Esta

gran aceptación es debida, en parte, a que existen infinidad de librerías y otras

herramientas que permiten su uso a través de gran cantidad de lenguajes de

programación, además de su fácil instalación y configuración.

Características de MySQL.

Las principales características de este gestor de bases de datos son las

siguientes:

• Aprovecha la potencia de sistemas multiprocesador, gracias a su

implementación multihilo.

28

• Soporta gran cantidad de tipos de datos para las columnas. • Dispone de API's en gran cantidad de lenguajes (C, C++, Java, PHP, etc). • Gran portabilidad entre sistemas. • Soporta hasta 32 índices por tabla. • Gestión de usuarios y passwords, manteniendo un muy buen nivel de

seguridad en los datos.

2.2.2 LENGUAJES DE PROGRAMACIÓN.

Consiste en un conjunto de reglas sintácticas y semánticas que definen

su estructura y el significado de sus elementos, respectivamente.

Un lenguaje de programación permite a un programador especificar de

manera precisa: sobre qué datos una computadora debe operar, cómo deben

ser estos almacenados y transmitidos y qué acciones debe tomar bajo una

variada gama de circunstancias.

Clasificación de los lenguajes de programación.

Los lenguajes de programación se determinan según el nivel de

abstracción, según la forma de ejecución y según el paradigma de

programación que poseen cada uno de ellos y esos pueden ser:

Según el nivel de abstracción:

• Lenguajes de bajo nivel.

Los lenguajes de bajo nivel son lenguajes de programación que se acercan al

funcionamiento de una computadora. El lenguaje de más bajo nivel es, por

excelencia, el código máquina. A éste le sigue el lenguaje ensamblador, ya que

al programar en ensamblador se trabajan con los registros de memoria de la

computadora de forma directa.

29

• Lenguajes de medio nivel.

Hay lenguajes de programación que son considerados por algunos expertos

como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas

características que los acercan a los lenguajes de bajo nivel pero teniendo, al

mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al

humano y, por tanto, de alto nivel.

• Lenguajes de alto nivel.

Los lenguajes de alto nivel son normalmente fáciles de aprender porque están

formados por elementos de lenguajes naturales, como el inglés. En BASIC, el

lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10

THEN STOP" pueden utilizarse para pedir a la computadora que pare si

CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de

trabajar es un poco frustrante, dado que a pesar de que las computadoras

parecen comprender un lenguaje natural, lo hacen en realidad de una forma

rígida y sistemática.

Según la forma de ejecución:

• Lenguajes compilados.

Naturalmente, un programa que se escribe en un lenguaje de alto nivel también

tiene que traducirse a un código que pueda utilizar la máquina. Los programas

traductores que pueden realizar esta operación se llaman compiladores. Éstos,

como los programas ensambladores avanzados, pueden generar muchas líneas

de código de máquina por cada proposición del programa fuente. Se requiere

una corrida de compilación antes de procesar los datos de un problema.

Los compiladores son aquellos cuya función es traducir un programa escrito en

un determinado lenguaje a un idioma que la computadora entienda (lenguaje

máquina con código binario).

30

Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual

Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya

errores, sino hasta que luego de haber compilado el programa, ya no aparecen

errores en el código.

• Lenguajes interpretados.

Se puede también utilizar una alternativa diferente de los compiladores para

traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar

en forma permanente el código objeto que se produce durante la corrida de

compilación para utilizarlo en una corrida de producción futura, el programador

sólo carga el programa fuente en la computadora junto con los datos que se van

a procesar. A continuación, un programa intérprete, almacenado en el sistema

operativo del disco, o incluido de manera permanente dentro de la máquina,

convierte cada proposición del programa fuente en lenguaje de máquina

conforme vaya siendo necesario durante el proceso de los datos. No se graba

el código objeto para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y

traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo

de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser

interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea

más lento en tiempo de ejecución (porque se va revisando el código en tiempo

de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que

estar compilando a cada momento el código completo).

El intérprete elimina la necesidad de realizar una corrida de compilación

después de cada modificación del programa cuando se quiere agregar

funciones o corregir errores; pero es obvio que un programa objeto compilado

con antelación deberá ejecutarse con mucha mayor rapidez que uno que se

debe interpretar a cada paso durante una corrida de producción.

31

Según el paradigma de programación.

• Imperativo: describe la programación como una secuencia instrucciones o

comandos que cambian el estado de un programa. El código máquina en

general está basado en el paradigma imperativo. Su contrario es el

paradigma declarativo. En este paradigma se incluye el paradigma

procedimental (procedural) entre otros.

• Declarativo: No se basa en el cómo se hace algo (cómo se logra un objetivo

paso a paso), sino que describe (declara) cómo es algo. En otras palabras,

se enfoca en describir las propiedades de la solución buscada, dejando

indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar

esa solución. Es más complicado de implementar que el paradigma

imperativo, tiene desventajas en la eficiencia, pero ventajas en la solución

de determinados problemas.

• Estructurado: la programación se divide en bloques (procedimientos y

funciones) que pueden o no comunicarse entre sí. Además la programación

se controla con secuencia, selección e iteración. Permite reutilizar código

programado y otorga una mejor compresión de la programación. Es

contrario al paradigma inestructurado, de poco uso, que no tiene ninguna

estructura, es simplemente un “bloque”, como por ejemplo, los archivos

batch (.bat).

• Funcional: este paradigma concibe a la computación como la evaluación de

funciones matemáticas y evita declarar y cambiar datos. En otras palabras,

hace hincapié en la aplicación de las funciones y composición entre ellas,

más que en los cambios de estados y la ejecución secuencial de comandos

(como lo hace el paradigma procedimental). Permite resolver ciertos

problemas de forma elegante y los lenguajes puramente funcionales evitan

los efectos secundarios comunes en otro tipo de programaciones.

32

• Lógico: se basa en la definición de reglas lógicas para luego, a través de un

motor de inferencias lógicas, responder preguntas planteadas al sistema y

así resolver los problemas, por ejemplo Prolog.

• Orientados a Objetos: En la Programación Orientada a Objetos (POO u

OOP según siglas en inglés) se definen los programas en términos de

"clases de objetos", objetos que son entidades que combinan estado (es

decir, datos) comportamiento (esto es, procedimientos o métodos) e

identidad (propiedad del objeto que lo diferencia del resto). La programación

orientada a objetos expresa un programa como un conjunto de estos

objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer

los programas módulos más fáciles de escribir, mantener y reutilizar. Un

ejemplo de lenguaje orientado a objetos que tiene una gran aceptación a

nivel mundial por sus diversas características es JAVA que en cualquier

entorno en el que se utilice, ya sean grandes empresas, aplicaciones

domésticas, educacionales, siempre se ve como uno de los lenguajes más

potentes del mercado.

Java.

La tecnología Java se creó como una herramienta de programación en

una pequeña operación secreta y anónima denominada "The Green Project" en

Sun Microsystems en el año 1991. El equipo secreto ("Green Team"),

compuesto por trece personas y dirigido por James Gosling, se encerró en una

oficina desconocida de Sand Hill Road en Menlo Park, interrumpió todas las

comunicaciones regulares con Sun y trabajó sin descanso durante 18 meses.

Intentaban anticiparse y prepararse para el futuro de la informática. Su

conclusión inicial fue que al menos en parte se tendería hacia la convergencia

de los dispositivos digitales y los ordenadores.

33

El resultado fue un lenguaje de programación que no dependía de los

dispositivos denominado "Oak". Para demostrar cómo podía contribuir este

nuevo lenguaje al futuro de los dispositivos digitales, el equipo desarrolló un

controlador de dispositivos de mano para uso doméstico destinado al sector de

la televisión digital por cable. Por desgracia, la idea resultó ser demasiado

avanzada para el momento y el sector de la televisión digital por cable no

estaba listo para el gran avance que la tecnología Java les ofrecía.

Poco tiempo después Internet estaba listo para la tecnología Java y, justo

a tiempo para su presentación en público en 1995, el equipo pudo anunciar que

el navegador Netscape Navigator incorporaría la tecnología Java.

Java ha atraído a cerca de 4 millones de desarrolladores de software, se

utiliza en los principales sectores de la industria de todo el mundo y está

presente en un gran número de dispositivos, ordenadores y redes de cualquier

tecnología de programación.

La versatilidad y eficiencia, la portabilidad de su plataforma y la seguridad

que aporta, la han convertido a Java en la tecnología ideal para su aplicación a

redes, de manera que hoy en día, más de 2.500 millones de dispositivos utilizan

la tecnología Java, por ejemplo:

• Más de 700 millones de ordenadores.

• 708 millones de teléfonos móviles y otros dispositivos de mano.

• 1000 millones de tarjetas inteligentes.

• Sintonizadores, impresoras, Web cams, juegos, sistemas de navegación

para automóviles, terminales de lotería, dispositivos médicos, cajeros de

pago, etc.

Hoy en día, se puede encontrar la tecnología Java en redes y

dispositivos que comprenden desde Internet y superordenadores científicos

hasta portátiles y teléfonos móviles; desde simuladores de mercado en Wall

34

Street hasta juegos de uso doméstico y tarjetas de crédito: Java está en todas

partes.

La tecnología Java, una tecnología madura, extremadamente eficaz y

sorprendentemente versátil, se ha convertido en un recurso inestimable ya que

permite a los desarrolladores:

• Desarrollar software en una plataforma y ejecutarlo en prácticamente

cualquier otra plataforma.

• Crear programas para que funcionen en un navegador Web y en

servicios Web.

• Desarrollar aplicaciones para servidores como foros en línea, tiendas,

encuestas, procesamiento de formularios HTML, etc.

• Combinar aplicaciones o servicios basados en la tecnología Java para

crear servicios o aplicaciones totalmente personalizados.

• Desarrollar potentes y eficientes aplicaciones para teléfonos móviles,

procesadores remotos, productos de consumo de bajo coste y

prácticamente cualquier dispositivo digital.

La Máquina Virtual Java es el núcleo del lenguaje de programación Java.

De hecho, es imposible ejecutar un programa Java sin ejecutar alguna

implantación de la JVM. En la JVM se encuentra el motor que en realidad

ejecuta el programa Java y es la clave de muchas de las características

principales de Java, como la portabilidad, la eficiencia y la seguridad.

Siempre que se corre un programa Java, las instrucciones que lo

componen no son ejecutadas directamente por el hardware sobre el que

subyace, sino que son pasadas a un elemento de software intermedio, que es el

encargado de que las instrucciones sean ejecutadas por el hardware. Es decir,

el código Java no se ejecuta directamente sobre un procesador físico, sino

sobre un procesador virtual Java.

35

En la figura 2.1 puede observarse la capa de software que implementa la

máquina virtual Java. Esta capa de software oculta los detalles inherentes a la

plataforma, a las aplicaciones Java que se ejecuten sobre ella.

Debido a que la plataforma Java fue diseñada pensando en que se

implementaría sobre una amplia gama de sistemas operativos y de

procesadores, se incluyeron dos capas de software para aumentar su

portabilidad. La primera dependiente de la plataforma es llamada adaptador,

mientras que la segunda, que es independiente de la plataforma, se le llama

interfaz de portabilidad. De esta manera, la única parte que se tiene que escribir

para una plataforma nueva, es el adaptador. El sistema operativo proporciona

los servicios de manejo de ventanas, red, sistema de archivos, etcétera.

CAPA DE SOFTWARE QUE IMPLEMENTA LA MÁQUINA VIRTUAL JAVA.

Applets y Aplicaciones API Java Base Extensión Estándar al API Java

Clases Java Base Clases Java de Extensión Estándar

Maquina Virtual Java Interfaz de portabilidad

Adaptador

Adaptador

JavaOS Navegador SO (Windows, Linux, OS2, etc.) SO (Unix, etc.)

Hardware Hardware Hardware

Figura 2.1

2.2.3 SERVIDOR WEB. Es un programa que implementa el protocolo HTTP (hypertext transfer

protocol). Este protocolo está diseñado para transferir lo que llamamos

hipertextos, páginas Web o páginas HTML (hypertext markup language): textos

36

complejos con enlaces, figuras, formularios, botones y objetos incrustados

como animaciones o reproductores de música.

Sin embargo, el hecho de que HTTP y HTML estén íntimamente ligados

no debe dar lugar a confundir ambos términos. HTML es un formato de archivo

y HTTP es un protocolo.

Cabe destacar el hecho de que la palabra servidor identifica tanto al

programa como a la máquina en la que dicho programa se ejecuta. Existe, por

tanto, cierta ambigüedad en el término, aunque no será difícil diferenciar a cuál

de los dos referirse en cada caso.

Un servidor Web se encarga de mantenerse a la espera de peticiones

HTTP llevada a cabo por un cliente HTTP que llamado navegador. El

navegador realiza una petición al servidor y éste le responde con el contenido

que el cliente solicita.

Servidor Web Apache.

Apache es un servidor Web de código abierto. Su desarrollo comenzó en

febrero de 1995, por Rob McCool, en una tentativa de mejorar el servidor

existente en el NCSA. La primera versión apareció en enero de 1996, el Apache

1.0. Hacia el 2000, el servidor Web Apache era el más extendido en el mundo.

El nombre «Apache» es un acrónimo de «a patchy server» -un servidor de

remiendos-, es decir un servidor construido con código preexistente y piezas y

parches de código. Es la auténtica «kill app» del software libre en el ámbito de

los servidores y el ejemplo de software libre de mayor éxito, por delante incluso

del kernel Linux. Desde hace años, más del 60% de los servidores web de

Internet emplean Apache.

37

Características del Servidor Apache.

• Nuevos módulos Apache API.: se utiliza un nuevo conjunto de interfaces de

aplicación (APIs).

• Filtrado: Los módulos pueden actuar como filtros de contenido.

• Soporte para IPv6: Se tiene soporte para la nueva generación de las

direcciones IP.

• Directivas simplificadas: Se han eliminado una serie de directivas

complicadas y otras se han simplificado.

• Respuestas a errores en diversos idiomas: Cuando usa documentos Server

Side Include (SSI), las páginas de errores personalizables se pueden

entregar en diversos idiomas

• Soporte a múltiples protocolos.

Para que una aplicación Web desarrollada con Java sea funcional, es

necesario disponer de un contenedor de servlets para que se puedan

interpretar y ejecutar las aplicaciones del lado del servidor, ya que es el motor

que permite la funcionalidad de este tipo de aplicaciones. Uno de los más

utilizados es Tomcat.

Tomcat: es un contenedor de Servlets con un entorno JSP. Un contenedor de

Servlets es un shell de ejecución que maneja e invoca servlets por cuenta del

usuario.

Podemos dividir los contenedores de Servlets en:

1. Contenedores de Servlets Stand-alone (Independientes)

Estos son una parte integral del servidor web. Este es el caso cuando

usando un servidor web basado en Java, por ejemplo, el contenedor de

servlets es parte de JavaWebServer (actualmente sustituido por iPlanet).

Este el modo por defecto usado por Tomcat.

38

2. Contenedores de Servlets dentro-de-Proceso.

El contenedor Servlet es una combinación de un plugin para el servidor web

y una implementación de contenedor Java. El plugin del servidor web abre

una JVM (Máquina Virtual Java) dentro del espacio de direcciones del

servidor web y permite que el contenedor Java se ejecute en él. Si una cierta

petición debería ejecutar un servlet, el plugin toma el control sobre la

petición y lo pasa al contenedor Java (usando JNI). Un contenedor de este

tipo es adecuado para servidores multi-thread de un sólo proceso y

proporciona un buen rendimiento pero está limitado en escalabilidad

3. Contenedores de Servlets fuera-de-proceso.

El contenedor Servlet es una combinación de un plugin para el servidor web

y una implementación de contenedor Java que se ejecuta en una JVM fuera

del servidor web. El plugin del servidor web y el JVM del contenedor Java se

comunican usando algún mecanismo IPC (normalmente sockets TCP/IP). Si

una cierta petición debería ejecutar un servlet, el plugin toma el control sobre

la petición y lo pasa al contenedor Java (usando IPCs). El tiempo de

respuesta en este tipo de contenedores no es tan bueno como el anterior,

pero obtiene mejores rendimientos en otras cosas (escalabilidad,

estabilidad, etc.).

Tomcat puede utilizarse como un contenedor solitario (principalmente

para desarrollo y depuración) o como plugin para un servidor web existente

(actualmente se soportan los servidores Apache, IIS y Netscape). Esto significa

que siempre que despleguemos Tomcat tendremos que decidir cómo usarlo.

2.2.4 ENTORNOS INTEGRADOS DE DESARROLLO (IDE). El entorno de desarrollo integrado o en inglés Integrated Development

Environment, es un programa compuesto por un conjunto de herramientas para

un programador. Un IDE es un entorno de programación que ha sido

39

empaquetado como un programa de aplicación, es decir, consiste en un editor

de código, un compilador, un depurador y un constructor de interfaz gráfica GUI

y otras herramientas de utilidad para el programador.

Los IDEs pueden ser aplicaciones por si solas o pueden ser parte de

aplicaciones existentes. El leguaje Visual Basic por ejemplo puede ser usado

dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir

sentencias Visual Basic en forma de macros para Word.

Los IDEs proveen un marco de trabajo amigable para la mayoría de los

lenguajes de programación tales como C++, JAVA, C#, Visual Basic, Object

Pascal, Velneo y otros. En algunos lenguajes, un IDE puede funcionar como un

sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de

programación en forma interactiva, sin necesidad de trabajo orientado a

archivos de texto, como es el caso de Smalltalk u Objective-C.

Es posible que un mismo IDE pueda funcionar con varios lenguajes de

programación. Este es el caso de Eclipse, que mediante plugins se le puede

añadir soporte de lenguajes adicionales.

Componentes de un IDE.

• Un editor de texto.

• Un compilador.

• Un intérprete.

• Herramientas de automatización.

• Un depurador.

• Posibilidad de ofrecer un sistema de control de versiones.

• Factibilidad para ayudar en la construcción de interfaces gráficas de

usuarios.

40

La historia de la programación ha evolucionado paralelamente a la de los

editores de texto. Cuando los programas se almacenaban en tarjetas

perforadas, la tarea de traducción del pseudo-código al lenguaje de “huecos y

no-huecos” que la máquina entendía consumía la mayor parte del tiempo de

producción. Los lenguajes, compiladores y entornos han cambiado muchísimo

desde entonces. Lo cierto es que cuando hay que desenmarañar el código de

un programa para llevar a buen puerto un proyecto, es importante que las

herramientas que utilizamos no nos impongan límites artificiales y nos permitan

automatizar tareas repetitivas, por lo que nos conviene conocer las alternativas

con las que contamos. Hoy día existen técnicas pensadas para perfeccionar la

programación como disciplina y típicamente integradas en los IDEs.

Algunos editores señalan o colorean la sintaxis del lenguaje de

programación, indexan el código automáticamente, completan los paréntesis y

los corchetes y permiten compilar desde el mismo editor. Pero eso es todo. No

escriben código, no están integrados con el compilador ni cuentan con un

servidor de aplicaciones. Tampoco cuentan con herramientas gráficas de

desarrollo. Los IDEs suministrarán todo esto y además te facilitarán la

depuración el código, el control de versiones y la gestión de los archivos que

vienen a componer un proyecto software.

Existe diversidad de opiniones en cuanto a si es mejor emplear un “editor

inteligente” o un entorno de desarrollo con docenas de herramientas. Algunas

personas prefieren los editores, ya que piensan que cuesta mucho aprender a

manejar un IDE, que generan código poco eficiente o que les fuerza e emplear

un determinado estilo de programación. Otras prefieren los IDEs a la

programación “de verde sobre negro” y comparan el no querer usarlos con la

situación de programadores de “ensamblador” que rechazan emplear lenguajes

de más alto nivel. Ambos grupos tienen parte de razón. Para elegir la alternativa

que mejor nos convenga para cada proyecto, lenguaje o circunstancia

particular, lo mejor es informarse adecuadamente.

41

Los IDEs son entornos, pues constituyen un lugar que envuelve al

programador como un taller envuelve a un artesano. Son integrados o

integradores, pues incorporan una serie de herramientas y utilidades de

programación en un mismo espacio, y están creados para el desarrollo pues

ayudan a construir software y ellos mismos son una forma de software más

desarrollada y compleja que un compilador convencional.

La construcción de un programa siempre va a consistir en la escritura de

un listado de código que debe ser correcto, mantenible y modificable. Gracias a

los IDEs podremos reutilizar, desde un repositorio, componentes software ya

desarrollados y emplear funciones de auto-completado de código. Por ejemplo,

cuando se escriben los primeros caracteres de una función definida en otra

parte de nuestro programa, se nos sugerirán los argumentos que podremos

emplear, evitándonos buscar la función y ahorrándonos errores y tecleo al

construir un programa. Un IDE nos permitirá además emplear gran cantidad de

opciones del compilador de forma integrada, desde el mismo entorno, con lo

que se evitan cambios de contexto. Se facilita asimismo la documentabilidad de

un proyecto software, muy importante a la hora de ampliar, modificar y

mantener un programa.

El estilo de Programación Orientada a Objetos es uno de los que más se

beneficia del empleo de un IDE, gracias a las paletas de atributos de objeto que

suelen incluir casi todos los IDEs, potenciando además características clave

como la encapsulación y la herencia. La Programación Visual tal y como hoy

existe no habría podido llegar a lo que es sin las herramientas gráficas que

suministran los IDEs modernos.

Todas estas ventajas, aplicadas a gran escala sobre un equipo de

programadores formados a lo largo de una serie de proyectos software,

incrementan el rendimiento y la productividad en modo apreciable.

42

Entre los grandes actores del mercado de los IDEs, hemos de mencionar

a Borland, empresa que con sus entornos JBuilder, C++Builder y Delphi Builder

ha ido perfeccionando la tecnología de los IDEs mediante su comercialización.

Borland no deja de ser una casa de software privativo, razón por la cual existen

una serie de iniciativas más abiertas a las que la comunidad Open Source suele

ser más adepta, entre las cuales podemos destacar VIDE para Java y la

comunidad Eclipse.org. Pero entre las mejores opciones para desarrollo en

Java se encuentra Eclipse que ofrece una serie de ventajas sobre otros IDEs

para la plataforma Java.

Eclipse.

Eclipse comenzó como un proyecto de IBM Canadá. Fue desarrollado

por OTI (Object Technology International) como reemplazo de VisualAge

también desarrollado por OTI. En Noviembre del 2001, se formó un consorcio

para el desarrollo futuro de Eclipse como código abierto. En 2003, la fundación

independiente de IBM fue creada.

Arquitectura.

La base para Eclipse es la Plataforma de cliente enriquecido (del Inglés Rich

Client Platform RCP). Los siguientes componentes constituyen la plataforma de

cliente enriquecido:

1. Plataforma principal - inicio de Eclipse, ejecución de plugins.

2. OSGi - una plataforma para bundling estándar.

3. El Standard Widget Toolkit (SWT) - Un widget toolkit portable.

4. JFace - manejo de archivos, manejo de texto, editores de texto.

5. El Workbench de Eclipse - vistas, editores, perspectivas, asistentes.

Los widgets de Eclipse están implementados por una herramienta de widget

para Java llamada SWT, a diferencia de la mayoría de las aplicaciones Java,

que usan las opciones estándar Abstract Window Toolkit (AWT) o Swing. La

43

interfaz de usuario de Eclipse también tiene una capa GUI intermedia llamada

JFace, la cual simplifica la construcción de aplicaciones basada en SWT.

El entorno integrado de desarrollo (IDE) de Eclipse emplea módulos (en

inglés plugin) para proporcionar toda su funcionalidad al frente de la plataforma

de cliente rico, a diferencia de otros entornos monolíticos donde las

funcionalidades están todas incluidas, las necesite el usuario o no. Este

mecanismo de módulos es una plataforma ligera para componentes de

software. Adicionalmente a permitirle a Eclipse extenderse usando otros

lenguajes de programación como son C/C++ y Phyton, permite a Eclipse

trabajar con lenguajes para procesado de texto como LaTeX, aplicaciones en

red como Telnet y Sistemas de gestión de base de datos. La arquitectura plugin

permite escribir cualquier extensión deseada en el ambiente, como seria

Gestión de la configuración. Se provee soporte para Java y CVS en el SDK de

Eclipse. Y no tiene porque ser usado únicamente para soportar otros lenguajes

de programación.

La definición que da el proyecto Eclipse acerca de su software es: “una

especie de herramienta universal, un IDE abierto y extensible para todo y nada

en particular”.

En cuanto a las aplicaciones clientes, eclipse provee al programador con

frameworks muy ricos para el desarrollo de aplicaciones gráficas, definición y

manipulación de modelos de software, aplicaciones web, etc. Por ejemplo, GEF

(Graphic Editing Framework - Framework para la edición gráfica) es un plugin

de eclipse para el desarrollo de editores visuales que pueden ir desde

procesadores de texto wysiwyg hasta editores de diagramas UML, interfaces

gráficas para el usuario (GUI), etc. Dado que los editores realizados con GEF

“viven” dentro de eclipse, además de poder ser usados conjuntamente con otros

plugins, hacen uso de su interfaz gráfica personalizable y profesional.

44

El SDK de Eclipse incluye las herramientas de desarrollo de Java,

ofreciendo un IDE con un compilador de Java interno y un modelo completo de

los archivos fuente de Java. Esto permite técnicas avanzadas de refactorización

y análisis de código. El IDE también hace uso de un espacio de trabajo, en este

caso un grupo de metadata en un espacio para archivos plano, permitiendo

modificaciones externas a los archivos en tanto se refresque el espacio de

trabajo correspondiente.

2.2.5 FRAMEWORKS. Un framework es una estructura de soporte definida en la cual otro

proyecto de software puede ser organizado y desarrollado. Típicamente, un

framework puede incluir soporte de programas, bibliotecas y un lenguaje de

scripting entre otros softwares para ayudar a desarrollar y unir los diferentes

componentes de un proyecto.

Es un conjunto de clases creadas para apoyar la escritura de código en

un contexto de terminado. Un framework de persistencia es, por lo tanto, una

librería de clases que facilita la tarea del programador al permitirle guardar

objetos en bases de datos relacionales de manera lógica y eficiente, de otra

manera tocaría hacerlo manualmente, y este es, potencialmente, un proceso

tedioso, repetitivo y propenso a errores.

Los frameworks son diseñados con el intento de facilitar el desarrollo de

software, permitiendo a los diseñadores y programadores pasar más tiempo

identificando requerimientos de software que tratando con los tediosos detalles

de bajo nivel de proveer un sistema funcional. Un framework de persistencia de

gran aceptación en el ambiente es Hibernate, ya que ofrece facilidad en su uso,

funcionando perfectamente con JAVA y por sobretodo es una herramienta Open

Source.

45

Los frameworks se clasifican en función de la forma en que se instancian en:

• Frameworks de caja blanca: Para su instanciación, el desarrollador con

reutilización necesita conocer su estructura interna. Al utilizarlos, el

mecanismo predominante es la herencia, mediante la que se hacen

concretas las propiedades abstractas de las clases del framework.

• Frameworks de caja negra: Para su instanciación no es preciso conocer la

forma en que están construidos. El desarrollador con reutilización

personaliza los puntos calientes mediante la instanciación con parámetros

actuales y la composición.

Los frameworks también se clasifican en función del tipo de problema a que van

dirigidos en:

• Frameworks de aplicación: Encapsulan una capa de funcionalidad horizontal

que se puede aplicar en la construcción de una gran variedad de programas.

Los frameworks que implementan las interfaces graficas de usuario

representan su paradigma.

• Frameworks de soporte: Proporcionan servicios básicos a nivel de sistema.

• Frameworks de dominio: Aplicables a un dominio de aplicación o línea de

producto, implementan una capa de funcionalidad vertical. Estos frameworks

deberán ser los más numerosos, y su evolución deberá también ser la mas

rápida, pues deben adaptarse a las áreas de negocio para las que están

diseñados.

Hibernate:

Hibernate es una herramienta de Mapeo objeto-relacional para la

plataforma Java (y disponible también para .Net) que facilita el mapeo de

atributos entre una base de datos relacional tradicional y el modelo de objetos

de una aplicación, mediante archivos declarativos (XML) que permiten

establecer estas relaciones.

46

Hibernate es software libre, distribuido bajo los términos de la LGPL

(Licencia Pública General Menor de GNU).

Hibernate fue una iniciativa de un grupo de desarrolladores dispersos

alrededor del mundo conducidos por Gavin King. Tiempo después, J Boss Inc.

(empresa comprada por Red Hat) contrató a los principales desarrolladores de

Hibernate y trabajó con ellos en brindar soporte al proyecto.

La rama actual de desarrollo de Hibernate es la 3.x, la cual incorpora

nuevas características, como una nueva arquitectura, filtros definidos por el

usuario, y opcionalmente el uso de anotaciones para definir la correspondencia

en lugar (o conjuntamente con) los archivos XML. Hibernate 3 también guarda

cercanía con la especificación EJB 3.0 (aunque apareciera antes de la

publicación de dicha especificación por la Java Community Process) y actúa

como la espina dorsal de la implementación de EJB 3.0 en JBoss.

Hibernate se adapta al proceso de desarrollo de software, sin importar si

se parte de una base de datos en blanco o de una ya existente.

La característica principal de Hibernate es el mapeo de clases en Java a

tablas de una base de datos (y de tipos de datos de Java hacia tipos de datos

de SQL), ofreciendo también consulta de datos y facilidades de recuperación.

Hibernate genera las sentencias SQL y libera al desarrollador del manejo

manual de los datos que resultan de la ejecución de dichas sentencias,

manteniendo la portabilidad entre todas las bases de datos con un ligero

incremento en el tiempo de ejecución. Hibernate para Java puede ser utilizado

en aplicaciones Java independientes o bajo aplicaciones Java EE haciendo uso

de servlets o EJB beans de sesión.

La implementación de las herramientas mencionadas lleva a pensar que

es necesario tener claro como hacer encajar los requerimientos y concretizarlos

47

en un producto final que refleje el cumplimiento de estos, para ello se cuentan

como se mencionó anteriormente con lenguajes de programación para el Web

que son orientados a objetos, pero para utilizarlos de la mejor forma es

necesario tener claros ciertos conceptos básicos del modelado orientado a

objetos.

2.3 MODELADO ORIENTADO A OBJETOS (MOO). En el contexto del desarrollo de sistemas de software con orientación a

objetos, el MOO es la construcción de modelos de un sistema por medio de la

identificación y especificación de un conjunto de objetos relacionados, que se

comportan y colaboran entre sí de acuerdo a los requerimientos establecidos

para el sistema de objetos.

La definición anterior ya sugiere la distinción, dentro del proceso de

MOO, de tres dimensiones o perspectivas relativamente ortogonales para

describir un sistema de objetos:

• Dimensión estructural de los objetos: Se centra en las propiedades estáticas

o pasivas de los sistemas. Está relacionada con la estructura estática del

sistema de objetos.

• Dimensión dinámica del comportamiento: Se centra en las propiedades

activas y describe el comportamiento individual y la colaboración entre los

objetos que constituyen el sistema.

• Dimensión funcional de los requerimientos: Son consideradas las

propiedades relativas a la función de transformación del sistema de objetos,

es decir, los procesos de conversión de entradas en salidas.

El Modelado y Diseño Orientado a Objetos se funda en pensar acerca de

problemas a resolver empleando modelos que se han organizado tomando

como base conceptos del mundo real.

48

La programación del modelo orientado a objetos se basa en ciertos

conceptos básicos descritos a continuación:

• Objetos. Un objeto es una agrupación de código, compuesta de propiedades y

métodos, que pueden ser manipulados como una entidad independiente. Las

propiedades definen los datos o información del objeto, permitiendo consultar o

modificar su estado; mientras que los métodos son las rutinas que definen su

comportamiento.

Un objeto es una pieza que se ocupa de desempeñar un trabajo concreto

dentro de una estructura organizativa de nivel superior, formada por múltiples

objetos, cada uno de los cuales ejerce la tarea particular para la que ha sido

diseñado.

Todo objeto del mundo real tiene 2 componentes: características y

comportamiento. Por ejemplo, los automóviles tienen características (marca,

modelo, color, velocidad máxima, etc.) y comportamiento (frenar, acelerar,

retroceder, llenar combustible, cambiar llantas, etc.).

Los Objetos de Software, al igual que los objetos del mundo real, también

tienen características y comportamientos. Un objeto de software mantiene sus

características en una o más "variables", e implementa su comportamiento con

"métodos". Un método es una función o subrutina asociada a un objeto.

• Clases. Una clase no es otra cosa que el conjunto de especificaciones o normas

que definen cómo va a ser creado un objeto de un tipo determinado; algo

parecido a un manual de instrucciones conteniendo las indicaciones para crear

el objeto.

49

Los términos objeto y clase son utilizados en POO (Programación

Orientada a Objetos), con gran confusión y en contextos muy similares, por lo

que para intentar aclarar en lo posible ambos conceptos, diremos que una clase

constituye la representación abstracta de algo, mientras que un objeto

constituye la representación concreta de lo que una clase define.

La clase determina el conjunto de puntos clave que ha de cumplir un

objeto para ser considerado perteneciente a dicha clase o categoría, ya que no

es obligatorio que dos objetos creados a partir de la misma clase sean

exactamente iguales, basta con que cumplan las especificaciones clave de la

clase.

Exponiendo ahora las anteriores definiciones mediante un ejemplo

preciso: un molde para crear figuras de cerámica y las figuras obtenidas a partir

del molde. En este caso, el molde representaría la clase Figura, y cada una de

las figuras creadas a partir del molde, sería un objeto Figura. Cada objeto

Figura tendrá una serie de propiedades comunes: tamaño y peso iguales; y

otras propiedades particulares: un color distinto para cada figura.

Aunque objetos distintos de una misma clase pueden tener ciertas

propiedades diferentes, deben tener el mismo comportamiento o métodos. Para

explicar mejor esta circunstancia, tomemos el ejemplo de la clase Coche;

podemos crear dos coches con diferentes características (color, tamaño,

potencia, etc.), pero cuando aplicamos sobre ellos los métodos Arrancar,

Acelerar o Frenar, ambos se comportan o responden de la misma manera.

Ahora bien el proceso por el cual se obtiene un objeto a partir de las

especificaciones de una clase se conoce como instanciación de objetos. Por

ejemplo cuando se fabrican celulares, los fabricantes aprovechan el hecho de

que los celulares comparten esas características comunes y construyen

modelos o plantillas comunes, para que a partir de esas se puedan crear

50

muchos equipos celulares del mismo modelo. A ese modelo o plantilla le

llamamos clase, y a los equipos que sacamos a partir de ella la llamamos

objetos.

Figura 2.2

2.3.1 CARACTERÍSTICAS BÁSICAS DE UN SISTEMA ORIENTADO A OBJETOS.

Para que un lenguaje o sistema sea considerado orientado a objetos,

debe cumplir las características de los siguientes apartados.

Abstracción.

La abstracción es aquella característica que nos permite identificar un

objeto a través de sus aspectos conceptuales.

Las propiedades de los objetos de una misma clase, pueden hacerlos tan

distintos que sea difícil reconocer que pertenecen a una clase idéntica. No

obstante, nosotros reconocemos a qué clase pertenecen, identificando además,

si se trata de la misma clase para ambos. Ello es posible gracias a la

abstracción.

51

Tomando como ejemplo dos objetos coche, uno deportivo y otro familiar;

su aspecto exterior es muy diferente, sin embargo, cuando pensamos en

cualquiera de ellos, sabemos que ambos pertenecen a la clase Coche, porque

realizamos una abstracción o identificación mental de los elementos comunes

que ambos tienen (ruedas, volante, motor, puertas, etc.).

Del mismo modo que se hace al identificar objetos reales, la abstracción

nos ayuda a la hora de desarrollar una aplicación, permitiéndonos identificar los

objetos que van a formar parte de nuestro programa, sin necesidad de disponer

aún de su implementación; nos basta con reconocer los aspectos conceptuales

que cada objeto debe resolver.

Por ejemplo, cuando se aborda el desarrollo de un programa de gestión

orientado a objetos, realizamos una abstracción de los objetos que

necesitaríamos para resolver los procesos del programa: un objeto Empleado,

para gestionar al personal de la empresa; un objeto Factura, para gestionar las

ventas realizadas de productos; un objeto Usuario, para verificar las personas

que utilizan la aplicación, etc.

Encapsulación.

La encapsulación establece la separación entre el interfaz del objeto y su

implementación, aportándonos dos ventajas fundamentales. Por una parte

proporciona seguridad al código de la clase, evitando accesos y modificaciones

no deseadas; una clase bien encapsulada no debe permitir la modificación

directa de una variable, ni ejecutar métodos que sean de uso interno para la

clase.

Por otro lado la encapsulación simplifica la utilización de los objetos, ya

que un programador que use un objeto, si este está bien diseñado y su código

correctamente escrito, no necesitará conocer los detalles de su implementación,

se limitará a utilizarlo.

52

Tomando un ejemplo real, cuando nosotros utilizamos un objeto Coche,

al presionar el acelerador, no necesitamos conocer la mecánica interna que

hace moverse al coche, sabemos que el método Acelerar del coche es lo que

tenemos que utilizar para desplazarnos, y simplemente lo usamos.

Pasando a un ejemplo en programación, si estamos creando un

programa de gestión y nos proporcionan un objeto Cliente que tiene el método

Alta, y sirve para añadir nuevos clientes a la base de datos, no precisamos

conocer el código que contiene dicho método, simplemente lo ejecutamos y

damos de alta a los clientes en nuestra aplicación.

Polimorfismo.

El polimorfismo determina que el mismo nombre de método, realizará

diferentes acciones según el objeto sobre el que sea aplicado. Al igual que

sucedía en la encapsulación, el programador que haga uso del objeto, no

necesita conocer los detalles de implementación de los métodos, se limita a

utilizarlos.

Pasando a un ejemplo real, tomamos dos objetos: Pelota y VasoCristal;

si ejecutamos sobre ambos el método Tirar, el resultado en ambos casos será

muy diferente; mientras que el objeto Pelota rebotará al llegar al suelo, el objeto

VasoCristal se romperá.

En un ejemplo aplicado a la programación, supongamos que disponemos

de los objetos Ventana y Fichero; si ejecutamos sobre ambos el método Abrir,

el resultado en Ventana será la visualización de una ventana en el monitor del

usuario; mientras que en el objeto Fichero, se tomará un fichero en el equipo

del usuario y se dejará listo para realizar sobre él operaciones de lectura o

escritura.

53

Herencia.

Se trata de la característica más importante de la POO, y establece que

partiendo de una clase a la que denominamos clase base, padre o superclase,

creamos una nueva clase denominada clase derivada, hija, o subclase. En esta

clase derivada dispondremos de todo el código de la clase base, más el nuevo

código propio de la clase hija, que escribamos para extender sus

funcionalidades. A su vez podemos tomar una clase derivada, creando una

nueva subclase a partir de ella.

Existen dos tipos de herencia: simple y múltiple. La herencia simple es

aquella en la que creamos una clase derivada a partir de una sola clase base,

mientras que la herencia múltiple nos permite crear una clase derivada a partir

de varias clases base. Como ejemplo real de herencia, podemos usar la clase

Coche como clase base; en ella reconocemos una serie de propiedades como

Motor, Ruedas, Volante, etc., y unos métodos como Arrancar, Acelerar, Frenar,

etc. Como clase derivada creamos CocheDeportivo, en la cuál, además de

todas las características mencionadas para la clase Coche, encontramos

propiedades y comportamiento específicos como ABS, Turbo, etc.

Un ejemplo basado en programación consistiría en disponer de la ya

conocida clase Empleado. Esta clase se ocupa, como ya sabemos, de las

operaciones de alta de empleados, pago de nóminas, etc.; pero en un momento

dado, surge la necesidad de realizar pagos a empleados que no trabajan en la

central de la empresa, ya que se trata de comerciales que pasan la mayor parte

del tiempo desplazándose. Para realizar dichos pagos usaremos Internet,

necesitando el número de tarjeta de crédito y la dirección e-mail del empleado.

Resolveremos esta situación creando la clase derivada Caber Empleado, que

hereda de la clase Empleado, en la que sólo tendríamos que añadir las nuevas

propiedades y métodos para las transacciones electrónicas, puesto que las

operaciones tradicionales ya las tendríamos disponibles por el mero hecho de

haber heredado de Empleado.

54

2.4 ARQUITECTURA DE APLICACIONES WEB. En los primeros tiempos de la computación cliente-servidor, cada aplicación

tenía su propio programa cliente y su interfaz de usuario, estos tenían que ser

instalados separadamente en cada estación de trabajo de los usuarios. Una

mejora al servidor, como parte de la aplicación, requería típicamente una

mejora de los clientes instalados en cada una de las estaciones de trabajo,

añadiendo un costo de soporte técnico y disminuyendo la eficiencia del

personal.

Los sistemas típicos cliente/servidor pertenecen a la categoría de las

aplicaciones de dos niveles. Requiere una interfaz de usuario que se instala y

corre en una PC o estación de trabajo; y que envía solicitudes a un servidor

para ejecutar operaciones complejas. Por ejemplo, una estación de trabajo

utilizada como cliente puede correr una aplicación de interfaz de usuario que

interroga a un servidor central de bases de datos. En este tipo de aplicaciones

el peso del cálculo recae en el cliente, mientras que el servidor hace la parte

menos pesada, y eso que los clientes suelen ser máquinas menos potentes que

los servidores.

Al hablar del desarrollo de aplicaciones Web resulta adecuado

presentarlas dentro de las aplicaciones multinivel. La arquitectura de las

aplicaciones Web suelen presentar un esquema de tres niveles (ver figura 2.3).

El primer nivel consiste en la capa de presentación que incluye no sólo el

navegador, sino también el servidor Web que es el responsable de dar a los

datos un formato adecuado. El segundo nivel está referido habitualmente a

algún tipo de programa o script. Finalmente, el tercer nivel proporciona al

segundo los datos necesarios para su ejecución.

Una aplicación Web típica recogerá datos del usuario (primer nivel), los

enviará al servidor, que ejecutará un programa (segundo y tercer nivel) y cuyo

55

resultado será formateado y presentado al usuario en el navegador (primer nivel

otra vez).

ESQUEMA DE TRES NIVELES PARA APLICACIONES WEB.

Figura. 2.3

Ventajas de la Arquitectura Cliente/Servidor:

• El desarrollo de aplicaciones en un ambiente de dos capas es mucho más

rápido que en ambientes anteriores, pero no es necesariamente más rápido

que con el nuevo ambiente de tres capas.

• Las herramientas para el desarrollo con dos capas son robustas y

evaluadas. Las técnicas de prototipo se emplean fácilmente.

• Las soluciones de dos capas trabajan bien en ambientes no dinámicos

estables, pero no se ejecutan bien en organizaciones rápidamente

cambiantes.

Desventajas:

• Los ambientes de dos capas requieren control excesivo de las versiones y

demandan esfuerzo de distribución de la aplicación cuando se les hacen

cambios. Esto se debe al hecho de que la mayoría de la aplicación lógica

existe en la estación de trabajo del cliente.

56

• La seguridad del sistema en un diseño de dos capas es compleja y a

menudo requiere administración de las bases de datos; esto es debido al

número de dispositivos con acceso directo al ambiente de esas bases de

datos.

• Las herramientas del cliente y de la base de datos, utilizadas en diseños de

dos capas, constantemente están cambiando. La dependencia a largo plazo

de cualquier herramienta, puede complicar el escalamiento futuro o las

implementaciones.

Ventajas de la Arquitectura Web:

• Las llamadas de la interfaz del usuario en la estación de trabajo, al servidor

de capa intermedia, son más flexibles que en el diseño de dos capas, ya que

la estación sólo necesita transferir parámetros a la capa intermedia.

• Con la arquitectura de tres capas, la interfaz del cliente no es requerida para

comprender o comunicarse con el receptor de los datos. Por lo tanto, esa

estructura de los datos puede ser modificada sin cambiar la interfaz del

usuario en la PC.

• El código de la capa intermedia puede ser reutilizado por múltiples

aplicaciones si está diseñado en formato modular. Esto puede reducir los

esfuerzos de desarrollo y mantenimiento, así como los costos de migración.

• La separación de roles en tres capas, hace más fácil reemplazar o modificar

una capa sin afectar a los módulos restantes.

• Separando la aplicación de la base de datos, hace más fácil utilizar nuevas

tecnologías de agrupamiento y balance de cargas.

• Separando la interfaz del usuario de la aplicación, libera de gran

procesamiento a la estación de trabajo y permite que las actualizaciones de

la aplicación sean centralizadas en el servidor de aplicaciones.

57

Desventajas:

• Los ambientes de tres capas pueden incrementar el tráfico en la red y

requerir más balance de carga y tolerancia a las fallas.

• Los exploradores actuales no son todos iguales. La estandarización entre

diferentes proveedores ha sido lenta en desarrollarse. Muchas

organizaciones son forzadas a escoger uno en lugar de otro, mientras que

cada uno ofrece sus propias y distintas ventajas.

La arquitectura MVC y Model 2.

La arquitectura Model-View-Controller (MVC) surgió como patrón

arquitectónico para el desarrollo de interfaces gráficos de usuario en entornos

Smalltalk. Su concepto se basaba en separar el modelo de datos de la

aplicación de su representación de cara al usuario y de la interacción de éste

con la aplicación, mediante la división de la aplicación en tres partes

fundamentales:

• El modelo, que contiene la lógica de negocio de la aplicación.

• La vista, que muestra al usuario la información que éste necesita.

• El controlador, que recibe e interpreta la interacción del usuario, actuando

sobre modelo y vista de manera adecuada para provocar cambios de estado

en la representación interna de los datos, así como en su visualización.

Sun Microsystems, creadora de la plataforma Java, acuñó el término

Model 2 para referirse al modelo arquitectural recomendado para las

aplicaciones Web desarrolladas sobre J2EE.

La mencionada arquitectura consiste en el desarrollo de una aplicación

según el patrón Model-View-Controller, pero especificando que el controlador

debe estar formado por un único servlet, que centralice el control de todas las

peticiones al sistema, y que basándose en la URL de la petición HTTP y en el

estado actual del sistema, derive la gestión y control de la petición a una

58

determinada acción de entre las registradas en la capa controlador. Esta

centralización del controlador en un único punto de acceso se conoce como

patrón front controller.

Las ventajas que este patrón ofrece provienen de la capacidad de

gestionar en un único punto la aplicación de filtros a las peticiones, las

comprobaciones de seguridad, la realización de logs, etc.

La aplicación del patrón MVC ha demostrado ser muy apropiada para las

aplicaciones Web y especialmente adaptarse bien a las tecnologías

proporcionadas por la plataforma J2EE, de manera que:

• El modelo, conteniendo lógica de negocio, sería modelado por un conjunto

de clases Java, existiendo dos claras alternativas de implementación,

utilizando objetos java tradicionales llamados POJOs (Plain Old Java

Objects) o bien utilizando EJB (Enterprise JavaBeans) en sistemas con unas

mayores necesidades de concurrencia o distribución.

• La vista proporcionará una serie de páginas web dinámicamente al cliente,

siendo para él simples páginas HTML. Existen múltiples frameworks que

generan estas páginas web a partir de distintos formatos, siendo el más

extendido el de páginas JSP (JavaServer Pages), que mediante un conjunto

de tags XML proporcionan un interfaz sencillo y adecuado a clases Java y

objetos proporcionados por el servidor de aplicaciones. Esto permite que

sean sencillas de desarrollar por personas con conocimientos de HTML.

Entre estos tags tienen mención especial la librería estándar JSTL

(JavaServer Pages Standard Tag Library) que proporciona una gran

funcionalidad y versatilidad.

• El controlador en la plataforma J2EE se desarrolla mediante servlets, que

hacen de intermediarios entre la vista y el modelo, más versátiles que los

JSP para esta función al estar escritos como clases Java normales, evitando

59

mezclar código visual (HTML, XML...) con código Java. Para facilitar la

implementación de estos servlets también existe una serie de frameworks

que proporcionan soporte a los desarrolladores, entre los que cabe destacar

Struts, que con una amplia comunidad de usuarios se ha convertido en el

estándar de facto en este rol.

Con todo lo anterior, el funcionamiento de una aplicación Web J2EE que

utilice el patrón arquitectural MVC se puede descomponer en una serie de

pasos:

1. El usuario realiza una acción en su navegador, que llega al servidor

mediante una petición HTTP y es recibida por un servlet (controlador). Esa

petición es interpretada y se transforma en la ejecución de código java que

delegará al modelo la ejecución de una acción de éste.

2. El modelo recibe las peticiones del controlador, a través de un interfaz o

fachada que encapsulará y ocultará la complejidad del modelo al

controlador. El resultado de esa petición será devuelto al controlador.

3. El controlador recibe del modelo el resultado, y en función de éste,

selecciona la vista que será mostrada al usuario, y le proporcionará los

datos recibidos del modelo y otros datos necesarios para su transformación

a HTML. Una vez hecho esto el control pasa a la vista para la realización de

esa transformación.

4. En la vista se realiza la transformación tras recibir los datos del controlador,

elaborando la respuesta HTML adecuada para que el usuario la visualice.

60

Esta arquitectura de aplicaciones otorga varias ventajas clave al

desarrollo de aplicaciones Web, destacando:

• Al separar de manera clara la lógica de negocio (modelo) de la vista permite

la reusabilidad del modelo, de modo que la misma implementación de la

lógica de negocio que maneja una aplicación pueda ser usado en otras

aplicaciones, sean éstas Web o no.

• Permite una sencilla división de roles, dejando que sean diseñadores

gráficos sin conocimientos de programación o desarrollo de aplicaciones los

que se encarguen de la realización de la capa vista, sin necesidad de

mezclar código Java entre el código visual que desarrollen (tan sólo

utilizando algunos tags, no muy diferentes de los usados en el código

HTML).

2.5 MÉTODO DEL CICLO DE VIDA DE LOS SISTEMAS. Un ciclo de vida para un proyecto se compone de fases sucesivas

compuestas por tareas planificables. Según el modelo de ciclo de vida, la

sucesión de fases puede ampliarse con bucles de realimentación, de manera

que lo que conceptualmente se considera una misma fase se pueda ejecutar

más de una vez a lo largo de un proyecto, recibiendo en cada pasada de

ejecución aportaciones de los resultados intermedios que se van produciendo.

El modelo en espiral para la ingeniería del software ha sido desarrollado

para cubrir las mejores características tanto del ciclo de vida clásico, como de la

creación de prototipos, añadiendo al mismo tiempo un nuevo elemento: el

análisis de riesgo, que falta en esos paradigmas. El modelo, representado

mediante la espiral de la Figura 2.4 define cuatro actividades principales,

representadas por los cuatro cuadrantes de la figura:

61

Figura 2.4

1. Planeación y análisis: determinación de objetivos, alternativas y

restricciones.

2. Diseño: análisis de alternativas e identificación/resolución de riesgos.

3. Implementación: desarrollo del producto de “siguiente nivel”

4. Evaluación: valoración de los resultados de la implementación.

Un aspecto intrigante del modelo en espiral se hace evidente cuando

consideramos la dimensión radial representada en la Figura 2.4 Con cada

iteración alrededor de la espiral (comenzando en el centro y siguiendo hacia el

exterior), se construyen sucesivas versiones del software, cada vez más

completas. Durante la primera vuelta alrededor de la espiral se definen los

objetivos, las alternativas y las restricciones, y se analizan e identifican los

riesgos. Si el diseño indica que hay una incertidumbre en los requisitos, se

puede usar la creación de prototipos en el cuadrante de ingeniería para dar

asistencia tanto al encargado del desarrollo como al cliente. Se pueden usar

simulaciones y otros modelos para definir más el problema y refinar los

requisitos.

62

El cliente evalúa el trabajo de implementación (cuadrante de evaluación)

y sugiere modificaciones. En base a los comentarios del cliente se produce la

siguiente fase de planificación y de análisis de riesgo. En cada bucle alrededor

de la espiral, la culminación del análisis de riesgo resulta en una decisión de

“seguir o no seguir”. Si los riesgos son demasiado grandes, se puede dar por

terminado el proyecto.

Sin embargo, en la mayoría de los casos, se sigue avanzando alrededor

del camino de la espiral, y ese camino lleva a los desarrolladores hacia fuera,

hacia un modelo más completo del sistema, y al final, al propio sistema

operacional. Cada vuelta alrededor de la espiral requiere ingeniería (cuadrante

inferior derecho), que se puede llevar a cabo mediante el enfoque del ciclo de

vida clásico o de la creación de prototipos. Debe tenerse en cuenta que el

número de actividades de desarrollo que ocurren en el cuadrante inferior

derecho aumenta al alejarse del centro de la espiral.

El paradigma del modelo en espiral para la ingeniería del software es

actualmente el enfoque más realista para el desarrollo de software y de

sistemas a gran escala. Utiliza un enfoque “evolutivo” para la ingeniería del

software, permitiendo al desarrollador y al cliente entender y reaccionar a los

riesgos en reducción del riesgo, pero lo que es más importante, permite a quien

lo desarrolla aplicar el enfoque de creación de prototipos en cualquier etapa de

la evolución del producto. Mantiene el enfoque sistemático correspondiente a

los pasos sugeridos por el ciclo de vida clásico, pero incorporándola dentro de

un marco de trabajo interactivo que refleja de forma más realista el mundo real.

El modelo en espiral demanda una consideración directa de riesgos técnicos en

todas las etapas del proyecto y, si se aplica adecuadamente, debe reducir los

riesgos antes de que se conviertan en problemáticos.

63

Al igual que otros paradigmas, el modelo en espiral no es la panacea.

Puede ser difícil convencer a grandes clientes (particularmente en situaciones

bajo contrato) de que el enfoque evolutivo es controlable. Requiere una

considerable habilidad para la valoración del riesgo, y cuenta con esta habilidad

para el éxito. Si no se descubre un riesgo importante, indudablemente surgirán

problemas. Por último, el modelo en sí mismo es relativamente nuevo y no se

ha usado tanto como el ciclo de vida o la creación de prototipos. Pasarán unos

cuantos años antes de que se pueda determinar con absoluta certeza la

eficacia de este importante nuevo paradigma.

Planeación y análisis.

• Investigación preliminar. Recibe este nombre la investigación que obtiene su información de la

actividad intencional realizada por el investigador y que se encuentra dirigida a

modificar la realidad con el propósito de crear el fenómeno mismo que se

indaga, y así poder observarlo. Es donde se recopilara la información que hace

referencia a la institución que se le desarrollará el software y la necesidad que

ésta tiene del mismo.

• Determinación de requerimientos. El analista conversa con varias personas para reunir detalles

relacionados con los procesos de la empresa. Se emplean cuestionarios para

obtener información cuando no es posible entrevistar en forma personal a los

miembros de la organización. Las investigaciones detalladas requieren el

estudio de manuales y reportes, observaciones condiciones reales con el de

comprender el proceso en su totalidad.

Diseño. El diseño es el primer paso en la fase de desarrollo de cualquier producto

o sistema de ingeniería. El objetivo del diseñador es producir un modelo o

64

representación de una entidad que se construirá posteriormente. El proceso

combina iterativamente la intuición y los criterios basados en la experiencia, un

conjunto principios para guiar la evolución del modelo, y un conjunto de criterios

que permiten juzgar la calidad. Para poder desarrollar el sistema es necesario

ocupar distintas herramientas de desarrollo tales como leguajes de

programación, gestores de base de datos y herramientas de modelado.

• Diseño lógico. Los analistas de sistemas comienza el proceso de diseño identificando

los reportes y demás salidas que debe producir el sistema. Los diseñadores

hacen un bosquejo del formato que esperan que aparezca cuando el sistema

este terminado. Los diseñadores son los responsables de dar a los

programadores las especificaciones de software completas y claras.

La etapa de diseño lógico proporcionará los detalles que establecen la

forma en la que el sistema cumplirá con los requerimientos identificados durante

la fase de análisis

• Diseño físico. Hasta esta etapa del diseño lo que se ha hecho es modelar los

requerimientos de la aplicación por medio de sus especificaciones funcionales

hasta encontrar distintos aspectos de cómo trabaja la aplicación por fuera.

Ahora es necesario considerar como la aplicación trabaja por dentro, o más

precisamente como las tecnologías y arquitecturas que se han elegido van a

impactar en el diseño.

Implementación y evaluación. La implantación es el proceso de verificar e instalar nuevo equipo

entrenar a los usuarios, instalar la aplicación y construir todos los archivos de

datos necesarios para utilizarla. Las organizaciones cambian con el paso del

tiempo, por lo tanto debe darse mantenimiento a las aplicaciones; realizar

65

cambios y modificaciones en el software, archivos o procedimientos para

satisfacer las nuevas necesidades de los usuarios. La implantación es un

proceso en constante evolución. La evaluación de un sistema se lleva a cabo

para identificar puntos débiles y fuertes. La evaluación ocurre a lo largo de

cualquiera de las siguientes dimensiones: evaluación operacional, impacto

organizacional, opinión de los administradores y desempeño del desarrollo.

2.6 CONCEPTUALIZACIONES SOBRE METODOLOGÍA DE LA INVESTIGACIÓN.

Es necesario tener claro una definición de metodología para poderla

aplicar correctamente. Para el caso, metodología se define como un proceso

que, mediante la aplicación del método científico, trata de obtener información

relevante y fidedigna, para entender, verificar, corregir o aplicar el conocimiento.

Formulación del problema. Formular un problema es caracterizarlo, definirlo, enmarcarlo

teóricamente, sugerir propuestas de solución para ser demostradas, establecer

unas fuentes de información y unos métodos para recoger y procesar dicha

información. La caracterización o definición del problema nos conduce otorgarle

un título, en el cual de la manera más clara y denotativa indiquemos los

elementos que le son esenciales.

Fase exploratoria:

Ninguna investigación parte de cero, de ahí que, cuando se comienzan

un proyecto, deba consultarse informarse sobre lo ya investigado sobre el tema

y realizar un primer contacto con el problema a estudiar. Existe una tarea de

búsqueda de referencias, consulta bibliográfica y acercamiento preliminar a la

realidad objeto de estudio. Esto es lo que suele denominarse fase exploratoria,

cuyo propósito es de permitir al investigador familiarizarse e interiorizarse con

66

parte de los conocimientos existentes dentro del campo ámbito que es objeto de

investigación.

• Fuentes primarias. Una fuente primaria es aquella que provee un testimonio o evidencia

directa sobre el tema de investigación. Las fuentes primarias son escritas

durante el tiempo que se está estudiando o por la persona directamente

envuelta en el evento. La naturaleza y valor de la fuente no puede ser

determinado sin referencia al tema o pregunta que se está tratando de

contestar. Las fuentes primarias ofrecen un punto de vista desde adentro del

evento en particular o periodo de tiempo que se está estudiando.

• Fuentes secundarias. Estas fuentes se ocuparán para interpretar y analizar las fuentes

primarias. Las fuentes secundarias están distanciadas de las fuentes

primarias. Los tipos de fuentes secundarias que se utilizarán serán las

documentales, incluyendo libros, tesis, monografías y material en medios

electrónicos.

Diseño de la investigación.

• Población. Constituye la totalidad de un grupo de elementos u objetos que se quiere

investigar, es el conjunto de todos los casos que concuerdan con lo que se

pretende investigar.

• Delimitación de la población. Se delimita como población sujeta a estudio a todas aquellas personas

que tengan interacción con el sistema, y que sean beneficiados con la

implementación del mismo.

67

• Muestra. La muestra es un subconjunto de la población o una parte

representativa, y puede ser de diferentes tipos dependiendo de la forma que

seleccione a la población, tales como: muestra probabilística, muestra aleatoria

simple, muestra estratificada, muestra por cuotas o proporcionales, muestra no

probabilística, muestra intencionada.

Técnicas e instrumentos de investigación.

• Técnica documental. Este tipo de investigación es la que se realiza, como su nombre lo indica,

apoyándose en fuentes de carácter documental, esto es, en documentos de

cualquier especie. Esta técnica permite la recopilación de información para la

elaboración del marco teórico del trabajo de investigación.

• Técnica de Observación. Es el procedimiento empírico por excelencia, el más antiguo; consiste

básicamente en utilizar los sentidos para observar los hechos, realidades

sociales y a las personas en su contexto cotidiano. Para que dicha observación

tenga validez es necesario que sea intencionada e ilustrada.

Para poder aplicar la técnica, se tendrá que observar detenidamente los

distintos procesos manuales que se realizan actualmente y tomar notas

detalladas de los aspectos más relevantes de cada uno, la experiencia que

posee cada integrante del grupo de investigación será de gran importancia para

poder captar los más mínimos detalles.

• Entrevista. La entrevista consiste en una conversación entre dos o más personas,

sobre un tema determinado de acuerdo a ciertos esquemas o pautas

determinadas.

68

Se utiliza este método de investigación para tener un mayor

acercamiento con los potenciales usuarios del sistema y de esta forma recopilar

los datos necesarios para poder desarrollar el sistema. La entrevista

generalmente es aplicada de forma individual a la persona de interés y puede

ser de forma dirigida.

• Cuestionario. Es un proceso estructurado de recopilación de información a través de la

complementación de una serie de preguntas.

Con el cuestionario a diferencia de la entrevista se puede abarcar un

mayor número de sujetos de estudios y de esta forma poder conseguir un

mayor número de opiniones sobre lo que esperan del sistema y las necesidades

que este tiene que solventar.