Este documento trata sobre programación no numérica en Java. Explica conceptos como flujos de entrada y salida, clases para lectura y escritura de datos, serialización de objetos, interfaces gráficas, dibujo en 2D y 3D, JavaBeans, invocación remota de métodos y código nativo.
2. La noción genérica de una fuente de entrada puede
representar muchos tipos de entrada distintos: desde un
archivo de disco, un teclado o un conector (socket) de red.
Estas abstracciones son una manera limpia de tratar la E/S
sin necesitar que todo el código comprenda la diferencia
entre un teclado y una red. Java llama flujo a esta
abstracción y la implementa con varias clases del paquete
java.io.
- Flujos de Entrada: La clase InputStream es la que se encarga
de establecer el flujo de bytes de entrada de información. Es
una clase abstracta que es superclase de todas las subclases
que representan este flujo.
- Flujos de Salida: La clase OutputStream es la superclase de
todas las clases que representan un flujo que se encarga de
escribir bytes en un destino. Su método más importante
es write.
3. Java pose muchas clases para escritura y lectura de datos
Para Lectura tenemos:
Reader.
FileReader.
BufferReader.
InputStream.
Para escritura:
Write.
printWrite.
FileWrite.
OutputStream.
4. Aquí sólo trataremos la entrada/salida que se comunica con
el usuario a través de la pantalla o de la ventana del
terminal.
El acceso a la entrada y salida estándar es controlado por
tres objetos que se crean automáticamente al iniciar la
aplicación: System.in, System.out y System.err
a.) System.in
Este objeto implementa la entrada estándar (normalmente
el teclado). Los métodos que nos proporciona para
controlar la entrada son:
read(): Devuelve el carácter que se ha introducido por el
teclado leyéndolo del buffer de entrada y lo elimina del
buffer para que en la siguiente lectura sea leído el
siguiente carácter. Si no se ha introducido ningún
carácter por el teclado devuelve el valor -1.
skip(n): Ignora los n caracteres siguientes de la entrada.
5.
6. Una gran parte de la vida de una aplicación en memoria, se
dedicará a trabajar con archivos o ficheros, para intercambiar
datos entre distintos dispositivos de almacenamiento, que se
utilizan refiriéndolos con una ruta de directorio y un nombre.
para leer ficheros están las clases:
FileOutputStream.
FileReader.
Para Escritura las Clases:
FileInputStream.
FileWrite.
7. Esto se conoce como "Seriación de Objetos". La idea es almacenar
objetos con datos en un fichero para hacerlos "persistentes", esto es
que los datos no se pierdan cuando se deje de usar al aplicación en
memoria principal. Ello porque la Memoria de Acceso Aleatorio
(RAM) o Principal, es volátil y los datos desaparecen una vez que ha
terminado la aplicación que los controla. Se denomina
"deseriación" a la operación de recuperar los datos desde el fichero
para usarlos en memoria. Las clases que permiten estas
operaciones son ObjectOutputStream, que permite escribir en el
flujo de salida, y ObjectOutputStream, que permite reconstruir los
objetos desde el flujo de entrada. Ambas forman parte del paquete
java.io. Actúan sobre un flujo ya definido por otro objeto.
Ejemplo:
Sobre el fichero: FileOutputStream f = new
FileOutputStream("datos.dat"); //actúa.
Sobre los objetos: ObjectOutputStream o = new ObjectOutputStream(f);
//actúa
8. Las JFC (Java Foundation Classes) son parte de la API de Java
compuesto por clases que sirven para crear interfaces gráficas
visuales para las aplicaciones yapplets de Java. Así como Sun
presenta estas JFC, Microsoft ha desarrollado otro paquete
propio con el nombre de AFD (Application Foundation Classes).
Las JFC contienen dos paquetes gráficos: AWT y Swing.
AWT presenta componentes pesados, que en cada plataforma
sólo pueden tener una representación determinada. Está
disponible desde la versión 1.1 del JDK como java.awt.
Swing presenta componentes ligeros, que pueden tomar
diferente aspecto y comportamiento pues lo toman de una
biblioteca de clases. Está disponible desde la versión 1.2 del JDK
como javax.swing aunque antes se podían encontrar versiones
previas como com.sun.java. o como java.awt.swing.
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:
Formas:
Una forma en Java 2D es un límite infinitamente delgado el cual
define un interior y un exterior.
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.
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).
Rellenado: Para rellenar una forma, el primer paso es identificar
que píxeles caen dentro de la forma.
10. JMF es una API que nos sirve para incluir multimedia en nuestras
aplicaciones de Java, funciona básicamente, recibiendo el
contenido multimedia de alguna fuente, para después procesarlo y
entregarlo en alguna salida multimedia.
Para entender mejor la arquitectura de JMF en la página de Java nos
muestran esta imagen, que es muy ilustrativa y nos ayuda a
comprender mejor esta API.
11. La API (Application Program Interface) Java3D es una interfaz
de programación utilizada para realizar aplicaciones y applets
con gráficos en tres dimensiones. Proporciona a los desarrolladores
un alto nivel para crear y manipular objetos geométrios 3D y para
construir las estructuras utilizadas en el renderizado de dichos
objetos. Se pueden describir grandes mundos virtuales utilizando
estos constructores, que proporcionan a Java3D la
suficiente información para hacer un renderizado de forma
eficiente.
12. Los JavaBeans 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.
13. 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).
14. 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 el Object
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.
15. Aunque la potencia de la API de Java es más que suficiente para casi
todo tipo de aplicaciones, algunas de ellas necesitan utilizar la
potencia específica de una plataforma en concreto, por ejemplo
para conseguir un poco más de velocidad y eficiencia.
Java permite incorporar en sus programas fragmentos de código
nativo es decir, código compilado para una determinada
plataforma, generalmente escrito en C/C++. Así se puede utilizar
código específico de una plataforma, bibliotecas ya escritas...
Para ello Java cuenta con el JNI (Java Native Invocation). Hay que tener
en cuenta que una aplicación que utilice este tipo de métodos
estará violando las directrices de seguridad de la máquina virtual
Java, motivo por el que no se permite incluir métodos nativos
en applets de Java. Para agregar métodos nativos Java a una clase
de Java han de seguirse los siguiente pasos:
1. Escritura del programa Java, invocando métodos nativos
como native.
2. Compilación del programa Java.
3. Creación de un archivo de cabecera nativo (.h)
4. Escritura de los métodos nativos.
5. Creación de una biblioteca con esos métodos nativos.
6. Ejecución del programa Java.