javascrip reynaldo gil
TRANSCRIPT
INSTITUTO UNIVERSITARIO POLITÉCNICO “SANTIAGO MARIÑO”
EXTENSIÓN PORLAMAR ESCUELA DE INGENIERÍA DE SISTEMAS
Autor: Reynaldo Gil
C.I: 17.417.846
Prof.: Ing. Diógenes Rodriguez
Porlamar, 30 de Junio de 2013
INTRODUCCIÓN
Internet, la red de redes más grande del planeta ha venido evolucionando a
ritmos muy acelerados, en sus inicios el correo electrónico fue la sensación. En la
actualidad sigue siendo una herramienta fundamental en las comunicaciones, pero
se han venido desarrollando otras herramientas y tecnologías como el hipertexto,
los cuales vienen a ser objetos de información los cuales pueden contener textos,
gráficos, audio, vídeo además de vínculos a otros hipertextos.
La World Wide Web se encarga de la transferencia de los hipertextos
utilizando el protocolo HTTP, hasta aquí Internet había crecido y madurado un
poco, cada vez eran más los sites donde se podían encontrar páginas web
mostrando información de todo tipo, pero había un detalle: las paginas eran
estáticas, y de pronto Sun Microsystems anuncia un nuevo producto asegurando
que JAVA, así se llamaba, iba revolucionar Internet, las páginas Web se
convertirían en dinámicas e interactivas.
El avance de la tecnología informática y de las telecomunicaciones ha
hecho posible que estemos viviendo tiempos en donde la globalización de la
información, nos permita alcanzar uno de los grandes sueños de la humanidad:
“Tener igualdad de condiciones para acceder al conocimiento”, y esto se ha venido
logrando gracias a Internet.
Java es un nuevo lenguaje de programación orientado a objetos
desarrollado por Sun Microsystems. Sun describe al lenguaje Java de la siguiente
manera: Simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de
arquitectura neutral, portable, de alto rendimiento, multitarea y dinámico.
Sun admite totalmente que lo dicho anteriormente es una cadena de halagos por
parte suya, pero el hecho es que todo ello describe al lenguaje Java.
Java permite hacer cosas excitantes con las páginas Web que antes no
eran posibles. De manera que en este momento la gran interactividad que
proporciona Java marca la diferencia en las páginas Web. Imagina un Web donde
puedes jugar a un juego, como el fútbol, tú y otras personas que están en lugares
remotos forman parte de un equipo y otras más del contrario, verías a los
jugadores animados en la pantalla obedeciendo las instrucciones de las personas
que están jugando al juego desde sitios remotos.
Además las puntuaciones quedarían registradas. O un Web con una
aplicación en donde el usuario pueda hacer transacciones y estas se actualicen en
tiempo real. O un sitio que ofrezca pequeñas aplicaciones como hojas de cálculo o
calculadoras para uso de los visitantes. O uno que muestre figuras 3D, tales como
moléculas o dinosaurios que pueden ser rotados con un click del ratón.
Java también aumenta el contenido multimedia de un sitio, ofreciendo
animaciones fluidas, gráficos mejorados, sonido y vídeo, fuera de lo necesario
para enganchar aplicaciones de ayuda dentro de sus navegadores Web.
ENTRADA Y SALIDA DE DATOS EN JAVA
En java la manera de representar las entradas y las salidas es a base de
streams (flujos de datos). Un stream es una conexión entre el programa y la fuente
o destino de los datos.
La información se traslada en serie a través de esta conexión. Todas las
clases de java relacionadas con la entrada y salida se agrupan en el package
java.io.
El siguiente ejemplo solicita al operador ingresar una línea de caracteres,
finalizando con la tecla Enter, y la despliega en pantalla.
Código Ejemplo:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class DeTerminal {
public static void main (String args[]) throws IOException {
BufferedReader stdin = null;
stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Ingrese caracteres y digite Enter: ");
String linea = stdin.readLine();
System.out.println("Usted digitó: " + linea);
stdin.close();
}
}
Mensaje para el ingreso de datos:
CLASES DE JAVA PARA LECTURA Y ESCRITURA DE DATOS
Lectura: la clase InputStream
La clase abstracta InputStream declara los métodos para leer datos desde
una fuente concreta y es la clasa base de la mayor parte de los flujos de entrada
en java.io. Soporta los métodos siguientes:
o int read() lee un sólo byte de datos y los devuelve en el rango [0..255].
Devuelve -1 cuando se alcanza el final del flujo y no puede seguir leyendo
bytes.
o int read (byte [] buf) lee un array de bytes hasta buf.length. Devuelve el
número de bytes leidos o -1 cuando se llega al final del flujo.
o int read (byte [] buf, int off, int len) lee len bytes del flujo (o los que pueda)
y los coloca a partir de la posición off del array.
o long skip (long count) salta hasta count bytes de entrada o hasta el final
del flujo de entrada, devolviendo el número de bytes saltados.
o int available() devuelve el número de bytes que están disponibles para
leerse.
o void close() cierra el flujo de entrada que abrió el constructor no-arg,
liberando los recursos asociados a ese flujo. No es necesario invocar este
método ya que el flujo se cierra cuando se destruye el objeto aunque es
conveniente hacerlo ya que vuelca el buffer sobre el disco.
Escritura: la clase OutputStream
La clase abstracta OutputStream es análoga a InputStream sólo que
proporciona métodos para manejar el flujo de salida. Los métodos que incluye son:
o void write (int b) escribe b como byte, que, aunque sea declarado
como int es transformado a byte. Esto es porque habitualmente es el
resultado de una operación previa.
o void write (byte [] buf) escribe un array de bytes.
o void write (byte [] buf, int offset, int count) escribe un array buf de bytes,
empezando en la posición offset y escribiendo count de ellos, deteniendose
antes si encuentra el final del array.
o void flush() vacia el flujo de modo que los bytes que quedaran por escribir
son escritos.
o void close() cierra el flujo de salida liberando los recursos asociados a ese
flujo.
A menos que se diga lo contrario estos métodos lanzan una
excepción IOException si detectan algún error en el flujo de salida.
ENTRADA Y SALIDA ESTANDAR (TECLADO Y PANTALLA)
La entrada/salida estándar (normalmente el teclado y la pantalla,
respectivamente) se definen mediante dos objetos que puede usar el programador
sin tener que crear flujos específicos.
La clase System tiene un miembro dato denominado in que es una instancia
de la clase InputStream que representa al teclado o flujo de entrada estándar. Sin
embrago, el miembro out de la clase System es un objeto de la clase PrintStream,
que imprime texto en la pantalla (la salida estándar).
Para leer un carácter solamente tenemos que llamar a la
función read desde System.in.
try{
System.in.read();
}catch (IOException ex) { }
Obligatoriamente, el proceso de lectura ha de estar en un bloque try..catch.
Esta porción de código es la que se ha empleado en muchas aplicaciones para
detener la ejecución de una aplicación hasta que se pulse la tecla RETORNO.
Para leer un conjunto de caracteres hasta que se pulse la tecla RETORNO
escribimos:
StringBuffer str=new StringBuffer();
char c;
try{
while ((c=(char)System.in.read())!='\n'){
str.append(c);
}
}catch(IOException ex){}
La clase StringBuffer es una clase que nos permite crear strings. Contiene
métodos para añadir nuevos caracteres a un buffer y convertir el resultado final en
un string. Las principales funciones miembro soninsert y append. Usamos una
versión de esta última función para añadir un carácter al final de un objeto de la
clase StringBuffer.
Para convertir un objeto str de la clase StringBuffer a String se usa la
función miembro toString. Esta llamada se hace de forma implícita cuando dicho
objeto se le pasa a System.out.println.
System.out.println(str);
Finalmente, se ha de hacer notar, que la función read miembro
de InputStream devuelve un int que es promocionado a char.
LECTURA Y ESCRITURA DE ARCHIVOS
Existen las clases FileInputStream y FileOutputStream (extendiendo
InputStream y OutputStream) que permiten leer y escribir bytes en archivos. Para
archivos de texto son preferibles FileReader (desciende de Reader) y FileWrite
(desciende de Write), que realizan las mismas funciones. Se puede construir un
objeto de cualquiera de estas cuatro clases a partir de un String que contenga el
nombre o la dirección en disco del archivo o con un objeto de la clase File que
representa dicho archivo.
Ejemplo:
FileReader frl = new FileReader (“archivo.txt”);
es equivalente a:
File f= new File (“archive.txt”);
FileReader fr2 = new FileReader (f);
Si no encuentran el archivo indicado, los constructores de FileReader y
FileInputStream pueden lanzar la excepción java.io.FileNotFoundException.
Los constructores de FileWriter y FileOutputStream pueden lanzar
java.io.IOException. Si no encuentran el archivo indicado, lo crean nuevo. Por
defecto, estas dos clases comienzan a escribir al comienzo del archivo. Para
escribir detrás de lo que ya existe en el archivo ("append"), se utiliza un segundo
argumento de tipo boolean con valor true:
FileWriter fw = new FileWriter("archivo.txt", true);
Las clases que se explican a continuación permiten un manejo más fácil y
eficiente que las vistas hasta ahora.
Si no encuentran el archivo indicado, los constructores de FileReader y
FileInputStream pueden lanzar la excepción java.io.FileNotFoundException.
SERIALIZACIÓN
o Proporciona un mecanismo de persistencia e integridad.
o Permite convertir un objeto a un flujo de bytes para ser tratados por un
stream.
o Se obtiene mediante la implementación del interface java.io.Serializable.
o Este interface no defibe ningún método.
o Proceso reversible:
Serialización – deserialización
Escritura – lectura.
Ejemplo:
LECTURA DE UN ARCHIVO EN UN SERVIDOR DE INTERNET
La clase básica para esto es URL. Con ella indicamos la dirección web del
fichero y establecemos la conexión.
import java.net.URL; import java.net.URLConnection; ... try { URL url = new URL("http://mas.lne.es/fotos/img/2007/10/62/203093470447035b9bc5a095.43783284-foto_verano.jpg"); URLConnection urlCon = url.openConnection(); ... } catch (Exception e) { ... }
Si no se sabe el tipo de fichero que tiene el enlace, se pregunta a la
clase URLConnection. Desde luego, el tipo de fichero es totalmente anecdótico,
puesto que el método aquí expuesto vale para cualquier tipo de fichero, incluidos
los html.
// Esto saca por pantalla "image/jpeg" System.out.println(urlCon.getContentType());
Para acceder al contenido y descargarlo en un fichero local, se pide
a URLConnection el getInputStream() y se lee y escribe en un fichero local hasta
el final.
// acceso al contenido web InputStream is = urlCon.getInputStream(); // Fichero en el que queremos guardar el contenido FileOutputStream fos = new FileOutputStream("e:/foto.jpg"); // buffer para ir leyendo. byte [] array = new byte[1000]; // Primera lectura y bucle hasta el final int leido = is.read(array); while (leido > 0) { fos.write(array,0,leido); leido=is.read(array); }
// Cierre de conexion y fichero. is.close(); fos.close();
JAVA FOUNDATION CLASSES (JFC) Y JAVA 2D
Java Foundation Classes (JFC, en castellano Clases Base Java) son un
framework gráfico para construir interfaces gráficas de usuario portables basadas
en Java.
JFC se compone deAbstract Window Toolkit (AWT), Swing y Java 2D.
Juntas, suministran una interfaz de usuario consistente para programas Java,
tanto si el sistema de interfaz de usuario subyacente es Windows, Mac OS
X o Linux.
AWT es la más antigua de las dos APIs de interfaz, y fue criticada
duramente por ser poco más que una envoltura alrededor de las capacidades
gráficas nativas de la plataforma anfitrión. Esto significa que los widgets estándar
en la AWT confían en esas capacidades de los widgets nativos, requiriendo que el
desarrollador también este prevenido de las diferencias entre plataformas anfitrión.
Una API de gráficos alternativa llamada Internet Foundation Classes fue
desarrollada en código más independiente de la plataforma por Netscape.
Últimamente, Sun mezcló la IFC con otras tecnologías bajo el nombre "Swing",
añadiendo la capacidad para un look and feel enchufable de los widgets. Esto
permite a los programas Swing mantener la base del código independiente de la
plataforma, pero imita el look de la aplicación nativa.
Java 2D es un API para dibujar gráficos en dos dimensiones usando
el lenguaje de programación Java. Cada operación de dibujo Java 2D puede
tratarse como rellenar unaforma usando un pincel y componiendo el resultado en
la pantalla.
Conceptualmente, dibujando una línea negra en Java 2D puede pensarse
como crear un segmento de línea, transformarlo de acuerdo a la transformación
actual, moviéndolo para crear un rectángulo fino, consultando su forma para
computar los píxeles que están siendo afectados, generando los píxeles que
usan java.awt.Color.BLACK, y entonces componiendo los resultados en la
pantalla.
Sin embargo, realizar esta secuencia completa de pasos para cada
operación de dibujado sería muy ineficiente. Java 2D por lo tanto optimiza las
operaciones de dibujado comunes para que muchos de esos pasos puedan
saltarse. Si el pincel es de un color sólido simple, por ejemplo, no hay necesidad
de ordenar que genere una lista de los colores que van a ser pintados. Asimismo,
si el compuesto por defecto completamente opaco está en uso, actualmente pedir
que realice la operación de composición es innecesario y resultaría en esfuerzo
inútil.
Java 2D realiza la mínima cantidad de trabajo necesario para hacer
que parezca como si realizara todos los pasos para cada operación, por lo tanto
conserva gran flexibilidad y alto rendimiento.
JAVA MEDIA FRAMEWORK (JMF)
Java Media Framework o JMF (en español entorno de trabajo multimedia de
Java) es una extensión de Java que permite la programación de
tareas multimedia en este lenguaje de programación.
Sus principales características son:
Estabilidad debida a que funciona sobre la máquina virtual java (JVM).
Sencillez, ya que permite, usando unos pocos comandos, realizar complejas
tareas multimedia.
Potencia, permitiendo la manipulación de elementos multimedia de vídeo y
audio locales (procedentes de la misma máquina en la que se ejecuta el
programa), así como la retransmisión en tiempo real de vídeo y audio a
través de la red mediante el protocolo RTP.
JMF no se incluye en la JDK, ni en la JRE, sino que debe conseguirse como
un paquete externo.
JAVA 3D
Java 3D es un proyecto que permite crear entornos tridimensionales en el
lenguaje Java.
Es una API para gráficos 3D para el lenguaje de programación Java la cual
corre sobre OpenGL o Direct3D. Desde la version 1.2 Java 3D es desarrollado
bajo las especificaciones Java Community Process.
JAVA BEANS
Son un modelo de componentes creado por Sun Microsystems para la
construcción de aplicaciones en Java.
Se usan para encapsular varios objetos en un único objeto (la vaina
o Bean en inglés), para hacer uso de un solo objeto en lugar de varios más
simples.
La especificación de JavaBeans de Sun Microsystems los define como
"componentes de software reutilizables que se puedan manipular visualmente en
una herramienta de construcción".
A pesar de haber muchas semejanzas, los JavaBeans no deben confundirse
con los Enterprise JavaBeans (EJB), una tecnología de componentes del lado
servidor que es parte de Java EE.
Dentro de un JavaBean podemos distinguir tres partes:
Propiedades: Los atributos que contiene.
Métodos: Se establecen los métodos get y set para acceder y modificar los
atributos.
Eventos: Permiten comunicar con otros JavaBeans.
Ejemplo:
public class PersonaBean implements java.io.Serializable { private String nombre; private int edad; public PersonaBean() { // Constructor sin argumentos } public void setNombre(String n) { this.nombre = n; } public void setEdad(int e) { this.edad = e; } public String getNombre() { return (this.nombre); } public int getEdad() { return (this.edad); } }
RMI Y JAVA IDL
RMI (Java Remote Method Invocation) es un mecanismo ofrecido
por Java para invocar un método de manera remota. Forma parte del entorno
estándar de ejecución de Java y proporciona un mecanismo simple para la
comunicación de servidores en aplicaciones distribuidas basadas exclusivamente
en Java. Si se requiere comunicación entre otras tecnologías debe
utilizarseCORBA o SOAP en lugar de RMI.
RMI se caracteriza por la facilidad de su uso en la programación por estar
específicamente diseñado para Java; proporciona paso de objetos por referencia
(no permitido por SOAP), recolección de basura distribuida (Garbage Collector
distribuido) y paso de tipos arbitrarios (funcionalidad no provista por CORBA).
A través de RMI, un programa Java puede exportar un objeto, con lo que dicho
objeto estará accesible a través de la red y el programa permanece a la espera de
peticiones en un puerto TCP. A partir de ese momento, un cliente puede
conectarse e invocar los métodos proporcionados por el objeto.
La invocación se compone de los siguientes pasos:
Encapsulado (marshalling) de los parámetros (utilizando la funcionalidad
de serialización de Java).
Invocación del método (del cliente sobre el servidor). El invocador se queda
esperando una respuesta.
Al terminar la ejecución, el servidor serializa el valor de retorno (si lo hay) y lo
envía al cliente.
El código cliente recibe la respuesta y continúa como si la invocación hubiera
sido local.
Ejemplo:
Un servidor RMI consiste en definir un objeto remoto que va a ser utilizado
por los clientes. Para crear un objeto remoto, se define una interfaz, y el objeto
remoto será una clase que implemente dicha interfaz. Crear un servidor de
ejemplo mediante 3 pasos:
Definir la interfaz remota. Cuando se crea una interfaz remota:
La interfaz debe ser pública.
Debe heredar de la interfaz java.rmi.Remote, para indicar que puede llamarse
desde cualquier máquina virtual Java.
Cada método remoto debe lanzar la excepción java.rmi.RemoteException en su
cláusula throws, además de las excepciones que pueda manejar.
public interface MiInterfazRemota extends java.rmi.Remote
{
public void miMetodo1() throws java.rmi.RemoteException;
public int miMetodo2() throws java.rmi.RemoteException;
}
Java IDL o Java Interface Description Language es una
implementación CORBA que permite que dos objetos interactúen sobre diferentes
plataformas a través de una red. Java IDL al ser una interfaz permite que los
objetos interactúen sin importar el lenguaje en que estén escritos, a diferencia
de Java RMI que solo soporta objetos distribuidos escritos en Java.
Esto se logra ya que Java IDL está basado en Common Object Request
Brokerage Architecture (CORBA), un estándar para objetos distribuidos. CORBA
fue definido y está controlado por elObject Management Group (OMG) que define
las APIs, el protocolo de comunicaciones y los mecanismos necesarios para
permitir la interoperatividad entre diferentes aplicaciones escritas en diferentes
lenguajes y ejecutadas en diferentes plataformas, lo que es fundamental
en computación distribuida.
Para soportar la interacción entre objetos de programas separados, Java
IDL proporciona un Object Request Broker (ORB) que es una biblioteca de clases
que permite una comunicación de bajo nivel entre aplicaciones Java IDL y
aplicaciones compatibles con CORBA.
JAVA NATIVE INTERFACE (JNI)
Java Native Interface (JNI) es un framework de programación que permite
que un programa escrito en Java ejecutado en la máquina virtual java (JVM)
pueda interactuar con programas escritos en otros lenguajes
como C, C++ y ensamblador.
El JNI se usa para escribir métodos nativos que permitan solventar
situaciones en las que una aplicación no puede ser enteramente escrita en Java,
como por ejemplo en el caso de que la biblioteca estándar de clases no
proporcione soporte para funcionalidades dependientes de la plataforma.
También se usa para modificar programas existentes escritos en algún otro
lenguaje, permitiéndoles ser accesibles desde aplicaciones Java. Muchas de las
clases de la API estándar de Java dependen del JNI para proporcionar
funcionalidad al desarrollador y al usuario, por ejemplo las funcionalidades de
sonido o lectura/escritura de ficheros. El desarrollador debe asegurarse que la API
estándar de Java no proporciona una determinada funcionalidad antes de recurrir
al JNI, ya que la primera ofrece una implementación segura e independiente de la
plataforma.
El framework JNI permite a un método nativo utilizar los objetos Java de la
misma forma en que el propio código de Java lo hace. Un método nativo puede
crear objetos Java; y examinarlos y utilizarlos para que lleven a cabo su función.
Un método nativo puede asimismo examinar y utilizar objetos que han sido
creados por código de aplicación escrito en Java.
A menudo se denomina a JNI como la "válvula de escape" para
desarrolladores dado que les permite añadir funcionalidades a sus aplicaciones
que el API de Java no puede proporcionar.
Puede ser usado para interactuar con código escrito en otros lenguajes
como C++, también se usa para operaciones y cálculos de alta complejidad
temporal, porque el código nativo es por lo general más rápido que el que se
ejecuta en una máquina virtual.
En JNI, las funciones nativas se implementan en archivos .c o .cpp por
separado (C++ ofrece una interfaz con JNI ligeramente más clara). Cuando la
máquina virtual invoca a la función, le pasa un puntero a JNIEnv, un puntero
a jobject, y cualquier número de argumentos declarados por el método Java. Una
función de JNI debería parecerse a esto:
JNIEXPORT void JNICALL Java_ClassName_MethodName
(JNIEnv *env, jobject obj)
{
//El método nativo se implementa aquí
}
CONCLUSIÓN
La JVM es la esencia de la aplicación JAVA diseñada, es como la base o el
entorno donde se ejecutara nuestras aplicaciones java y permitirá que corra sobre
cualquier plataforma que soporte java (cualquier sistema operativo que tengamos
instalado o donde se correrá nuestro software).
La API de JAVA es la que nos permitirá crear nuestros programas utilizando
las herramientas que nos suministra el lenguaje, como son clases para procesar
archivos, sockets, crear ventanas, etc, en otras palabras son los medios que
suministra JAVA para desarrollar las diferentes aplicaciones, esto provee un
conjunto de plantillas para diseñar y efectuar toda las tareas necesarias que
deseamos incorporar en un programa que es independiente.
La importancia de Java radica en la posibilidad de crear o diseñar software
y poder ser ejecutado en diferentes plataformas donde se requiere, sin la
necesidad de estar modificándolo. Además de esto, es una herramienta diseñada
con muchos elementos parecidos a C++ pero en una versión mejorada, más
sencilla de manejar, con menos complejidad y con barreras de seguridad en su
lenguaje y ejecución.
Se dice que JAVA es portable, debido a que el código que se genera es un
código independiente que es el que nos permitirá poderlo usar en las distintas
plataformas, sin que cambie la esencia del software diseñado, esto quiere decir
que será el mismo programa en cualquier plataforma. Por ejemplo que puedes
desarrollar un software en un sistema operativo como Windows y después
ejecutarlo en Linux, sin necesidad de compilar en la otra plataforma. Se dice que
es portable, ya que el código que genera el proceso de compilación no es
ejecutable, sino que es un código intermedio (bytecodes) el que no está amarrado
a una plataforma específica, sino que es independiente.
REFERENCIAS BIBLIOGRÁFICAS Y ELECTRÓNICAS
LIBROS
“JAVA 1.2 AL DESCUBIERTO”; Jaworski, Jamie; Ed. Prentice Hall; Madrid, 1999;
ISBN 84-8322-061-X
"JAVA Network Security"; Macgregor, R. | Durbin, D. | Owlett, J. | Yeomans, A.;
Prentice Hall; 1998; ISBN 0-13-761529-9
"Programación en JAVA"; Cuenca Jiménez, Pedro; Anaya; 1997; ISBN 84-415-
0174-2
“PCWorld”; Revista; Ed. IDG Communications; Números 147, 148, 155 del año
1998; ISBN 0213-1307
INTERNET
http://java.sun.com/a-z/
http://www.programacion.net
http://dir.yahoo.com/Computers_and_Internet/Programming_Languages/Java/
http://www.iti.upv.es:81/java/
http://www.idg.es/pcworld
http://www.omg.org
http://www.idg.es/iworld
http://www.gamelan.com
http://www.javaworld.com
http://www.geocities.com/SiliconValley/Lakes/2227/
http://www.ibm.com/developer/java/
http://forum.java.sun.com
http://es.wikipedia.org