|
Categorias
|
Chat´s en el lenguaje Java
INTRODUCCIÓN “Comunicarse,
para el hombre, es tan natural e imprescindible como respirar. Y durante las últimas
décadas del siglo veinte, las diversas formas de hacerlo han sufrido cambios
tan profundos y vertiginosos que sus redes constituyen la nueva atmósfera del
planeta. La comunicación es, pues, un fenómeno en el que convergen todas las
ciencias del hombre y los más increíbles avances técnicos.”[1] La
presente investigación tiene como finalidad dar a conocer la importancia del
lenguaje Java en la elaboración de los sitios de charla IRC (mejor conocido
como CHAT)[2],
aprovechando todas las ventajas que ofrece este lenguaje en la principal red de
comunicación mundial: INTERNET (la red de redes, que consiste en el conjunto de
computadoras conectadas entre si para dar y compartir información). En
el primer capitulo se expone las características más importantes, que hacen
del e lenguaje JAVA el más utilizado por los programadores en el mundo, así
como una breve historia desde su aparición en la red hasta nuestros días. El
segundo capitulo se refiere a la forma de comunicación de este lenguaje con la
red de redes (Internet), así como la arquitectura Cliente/Servidor y la
seguridad que se tiene utilizando este lenguaje. En
el tercer capítulo, se plasma el aspecto histórico de los Chat´s como medio
de comunicación, sus características, formas de comunicación, elementos que
lo componen y aplicaciones. El
cuarto y ultimo capitulo se enfoca a la evolución de los Chat´s, que se ha
hecho, que se esta haciendo y que falta por hacer. Lo
aquí expuesto es en beneficio para que los estudiantes tengan conocimientos de
que existe un lenguaje seguro y fácil de aprender que facilita la comunicación
entre personas utilizando el Internet. CAPITULO
I INTRODUCCIÓN A JAVA ORIGEN
DE JAVA Sun Microsystems,3
líder en servidores para Internet, uno de cuyos lemas desde hace mucho tiempo
es "the network is the computer" (lo que quiere dar a entender que el
verdadero ordenador es la red en su conjunto y no cada máquina individual), es
quien ha desarrollado el lenguaje Java, en un intento de resolver simultáneamente
todos los problemas que se le plantean a los desarrolladores de software por la
proliferación de arquitecturas incompatibles, tanto entre las diferentes máquinas
como entre los diversos sistemas operativos y sistemas de ventanas que
funcionaban sobre una misma máquina, añadiendo la dificultad de crear
aplicaciones distribuidas en una red como Internet. Hace algunos
años, Sun Microsystems decidió intentar introducirse en el mercado de la
electrónica de consumo y desarrollar programas para pequeños dispositivos
electrónicos. Tras unos comienzos dudosos, Sun decidió crear una filial,
denominada FirstPerson Inc., para dar margen de maniobra al equipo responsable
del proyecto. El mercado inicialmente previsto para los programas de FirstPerson
eran los equipos domésticos: microondas, tostadoras y, fundamentalmente,
televisión interactiva. Este mercado, dada la falta de pericia de los usuarios
para el manejo de estos dispositivos, requería unos interfaces mucho más cómodos
e intuitivos que los sistemas de ventanas que proliferaban en el momento. Otros requisitos
importantes a tener en cuenta eran la fiabilidad del código y la facilidad de
desarrollo. James Gosling, el miembro del equipo con más experiencia en
lenguajes de programación, decidió que las ventajas aportadas por la
eficiencia de C++ no compensaban el gran costo de pruebas y depuración. Gosling
había estado trabajando en su tiempo libre en un lenguaje de programación que
él había llamado Oak, el cual, aún partiendo de la sintaxis de C++, intentaba
remediar las deficiencias que iba observando. Los lenguajes al
uso, como C o C++, deben ser compilados para un chip, y si se cambia el chip,
todo el software debe compilarse de nuevo. Esto encarece mucho los desarrollos y
el problema es especialmente acusado en el campo de la electrónica de consumo.
La aparición de un chip más barato y, generalmente, más eficiente, conduce
inmediatamente a los fabricantes a incluirlo en las nuevas series de sus cadenas
de producción, por pequeña que sea la diferencia en precio ya que,
multiplicada por la tirada masiva de los aparatos, supone un ahorro
considerable. Por tanto, Gosling decidió mejorar las características de Oak y
utilizarlo. El primer
proyecto en que se aplicó este lenguaje recibió el nombre de proyecto Green y
consistía en un sistema de control completo de los aparatos electrónicos y el
entorno de un hogar. Para ello se construyó un ordenador experimental
denominado *7 (Star Seven). El sistema presentaba una interfaz basada en la
representación de la casa de forma animada y el control se llevaba a cabo
mediante una pantalla sensible al tacto. En el sistema aparecía Duke, la actual
mascota de Java. Posteriormente
se aplicó a otro proyecto denominado VOD (Video On Demand) en el que se
empleaba como interfaz para la televisión interactiva. Ninguno de estos
proyectos se convirtió nunca en un sistema comercial, pero fueron desarrollados
enteramente en un Java primitivo y fueron como su bautismo de fuego. Una vez que
en Sun se dieron cuenta de que a corto plazo la televisión interactiva no iba a
ser un gran éxito, urgieron a FirstPerson a desarrollar con rapidez nuevas
estrategias que produjeran beneficios. No lo consiguieron y FirstPerson cerró
en la primavera de 1994. Pese a lo
que parecía ya un olvido definitivo, Bill Joy, cofundador de Sun y uno de los
desarrolladores principales del Unix de Berkeley, juzgó que Internet podría
llegar a ser el campo de juego adecuado para disputar a Microsoft su primacía
casi absoluta en el terreno del software, y vio en Oak el instrumento idóneo
para llevar a cabo estos planes. Tras un cambio de nombre y modificaciones de
diseño, el lenguaje Java fue presentado en sociedad en agosto de 1995. Lo mejor será
hacer caso omiso de las historias que pretenden dar carta de naturaleza a la
clarividencia industrial de sus protagonistas; porque la cuestión es si
independientemente de su origen y entorno comercial, Java ofrece soluciones a
nuestras expectativas. Porque tampoco vamos a desechar la penicilina aunque haya
sido su origen fruto de la casualidad. CARACTERÍSTICAS DE JAVA Las características
principales que nos ofrece Java respecto a cualquier otro lenguaje de programación,
son: Simple Java ofrece toda
la funcionalidad de un lenguaje potente, pero sin las características menos
usadas y más confusas de éstos. C++ es un lenguaje que adolece de falta de
seguridad, pero C y C++ son lenguajes más difundidos, por ello Java se diseñó
para ser parecido a C++ y así facilitar un rápido y fácil aprendizaje. Java elimina
muchas de las características de otros lenguajes como C++, para mantener
reducidas las especificaciones del lenguaje y añadir características muy útiles
como el garbage collector (reciclador de memoria dinámica). No es necesario
preocuparse de liberar memoria, el reciclador se encarga de ello y como es un
thread de baja prioridad, cuando entra en acción, permite liberar bloques de
memoria muy grandes, lo que reduce la fragmentación de la memoria. Java reduce
en un 50% los errores más comunes de programación con lenguajes como C y C++
al eliminar muchas de las características de éstos, entre las que destacan:
Aunque, en
realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya
que las clases son algo parecido. Además, el intérprete completo de Java
que hay en este momento es muy pequeño, solamente ocupa 215 Kb de RAM. Orientado
a objetos Java implementa la
tecnología básica de C++ con algunas mejoras y elimina algunas cosas para
mantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos
como objetos y con interfaces a esos objetos. Soporta las tres características
propias del paradigma de la orientación a objetos: encapsulación, herencia y
polimorfismo. Las plantillas de objetos son llamadas, como en C++, clases y sus
copias, instancias. Estas instancias, como en C++, necesitan ser construidas y
destruidas en espacios de memoria. Java
incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolución
dinámica de métodos. Esta característica deriva del lenguaje Objective C,
propietario del sistema operativo Next. En C++ se suele trabajar con librerías
dinámicas (DLLs) que obligan a recompilar la aplicación cuando se retocan las
funciones que se encuentran en su interior. Este inconveniente
es resuelto por Java mediante una interfaz específica llamada RTTI (RunTime
Type Identification) que define la interacción entre objetos excluyendo
variables de instancias o implementación de métodos. Las clases en Java tienen
una representación en el runtime que permite a los programadores interrogar por
el tipo de clase y enlazar dinámicamente la clase con el resultado de la búsqueda. Distribuido Java se ha
construido con extensas capacidades de interconexión TCP/IP. Existen librerías
de rutinas para acceder e interactuar con protocolos como http y ftp. Esto
permite a los programadores acceder a la información a través de la red con
tanta facilidad como a los ficheros locales. La verdad es que Java en sí
no es distribuido, sino que proporciona las librerías y herramientas para que
los programas puedan ser distribuidos, es decir, que se corran en varias máquinas,
interactuando. Robusto Java realiza
verificaciones en busca de problemas tanto en tiempo de compilación como en
tiempo de ejecución. La comprobación de tipos en Java ayuda a detectar
errores, lo antes posible, en el ciclo de desarrollo. Java obliga a la declaración
explícita de métodos, reduciendo así las posibilidades de error. Maneja la memoria
para eliminar las preocupaciones por parte del programador de la liberación o
corrupción de memoria. También implementa los arrays auténticos, en vez
de listas enlazadas de punteros, con comprobación de límites, para evitar la
posibilidad de sobrescribir o corromper memoria resultado de punteros que señalan
a zonas equivocadas. Estas características reducen drásticamente el tiempo de
desarrollo de aplicaciones en Java. Además, para
asegurar el funcionamiento de la aplicación, realiza una verificación de los
byte-codes, que son el resultado de la compilación de un programa Java. Es un código
de máquina virtual que es interpretado por el intérprete Java. No es el código
máquina directamente entendible por el hardware, pero ya ha pasado todas las
fases del compilador: análisis de instrucciones, orden de operadores, etc., y
ya tiene generada la pila de ejecución de órdenes. Java proporciona,
pues:
Arquitectura
neutral Para establecer
Java como parte integral de la red, el compilador Java compila su código a un
fichero objeto de formato independiente de la arquitectura de la máquina en que
se ejecutará. Cualquier máquina que tenga el sistema de ejecución (run-time)
puede ejecutar ese código objeto, sin importar en modo alguno la máquina en
que ha sido generado. Actualmente existen sistemas run-time para Solaris 2.x,
SunOs 4.1.x, Windows 95, Windows NT, Linux, Irix, Aix, Mac, Apple y
probablemente haya grupos de desarrollo trabajando en el porting a otras
plataformas. Ver figura 1.
Figura 1 El
código fuente Java se "compila" a un código de bytes de alto nivel
independiente de la máquina. Este código (byte-codes) está diseñado para
ejecutarse en una máquina hipotética que es implementada por un sistema
run-time, que sí es dependiente de la máquina. En una representación en que
tuviésemos que indicar todos los elementos que forman parte de la arquitectura
de Java sobre una plataforma genérica, obtendríamos una figura como la
siguiente (figura 2):
Figura 2 En
ella podemos ver que lo verdaderamente dependiente del sistema es la Máquina
Virtual Java (JVM) y las librerías fundamentales, que también nos permitirían
acceder directamente al hardware de la máquina. Además, habrá APIs de Java
que también entren en contacto directo con el hardware y serán dependientes de
la máquina, como ejemplo de este tipo de APIs podemos citar:
Seguro La seguridad en
Java tiene dos facetas. En el lenguaje, características como los punteros o el
casting implícito que hacen los compiladores de C y C++ se eliminan para
prevenir el acceso ilegal a la memoria. Cuando se usa Java para crear un
navegador, se combinan las características del lenguaje con protecciones de
sentido común aplicadas al propio navegador. El lenguaje C, por ejemplo,
tiene lagunas de seguridad importantes, como son los errores de alineación. Los
programadores de C utilizan punteros en conjunción con operaciones aritméticas.
Esto le permite al programador que un puntero referencie a un lugar conocido de
la memoria y pueda sumar (o restar) algún valor, para referirse a otro lugar de
la memoria. Si otros programadores conocen nuestras estructuras de datos pueden
extraer información confidencial de nuestro sistema. Con un lenguaje como C, se
pueden tomar números enteros aleatorios y convertirlos en punteros para luego
acceder a la memoria: printf(
"Escribe un valor entero: " ); scanf(
"%u",&puntero ); printf(
"Cadena de memoria: %s\n",puntero ); Otra laguna
de seguridad u otro tipo de ataque, es el Caballo de Troya. Se presenta un
programa como una utilidad, resultando tener una funcionalidad destructiva. Por
ejemplo, en UNIX se visualiza el contenido de un directorio con el comando ls.
Si un programador deja un comando destructivo bajo esta referencia, se puede
correr el riesgo de ejecutar código malicioso, aunque el comando siga haciendo
la funcionalidad que se le supone, después de lanzar su carga destructiva. Por ejemplo, después
de que el caballo de Troya haya enviado por correo el /etc/shadow a su creador,
ejecuta la funcionalidad de ls presentando el contenido del directorio. Se notará
un retardo, pero nada inusual. El código Java pasa muchos tests antes de
ejecutarse en una máquina. El código se pasa a través de un verificador de
byte-codes que comprueba el formato de los fragmentos de código y aplica un
probador de teoremas para detectar fragmentos de código ilegal -código que
falsea punteros, viola derechos de acceso sobre objetos o intenta cambiar el
tipo o clase de un objeto-. Si los byte-codes
pasan la verificación sin generar ningún mensaje de error, entonces sabemos
que: El código no
produce desbordamiento de operandos en la pila El tipo de los parámetros
de todos los códigos de operación son conocidos y correctos. No ha ocurrido
ninguna conversión ilegal de datos, tal como convertir enteros en punteros. El acceso a los
campos de un objeto se sabe que es legal: public, private, protected. No hay ningún
intento de violar las reglas de acceso y seguridad establecidas El Cargador
de Clases también ayuda a Java a mantener su seguridad, separando el espacio de
nombres del sistema de ficheros local, del de los recursos procedentes de la
red. Esto limita cualquier aplicación del tipo Caballo de Troya, ya que las
clases se buscan primero entre las locales y luego entre las procedentes del
exterior. Las clases
importadas de la red se almacenan en un espacio de nombres privado, asociado con
el origen. Cuando una clase del espacio de nombres privado accede a otra clase,
primero se busca en las clases predefinidas (del sistema local) y luego en el
espacio de nombres de la clase que hace la referencia. Esto imposibilita que una
clase suplante a una predefinida. En resumen, las
aplicaciones de Java resultan extremadamente seguras, ya que no acceden a zonas
delicadas de memoria o de sistema, con lo cual evitan la interacción de ciertos
virus. Java no posee una semántica específica para modificar la pila de
programa, la memoria libre o utilizar objetos y métodos de un programa sin los
privilegios del kernel del sistema operativo. Además, para evitar
modificaciones por parte de los crackers de la red, implementa un método
ultraseguro de autentificación por clave pública. El Cargador de Clases puede
verificar una firma digital antes de realizar una instancia de un objeto. Por
tanto, ningún objeto se crea y almacena en memoria, sin que se validen los
privilegios de acceso. Es decir, la seguridad se integra en el momento de
compilación, con el nivel de detalle y de privilegio que sea necesario. Dada, pues
la concepción del lenguaje y si todos los elementos se mantienen dentro del estándar
marcado por Sun, no hay peligro. Java imposibilita, también, abrir ningún
fichero de la máquina local (siempre que se realizan operaciones con archivos,
éstas trabajan sobre el disco duro de la máquina de donde partió el applet),
no permite ejecutar ninguna aplicación nativa de una plataforma e impide que se
utilicen otros ordenadores como puente, es decir, nadie puede utilizar nuestra máquina
para hacer peticiones o realizar operaciones con otra. Además, los intérpretes
que incorporan los navegadores de la Web son aún más restrictivos. Bajo estas
condiciones (y dentro de la filosofía de que el único ordenador seguro es el
que está apagado, desenchufado, dentro de una cámara acorazada en un bunker y
rodeado por mil soldados de los cuerpos especiales del ejército), se puede
considerar que Java es un lenguaje seguro y que los applets están libres de
virus. Respecto a la seguridad del código fuente, no ya del lenguaje, JDK
proporciona un desemsamblador de byte-code, que permite que cualquier programa
pueda ser convertido a código fuente, lo que para el programador significa una
vulnerabilidad total a su código. Utilizando javap
no se obtiene el código fuente original, pero sí desmonta el programa
mostrando el algoritmo que se utiliza, que es lo realmente interesante. La
protección de los programadores ante esto es utilizar llamadas a programas
nativos, externos (incluso en C o C++) de forma que no sea descompilable todo el
código; aunque así se pierda portabilidad. Esta es otra de las cuestiones que
Java tiene pendientes. Portable Más allá de la
portabilidad básica por ser de arquitectura independiente, Java implementa
otros estándares de portabilidad para facilitar el desarrollo. Los enteros son
siempre enteros y además, enteros de 32 bits en complemento a 2. Además, Java
construye sus interfaces de usuario a través de un sistema abstracto de
ventanas de forma que las ventanas puedan ser implantadas en entornos Unix, Pc o
Mac. Interpretado El intérprete
Java (sistema run-time) puede ejecutar directamente el código objeto. Enlazar
(linkar) un programa, normalmente, consume menos recursos que compilarlo, por lo
que los desarrolladores con Java pasarán más tiempo desarrollando y menos
esperando por el ordenador. No obstante, el compilador actual del JDK es
bastante lento. Por ahora, que todavía no hay compiladores específicos de Java
para las diversas plataformas, Se dice que
Java es de 10 a 30 veces más lento que C, y que tampoco existen en Java
proyectos de gran envergadura como en otros lenguajes. La verdad es que ya hay
comparaciones ventajosas entre Java y el resto de los lenguajes de programación,
y una ingente cantidad de folletos electrónicos que supuran fanatismo en favor
y en contra de los distintos lenguajes contendientes con Java. Lo que se suele
dejar de lado en todo esto, es que primero habría que decidir hasta que punto
Java, un lenguaje en pleno desarrollo y todavía sin definición definitiva, está
maduro como lenguaje de programación para ser comparado con otros; como por
ejemplo con Smalltalk, que lleva más de 20 años en el mercado. La verdad es
que Java para conseguir ser un lenguaje independiente del sistema operativo y
del procesador que incorpore la máquina utilizada, es tanto interpretado como
compilado. Y esto no es ningún contrasentido, me explico, el código fuente
escrito con cualquier editor se compila generando el byte-code. Este código
intermedio es de muy bajo nivel, pero sin alcanzar las instrucciones máquina
propias de cada plataforma y no tiene nada que ver con el p-code de Visual
Basic. El byte-code corresponde al 80% de las instrucciones de la aplicación.
Ese mismo código es el que se puede ejecutar sobre cualquier plataforma. Para
ello hace falta el run-time, que sí es completamente dependiente de la máquina
y del sistema operativo, que interpreta dinámicamente el byte-code y añade el
20% de instrucciones que faltaban para su ejecución. Con este sistema es fácil
crear aplicaciones multiplataforma, pero para ejecutarlas es necesario que
exista el run-time correspondiente al sistema operativo utilizado. Multithreaded Al ser
multithreaded (multihilvanado, en mala traducción), Java permite muchas
actividades simultáneas en un programa. Los threads (a veces llamados, procesos
ligeros), son básicamente pequeños procesos o piezas independientes de un gran
proceso. Al estar los threads contruidos en el lenguaje, son más fáciles de
usar y más robustos que sus homólogos en C o C++. El beneficio
de ser miltithreaded consiste en un mejor rendimiento interactivo y mejor
comportamiento en tiempo real. Aunque el comportamiento en tiempo real está
limitado a las capacidades del sistema operativo subyacente (Unix, Windows,
etc.), aún supera a los entornos de flujo único de programa (single-threaded)
tanto en facilidad de desarrollo como en rendimiento. Cualquiera que haya
utilizado la tecnología de navegación concurrente, sabe lo frustrante que
puede ser esperar por una gran imagen que se está trayendo. En Java, las imágenes
se pueden ir trayendo en un thread independiente, permitiendo que el usuario
pueda acceder a la información en la página sin tener que esperar por el
navegador. Dinamico Java se beneficia
todo lo posible de la tecnología orientada a objetos. Java no intenta conectar
todos los módulos que comprenden una aplicación hasta el tiempo de ejecución.
Las librería nuevas o actualizadas no paralizarán las aplicaciones actuales
(siempre que mantengan el API anterior). Ver figura 3.
Java también
simplifica el uso de protocolos nuevos o actualizados. Si su sistema ejecuta una
aplicación Java sobre la red y encuentra una pieza de la aplicación que no
sabe manejar, tal como se ha explicado en párrafos anteriores, Java es capaz de
traer automáticamente cualquiera de esas piezas que el sistema necesita para
funcionar. Java, para evitar que los módulos de byte-codes o los objetos o
nuevas clases, haya que estar trayéndolos de la red cada vez que se necesiten,
implementa las opciones de persistencia, para que no se eliminen cuando de
limpie la caché de la máquina. ¿Cuál es
la ventaja de todo esto?¿Qué gano con Java?
Pero
también se tienen algunas limitantes:
Pero en
general Java posee muchas ventajas y se pueden hacer cosas muy interesantes con
esto. Hay que prestar especial atención a lo que está sucediendo en el mundo
de la computación, a pesar de que Java es relativamente nuevo, posee mucha
fuerza y es tema de moda en cualquier medio computacional. Muchas personas
apuestan a futuro y piensan en Java. Programación
Orientada a Objetos (POO) Junto con el
paradigma de la orientación a procedimientos, son las dos filosofías generales
de diseño más importantes. A diferencia de la orientación a procedimientos
(OP), la orientación a objetos (OO) no concibe los procesos como una secuencia
de procedimientos con su entrada y salida sino que se basa en un conjunto de
objetos interactuando. Ver figura 4.
Veamos a
continuación los aspectos más destacados de esta filosofía general de diseño. 1.
Clases y objetos Es importante
distinguir entre los conceptos de clase y objeto: Clase:
Es un modelo abstracto de un tipo de objeto. Define sus métodos y atributos. Objeto:
Es una instancia de una clase, es decir, la implementación con valores de un
modelo abstracto.
Las clases no son
entidades independientes sino que se agrupan jerárquicamente heredando características
y atributos. Cada instancia o implementación real de una clase constituirá un
nuevo objeto por lo que se pueden crear infinitos objetos distintos a partir de
una sola clase. 2.
Encapsulación Se define como el
proceso de empaquetar juntos los métodos y los datos en un objeto. El objeto se
encarga de ocultar sus datos al resto de objetos. La encapsulación permite una
seguridad mayor en el acceso a los datos ya que este acceso depende directamente
de cada objeto. Asimismo, permite abstraer los detalles internos de
funcionamiento del objeto. 3.
Intercambio de mensajes Los objetos se
comunican entre sí mediante mensajes de invocación a métodos, figura 5:
4. Herencia Es el concepto que
define la adopción de todas las características de una clase por parte de otra
clase que es definida como descendiente o heredera de la primera. Ver figura 6.
La principal
consecuencia de la herencia es la posibilidad de reutilizar clases ya que se
pueden crear nuevas a partir de las ya creadas. La herencia puede
ser de dos tipos, simple si sólo es
posible heredar características de una sola clase, o múltiple
si se pueden heredar características de varias clases. 5.
Polimorfismo Genéricamente, el
polimorfismo es la capacidad de tomar varias formas. Aplicado a los
lenguajes de programación, debemos considerar dos tipos de polimorfismo:
polimorfismo funcional y polimorfismo de datos. Polimorfismo
funcional o sobrecarga. El polimorfismo
funcional es la posibilidad de referenciar, mediante el mismo identificador,
diferentes funciones. La mayoría de los lenguajes de programación presentan
sobrecarga de operadores. En algunos, también las funciones de entrada/salida
están sobrecargadas, pero sólo unos pocos admiten el polimorfismo en funciones
definidas por el programador. En los Lenguajes
Orientados a Objetos, las operaciones se aplican siempre a un objeto. El método
que se ejecuta viene determinado por la clase a la que pertenece el objeto que
recibe el mensaje. Por este motivo no hay limitaciones a la sobrecarga de
funciones definidas en clases distintas. En Smalltalk, dado que no se realiza
comprobación de tipos, ésta es la única posibilidad de sobrecarga, puesto que
no es posible distinguir dos métodos en base a las clases de los argumentos. Así: p
distancia: q hace referencia a
métodos distintos dependiendo de si p es un Punto o un Segmento, pero el método que se ejecuta no
depende de la clase a la que pertenece q.
En Java, sí se permite la sobrecarga dentro de una clase. Ej. Los
constructores de una clase. Sin embargo, dado que Java hace en ocasiones
conversiones de tipos implícitas, ciertas sobrecargas no están permitidas: class
Sobrecargada { int
valor; void
setValor ( int v ) { valor = v; } void
setValor (float v) { valor = v; } // Error int
getValor ( ) { return valor; } float
getValor ( ) { return ( float ) valor; } // Error Polimorfismo
de datos. El polimorfismo de
datos es la capacidad de un identificador para hacer referencia a instancias de
distintas clases. El polimorfismo de datos es una característica de los
lenguajes orientados a objetos. El polimorfismo de
datos aumenta las posibilidades de reutilización de código, favoreciendo la
construcción de módulos como extensión de otros ya existentes. En los
lenguajes con polimorfismo de datos es necesario distinguir entre: tipo
estático: tipo con el que se declara una referencia o variable. tipo
dinámico: tipo de objeto asociado a una referencia en un momento dado. En muchos
lenguajes, el polimorfismo de datos ésta limitado por las relaciones de
herencia: el tipo dinámico ha de ser un descendiente del tipo estático. Las
razones son dos: Cualquier
instancia de una clase es instancia de las clases antecesoras. p
: Punto; r
: Particula; p
:=r; Cualquier
instancia de una clase posee los atributos declarados por las clases antecesoras
y entiende los métodos definidos por ellas. x
:= p.abscisa; p.distancia(r); 1.4 FUTURO DE JAVA Existen muchas críticas
a Java debido a su lenta velocidad de ejecución, aproximadamente unas 20 veces
más lento que un programa en lenguaje C. Sun está trabajando intensamente en
crear versiones de Java con una velocidad mayor. El problema
fundamental de Java es que utiliza bytecodes para solventar los problemas de
portabilidad, que posteriormente en cada máquina se tendrán que transformar en
código máquina, lo que a lenta considerablemente el proceso de ejecución. La solución que
se deriva de esto parece bastante obvio: fabricar ordenadores capaces de
comprender directamente los bytecodes, sería una máquina que utilizara Java
como sistema operativo y que no requeriría en principio de disco duro porque
regiría sus recursos de la red4.
La primera gran
empresa que se ha dado cuenta de todo esto y ha apostado en esto ha sido Oracle,
que en enero de 1996 presentó en Japón su primer NC (Network Computer), basado
en un procesador RISC con 8 Mbytes de RAM. Tras Oracle, han sido compañías del
tamaño de Sun, Apple e IBM las que han anunciado desarrollos similares. Por ahora, toda
esta tecnología está comenzando a desarrollarse, aunque en la actualidad los
anchos de banda y el costo de las conexiones no favorecen demasiado estos
ordenadores. No obstante todos estos problemas desaparecerán a corto plazo, y
la actitud de Sun de mantener un sistema transparente y accesible a cualquier
programador parece que van a ser determinantes en la comercialización de este
tipo de sistemas. La principal
empresa en el mundo del software, Microsoft, que en los comienzos de Java no
estaba a favor de su utilización, ha licenciado Java, lo ha incluido en
Internet Explorer 3.0 y posteriores, y ha lanzado un entorno de desarrollo para
Java, que se denomina Visual J++. El único problema
aparente es la seguridad para que Java se pueda utilizar para transacciones críticas.
Sun va a apostar por firmas digitales, que será clave en el desarrollo no sólo
de Java, sino de toda Internet. CAPITULO
II COMUNICACIÓN EN JAVA 2.1
MODELO DE COMUNICACIONES CON JAVA En Java, crear una
conexión socket TCP/IP se realiza directamente con el paquete java.net. A
continuación mostramos un diagrama de lo que ocurre en el lado del cliente y
del servidor (figura 7):
El modelo de
sockets más simple es: El servidor
establece un puerto y espera durante un cierto tiempo (timeout segundos), a que
el cliente establezca la conexión. Cuando el cliente solicite una conexión, el
servidor abrirá la conexión socket con el método accept(). El cliente
establece una conexión con la máquina host a través del puerto que se designe
en puerto# . El cliente y el
servidor se comunican con manejadores InputStream y OutputStream. Hay una cuestión
al respecto de los sockets, que viene impuesta por la implementación del
sistema de seguridad de Java. Actualmente, los applets sólo pueden establecer
conexiones con el nodo desde el cual se transfirió su código. Esto está
implementado en el JDK y en el intérprete de Java de Netscape. Esto reduce en
gran manera la flexibilidad de las fuentes de datos disponibles para los
applets. El problema si se permite que un applet se conecte a cualquier máquina
de la red, es que entonces se podrían utilizar los applets para inundar la red
desde un ordenador con un cliente Netscape del que no se sospecha y sin ninguna
posibilidad de rastreo. 2.2
CLASES ÚTILES EN COMUNICACIONES Vamos a exponer
otras clases que resultan útiles cuando estamos desarrollando programas de
comunicaciones, aparte de las que ya se han visto. El problema es que la mayoría
de estas clases se prestan a discusión, porque se encuentran bajo el directorio
sun. Esto quiere decir que son implementaciones Solaris y, por tanto, específicas
del Unix Solaris. Además su API no está garantizada, pudiendo cambiar. Pero, a
pesar de todo, resultan muy interesantes y vamos a comentar un grupo de ellas
solamente que se encuentran en el paquete sun.net. Socket Es el objeto básico
en toda comunicación a través de Internet, bajo el protocolo TCP. Esta clase
proporciona métodos para la entrada/salida a través de streams que hacen la
lectura y escritura a través de sockets muy sencilla. ServerSocket Es un objeto
utilizado en las aplicaciones servidor para escuchar las peticiones que realicen
los clientes conectados a ese servidor. Este objeto no realiza el servicio, sino
que crea un objeto Socket en función del cliente para realizar toda la
comunicación a través de él. DatagramSocket La clase de
sockets datagrama puede ser utilizada para implementar datagramas o fiables
(sockets UDP), no ordenados. Aunque la comunicación por estos sockets es muy rápida
porque no hay que perder tiempo estableciendo la conexión entre cliente y
servidor. DatagramPacket Clase que
representa un paquete datagrama conteniendo información de paquete, longitud de
paquete, direcciones Internet y números de puerto. MulticastSocket Clase utilizada
para crear una versión multicast de las clase socket datagrama. Múltiples
clientes/servidores pueden transmitir a un grupo multicast (un grupo de
direcciones IP compartiendo el mismo número de puerto). NetworkServer Una clase creada
para implementar métodos y variables utilizadas en la creación de un servidor
TCP/IP. NetworkClient Una clase creada
para implementar métodos y variables utilizadas en la creación de un cliente
TCP/IP. SocketImpl Es un Interfase
que nos permite crearnos nuestro propio modelo de comunicación. Tendremos que
implementar sus métodos cuando la usemos. Si vamos a desarrollar una aplicación
con requerimientos especiales de comunicaciones, como pueden se la implementación
de un cortafuegos (TCP es un protocolo no seguro), o acceder a equipos
especiales (como un lector de código de barras o un GPS diferencial),
necesitaremos nuestra propia clase Socket. 2.3
ARQUITECTURA CLIENTE / SERVIDOR 2.3.1 Antecedentes Los ordenadores
personales y los paquetes de software de aplicaciones proliferan comercialmente.
Estos ordenadores, también conocidos como estaciones de trabajo programables,
están conectados a las Redes de Area Local (LAN), mediante las cuales, los
grupos de usuarios y profesionales comparten aplicaciones y datos. Las nuevas
tecnologías de distribución de funciones y datos en una red, permiten
desarrollar aplicaciones distribuidas de una manera transparente, de forma que múltiples
procesadores de diferentes tipos (ordenadores personales de gama baja, media y
alta, estaciones de trabajo, minicomputadoras o incluso mainframes), puedan
ejecutar partes distintas de una aplicación. Si las funciones de la aplicación
están diseñadas adecuadamente, se pueden mover de un procesador a otro sin
modificaciones, y sin necesidad de retocar los programas que las invocan. Si se
elige una adecuada infraestructura de sistemas distribuidos y de herramientas de
desarrollo, las aplicaciones resultantes podrán trasladarse entre plataformas
de distintos proveedores. Dos años atrás,
aún cuando en aquel momento se hablaba mucho y se hacía muy poco sobre el
tema, decíamos que el desarrollo de aplicaciones Cliente/Servidor era
inevitable por un conjunto de razones: En muchas
situaciones es más eficiente que el procesamiento centralizado, dado que éste
experimenta una "des-economía" de escala cuando aumenta mucho la
cantidad de usuarios. Existían ya en
ese momento servidores razonablemente eficientes y confiables. Se había
establecido un estándar de hecho para una interface Cliente/Servidor (el ODBC
SQL, adoptado por todos los fabricantes importantes de servidores). Era
imprescindible, para apoyar con información a la creciente cantidad de
ejecutivos de nivel medio que necesitan tomar decisiones ante el computador,
ayudándose con las herramientas "front office", que utilizan con toda
naturalidad (planillas electrónicas, procesadores de texto, graficadores,
correos electrónicos, etc.). Sin embargo, existía
tecnología para esta arquitectura desde hacía ya bastantes años, sin que nada
ocurriera. Los primeros trabajos conocidos para la arquitectura Cliente/Servidor
los hizo Sybase, que se fundó en 1984 pensando en lanzar al mercado únicamente
productos para esta arquitectura. A fines de la década pasada el producto fue
lanzado para el voluminoso segmento "low-end" del mercado, en conjunción
con Microsoft, teniendo como soporte de la base de datos un servidor OS/2, y
como herramienta "front end" básica el Dbase IV de Ashton Tate. El
Dbase IV no se mostró como una herramienta adecuada, y los desencuentros
comerciales entre Sybase, Microsoft e IBM (en aquel momento socia de Microsoft
para el OS/2) hicieron el resto. La situación era
muy diferente en 1994, cuando los principales fabricantes tradicionales
(Informix, Oracle, Sybase) habían lanzado al mercado poderosos servidores y, a
ellos, se agregaba IBM que estaba lanzando su producto DB2 para, prácticamente,
todos los sistemas operativos importantes (además de sus clásicos MVS y VM,
ahora anunciaba AIX, OS/2,Windows NT, Hewlett Packard's UNIX, Sun´s UNIX,
Siemens' UNIX, etc.) y Microsoft que, luego de finalizar su acuerdo con Sybase,
partió para su propio SQL Server para Windows NT. Existía un
conjunto de lenguajes "front end" como, por ejemplo, Delphi, Foxpro,
Powerbuilder, SQL Windows, Visual Basic, etc. Decíamos en aquel momento que
Visual Basic, más allá de sus méritos intrínsecos como lenguaje, era el
favorito para dominar el mercado, cosa que está ocurriendo. Por otra parte, en
la comunidad informática existían muchas dudas sobre la calidad de los
optimizadores de los sistemas de gerencia de base de datos, cuyas fallas del
pasado habían sido causantes de verdaderas historias de horror. ¿Qué ha ocurrido
en estos dos años?. Que los servidores se han mostrado sólidos y eficientes,
que sus optimizadores probaron, en general, ser excelentes. Que una cantidad muy
importante de empresas, en todo el mundo, ha encarado aplicaciones Cliente /
Servidor, y quienes lo están haciendo con los planes necesarios y con las
herramientas adecuadas, están obteniendo éxitos muy importantes, mientras los
que lo hicieron desaprensivamente, han cosechado fracasos. ¿Cuál es el
mejor de los servidores?. Esta es una cuestión muy complicada. Podemos tomar
bechmarks publicados por cada uno de los fabricantes, o hacer los nuestros específicos,
pero su importancia siempre es relativa. La respuesta, además, depende del
momento en que se la formula. Para aplicaciones pequeñas y medias, todos han
probado ser muy buenos, las diferencias se darán cuando se necesiten altísimos
regímenes transaccionales, y dependerán de cómo cada uno vaya incorporando
nuevas características como paralelismo, "read ahead", etc. Cada
nueva versión puede modificar las posiciones y los principales fabricantes están
trabajando al ritmo de una gran versión nueva por año. En general, la
tecnología de los servidores de base de datos ha evolucionado mucho en los últimos
años y todos los fabricantes trabajan con tecnología sensiblemente
equivalente. Parecen, mucho más importantes para la elección, elementos que
están fuera de la tecnología: la confianza que nos despierta el fabricante, su
compromiso con el producto, su tendencia a mantenerse siempre actualizado, su
situación económico/financiera, las garantías que nos brinde el soporte local
y, en menor medida, el precio. Aunque
inicialmente fueron los propios usuarios quienes impulsaron esta nueva tecnología,
la situación ha cambiado drásticamente. Hoy en día, el modelo
Cliente/Servidor se considera clave para abordar las necesidades de las
empresas. El proceso distribuido se reconoce actualmente como el nuevo paradigma
de sistemas de información, en contraste con los sistemas independientes. Este
cambio fundamental ha surgido como consecuencia de importantes factores
(negocio, tecnología, proveedores), y se apoya en la existencia de una gran
variedad de aplicaciones estándar y herramientas de desarrollo, fáciles de
usar que soportan un entorno informático distribuido. 2.3.2 Cliente/Servidor El concepto de
cliente/servidor proporciona una forma eficiente de utilizar todos estos
recursos de máquina, de tal forma que la seguridad y fiabilidad que
proporcionan los entornos mainframe se traspasa a la red de área local. A ésto
hay que añadir la ventaja de la potencia y simplicidad de los ordenadores
personales. La arquitectura
cliente/servidor es un modelo para el desarrollo de sistemas de información, en
el que las transacciones se dividen en procesos independientes que cooperan
entre sí para intercambiar información, servicios o recursos. Se denomina
cliente al proceso que inicia el diálogo o solicita los recursos y servidor, al
proceso que responde a las solicitudes. Es el modelo de
interacción más común entre aplicaciones en una red. No forma parte de los
conceptos de la Internet como los protocolos IP, TCP o UDP, sin embargo todos
los servicios estándares de alto nivel propuestos en Internet funcionan según
este modelo. Los principales
componentes del esquema cliente/servidor son entonces los Clientes, los
Servidores y la infraestructura de comunicaciones. En este modelo,
las aplicaciones se dividen de forma que el servidor contiene la parte que debe
ser compartida por varios usuarios, y en el cliente permanece sólo lo
particular de cada usuario. Los Clientes
interactúan con el usuario, usualmente en forma gráfica. Frecuentemente se
comunican con procesos auxiliares que se encargan de establecer conexión con el
servidor, enviar el pedido, recibir la respuesta, manejar las fallas y realizar
actividades de sincronización y de seguridad. Los clientes
realizan generalmente funciones como:
Los Servidores
proporcionan un servicio al cliente y devuelven los resultados. En algunos casos
existen procesos auxiliares que se encargan de recibir las solicitudes del
cliente, verificar la protección, activar un proceso servidor para satisfacer
el pedido, recibir su respuesta y enviarla al cliente. Además, deben manejar
los ínterbloqueos, la recuperación ante fallas, y otros aspectos afines. Por
las razones anteriores, la plataforma computacional asociada con los servidores
es más poderosa que la de los clientes. Por esta razón se utilizan PCs
poderosas, estaciones de trabajo, minicomputadores o sistemas grandes. Además
deben manejar servicios como administración de la red, mensajes, control y
administración de la entrada al sistema ("login"), auditoría y
recuperación y contabilidad. Usualmente en los servidores existe algún tipo de
servicio de bases de datos. En ciertas circunstancias, este término designará
a una máquina. Este será el caso si dicha máquina está dedicada a un
servicio particular, por ejemplo: servidores de impresión, servidor de
archivos, servidor de correo electrónico, etc. Por su parte los
servidores realizan, entre otras, las siguientes funciones:
Para que los
clientes y los servidores puedan comunicarse se requiere una infraestructura de
comunicaciones, la cual proporciona los mecanismos básicos de direccionamiento
y transporte. La mayoría de los
sistemas Cliente/Servidor actuales, se basan en redes locales y por lo tanto
utilizan protocolos no orientados a conexión, lo cual implica que las
aplicaciones deben hacer las verificaciones. La red debe tener características
adecuadas de desempeño, confiabilidad, transparencia y administración. Entre las
principales características de la arquitectura cliente / servidor, se pueden
destacar las siguientes:
Como ejemplos de
clientes pueden citarse interfaces de usuario para enviar comandos a un
servidor, APIs para el desarrollo de aplicaciones distribuidas, herramientas en
el cliente para hacer acceso a servidores remotos (por ejemplo, servidores de
SQL) o aplicaciones que solicitan acceso a servidores para algunos servicios.
Como ejemplos de servidores pueden citarse servidores de ventanas como
X-Windows, servidores de archivos como NFS, servidores para el manejo de bases
de datos (como los servidores de SQL), servidores de diseño y manufactura
asistidos por computador, etc. 2.3.3
Componentes esenciales de la infraestructura Cliente/Servidor Una
infraestructura Cliente/Servidor consta de tres componentes esenciales, todos
ellos de igual importancia y estrechamente ligados: Plataforma
Operativa. La plataforma deberá soportar todos los modelos de distribución
Cliente/Servidor, todos los servicios de comunicación, y deberá utilizar,
preferentemente, componentes estándar de la industria para los servicios de
distribución. Los desarrollos propios deben coexistir con las aplicaciones estándar
y su integración deberá ser imperceptible para el usuario. Igualmente, podrán
acomodarse programas escritos utilizando diferentes tecnologías y herramientas.
Entorno de
Desarrollo de Aplicaciones. Debe elegirse después de la plataforma operativa.
Aunque es conveniente evitar la proliferación de herramientas de desarrollo, se
garantizará que el enlace entre éstas y el middleware no sea excesivamente rígido.
Será posible utilizar diferentes herramientas para desarrollar partes de una
aplicación. Un entorno de aplicación incremental, debe posibilitar la
coexistencia de procesos cliente y servidor desarrollados con distintos
lenguajes de programación y/o herramientas, así como utilizar distintas
tecnologías (por ejemplo, lenguaje procedural, lenguaje orientado a objetos,
multimedia), y que han sido puestas en explotación en distintos momentos del
tiempo. Gestión de
Sistemas. Estas funciones aumentan considerablemente el costo de una solución,
pero no se pueden evitar. Siempre deben adaptarse a las necesidades de la
organización, y al decidir la plataforma operativa y el entorno de desarrollo,
es decir, en las primeras fases de la definición de la solución, merece la
pena considerar los aspectos siguientes:
Cómo definir una
infraestructura Cliente/Servidor si no se acomete el trabajo de definir una
infraestructura Cliente/Servidor. Se corre el riesgo de que surjan en la empresa
una serie de soluciones Cliente/Servidor aisladas. No es en absoluto
recomendable el intento de una infraestructura completa desde el principio, ya
que las tecnologías pueden no responder a tiempo a las necesidades prioritarias
del negocio. El enfoque más adecuado está en un sistema y una plataforma de
aplicación conceptuales, y una arquitectura construida incrementalmente y
ampliada a medida que se desarrollan nuevas aplicaciones. La Plataforma
Operativa, el Middleware y el Entorno de Desarrollo de Aplicaciones están
relacionados entre sí. Las necesidades de apertura pueden condicionar la elección
de la plataforma o del middleware, de igual manera que lo condiciona una
determinada herramienta de desarrollo. El software de aplicación puede influir
en la plataforma del sistema, y el tiempo disponible para la primera aplicación
puede implicar algún tipo de compromiso. Por lo tanto, es necesario fijar los
objetivos y el modo de conseguirlos en cada caso concreto: una Metodología de
Infraestructura para Sistemas Distribuidos que permita definir una
infraestructura para el sistema Cliente/Servidor y evalúe la puesta en marcha
del proyecto sobre una base racional. El enfoque
estructurado de dicha Metodología comprende los pasos siguientes:
Al final de los
tres pasos anteriores, se definen los conceptos del sistema y la infraestructura
tecnológica, sin concretar, todavía, en productos o plataformas específicos. Por último, se
llega a la selección de plataformas y principales productos y componentes para
la implantación. El resultado es la descripción de una solución que incluye
infraestructura tecnológica, plataformas y productos. 2.3.4 Ventajas y desventajas 1)
Ventajas a) Aumento de la
productividad: Los usuarios
pueden utilizar herramientas que le son familiares, como hojas de cálculo y
herramientas de acceso a bases de datos. Mediante la
integración de las aplicaciones cliente / servidor con las aplicaciones
personales de uso habitual, los usuarios pueden construir soluciones
particularizadas que se ajusten a sus necesidades cambiantes. Una interface gráfica
de usuario consistente, reduce el tiempo de aprendizaje de las aplicaciones. b) Menores costos
de operación: La existencia de
plataformas de hardware cada vez más baratas. Esta constituye a su vez una de
las más palpables ventajas de este esquema, la posibilidad de utilizar máquinas
considerablemente más baratas que las requeridas por una solución
centralizada, basada en sistemas grandes.
c) Mejora en el
rendimiento de la red: Las arquitecturas
cliente/servidor eliminan la necesidad de mover grandes bloques de información
por la red hacia los ordenadores personales o estaciones de trabajo para su
proceso. Los servidores controlan los datos, procesan peticiones y después
transfieren sólo los datos requeridos a la máquina cliente. Entonces, la máquina
cliente presenta los datos al usuario mediante interfaces amigables. Todo esto
reduce el tráfico de la red, lo que facilita que pueda soportar un mayor número
de usuarios. Se puede integrar
PCs con sistemas medianos y grandes, sin que todas las máquinas tengan que
utilizar el mismo sistema operacional. Si se utilizan
interfaces gráficas para interactuar con el usuario, el esquema
Cliente/Servidor presenta la ventaja, con respecto a uno centralizado, de que no
es siempre necesario transmitir información gráfica por la red, pues ésta
puede residir en el cliente, lo cual permite aprovechar mejor el ancho de banda
de la red. Tanto el cliente
como el servidor pueden escalar para ajustarse a las necesidades de las
aplicaciones. Las UCPs utilizadas en los respectivos equipos, pueden
dimensionarse a partir de las aplicaciones y el tiempo de respuesta que se
requiera. La existencia de
varias UCPs proporciona una red más fiable: una falla en uno de los equipos, no
significa necesariamente que el sistema deje de funcionar. En una
arquitectura como ésta, los clientes y los servidores son independientes los
unos de los otros, con lo que pueden renovarse para aumentar sus funciones y
capacidad de forma independiente, sin afectar al resto del sistema. La arquitectura
modular de los sistemas cliente / servidor, permite el uso de ordenadores
especializados (servidores de base de datos, servidores de ficheros, estaciones
de trabajo para CAD, etc.). Permite
centralizar el control de sistemas que estaban descentralizados, como por
ejemplo la gestión de los ordenadores personales que antes estuvieron aislados.
Es más rápido el
mantenimiento y el desarrollo de aplicaciones, pues se pueden emplear las
herramientas existentes (por ejemplo los servidores de SQL o las herramientas de
más bajo nivel como los sockets o el RPC ). El esquema
Cliente/Servidor contribuye además a proporcionar a las diferentes direcciones
de una institución soluciones locales, pero permitiendo además la integración
de la información relevante a nivel global. 2)
Desventajas Hay una alta
complejidad tecnológica al tener que integrar una gran variedad de productos. Por una parte, el
mantenimiento de los sistemas es más difícil pues implica la interacción de
diferentes partes de hardware y de software, distribuidas por distintos
proveedores, lo cual dificulta el diagnóstico de fallas. Requiere un fuerte
rediseño de todos los elementos involucrados en los sistemas de información
(modelos de datos, procesos, interfaces, comunicaciones, almacenamiento de
datos, etc.). Además, en la actualidad existen pocas herramientas que ayuden a
determinar la mejor forma de dividir las aplicaciones entre la parte cliente y
la parte servidor. Por un lado, es
importante que los clientes y los servidores utilicen el mismo mecanismo (por
ejemplo sockets o RPC), lo cual implica que se deben tener mecanismos generales
que existan en diferentes plataformas. Además de lo
anterior, se cuenta con muy escasas herramientas para la administración y
ajuste del desempeño de los sistemas. Es más difícil
asegurar un elevado grado de seguridad en una red de clientes y servidores que
en un sistema con un único ordenador centralizado. Se deben hacer
verificaciones en el cliente y en el servidor. También se puede recurrir a
otras técnicas como el encriptamiento. Un aspecto
directamente relacionado con el anterior, es el de cómo distribuir los datos en
la red. En el caso de una empresa, por ejemplo, éste puede ser hecho por
departamentos, geográficamente, o de otras maneras. Además, hay que tener en
cuenta que en algunos casos, por razones de confiabilidad o eficiencia se pueden
tener datos replicados, y que puede haber actualizaciones simultáneas. A veces, los
problemas de congestión de la red pueden degradar el rendimiento del sistema
por debajo de lo que se obtendría con una única máquina (arquitectura
centralizada). También la interface gráfica de usuario puede a veces
ralentizar el funcionamiento de la aplicación. El quinto nivel de
esta arquitectura (bases de datos distribuidas) es técnicamente muy complejo y
en la actualidad, hay muy pocas implantaciones que garanticen un funcionamiento
totalmente eficiente. Existen
multitud de costos ocultos (formación en nuevas tecnologías, licencias,
cambios organizativos, etc.) que encarecen su implantación. CAPITULO
III INTERNET RELA CHAT (IRC) QUE
ES UN CHAT (IRC) En Internet, la
gran "mediateca" global, se puede hacer casi de todo y uno de los
servicios que ofrece Internet es el IRC (Internet Relay Chat). A través del
IRC, se puede charlar con otros usuarios que en ese momento también estén
conectados a la red, no importa en qué parte del mundo. Además se nos ofrece
la posibilidad de entablar conversación con cientos o miles de usuarios simultáneamente.
En realidad, el
IRC está basado en el TALK, un programa para Unix que permite la conexión con
un ordenador remoto para mantener una charla interactiva con su operador, de
manera que todo lo que se escribe a través del teclado lo recibe la otra
persona en su monitor y viceversa. El IRC es pues algo parecido, aunque mucho más
evolucionado. HISTORIA
DE LOS CHAT´S Los inicios del
IRC se remontan a 1988, cuando un finlandés llamado Jarkko Oikarinen5
escribió el código original. Fue por tanto en Finlandia donde se comenzó a
usar esta tecnología, aunque en ese momento todavía no estaba en Internet,
sino que J. Oikarinen la diseñó para usarla en su propia BBS6
como un sistema multichat en tiempo real. Cuando comenzó a
usar Internet como medio, el sistema comenzó a popularizarse rápidamente y pasó
a convertirse en una herramienta de comunicación casi indispensable para todos
aquellos que necesitaban comunicarse de una manera más directa que con el
correo electrónico. Hay dos fechas
clave que marcaron el impulso definitivo del IRC. La primera es 1991, con el
estallido de La Guerra del Golfo; el uso de este sistema de comunicación que
plasmaba la realidad segundo a segundo comenzó a tomarse en serio. Fue en este
momento cuando comenzaron a florecer los programas de IRC. La otra fecha es
Septiembre de 1993, cuando gran número de usuarios (en tiempo real) informaban
desde Moscú de la inestabilidad social y política por la que estaba pasando el
país. Actualmente, los
canales de conversación del IRC abarcan todos los temas imaginables, pudiendo
encontrar canales en los que se habla de los temas más simples, hasta canales
en donde los temas de conversación son absolutamente serios y de gran acervo
cultural. Actualmente, las
redes más grandes de servidores de IRC son: Efnet7,
DALnet8,
UnderNet9,
NewNet10
y GalaxyNet11 ELEMENTOS
DE UN CHAT Dentro de los
elementos que encontramos dentro de un Chat para que se pueda llevar a cabo la
comunicación, están los siguientes Usuarios.
Serán las personas que harán uso del Chat. Canales.
Donde los usuarios podrán entrar y salir, aunque en algunas se deban
cumplir ciertos requisitos. Chat Room
Salas de Charla. Donde todos los usuarios “hablan” entre ellos OPERS.
Donde el/los usuario/s solicitan canales o cualquier tipo de información.
ADM
(Administradores). Estos son los que marcan las pautas y normas a seguir para el
buen funcionamiento del Chat y la conducta de los usuarios. IrCOP.
Serán las personas que se dedican al mantenimiento del Chat OPER.
Son las personas que ante las necesidades de los usuarios, les ayudan o
suministran cualquier tipo de información respecto, comunicaciones entre
canales, entre usuarios, reservas de canales privados, etc. CARACTERÍSTICAS
DE LOS CHAT´S La tecnología de
la CMC hace posible que un grupo de personas distantes físicamente, sin la
posibilidad de verse el uno al otro puedan comunicarse de manera sincrónica, al
igual que en los encuentros cara a cara, usando la palabra escrita. En esta
forma de comunicación se combinan la permanencia de la palabra escrita y la
fluidez del intercambio propia de las conversaciones presénciales. Dentro de las
características principales podemos menciona: Abierto las 24
horas del día todos los días. Internet y la totalidad de sus aplicaciones están
disponibles las 24 horas del día todos los días. Sólo un par de clicks
separan a la persona del acceso al mundo virtual si cuenta con el software12
y el hardware13
necesarios. Una vez ingresado (conectado) a la red, siempre habrá personas
esperando alguien con quien conversar. Puede plantearse la posibilidad de que la
persona frecuente un mismo chat room y que en éste, a las 7 de la mañana, no
haya usuarios. Este pequeño problema se soluciona fácilmente: se puede entrar
a otros canales de otros países (por ejemplo, al de España, que remite a un
lugar del mundo donde son las 11 de la mañana y probablemente haya mas usuarios
en línea). Control sobre la
presentación de uno mismo y sobre lo que los otros ven del sí mismo. En IRC,
el anonimato, facilita la creación de un personaje. Las máscaras esconden a la
persona y permiten jugar un personaje cuyas características son fácilmente
configuradas por la propia persona. Control sobre la
relación. Los programas de IRC ofrecen la posibilidad de elegir con quien
hablar y con quien no. Es decir, que si al sujeto no le interesa comunicarse con
una determinada persona, con sólo tipear un comando (/ignore) seguido por, por
ejemplo, el nickname de ésta, logra su objetivo. } TIPOS
DE CHAT Los hay de todo
tipo, desde el que solo admite texto sobre un fondo liso (la versión primera
del MIRC, hasta el que combina también voz e imagen junto con la posibilidad de
compartir archivos, dibujar en una misma pizarra, etc. Poco a poco, los chat´s
se están quedando anticuados y en muy poco tiempo nos encontraremos con chats
en 3D (ya existen algunos) acompañados de videoconferencia. Como ejemplo
podemos citar los chat´s mas usados en la comunidad latina a: Latinchat,
Starmedia, Yahoo, Microsoft Chat, Esmas, etc. EJEMPLO
DE UN CHAT HECHO EN JAVA Aquí veremos un
ejemplo relativamente completo, en donde se tratan todos los aspectos que se
realizan para una comunicación Chat (Servidor Chat y Cliente Chat). Para ello
vamos a construir una aplicación cliente-servidor que implemente un servicio de
chat: una serie de usuarios (clientes) se conectan al chat (servidor) de forma
que cada información transmitida por un usuario le llega a todos los demás. 1.
Servidor de chat El servidor se
implementa haciendo uso del multi-threading, para no limitar el número máximo
de usuarios que se conecten al servicio. El servidor será el siguiente: Servidor
de chat: clase ChatServer
import
java.net.*;
Servidor
de chat: clase ChatHandler import
java.net.*; 2.
Cliente de chat El programa
cliente se ha implementado tanto en forma de aplicación como en forma de
applet. Como se puede observar, en general, la mayor parte del código es
similar. Cliente de
chat: aplicación /** Cliente
de chat: applet /** import
java.net.*; //
Applet parameters: public
class ChatApplet extends Applet implements Runnable {
protected TextArea output;
protected Thread listener;
public void init () {
public void start () {
public void stop () {
public void run () {
public void execute () {
public boolean handleEvent (Event e) { CAPITULO
IV EVOLUCION DE LOS CHATS MENSAJEROS
INSTANTÁNEOS La Red de Redes ha aportado al mundo de la telecomunicaciones grandes avances en la parcela de comunicación entre usuarios de Internet. Primero los correos electrónicos, después llegó el Chat y los últimos en sumarse a esta tendencia fueron los mensajeros instantáneos, una manera rápida de comunicarse con los demás. El 15 de noviembre
de 1996, cuatro meses después de su creación, la compañía Mirabilis Inc.,
compuesta por los israelíes Yair Goldfinger, Arik Vardi, Sefi Vigiser y Amnon
Amir, presentó un software que revolucionó las comunicaciones en Internet.
Medio año después, tenía un millón de usuarios. Y ya más de 127 millones de
personas se registraron para usar el servicio. Estamos hablando, claro, del ICQ14
(derivado de la frase inglesa “I see you, te veo”), el programa que definió
el concepto de mensajería instantánea, mezcla de Chat y e-mail que da la
posibilidad de comunicarse en forma inmediata con otros usuarios de la Red en
cualquier parte del mundo. Permite saber cuál de sus amigos está conectado a
la Web en cada momento, conectarse con él e iniciar una conversación tipo
Chat, con respuesta instantánea. Pero estos
mensajeros permiten hacer más cosas que intercambiar textos. Las nuevas
versiones pueden transmitir audio, video, datos, enviar mensajes a celulares,
componer listas de tareas, tener páginas Web gratuitas, revisar el e-mail, etcétera.
Y gratis: ninguno de los mensajeros instantáneos pide dinero para funcionar. El último ICQ,
por ejemplo, ofrece la opción de compartir archivos que estén en una carpeta
designada (pero limitando el acceso al que el usuario quiera). En mayo de 1997,
AOL15
lanzó su propio mensajero. Y a mediados de 1998, la empresa compró a Mirabilis
en 287 millones de dólares, poniendo en evidencia el valor del servicio. La
acción fue seguida por los lanzamientos de Yahoo!16
en marzo de 1998 y Microsoft17
en julio del año siguiente. Justamente,
el MSN Messenger de la empresa de la ventanita tiene cada vez más seguidores,
debido a su asociación al servicio de correo gratuito Hotmail , a la inclusión
del software en el nuevo Windows XP (preinstalado con el nombre de Windows
Messenger ), y el peso de Microsoft como marca. Merece
ser probado, porque tiene buenas herramientas y es muy simple de usar. Los otros
mensajeros instantáneos también tienen ventajas sobre el ICQ, así que puede
buscar el que más se ajuste a sus necesidades
Características
de los mensajeros instantáneos Son dinámicos y
trabajan en tiempo real. Son cien por ciento interactivos. Sirven para contactar
personas de cualquier punto del globo. Son el paradigma de la instantaneidad de
la Red. Todos estos argumentos servirían para promocionar las nuevas
aplicaciones estrella del entorno Web: los mensajeros instantáneos. Eso, en
caso que éstos necesitaran promoción. Las cifras indican que ya han ganado
buena fama sin mucho esfuerzo publicitario, porque llevan al extremo las
ventajas de interactividad y velocidad de comunicación que la Red propone a
través de sus múltiples servicios: según la consultora Mobile Insights, la
mensajería instantánea en línea contará con 175 millones de usuarios en el
2002, lo que marca un incremento del 250 por ciento respecto de los 50 millones
de cibernautas que actualmente cuentan con al menos uno de estos productos.
Conocidos por las siglas PIM, Personal Instant Messengers, los programas de
intercambio de mensajes en tiempo real funcionan como radares de la Red, que
detectan a los amigos y conocidos listados en una suerte de libreta de
direcciones, propia de estas aplicaciones y personalizada para cada usuario, y
permiten establecer contacto con ellos.
Ejemplos
de Mensajeros Instantáneos Las características
de los mensajeros depende de la compañía que los crea, así tenemos a: ICQ18
Lo bueno: Pionero
en este tipo de programas cuenta con muchas funciones como compartir archivos de
una de tus carpetas con otros usuario, cambiar sonidos, buscar amigos o mandar
mensajes a móviles. Lo mejor de todo es mantener una conversación nueve
personas a la vez en el mismo canal. Lo malo: al
principio cuesta acostumbrarse a su complicado interfaz. Además, si queremos
conectarnos al ICQ desde otro ordenador, éste no nos guarda los contactos y
deberemos introducirlos uno a uno, pero esta desventaja ya se ha corregido en la
versión 2001. AOL
Instant Messenger19 Lo bueno:
Compartir todo tipo de archivos con tus amigos. Te avisa cuando alguien de tu
lista de contactos se conecta. Poder mantener conversaciones de voz con los demás. Lo malo: no es muy
fácil de usar. Está en inglés. Yahoo!
Messenger20 Lo bueno: Poder
cambiar de pieles y personalizarlo tu gusto. La posibilidad de intercambiar
archivos con tus amigos y te avisa de cuales de ellos se conectan. Hablar con
los demás por Internet como si fuera un teléfono. Fácil de usar. Lo malo: que no
haya conseguido el éxito que se esperaba. Instanterra21 Lo bueno: al igual
la gran mayoría de sus competidores te permite ver quienes de tus contactos están
conectados. Lo malo: se trata
de un programa de Terra y poca gente de habla no hispana utiliza este servicio. MSN
Messenger22 Lo bueno: enviar y
recibir archivos de tus amistades. Mantener una conversación hablada, la versión
que incluye Windows XP ofrece la posibilidad de videoconferencia. Permite hacer
una lista negra de amigos ante los que uno puede aparecer invisible. Una lista de tus
contactos que te indica quienes de ellos permanecen conectados. Su interfaz
sencillo y fácil de usar le convierten en el más manejable de todos. Pero lo más
destacado, poder conectarse desde cualquier ordenador que tenga instalado el
Messenger. Lo malo: no
permite más de cuatro usuarios en la misma sala de chat. mIRC23 Lo bueno: ofrece
una multitud de canales. Mandar archivos a los demás. Los juegos tan divertidos
a los que se pueden jugar como por ejemplo el ahorcado y el trivial. Lo malo: que no
tiene un sistema de correo electrónico. La larga lista de comandos para
realizar distintas acciones. Netmeeting24 Lo bueno: permiten
realizar llamadas mediante servidores de directorio, servidores de conferencia y
páginas Web. NetMeeting permite que resulte más fácil realizar llamadas a
través de Internet, la intranet de una organización, e incluso de un teléfono.
los usuarios pueden enviar y recibir archivos para trabajar en ellos. Las
características de vídeo y audio de NetMeeting permiten ver y oír a otras
personas. Incluso si no puede transmitir vídeo, podrá recibir llamadas de vídeo
en la ventana de vídeo de NetMeeting. Con la característica Conversación
puede hablar con varias personas. Además, es posible codificar las llamadas de
Conversación, lo que garantiza la privacidad de las conferencias. Mediante la
Pizarra, puede dibujar la información para explicar conceptos, utilizar un
esbozo o mostrar gráficos. También puede copiar áreas del escritorio o de las
ventanas y pegarlas en la Pizarra. Lo malo: tiene
problemas de conexión. MSN
MESSENGER VS. OTROS CHAT´S La versión 4.6
del MSN Messenger (en español, está en messenger.msn.es ) es una buena
alternativa al ICQ. Como su predecesor, permite enviar mensajes de texto (con
tipos de letras, emoticones y colores) de manera instantánea entre los
usuarios. Para poder hacer
uso de él, hay que tener una cuenta de Passport (http://www.passport.com
), el servicio de identificación en la Web de Microsoft. Con tener una dirección
de Hotmail es suficiente. Así como los usuarios de ICQ tienen un número único
de identificación, el Messenger requiere una dirección de Hotmail para
localizar a sus usuarios. La interfaz es,
quizás, el mayor logro del Messenger sobre el ICQ. Los botones son grandes y su
uso es muy intuitivo y claro (agregar un usuario a la lista de amigos, iniciar
una conversación, transferir un archivo, enviar un e-mail).
Incluso ofrecen acciones fuera de lo que se supondría que atañe a una
conversación virtual (como usar un juego de Microsoft instalado en la PC, etcétera).
Una ventanita en el ángulo inferior derecho del monitor aparece cada vez que un
amigo está en línea, llega un mensaje a la cuenta de Hotmail o alguien inicia
una conversación. Aunque
es una herramienta útil (y más visible que el cambio del icono de la barra de
tareas que suelen ofrecer los demás mensajeros), puede tornarse molesta en una
sesión de chat ajetreada. Para desactivarla, vaya a HerramientasOpciones>
Preferencias>Avisos y destilde la acción no deseada. También
es posible iniciar una llamada a un teléfono convencional desde la PC y, en la
versión incluida en el XP, hacer videoconferencia desde el mismo mensajero. Los
demás deberán usar el NetMeeting . Y
tiene una función excelente, hasta ahora exclusiva del Yahoo! Messenger :
cuando el interlocutor está escribiendo un mensaje (y todavía no lo envió)
aparece un cartelito en la ventana informando esto. Así sabemos que el otro está
escribiendo una respuesta larga, y no que se fue a tomar un café y su regreso
es incierto. El Messenger
permite hacer una lista negra de amigos ante los que uno puede aparecer
invisible (en HerramientasOpciones>Privacidad ), pero lamentablemente no es
posible personificar el mensaje en cada caso. Si quiere mandar
mensajes a todos sus amigos de una sola vez (una invitación a un cumpleaños,
por ejemplo, o un anuncio formal), puede usar un plug-in como el Mass Messenger
1.2 (en http://madmaxnet.iespana.es/madmaxnet/tools/massmsg.htm
), parecido a la función Recipientes múltiples del ICQ.
El MSN Messenger es capaz de recibir alertas de noticias; sólo hay que
seleccionar alguno de los botones de la barra vertical de anuncios de la
izquierda. Lo que le falta es
poder configurar los comandos con atajos de teclado, como en el ICQ. Tiene
algunos ( Mayúsculas + Enter para crear un párrafo nuevo en una conversación
sin enviar el texto, por ejemplo), pero son un poco limitados, y están fijos. A
propósito, los atajos de teclado en el ICQ se cambian en MainPreferences>
Contact List>Shortcuts . Los
otros ICQ y MSN
Messenger son los más populares, pero no los únicos. Yahoo! Messenger (
messenger.yahoo.com/intl/ar/ ) también es una buena alternativa. A las herramientas
básicas de todos los mensajeros (chat, transferencia de archivos, etcétera) le
agrega pieles para cambiar su apariencia. Y tiene una herramienta de
videoconferencia integrada, muy cómoda para verse con otros usuarios del
servicio. Además, permite armar una sesión de chat con 9 usuarios, contra los
4 del MSN Messenger. Lo único que se requiere para usar el servicio es una
cuenta de correo de Yahoo! Tampoco hay que olvidar al AIM ( http://www.aol.com.ar/Aim/aim40.adp
), el popular mensajero de AOL, que a las herramientas usuales les agrega el
poder definir un icono o imagen para cada amigo en la lista del mensajero (y
ayudar a reconocer a cada uno). Ahora bien: ¿qué
sucede si un usuario de ICQ quiere comunicarse con otro de Yahoo! o Microsoft?
Mientras la gente del Internet Engineering Task Force (IETF), la institución
que se ocupa de elaborar algunos de los estándares que hacen funcionar a la
Internet, termina de desarrollar un protocolo común para la mensajería instantánea
(más datos en http://www.imppwg.org ), las
diferentes redes son incompatibles. Pero hay varios
servicios que actúan como puente entre unas y otras: el primero fue el del
mensajero Odigo ( http://www.odigo.com , en
la instalación se puede elegir el idioma), que además de conectar a la gente
de su propia red es capaz de comunicarse con las de ICQ, MSN, Yahoo! y AOL. Así, si usted
tiene amigos en esas redes, puede escribirles desde un solo lugar, sin andar
abriendo y cerrando programas. Para comunicarse con cada uno, claro, tendrá que
darse de alta primero en la red correspondiente. Esto mismo ofrecen
Imici ( http://www.imici.com ) y Easy Message
( http://www.ryandewsbury.com/easymessage/
). Pero el campeón en interoperabilidad es el Trillian ( http://www.trillian.cc
). Después de haber
analizado las características propias del lenguaje Java, podemos concluir que
hasta el momento, es un software de
programación en el que podemos confiar al diseñar nuestras paginas web, esto
es, por su gran versatilidad, facilidad de programación y seguridad. Los Chat´s en
nuestra época están dando un gran giro comercial, ya que no solo se utiliza
para intercomunicar a un grupo de gente, sino que también, para establecer una
relación Cliente-Vendedor. Actualmente muchas
de las grandes empresas ya utilizan los Chat´s para la comunicación con sus
clientes, ya que por medio de ellos pueden, cotizar, hacer pedidos de productos,
verificar existencias en tiempo real y hasta tener una entrevista “cara a
cara” (por medio de videoconferencia). Este tipo de comunicación se puede
decir que es mas personalizado que la vía telefónica. A
DIOS:
Por prestarme la vida A
NORA, MI ESPOSA: Por tanto amor y
comprensión, por su apoyo incondicional, por su escucha y aliento en momentos
de incertidumbre. A
JOSÉ CARLOS, MI HIJO:
Por ser el motor que me impulsa a ser mejor cada día A
MI MAMÁ:
Por saberme guiar por el camino correcto, su confianza y amor, por sus
consejos y bendición. A
MI PAPÁ:
Por apoyarme el los momentos mas difíciles de mi camino [1]
BERLO, D. “El proceso de la comunicación. Introducción a la Teoría y a
la Práctica”. Buenos Aires, El Ateneo, 2000 Nota de contratapa. [2]
Acrónimo de Internet Relay
Chat, El IRC es una aplicación que se utiliza estando el usuario on-line y
que le permite comunicarse con varias personas a la vez a través de la
escritura, con una velocidad de sucesión de mensajes similar a la de los
encuentros cara a cara. 3
Compañía
creada en febrero de 1982 en EEUU, Crearon la primera estación de trabajo
el cual ya incluía el protocolo TCP/IP, conocido hoy como el protocolo de
Internet. 4
A
los ordenadores que utilizan Java como sistema operativo se les llama
Network Computer, WePC o WebTop.
5
Estudiante de ingeniería electrónica, administrador de Oulo-Box, la BBS
del Departamento de Ciencias de Procesos de la Información de la
Universidad de Oulu, en Finlandia, 6
BBS (Bulletin Board System, "sistema de tablón de anuncios"). El
BBS se basa en un programa servidor, alojado en una computadora capaz de
gestionar todos los servicios, y un programa cliente que es el que utiliza
cada usuario para conectar al servidor y acceder al BBS desde su propia
computadora, en red local o por Internet 7
www.efnet.net/ 8
www.dal.net/ 9
www.undernet.net/ 10www.newnet.net/ 11
www.galaxynet.org/ 12
El software de una computadora es todo programa, o rutina de programación
que cumpla un fin 13
El Hardware es lo físico de la
computadora: todo lo que de ella sea concreto, se pueda tocar, por ejemplo,
el teclado, el monitor, etc. 14 web.icq.com 15
AOL messenger, AOL, America On Line,
Inc. 16
Yahoo! Messenger,
Yahoo Company. 17
MSN Messenger, Microsoft
Corporation. 18
web.icq.com 19
www.aol.com.mx 20
es.messenger.yahoo.com 21
instant.terra.com.mx 22
messenger.t1msn.com.mx 23
www.mirc.com 24
www.microsoft.com/netmeeting/
Autor: CARLOS
ERNESTO NANGO QUINTANA
Articulos relacionados:
|



Figura 3



