1. Republica Bolivariana De Venezuela
Instituto Universitario Politécnico “Santiago Mariño”
Extensión Porlamar
Realizado Por:
María F. Suarez Salazar
C.I 20.905.333
2. INTRODUCCIÓN
Java fue originalmente desarrollado por James Gosling de Sun Microsystems (la
cual fue adquirida por la compañía Oracle) y publicado en el 1995 como un componente
fundamental de la plataforma Java de Sun Microsystems.
Java es una de los lenguajes de programación mas utilizado actualmente ya que
satisface y se adapta a las necesidades del usuario; es una de las herramientas más
utilizadas en el mundo informático.
Este fue creado con el propósito de ser un lenguaje de programación de propósito
general, concurrente, orientado a objetos y basado en clases que fue diseñado
específicamente para tener tan pocas dependencias de implementación como fuera posible.
3. ENTRADA Y SALIDA DE DATOS EN JAVA
Según Gabriel Sánchez [documento en línea] se entiende como:
La E/S básica por terminal con formato se lleva a cabo
mediante readLine y println. La entrada estándar es System.in y la salida estándar
es System.out
El mecanismo básico para E/S con formato utiliza el tipo String. En la salida +
combina dos valores de tipo String. Si el segundo argumento no es un valor de tipo String,
se crea un valor temporal de tipo String para él, siempre que sea de tipo primitivo. Estas
conversiones al tipo String se pueden definir también para objetos.
Un modo sencillo de realizar una lectura de la entrada es leer una sola línea
almacenándola en un objeto de tipo String, para lo que se emplea readLine. Este método lee
hasta que encuentra un final de línea o el final del fichero. Los caracteres leídos salvo el
final de Línea (en el caso de que se encuentre), se devuelven como un nuevo String.
ParareadLine, se debe construir un objeto BufferedReader sobre un
objetoInputStreamReader que a su vez se crea a partir de System.in
Ejemplo:
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String nombre;
System.out.println("Introduzca un nombre:");
nombre=in.readLine();
4. CLASES PARA LECTURA Y ESCRITURA EN JAVA
Según Ángel Franco García [documento en línea]:
Lectura
Las clases Reader e InputStream son similares aunque se refieren a distintos tipos
de datos, lo mismo ocurre con Writer y OutputSream. La clase reader tiene métodos que
nos permiten leer caracteres. Sin embargo, suele ser habitual querer las líneas completas,
bien porque nos interesa la línea completa, bien para poder analizarla luego y extraer
campos de ella. FileReader no contiene métodos que nos permitan leer líneas completas,
pero sí BufferedReader. Afortunadamente, podemos construir un BufferedReader a partir
del FileReader de la siguiente forma:
Por ejemplo, Reader proporciona tres métodos para leer un carácter char o un array
de caracteres
int read()
int read(char buf[])
int read(char buf[], int offset, int len)
InputStream proporciona métodos similares para leer un byte o un array de bytes.
int read()
int read(byte buf[])
int read(byte buf[], int offset, int len)
La primera versión lee un byte como entero del flujo de entrada, devuelve –1 si no
hay más datos que leer. La segunda versión, lee un array de bytes devolviendo el número de
bytes leídos. La tercera versión, lee también, un array de bytes, pero nos permite
especificar, la posición de comienzo del array en la que se empiezan a guardar los bytes, y
el máximo número de bytes que se van a leer.
5. Dichas clases definen otras funciones miembro que no estudiaremos de momento.
Escritura
La clase Writer proporciona tres métodos para escribir un carácter char o un array
de caracteres
int write(int c)
int write(char buf[])
int write(char buf[], int offset, int len)
La clase OutputStream proporciona métodos similares
int write(int c)
int write(byte buf[])
int write(byte buf[], int offset, int len)
ENTRADA Y SALIDA ESTÁNDAR (TECLADO Y PANTALLA)
Según Ángel Franco García [documento en línea]:
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 claseSystem 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{
6. 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 son insert 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.
7. SERIALIZACION
Para aclarar este concepto, aquí se da una definición formal del concepto de
serialización de datos. “La serialización de datos es el proceso en el que se toman objetos y
se convierte su información de estado en un formato que permita su transporte o su
almacenamiento. La acción inversa consiste en deshacer la serialización y dejar el objeto
con la misma forma que tenía inicialmente”. Dicho de una manera más simple, la
serialización consiste en transformar datos que tienen una forma, a otra forma, pero
manteniendo su significado.
La necesidad de incluir en este proyecto la “serialización de datos” se pone de
manifiesto cuando se intenta enviar al servicio web la información necesaria para calcular
las diferencias entre las imágenes.
Desde el inicio del proyecto, se tratan las imágenes como una array bidimensional,
en el que cada posición contiene un número de entre 0 y 255. Por otro lado, la función que
calcula los cambios entre las dos imágenes de entrada, necesita como parámetros de
entrada, entre otros, las dos imágenes.
Entre los tipos de datos que se le pueden pasar a los métodos de servicios web y los
tipos de datos que devuelven se encuentran: los tipos de datos primitivos y arrays
unidimensionales de tipos primitivos, entre otros. Como se puede observar, en ningún caso
se contempla los arrays de dos dimensiones.
Por esta razón, se ha desarrollado una función que transforma
el array de double bidimensional en un array unidimensional del tipo primitivo String . De
esta manera se puede enviar sin ningún problema la imagen como un array unidimensional
de tipo String. Cuando las imágenes llegan al método del servicio web, se deshace la
serialización y se puede trabajar con la imagen en formato array bidimensional.
8. JAVA FOUNDATION CLASSES
Las clases Java fundamentales (JFC) son un conjunto integral de servicios y
componentes GUI que simplifican enormemente el desarrollo y despliegue de aplicaciones
de escritorio de calidad comercial y de Internet / Intranet.
Las 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 de Abstract 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
Con Java 2D, los desarrolladores pueden hacer, manipular y transformar las
imágenes 2D complejas y texto. Java 2D permite la creación de los componentes más ricos
de futuro y sus aplicaciones.
9. En computación, 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 una forma usando un pincel y componiendo el resultado en la pantalla.
Estos objetos son parte necesaria de cada operación de dibujo Java 2D.
Formas
Una forma en Java 2D es un límite infinitamente delgado el cual define un interior y
un exterior. Los Píxeles internos de la forma están afectados por la operación de dibujo, los
que están fuera no.
Intentar rellenar un segmento de línea recto extremadamente fino resultará en que
no habrán píxeles afectados, por lo tanto una forma no contiene píxeles. En su lugar, un
rectángulo fino se debe usar para que la forma contenga algunos píxeles.
Pinceles
Un pincel genera los colores que serán usados para cada píxel de la operación de
relleno. El pincel más simple es java.awt.Color, el cual genera el mismo color para todos
los píxeles. Pinceles más complicados pueden producir gradientes, imágenes, o cualquier
combinación de colores. Rellenar una forma circular usando el color amarillo resulta en un
círculo sólido amarillo, mientras rellenar la misma forma circular usando un pincel que
genera una imagen produce un recorte circular de la imagen.
Compuestos
Durante cualquier operación de dibujo, hay una fuente (los píxeles que son
producidos por el pincel) y un destino (los píxeles ya en la pantalla). Normalmente, los
píxeles fuente simplemente sobrescriben los píxeles de destino, pero el compuesto permite
modificar este comportamiento.
El compuesto, dados los píxeles fuente y destino, produce el resultado final que por
último aparece en la pantalla. El compuesto más común esjava.awt.AlphaComposite, el
cual trata los píxeles que están siendo dibujados como parcialmente transparentes, para que
los píxeles destino se muestren en algún grado.
10. Rellenado
Para rellenar una forma, el primer paso es identificar que píxeles caen dentro de la
forma. Estos píxeles serán afectados por la operación de relleno. Los píxeles que están
parcialmente dentro y parcialmente fuera de la forma pueden ser afectados en menor grado
si está activado el Anti-aliasing.
El pincel es requerido para generar un color de cada uno de los píxeles que se van a
pintar. En el caso común del relleno de un color sólido, cada píxel será asignado al mismo
color.
El compuesto toma los píxeles generados por el pincel y los combina con los píxeles
que ya están en la pantalla para producir el resultado final.
Java Media Framework
Es una extensión de Java que permite la programación de tareas multimedia en este
lenguaje. Permite a audio, vídeo y otros medios basados en el tiempo que se añaden a las
aplicaciones y applets incorporados en la tecnología Java. Este paquete opcional, que puede
capturar, reproducir, arroyo, y convierte múltiples formatos de medios, se extiende la
plataforma Java 2, Standard Edition (J2SE) para los desarrolladores multimedia,
proporcionando un poderoso conjunto de herramientas para el desarrollo, la tecnología
multi-plataforma escalable.
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.
11. JAVA 3D
Según Ricard Lou Torrijos [documento en línea] se entiende como:
El API Java 3D es un interface para escribir programas que muestran e interactúan
con gráficos tridimensionales. Java 3D es una extensión estándar del JDK 2 de Java. El API
Java 3D proporciona una colección de constructores de alto-nivel para crear y manipular
geometrías 3D y estructuras para dibujar esta geometría. Java 3D proporciona las funciones
para creación de imágenes, visualizaciones, animaciones y programas de aplicaciones
gráficas 3D interactivas.
El API 3D de Java es un árbol de clases Java que sirven como interface para
sistemas de renderizado de gráficos tridimensionales y un sistema de sonido. El
programador trabaja con constructores de alto nivel para crear y manipular objetos
geométricos en 3D. Estos objetos geométricos residen en un universo virtual, que luego es
rende rizado. El API está diseñado con flexibilidad para crear universos virtuales precisos
de una amplia variedad de tamaños, desde astronómicos a subatómicos.
A pesar de toda esta funcionalidad, el API es sencillo de usar. Los detalles de
renderizado se manejan automáticamente. Aprovechándose de los Threads Java, el
renderizador Java 3D es capaz de renderizar en paralelo. El renderizador también puede
optimizarse automáticamente para mejorar el rendimiento del renderizado.
Un programa Java 3D crea ejemplares de objetos Java 3D y los sitúa en un
estructura de datos de escenario gráfico. Este escenario gráfico es una composición de
objetos 3D en una estructura de árbol que especifica completamente el contenido de un
universo virtual, y cómo va a ser renderizado.
Los programas Java 3D pueden escribirse para ser ejecutados como aplicaciones solitarias o
como applets en navegadores que hayan sido extendidos para soportar Java 3D, o ámbos.
12. JAVA BEANS
Según Ángel Franco García [documento en línea]:
Un JavaBean o bean es un componente hecho en software que se puede reutilizar y
que puede ser manipulado visualmente por una herramienta de programación en lenguaje
Java.
Para ello, se define un interfaz para el momento del diseño (design time) que
permite a la herramienta de programación o IDE, interrogar (query) al componente y
conocer las propiedades (properties) que define y los tipos de sucesos (events) que puede
generar en respuesta a diversas acciones.
Aunque los beans individuales pueden variar ampliamente en funcionalidad desde los
más simples a los más complejos, todos ellos comparten las siguientes características:
Introspection: Permite analizar a la herramienta de programación o IDE como
trabaja el bean
Customization: El programador puede alterar la apariencia y la conducta del bean.
Events: Informa al IDE de los sucesos que puede generar en respuesta a las acciones
del usuario o del sistema, y también los sucesos que puede manejar.
Properties: Permite cambiar los valores de las propiedades del bean para
personalizarlo (customization).
Persistence: Se puede guardar el estado de los beans que han sido personalizados
por el programador, cambiando los valores de sus propiedades.
En general, un bean es una clase que obedece ciertas reglas:
Un bean tiene que tener un constructor por defecto (sin argumentos)
Un bean tiene que tener persistencia, es decir, implementar el interface Serializable.
13. Un bean tiene que tener introspección (instrospection). Los IDE reconocen ciertas
pautas de diseño, nombres de las funciones miembros o métodos y definiciones de
las clases, que permiten a la herramienta de programación mirar dentro del bean y
conocer sus propiedades y su conducta.
RMI
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 utilizarse CORBA 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.
JAVA IDL
Según Ricard Lou Torrijos [documento en línea]:
Java IDL es una tecnología para objetos distribuidos -- es decir, objetos
interactuando sobre diferentes plataformas a través de una red. Java IDL es similar a RMI
(Remote Method Invocation), que soporta objetos distribuidos escritos enteramente en Java.
Sin embargo, Java IDL permite intractuar a los objetos sin importar si están escritos en Java
o en cualquier otro lenguaje como C, C++, COBOL, etc.
14. Esto es posible porque Java IDL está basado en "Common Object Request
Brokerage Architecture" (CORBA), un modelo industrial estandard para objetos
distribuidos. La característica principal de CORBA es IDL, (Interface Definition
Language). Caa lenguaje que soporte CORBA tiene su propio mapeo IDL -- y como su
nombre implica, Java IDL soporta el mapeo para Java. CORBA y los mapeos IDL son el
trabajo de un consorcio industrial conocido como OMG (Object Management Group). Sun
es un miembro fundacional del OMG, y el equipo Jva IDL ha jugao un papel activo en la
definición del mapeo IDL-a-Java.
Para soportar la interacción entre objetos de programas separados, Java IDL
proporciona un Object Request Broker, o ORB. El ORB es una librería de clases que
permite una comunicación de bajo nivel entre aplicaciones Java IDL y aplicaciones
compatibles con CORBA. Esto está empezando a parecer una sopa de letras, no te
preocipes, los detalles sobre CORBA, IDL y ORB vienen en la próxima página.
Esta sección camina a través del diseño y desarrollo de una sencilla pareja de aplicaciones
Java IDL que interactuan. Empiza mostrando la arquitectura general de CORBA, luego
continúa con una introducción a los pasos para construir aplicaciones CORBA en Java IDL.
Finalmente, realiza cada paso para producir un cliente y un servidor que interactuan usando
CORBA.
JAVA NATIVE INTERFACE
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
15. 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.
Dado que -como se ha dicho antes- 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.
16. CONCLUSIÓN
Java es una tecnología que se usa para el desarrollo de aplicaciones que
convierten a la Web en un elemento más interesante y útil. Este lenguaje de
programación a evolucionado a través de los los convirtiendo en uno de los más
completos en la actualidad.
Su intención es permitir que los desarrolladores de aplicaciones escriban el
programa una vez y lo ejecuten en cualquier dispositivo lo que quiere decir que
el código que es ejecutado en una plataforma no tiene que ser recompilado para correr
en otra. Gracias a estas y otras ventajas Java se conviertioa partir del 2012, uno de los
lenguajes de programación más populares en uso, particularmente para aplicaciones
de cliente-servidor de web, con unos 10 millones de usuarios reportados.
17. REFERENCIAS
Ricard Lou Torrijos [documento en línea] disponible en:
http://www.programacion.com/articulo/java_idl_86 (Consultado el 28.06.13)
Ángel Franco García Torrijos [DOCUMENTO EN LINEA] DISPONIBLE EN:
http://www.sc.ehu.es/sbweb/fisica/cursojava/applets/javabeans/fundamento.htm
(Consultado el 28.06.13)
Ricard Lou Torrijos Torrijos [documento en línea] disponible en:
http://www.programacion.com/articulo/java_3d_169 (Consultado el 28.06.13)
Documento S/A [documento en línea] disponible en:
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.html (Consultado el
28.06.13)
Documento S/A [Documento en línea] disponible en:
http://www.oracle.com/technetwork/java/faqs-140150.html (Consultado el 28.06.13)
Documento S/A [Documento en línea] disponible en:
http://147.96.80.209/SI_G2_04_05/src/proyecto/Serializacion.htm (Consultado el 28.06.13)
Ángel franco García [Documento en línea] disponible en:
http://www.sc.ehu.es/sbweb/fisica/cursojava/fundamentos/archivos/flujos.htm (Consultado
el 28.06.13)
Ángel franco García[Documento en línea] disponible en:
http://www.sc.ehu.es/sbweb/fisica/cursojava/fundamentos/archivos/teclado.htm
(Consultado el 28.06.13)