JAVA
Es
un lenguaje de programación de alto nivel orientado a objetos,
desarrollado por James Gosling en 1995. El lenguaje en sí mismo toma
mucha de su sintaxis de C, Cobol y Visual Basic, pero tiene
un modelo de objetos más simple y elimina herramientas de bajo nivel, que
suelen inducir a muchos errores, como la manipulación directa
de punteros o memoria. La memoria es gestionada mediante
un recolector de basura.
Las aplicaciones
Java están típicamente compiladas en un bytecode,
aunque la compilación en código máquina nativo también es posible. En
el tiempo de ejecución, el bytecode es
normalmente interpretado o compilado a código nativo para la
ejecución, aunque la ejecución directa por hardware del bytecode por
un procesador Java también es posible.
La implementación
original y de referencia del compilador, la máquina virtual y
las bibliotecas de clases de Java fueron desarrollados por Sun Microsystems
en 1995. Desde entonces, Sun ha controlado las especificaciones, el
desarrollo y evolución del lenguaje a través del Java Community Process,
si bien otros han desarrollado también implementaciones alternativas de estas
tecnologías de Sun, algunas incluso bajo licencias de software libre.
Entre diciembre
de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte
de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las
especificaciones del Java Community Process, de tal forma que prácticamente
todo el Java de Sun es ahora software libre aunque la
biblioteca de clases de paginas web comprendidas en las librerias de objetacion
de objetos para ser compilados como aplicaciones comprimidas no estan
totalmente acopladas de acuerdo con Sun que dice que se requiere un interprete
para ejecutar los programas de Java.
Historia
Java se creó como una herramienta de
programación para ser usada en un proyecto de set-top-box en una
pequeña operación denominada the Green Project en Sun
Microsystems en el año 1991. El equipo (Green Team), compuesto por
trece personas y dirigido por James Gosling, trabajó durante 18 meses en
Sand Hill Road en Menlo Park en su desarrollo.
El lenguaje se denominó
inicialmente Oak (por un roble que había fuera de la oficina
de Gosling), luego pasó a denominarse Green tras descubrir
que Oak era ya una marca comercial registrada para adaptadores
de tarjetas gráficas y finalmente se renombró a Java.
Es frecuentada por algunos de los
miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas
fuentes señalan que podría tratarse de las iniciales de sus creadores: James
Gosling, Arthur Van Hoff, y Andy
Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo
otro acrónimo ambiguo más"). La hipótesis que más fuerza tiene es la que
Java debe su nombre a un tipo de café disponible en la cafetería cercana, de
ahí que el icono de java sea una taza de café caliente. Un pequeño signo que da
fuerza a esta teoría es que los 4 primeros bytes (el número mágico)
de los archivos.class que genera el compilador, son en hexadecimal, 0xCAFEBABE.
A pesar de todas estas teorías, el nombre fue sacado al parecer de una lista
aleatoria de palabras.
El lenguaje Java se creó con cinco
objetivos principales:
1. Debería usar el paradigma de la programación orientada a objetos.
2. Debería permitir la ejecución de un mismo programa en múltiples sistemas
operativos.
3. Debería incluir por defecto soporte para trabajo en red.
4. Debería diseñarse para ejecutar código en sistemas remotos de forma segura.
5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a
objetos, como C++.
Sintaxis
La sintaxis de Java se deriva en
gran medida de C++. Pero a diferencia de éste, que combina
la sintaxis para programación genérica, estructurada y orientada a objetos,
Java fue construido desde el principio para ser completamente orientado a
objetos. Todo en Java es un objeto (salvo algunas excepciones), y todo en Java
reside en alguna clase (recordemos que una clase es un molde a partir del cual
pueden crearse varios objetos).
Hola mundo
Aplicaciones autónomas
// Hola.java
import javac.swing.JOptionPane;
public class
Hola //Declara una clase llamada Hola, que es descendiente de la clase
Object
{
//Entre llaves se
declaran los atributos y métodos de la clase
public static void main(String[] args)
//public: indica
que el método main()es público
//void: indica que la función main() no
devuelve ningún valor
//El método main()debe aceptar siempre
como parámetro un vector de strings
{
JOptionPane.showMessageDialog("Hola,
mundo!");
//Esta línea indica que se va a ejecutar
el método JOptionPane(), encargado de mostrar
//un valor a través de la salida
estándar (en nuestro caso, un String)
//Este método pertenece al atributo out
}
}
Este ejemplo necesita una pequeña
explicación.
§ Todo en Java está dentro de una clase, incluyendo programas autónomos.
§ El código fuente se guarda en archivos con el mismo nombre que la clase que
contienen y con extensión “.java”. Una clase (class) declarada pública (public) debe seguir este convenio. En el
ejemplo anterior, la clase es Hola, por lo que el código fuente debe guardarse en el fichero “Hola.java”
§ El compilador genera un archivo de clase (con extensión “.class”) por cada
una de las clases definidas en el archivo fuente. Una clase anónima se trata
como si su nombre fuera la concatenación del nombre de la clase que la
encierra, el símbolo “$”, y un número entero.
§ Los programas que se ejecutan de forma independiente y autónoma, deben
contener el método”main()”.
§ La palabra reservada”void” indica que el método main no
devuelve nada.
§ El método main debe aceptar un array de
objetos tipo String. Por acuerdo se referencia como ”args”, aunque puede emplearse cualquier otro identificador.
§ La palabra reservada ”static” indica
que el método es un método
de clase, asociado a la clase en vez de una instancias de la misma.
El método main debe ser estático o ’’de clase’’.
§ La palabra reservada public significa que un método puede ser llamado desde otras clases, o que
la clase puede ser usada por clases fuera de la jerarquía de la propia clase.
Otros tipos de acceso son ”private” o ”protected”.
§ La utilidad de impresión (en pantalla por ejemplo) forma parte de la
biblioteca estándar de Java: la clase ‘’’System’’’ define un campo público
estático llamado ‘’’out’’’. El objetoout es una instancia de ‘’’PrintStream’’’, que ofrece el método
‘’’println (String)’’’ para volcar datos en la pantalla (la salida estándar).
§ Las aplicaciones autónomas se ejecutan dando al entorno de ejecución de
Java el nombre de la clase cuyo método main debe invocarse. Por ejemplo, una
línea de comando (en Unix o Windows) de la forma java
–cp . Hola ejecutará el programa del ejemplo (previamente
compilado y generado “Hola.class”). El nombre de la clase cuyo método main se
llama puede especificarse también en el fichero “MANIFEST” del archivo de
empaquetamiento de Java (.jar).
Applets
Las applet Java son programas incrustados
en otras aplicaciones, normalmente una página Web que se muestra en un
navegador.
// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;
public class Hello extends
JApplet {
public void
paint(Graphics g) {
g.drawString("Hola,
mundo!", 65, 95);
}
}
<!-- Hola.html -->
<html>
<head>
<title>Applet Hola
Mundo</title>
</head>
<body>
<applet code="Hola.class"
width="200" height="200">
</applet>
</body>
</html>
Actualmente HTML 5 ha
eliminado el uso de la etiqueta <applet>. Pero todavía existe la forma de
usarlo en HTML5. (Texto en inglés) Java
Applets in HTML5.
La sentencia import indica al compilador de Java que incluya las clases java.applet.
Applet y java.awt. Graphics, para poder referenciarlas por
sus nombres, sin tener que anteponer la ruta completa cada vez que se quieran
usar en el código fuente.
La clase Hola extiende (extends) a la
clase Applet, es decir, es una subclase de ésta.
La clase Applet permite a la aplicación
mostrar y controlar el estado del applet. La clase Applet es un componente del AWT (Abstract Window
Toolkit), que permite al applet mostrar una interfaz gráfica de
usuario o GUI (Graphical User Interface), y responder a eventos generados por
el usuario.
La clase Hola sobrecarga el método paint (Graphics) heredado de la
superclase contenedora (Applet en este caso), para acceder al
código encargado de dibujar. El métodopaint() recibe un objeto Graphics que contiene el contexto gráfico para dibujar el applet. El
método paint() llama al
método drawString (String, int, int) del objeto
Servlets
Los servlets son componentes de la parte
del servidor de Java EE, encargados de generar respuestas a las peticiones
recibidas de los clientes.
// Hola.java
import java.io.IOException;
import javax.servlet.*;
public class Hola extends
GenericServlet
{
public void service(ServletRequest
request, ServletResponse response)
throws ServletException,
IOException
{
response.setContentType("text/html");
PrintWriter
pw = response.getWriter();
pw.println("Hola, mundo!");
pw.close();
}
}
Las sentencias import indican al compilador de Java la inclusión de todas las clases
públicas e interfaces de los paquetes java.io y javax.servlet en
la compilación.
La clase Hola extiende (extends), es heredera
de la clase GenericServlet. Esta clase proporciona la interfaz para
que el servidor le pase las peticiones al servlet y el mecanismo para controlar
el ciclo de vida del servlet.
La clase Hola sobrecarga el método service (ServletRequest,
ServletResponse), definido por la interfaz servlet para
acceder al manejador de la petición de servicio. El métodoservice() recibe un objeto de tipo ServletRequest que contiene
la petición del cliente y un objeto de tipo ServletResponse, usado
para generar la respuesta que se devuelve al cliente. El método service() puede lanzar (throws) excepciones de tipo ServletException e IOException si ocurre algún tipo
de anomalía.
El método setContentType
(String) en el objeto respuesta establece el tipo de contenido MIME a
"text/html", para indicar al cliente que la respuesta a su petición
es una página con formato HTML. El método getWriter() del
objeto respuesta devuelve un objeto de tipo PrintWriter, usado como
una tubería por la que viajarán los datos al cliente. El
métodoprintln (String) escribe la cadena "Hola, mundo!"
en la respuesta y finalmente se llama al método close() para
cerrar la conexión, que hace que los datos escritos en la tubería o
stream sean devueltos al cliente.
Aplicaciones con ventanas
Swing es la biblioteca para la interfaz gráfica de usuario avanzada de la
plataforma Java SE.
// Hola.java
import javax.swing.*;
public class Hola extends
JFrame {
Hola() {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
add(new JLabel("Hola,
mundo!"));
pack();
}
public static void
main(String[] args) {
new
Hola().setVisible(true);
}
}
Las instrucciones import indican al compilador de Java que las clases
e interfaces del paquete javax.swing se incluyan en
la compilación.
La clase Hola extiende (extends) la
clase javax.swing.JFrame, que implementa una ventana con una barra
de título y un control para cerrarla.
El constructor Hola() inicializa el marco o frame llamando al método setDefaultCloseOperation
(int) heredado de JFrame para establecer las operaciones por defecto
cuando el control de cierre en la barra de título es seleccionado al valor
WindowConstants.DISPOSE_ON_CLOSE. Esto hace que se liberen los recursos tomados
por la ventana cuando es cerrada, y no simplemente ocultada, lo que permite a
la máquina virtual y al programa acabar su ejecución. A continuación se crea un
objeto de tipo JLabel con el texto "Hola, mundo!", y se añade al
marco mediante el método add (Component), heredado de la
clase Container. El método pack(), heredado de la
clase Window, es invocado para dimensionar la ventana y distribuir
su contenido.
El método main() es llamado por la JVM al comienzo del programa. Crea una instancia de
la clase Hola y hace la
ventana sea mostrada invocando al método setVisible (boolean) de
la superclase (clase de la que hereda) con el parámetro a true. Véase que, una
vez el marco es dibujado, el programa no termina cuando se sale del método main(), ya que el código del que depende se encuentra en un hilo de
ejecución independiente ya lanzado, y que permanecerá activo hasta que todas
las ventanas hayan sido destruidas.