sábado, 24 de marzo de 2007

java

JAVA

MARIA IGNACIA PINILLA MOLINA

COD. 221137205

ELECTIVA 2

Profesor:

ALEJANDRO RAMOS

FUNDACION UNIVERSITARIA PANAMERICANA

BOGOTÁ D.C.

2007

EL PAQUETE (PACKAGE)

Los paquetes son una forma de organizar grupos de clases. Un paquete contiene un conjunto de clases relacionadas bien por finalidad, por ámbito o por herencia.

Los paquetes resuelven el problema del conflicto entre los nombres de las clases. Al crecer el número de clases crece la probabilidad de designar con el mismo nombre a dos clases diferentes.

Las clases tienen ciertos privilegios de acceso a los miembros dato y a las funciones miembro de otras clases dentro de un mismo paquete.

En el Entorno Integrado de Desarrollo (IDE) JBuilder de Borland, un proyecto nuevo se crea en un subdirectorio que tiene el nombre del proyecto. A continuación, se crea la aplicación, un archivo .java que contiene el código de una clase cuyo nombre es el mismo que el del archivo. Se pueden agregar nuevas clases al proyecto, todas ellas contenidas en archivos .java situadas en el mismo subdirectorio. La primera sentencia que encontramos en el código fuente de las distintas clases que forman el proyecto es package o del nombre del paquete.

//archivo MiApp.java

package nombrePaquete;

public class MiApp{

//miembros dato

//funciones miembro

}

//archivo MiClase.java

package nombrePaquete;

public class MiClase{

//miembros dato

//funciones miembro

}

La palabra reservada import

Para importar clases de un paquete se usa el comando import. Se puede importar una clase individual

import java.awt.Font;

o bien, se puede importar las clases declaradas públicas de un paquete completo, utilizando un arterisco (*) para reemplazar los nombres de clase individuales.

import java.awt.*;

Para crear un objeto fuente de la clase Font podemos seguir dos alternativas

import java.awt.Font;

Font fuente=new Font("Monospaced", Font.BOLD, 36);

O bien, sin poner la sentencia import

java.awt.Font fuente=new java.awt.Font("Monospaced", Font.BOLD, 36);

Normalmente, se usa la primera alternativa, ya que es la más económica en código, si tenemos que crear varias fuentes de texto.

Se pueden combinar ambas formas, por ejemplo, en la definición de la clase BarTexto

import java.awt.*;

public class BarTexto extends Panel implements java.io.Serializable{

//...

}

Panel es una clase que está en el paquete java.awt, y Serializable es un interface que está en el paquete java.io

LOS PAQUETES ESTÁNDAR

Paquete

Descripción

java.applet

Contiene las clases necesarias para crear applets que se ejecutan en la ventana del navegador

java.awt

Contiene clases para crear una aplicación GUI independiente de la plataforma

java.io

Entrada/Salida. Clases que definen distintos flujos de datos

java.lang

Contiene clases esenciales, se importa implícitamente sin necesidad de una sentencia import.

java.net

Se usa en combinación con las clases del paquete java.io para leer y escribir datos en la red.

java.util

Contiene otras clases útiles que ayudan al programador

PAQUETES (PACKAGES)

Las clases en Java se agrupan por familias que se denominan paquetes (packages).

Todas las clases pertenecen a un paquete. Por ejemplo, la clase String pertenece al paquete java.lang y se dice que el nombre completo de String es java.lang.String.

Para crear un objeto de dicha clase, podemos poner el nombre completo java.lang.String nombreAlumno= "Alexander Bejarano";

En Java podemos referirnos directamente a las clases del paquete java.lang:

String nombreAlumno= "Alexander Bejarano";

En algunos paquetes puede llegar a ser más complicado. Así, la interface List y la clase ArrayList del paquete java.util requeriría la notación completa:

java.util.List notas= new java.util.ArrayList();

Java permite referirnos a los miembros de un paquete por el sombre sencillo de su clase si previamente lo hemos importado:

import java.util.List;

import java.util.ArrayList;

...

List notas= new ArrayList();

La importación puede ser clase a clase como en el ejemplo anterior, o podemos importar todas clases del paquete al tiempo:

import java.util.*;

...

List notas= new ArrayList();

Si existieran clases con el mismo nombre en diferentes paquetes, el sistema pedirá el nombre completo del paquete. Podemos ver que al final no podemos tener dos clases con igual nombre en el mismo paquete.

¿A qué paquete pertenecen nuestras clases?

Lo más sencillo es indicarlo explícitamente:

package paquete.maravilloso;

...

class xxx { ... }

que crea la clase paquete.maravilloso.xxx.

Si no escribimos package, java asigna la clase a un paquete anónimo por defecto, para pequeños experimentos.

UTILIDAD DE LOS PAQUETES

La primera y más evidente ventaja del uso de paquetes es que las clases quedan ordenadas y no hay colisión de nombres. Si dos programadores llaman igual a sus clases y luego hay que juntar el código de ambos, basta explicitar a qué paquete nos referimos en cada caso.

En las prácticas del laboratorio usamos los paquetes para discernir una práctica de otra:

package lprg.p1; // para la primera práctica, por ejemplo

ÁMBITOS DE VISIBILIDAD

Los paquetes también establecen un perímetro de visibilidad para las clases y los miembros (variables y métodos) de las clases cuando no se dice explícitamente si son públic (para cualquiera, en este o en otro paquete) o private (exclusivamente para esta clase).

Así, la clase C, la variable v y el método m de la siguiente clase

package lprg.p1;

class C {

String v= "...";

void m (...) { ... }

}

Serán accesibles para todas las clases del paquete lprg.p1; pero inaccesibles por clases de otros paquetes.

El resultado es una forma muy sencilla de restringir el ámbito a "la familia".

http://www.lab.dit.upm.es/~lprg/material/apuntes/packages/packages.htm

El Paquete java.net javascript:void window.open('/enviomail293.html?/codigos-java/paquete-java.net.html', 'win2','status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=400,height=250,directories=no,location=no');

Java nació como lenguaje para la red y sólo sucesivamente se convirtió en un verdadero lenguaje de programación. Su papel de líder para la programación no se pone en duda y, por eso, pone a disposición del programador diferentes paquetes para llevar a cabo esta programación. Como Java está muy ligado a la red se hace necesario proporcionar herramientas para acceder a distintos servicios de internet como por ejemplo un servidor web. Este es el contenido del paquete:

INTERFACES

ContentHandlerFactory

FileNameMap

SocketImplFactory

SocketOptions

URLStreamHandlerFactory

CLASES

Authenticator

ContentHandler

DatagramPacket

DatagramSocket

DatagramSocketImpl

HttpURLConnection

InetAddress

JarURLConnection

MulticastSocket

NetPermission

PasswordAuthentication

ServerSocket

Socket

SocketImpl

SocketPermission

URL

URLClassLoader

URLConnection

URLDecoder

URLEncoder

URLStreamHandler

EXCEPCIONES

BindException

ConnectException

MalformedURLException

NoRouteToHostException

ProtocolException

SocketException

UnknownHostException

UnknownServiceException

Los ordenadores en Internet comunican intercambiando paquetes de datos, llamados paquetes IP (Internet Protocol). Estos paquetes salen de un ordenador, pasan por varios nudos de la red (Servidor de la red) y llegan a su destino. Para establecer el recorrido intermedio entre los dos ordenadores que quieren comunicare se pone en marcha un algoritmo de routing (hay varios tipos según las exigencias y según el tipo de red).

Para establecer el remite de una comunicación, los destinatarios, los nudos internet, se necesita que cada ordenador conectado a la red tenga un nombre que lo identifique unívocamente. Este nombre es un número y se llama dirección IP.

La dirección IP es un número de 32 bit, que se puede escribir con varios formatos, sin embargo, el más utilizado es el formato decimal separado por puntos. Por ejemplo, una dirección IP es 594. 24.114.462 (Se ha elgido un número cualquiera).

Como los ordenadores recuerdan muy bien los números, pero nosotros los humanos no, se inventaron los DNS (Domain Name System) que asocian unos nombres a estas direcciones IP.

La primera clase del paquete que analizaremos es la InetAddres, que gestiona estas direcciones IP.

La clase tiene varios métodos, entre los que hay uno que devuelve las direcciones Ip del ordenador en el que se está trabajando, otro que, fijado un nombre de dominio, devuelve la dirección IP.

El siguiente ejemplo nos muestra el uso.

port java.net.*;

public class DireccionesIP

{

public static void main(String [] a)

{

String dom="developer.java.sun.com";

try {

InetAddress loc=InetAddress.getByName(dom);

System.out.println("IP de "+dom+" : "+loc.getHostAddress());

}

catch (UnknownHostException e)

{System.out.println("No existe el dominio "+dom);};

try {

InetAddress loc=InetAddress.getLocalHost();

System.out.println("IP local: "+loc.getHostAddress());

System.out.println("Nombre local"+loc.getHostName());

}

catch (UnknownHostException e)

{};

}

}

El paquete dota de clases útiles para tratar los socket fundamentales basados en TCP y en UDP, que son protocoles utilizados en la mayor parte de las aplicaciones Internet. Nosotros no los analizaremos, sino que pasaremos directamente a las clases que gestionan aplicaciones Web de nivel más alto.

Veamos la clase URL.

¿Qué es un URL? Un URL, o Uniform Resource Locator, es un puntero a un recurso web.

Un recurso web puede ser cualquier cosa, un directorio, un archivo, un objeto en red como, por ejemplo, una interfaz para hacer unas query a un database remoto, o para un motor de búsqueda.

Los URL son muchos, cada uno con un protocolo distinto, sin embargo los más utilizados son los que utilizan protocolos HTTP (HyperText Transfer Protocol) y FTP (File Transfer Protocol).

La clase URL se conecta con objetos web accediendo a éstos a través sus direcciones URL.

Los usuarios de HTMLpoint no necesitan más explicaciones sobre el formato de las direcciones URL como http://www.webtaller.com y que la dirección del servidor se identifica como http://www.webtaller.com . Sin embargo, a diferencia de los web browser, el http:// delante de la dirección es indispensable porque distingue el protocolo del URL, protocolo que el Navigator y el Explorer intuyen aunque se omitan. Cuando programemos lo utilizaremos sólo los URL para acceder también a los archivos locales, viéndolos como recursos de la red. Lo haremos porque en los apliques no se pueden utilizar los archivos, por razones de seguridad, entonces para leer un archivo hay que verlo como un recurso de la red.

Las últimas versiones de Java están eliminando esta limitación del lenguaje, utilizando unas firmas que permiten leer y escribir un archivo de forma controlada incluso en la red. Por eso en futuro será posible utilizar incluso los archivos en los archivos, siempre que se asuman algunas responsabilidades.

VEAMOS UNOS CONSTRUCTORES DE OBJETOS URL:

URL(String spec) , crea un objeto URL según la representación a cadena, por ejemplo "HTMLpoint"

URL(String protocol, String host, int port, String file), crea un objeto URL, especificándolo todo, incluso la puerta.

URL(String protocol, String host, int port, String file, URLStreamHandler handler), como el anterior, lo único que especifica también la URLStreamHandler, que es la superclase común a todos los protocolos(HTTP,FTP,Gopher).

URL(String protocol, String host, String file), crea un objeto URL especificando el protocolo, el host y el Archivo en el servidor host, por ejemplo: URL("http","www.cli.di.unipi.it","~castellu/index.html").

Analizamos ahora unos métodos de la clase

boolean equals(Object obj), compara dos objetos URL.

Object getContent(), da el contenido del objeto URL.

String getFile(), da el nobre del archivo del URL.

String getHost(), el host

int getPort(), el número de la puerta

String getProtocol(), el nombre del protocolo.

String getRef(), da el puntero a la URL.

int hashCode(), da el código hash del objeto.

URLConnection openConnection(), abre una conexión con el objeto remoto indicado por la URL.

InputStream openStream(), abre una conexión con el objeto web indicado por la url en forma de flujo de lectura.

String toExternalForm(), da una cadena que representa la URL.

String toString(), da una representación del objeto URL.

A continuación damos un pequeño ejemplo de cómo se utiliza la clase URL.

import java.net.*;

import java.io.*;

public class getPage

{

public static void main(String[] arg)

{

String un;

try {un=arg[0];}

catch (ArrayIndexOutOfBoundsException e)

{

un="http://www.htmlpoint.com/index.asp";

System.out.println("Ninguna URL definida, cojo "+un);

};

System.out.println("URL:"+un);

URL url;

boolean tribilín=false;

try {url= new URL(un);}

catch (MalformedURLException e)

{

System.out.println("URL equivocado, cojo http://www.htmlpoint.com/index.asp ");

url = null;

tribilín=true;

};

if (tribilín) try {url = new URL ("http://www.htmlpoint.com/index.asp ");}

catch (MalformedURLException e){};

BufferedReader stream;

try {stream = new BufferedReader (new InputStreamReader (url.openStream()));}

catch (IOException e){

System.out.println("Error de apertura del archivo");

stream=null;

System.exit(0);

};

File out=new File(".\"+url.getFile());

FileWriter Output;

try {Output=new FileWriter(out);}

catch (IOException e) {Output=null;};

String l;

try

{

while ((l=stream.readLine())!=null)

{

Output.write(l);

};

Output.flush();

Output.close();

}

catch (IOException e){System.out.println("Error de lectura.");};

}

}

El programa coge una url de los parámetros de entrada; si éste no es válido o no hay parámetros, abre por default la url http://HTMLpoint/index.asp. Entonces recoge la página que ha leído y la guarda en el disco.

Como se puede ver, esto se parece a un web browser, utilizando un poco de gráfica se podría visualizar incluso la página. Intente poner en marcha el programa poniendo las siguientes direcciones:

java getPage http://www.webtaller.com

java getPage http://www.yahoo.es

java getPage http://www.microsoft.com

y simplemente java getPage, y vera los resultados.

Autor: HTML Point

http://www.htmlpoint.com/guidajava/java_14.htm

JAVA EN LOS BROWSERS

El primer lugar y el más frecuente, donde encontramos al lenguaje Java, es en los exploradores o navegadores de Internet. Veamos cómo llega hasta ahí.

La World Wide Web:

Llamada así por sus siglas WWW, es la aplicación que ha popularizado a Internet, y ha sido la causante de la explosión de la red de redes.

Hablando sencillamente, la WWW basa su existencia en dos aplicaciones: los servidores de Web y los clientes. Los primeros son programas dedicados, instalados en las máquinas nodos de la red, que atienden a todos los pedidos de los clientes. Estos solicitan archivos, recursos de la Web , en general, archivos HTML y gráficos. Los archivos HTML son archivos de texto, que contienen una descripción de lo que vemos como página en nuestro browser. La sigla HTML significa Hypertext Markup Languaje (lenguaje de marcación de hipertexto), y es el lenguaje que describe las páginas Web.

En esas páginas se colocan textos, gráficos y otros recursos. Es trabajo del cliente, nuestro browser, interpretar esa página, mostrarla en pantalla, y reclamar todo lo que se necesite para armarla, como los gráficos y archivos de sonido que la pueden acompañar.

JAVA EN LA WEB:

Los programas Java son, al fin, otro recurso más, como pueden serlo una página HTML o un archivo gráfico. Al igual que estos últimos viajan desde el servidor a la máquina cliente, y se ejecutan en ésta.

do arme alguna applet, que existe una construcción, la marca HTML , que especifica un determinado lugar en una página Web, para que el browser posicione y ejecute una aplicación Java. Los archivos Java que viajan son de un tipo: se trata de archivos con extensión .class y contienen las instrucciones Java ya compiladas, no viajan en código fuente. Una applet se compone, como mínimo, de un archivo .class, pero puede requerir más archivos .class (con más código para ejecutar), que el browser recupera, o archivos gráficos, de sonido u otros, que la propia applet se encarga de recuperar.

Máquinas Virtuales:

Se ha mencionado que el lenguaje Java se compila, no pensando en una plataforma o procesador en particular, sino produciendo código (que se denomina bytecodes), destinado a ser interpretado por la llamada máquina virtual Java. Esta máquina no es una única, sino que hay una por cada plataforma y, en realidad, cada browser que implementa Java tiene la suya. Así, el Microsoft Explorer usará su máquina en Windows, mientras que el Netscape Navigator usará la suya, que variará de Windows a UNIX.

Pero todas tienen la misma funcionalidad (o debería esperarse eso). Tanto el usuario como los programadores no deberíamos preocuparnos por las distintas implementaciones. Sin embargo, se escuchan quejas de los desarrolladores, originadas en la pequeñas diferencias que se encuentran tanto entre una implementación y otra, como en el aspecto de la interface gráfica.

Además de la máquina virtual, cada browser instala una serie de clases, ya listas para usar, que Java espera tener disponibles en cualquier plataforma. Esas clases tienen una funcionalidad definida, que no debería sufrir modificaciones.

Netscape y Microsoft:

La empresa Netscape, creadora del Netscape Navigator, soporta Java desde la versión 2 de su browser. Microsoft no se ha quedado atrás y soporta Java desde la versión 2.0 de su browser. Microsoft no se ha quedado atrás (pues no le convenía, dado la mayoría de las páginas contiene - aunque sea - un poquito de Java) y soporta Java desde la versión 3.0 de su Internet Explorer. Ambos browsers instalan y usan su propia máquina virtual Java. No hay diferencias apreciables en las prestaciones de estos dos browsers, respecto de Java.

Hay que hacer algunas aclaraciones: en general, los browsers, de cualquier origen, soportan Java en ambientes que permiten la multitarea y los llamados múltiples hilos de ejecución (multihttrading).

Seguridad:

Debido a la naturaleza de Internet, traer programas desde un lugar lejano y no controlado a nuestra computadora, para ejecutarlo, puede ser riesgoso.

Con respecto a las applets Java debemos quedarnos tranquilos: Sun y los constructores de browsers han implementado una política de seguridad, que impide a una applet, por ejemplo, leer o escribir en nuestro disco, o interferir con otras aplicaciones en ejecución. Es tan grande la seguridad que, como programadores, nos puede llegar a molestar: en una applet nunca podremos grabar un archivo local, con datos transitorios o de configuración.

Nuevos browsers:

Entre Netscape (en múltiples plataformas) y Microsoft (en plataformas Windows) acaparan el mercado de los browsers.

Java sin browsers:

Pero no todo es Internet en Java. Este es un lenguaje de uso general, que sólo incidentalmente cobró popularidad en Internet. Podemos desarrollar aplicaciones Java que se ejecuten en nuestra máquina, sin necesidad de estar conectados a la red, y sin el auxilio de browsers. Mientras los programas Java para Internet y páginas HTML se llaman applets, los que pueden ejecutarse fuera de la red se llaman genéricamente aplicaciones.

PRIMERAS APLICACIONES

Creando el programa:

/*

Primera aplicación Java

Compilar con:

javac HolaMundo.java (y se creará un archivo llamado HolaMundo.class)

Ejecutar con:

java HolaMundo

*/

public class HolaMundo {

public static void main(String[ ] args) {

System.out.print ln("Hola Mundo, mundo");

}

}

Compilando el programa:

javac HolaMundo.java

Ejecutando el programa:

java HolaMundo

Analizando el Código:

Nuestra primera clase:

/* y */: es para hacer comentarios. También se pueden usar dos barras //.

Luego de los comentarios, nos encontramos con la declaración:

public class HolaMundo {

Explicación:

La palabra public es para aclarar que la clase HolaMundo será publica, es decir se podrá

acceder a ella desde otra clase. La palabra class se escribe solamente para darle un nombre

a la clase.

El primer método:

public static void main(String[] args) {

Explicación:

Esto declara nuestra primer rutina. Las funciones y rutinas en Java siempre corresponde a una clase, y se denominan métodos. El código de arriba define el método main (principal). Al método anterior se lo declara de tipo void, para indicar que no es una función sino un procedimiento y se lo define como static (estático). Este calificador indica que no es un método que vaya a actuar sobre un objeto de la clase HolaMundo, sino que será ejecutado sin necesidad de crear ningún objeto: es un método de clase (esto queda más claro cuando se estudian clases y objetos en Java).

El método main recibe un arreglo de Strings como único argumento. Este es un vector de cadenas de caracteres representa que los parámetros opcionales que le podemos pasar por la línea de comando. En el ejemplo de arriba no se usaron argumentos.

Escribiendo en pantalla:

Ahora nos encontramos con la sentencia:

System.out.println("Hola, mundo");

<>.()

Explicación:

Esto mostrará un texto en pantalla (Hola, mundo). El texto System.out hace referencia a un objeto: el out del paquete System. Este es un objeto que ya está disponible para nuestro uso, es decir Java nos brinda un serie de clases y objetos ya definidas. Por otro lado la invocación a un objeto es - como ya se mostró con anterioridad -: .() Aquí nos encontramos con el método println ("print line"), que toma los parámetros y los imprime en pantalla.

El método main:

Si volvemos a las instrucciones de ejecución de u programa, vemos que escribimos:

Java HolaMundo

El intérprete busca el archivo HolaMundo.class y comienza a ejecutarlo.

Por convención, cuando al interprete le indicamos una clase a ejecutar, ejecuta un método en particular: el método main. Este es el método que lanza todo el programa. Por eso tuvimos que definirlo. Lo declaramos público justamente para que pueda ser invocado por el intérprete. Lo declaramos estático, porque es invocado directamente, no desde un objeto (como el printl, que es invocado para el objeto System.out). Cuando se arma una applet (programa java a incluir en una página HTML) se puede observar que la forma de lanzar el programa es totalmente distinta. Esta es una de las muchas diferencias entre los aplicaciones Java y applets.

Otra aplicación:

Este programa es sólo un poco más complejo: imprime los factoriales de los primeros diez números naturales.

Factoriales.java

//

// Imprime Factoriales

//

public class Factoriales {

(/** Calculo de Factorial */ static long factorial(int v) {)

if (v>1)

return(v*factorial(v-1));

return(1);

}

public static void main(String[] args) {

int k;

for (k=1;k<=10;k++)

System.out.println(factorial(k));

}

}

Lo compilas: javac Factoriales.java

Lo ejecutas: java Factoriales

Resultado del Programa:

1

2

6

24

120

720

5040

40320

362880

3628800

Analizando el Código:

Explicación:

La novedad en esta aplicación es la definición de un método estático (no necesita de un objeto Factoriales), denominado factorial, que es una función, que devuelve un valor long (entero largo), y recibe como parámetro un valor int (entero). Este método calcula el factorial de un número natural n como n!, siendo:

n!= n * (n-1) * (n-2) * ...

Así el factorial de 4 es:

4! = 4*3*2*1 = 24

En este código se puede ver el uso de la estructura if en:

if (v>1)

return(v*factorial(v-1));

que examina si v es mayor que 1. Si es así, devuelve como valor de la función el resultado de multiplicar v por el factorial de v-1.

En el cuerpo del método main tenemos a declaración de una variable:

int k;

Esta sentencia declara una variable k, que será de tipo int (entero), y que es local al método donde está definida.

Tal vez la parte más compleja es la sentencia for:

for (k=1;k<=10;k++)

System.out.println(factorial(k));

Que hace recorrer a la variable k por los valores desde 1 a 10, y envía a imprimir en pantalla el resultado de invocar factorial(k).

PRIMERAS APPLETS

Applet Hola, Mundo

HolaMundo.java

//

// Applet: Hola mundo!

// Ejecutar con:

// appletviewer HolaMundo.html

//

import java.applet.*;

import java.awt.Graphics;

public class HolaMundo extends Applet {

public void paint(Graphics g) {

g.drawString("Hola mundo!",20,20);

}

}

Hay que compilarla:

Javac HolaMundo.java (lo que es = a HolaMundo.class)

Hay que ejecutarla:

*Crear un archivo HolaMundo.html (con el código correspondiente, lo que se verá más adelante)

*La ejecutas con: appletviewer HolaMundo.html

Necesitamos de tres ficheros: HolaMundo.java, HolaMundo.class y HolaMundo.html

Ejecutando una applet:

Una applet Java no existe por sí misma (sino dentro de una página .html), por eso debemos invocarla desde una página html que hemos creado. Veamos el siguiente ejemplo (supuestamente hemos creado una página que se llama HolaMundo.html):

code=HolaMundo.class

width=330

height=170

>

Dentro del JDK se encuentra un utilitario que permite ejecutar una applet que se encuentra en una pag. html. Se llama appletveiwer, y en este caso se ejecuta así:

Appletviewer HolaMundo.html

Como parámetro no se le pasa el archivo HolaMundo.java sino que la página HolaMundo.html.

Análisis del Código:

Importando paquetes:

Aparecen las líneas :

import java.applet.*;

import java.awt.Graphics;

EXPLICACIÓN:

La palabra import indica que son declaraciones que le avisan al compilador que este programa, usará: En el caso de java.applet.* todas las clases que pertenecen al paquete (packages) applet (por eso el applet.* - el que produce que se usen todas las clases es el "*"). En el caso de java.awt.Graphics indica que se usará el objeto Graphics del paquete awt.

La línea java.applet.* no posee tanta explicación, pero (aproximadamente) no ocurre lo mismo con la línea java.awt.Graphics, veamos:

LA DECLARACIÓN:

import java.awt.Graphics;

afirma que se usa la clase Graphics de las definidas en el paquete java.awt. Este es otro paquete, muy importante, disponible en todas las plataformas Java: es el AWT (Abstract Windows Toolkit), este es el paquete que maneja ventanas e interfaces gráficas, independientes (abstractas) del entorno operativo.

Es un paquete que permite, por ejemplo, definir botones y cajas de texto, portables a Windows, OS/2, Xwindows, o cualquier otro entorno gráfico, siempre usando el mismo código fuente. Si no incluyéramos estas de paquetes, el compilador no sabría resolver nuestras referencias a clases de esos paquetes, como la clase Applet, y la clase Graphics.

Estas clases que usamos son aquellas que nos brinda, de forma predeterminada, Java.

Una clase Applet:

Con el código:

public class HolaMundo extends Applet {

definimos una clase pública (public) de nombre HolaMundo (igual que el nombre del archivo .java)

Pero hay una novedad: extends Applet (herencia). Estas dos palabras declaran que la clase HolaMundo, no es una clase cualquiera, sino una derivada, que extiende de una clase ya definida por Java, la clase Applet (definida en el paquete java.applet). Se dice que la clase HolaMundo hereda todas las propiedades (atributos y métodos) de la clase Applet. Esto es una ventaja que nos brinda la programación orientada/basada a/en objetos: se puede definir nuevas clases basadas en otras ya construidas, por nosotros o por otros (la ayuda mutua es buena). En este caso, la clase Applet es una clase brindada por el entorno Java.

El método paint:

Este es el único método (paint) que definimos para nuestra clase HolaMundo. Este es nuestro primer método no estático: no se aplica a la clase, porque se ejecuta sobre un objeto. El cual lo creará el browser (navegador), en el momento de invocar la clase HolaMundo y así quedaría un objeto - llamémoslo de forma imaginaria - "X". Es decir, el navegador que usemos cargará la clase (Applet) y creará un objeto a partir de esta. Para que el browser controle nuestro objeto usará los métodos de la clase Applet (los puede usar porque los había heredado con anterioridad, por la línea: "public class HolaMundo extends Applet { "

Uno de los métodos que usa el navegador es el método paint. El objetivo que tiene este es dibujar el contenido de la applet, una región rectangular que ocupa en la página HTML. El método paint es llamado por el browser, después de que se haya creado el objeto, para mostrar/dibujar su contenido en la página. Y lo llamará de nuevo cada vez que necesita redibujar el rectángulo correspondiente a la applet. Esto puede ocurrir, por ejemplo, si minimizamos, maximizamos, movemos o cambiamos de tamaño a la ventana del browser. Algo que cave aclarar es que, el objeto que crea el browser, invoca otros métodos (además de paint). Pero no necesitamos declararlos porque los hereda de la clase applet (ventaja de la programación orientada a objetos). Algunos métodos que tiene esta clase son :start, run, stop, etc.

Objeto Graphics:

Código:

public void paint(Graphics g) {

EXPLICACIÓN:

El método paint recibe el parámetro g, un objeto de la clase Graphics (g es un objeto de la clase Graphics porque esta necesita "un lugar, g, en donde caer" y, una vez en este comenzar a llevar a cabo su función), la clase Graphics está definida en el paquete java.awt. Ese objeto (g) tendrá la información sobre el dispositivo que se va a dibujar, como cantidad de colores, tamaño, partes disponibles y partes ocultas, entre otros. Así como antes utilizó el objeto System.out para escribir en pantalla, ahora deberemos usar el objeto de la clase Graphics entregado al método paint, para dibujar (escribir) en la zona de la applet.

Usamos el objeto g en la sentencia:

g.drawString("Hola mundo!",20,20);

que invoca al método drawString del objeto g. Este método recibe tres parámetros;

*Primero: es qué texto se mostrará en pantalla.

g.drawString("Hola mundo!",20,20);

*Segundo: es la coordenada x, determina que se escribirá a 20 pixeles, a la derecha del margen izquierdo.

g.drawString("Hola mundo!",20,20);

*Tercero: es la coordenada y, determina que se escribirá a 20 pixeles, abajo del borde superior de la zona asignada a la applet (es como las coordenadas cartesianas).

g.drawString("Hola mundo!",20,20);

La marca :

En el fichero HTML se tuvo que incluir un elemento . En ese elemento (directiva) se pusieron varios argumentos:

class=HolaMundo.class : este argumento lo usamos para indicarle a la página qué clase tendrá que invocar, en este es HolaMundo.class

width=330 : indica a la applet el ancho (en pixeles) que tendrá disponible para operar y dibujar. En este caso 330 pixeles.

height=170 : indica a la applet el alto (también en pixeles) que tendrá disponible para operar y dibujar. En este caso 170 pixeles.

La directiva applet es la que da lugar a los argumentos, su directiva de cierre es .

Applet en el browser:

En esta applet se usó el utilitario appletviewer del JDK, para verla funcionando. Pero se puede ver el archivo .html desde nuestro navegador de Internet. Si se dispone de un browser instalado se puede invocar la applet con el siguiente comando: start HolaMundo.html y se nos abrirá nuestro navegador mostrando la applet.

Otra forma es abrirla directamente del menú archivo => abrir. Luego verá los resultados.

Espiando los paint:

A continuación analizaremos otra applet, que sigue mostrando un texto en pantalla, pero que varia cada vez que se invoca el método paint.

Cuenta.java

//

// Applet: Cuenta

// Ejecutar con:

// appletviewer Cuenta.html

//

import java.applet.*;

import java.awt.Graphics;

public class Cuenta extends Applet {

int veces=0; // Contador de eventos paint

public void paint(Graphics g) {

veces=veces+1;

g.drawString("Este es el paint nro. "+veces,20,60);

}

}

Cuenta.html

code=Cuenta.class

width=330

height=170

>

Compilamos con: javac Cuenta.java = Cuenta.class

Invocamos con: appletviewer Cuenta.html

O con: start Cuenta.html (se ejecuta desde el navegador)

Estudiando la applet Cuenta:

Esta applet es muy similar a la applet HolaMundo, pero con una pequeña vuelta de tuerca.

Código:

int veces=0;

Se declara una variable (veces) con el valor 0.

public void paint(Graphics g) {

veces=veces+1;

Cada vez que se ejecuta la línea: public void paint(Graphics g) { se le asigna (por el signo =) a la variable veces su valor actual (veces) más 1.

g.drawString("Este es el paint nro. "+veces,20,60);

es la concatenación (unión) de un texto ("Este es el paint nro.") y la variable entera (int) veces. La cual se incrementa cada vez que se ejecuta el método paint (por la línea: public void paint(Graphics g) {).

La variable veces se declara (int veces=0) y se inicializa a 0 (int veces=0). Luego, cada vez que se ejecuta el método paint, se incrementa, y se muestra en la zona de la applet. Si minimizamos la ventana de la applet, o la tapamos parcial o totalmente con otra ventana, o en algunos casos de cambio de tamaño, veremos que el texto va cambiando. Es una forma de ir investigando el comportamiento de la applet, y la frecuencia de la invocación de paint.

Más sobre las applets:

Más adelante investigaremos cómo colocar elementos en una applet, como cajas de texto editables, listas y botones, entre otros. También aprenderemos a dibujar, , y a colocar imágenes. Hasta podremos animar las imágenes. Pero antes, se debe se debe aprender lo básico, y estudiar el lenguaje Java, para luego lanzarse a esos otros terrenos.

CONOCIENDO AL LENGUAJE JAVA

Simplicidad:

Ya se ha mencionado que el equipo original que desarrolló Java lo hizo por necesidad, al no cumplir los lenguaje existentes con todo lo que necesitaban para el proyecto en marcha. Pero, como buenos diseñadores, no inventaron todo de nuevo, sino que se basaron en lo ya hecho y probado. Es por esa razón que el código Java se expresa en archivos de texto comunes, y tiene una apariencia muy familiar para los programadores de C/C++ y para los programadores en general. Los fragmentos del lenguaje que se han visto, lo ejemplifican.

Orientación a objetos:

A primera vista parece que todos los productos nuevos de software tienen algo "orientado a objetos". En el caso de Java, la aplicación de esa calificación es totalmente acertada. De hecho, en Java, todo es un objeto. Se verá que éstos se definen en clases, con atributos y métodos, agrupándose en paquetes, y exponiendo interfaces, permitiendo herencia y polimorfismo, implementando así la tecnología de objetos de una manera muy completa, y a la vez sencilla y agradable. Reconoceremos al estudiar se semántica, que Java es realmente un lenguaje que merece ser llamado "totalmente orientado a objetos".

Soporte de múltiples plataformas:

El proceso de compilación no produce código para un procesador en particular, como en los compiladores C/C++, sino que genera código para un procesador ideal, denominado máquina virtual Java (Java Virtual Machine, o Java VM). La razón de esta conducta es simple: la necesidad de poder ejecutarse en cualquier plataforma, sin necesidad de cambiar el código fuente, ni aun de recompilar. Todo programa Java se traduce en una serie de códigos (llamados bytecodes) para un procesador imaginario, al Java VM, que puede ser implementado fácilmente en cualquier plataforma poderosa. Es así como el lenguaje y sus aplicaciones se independizan de ña máquina destino, a costa de algo de velocidad, provocada por la necesidad de "simular" la Java VM, mediante software.

Veremos que aun los tipos primitivos de datos quedan definidos de un solo golpe, para todas las plataformas. Nos evitamos así las pesadillas de portabilidad, conocidas por los programadores de C/C++, al cambiar, por ejemplo, de ambiente a ambiente, el tamaño de los enteros, o el conjunto de caracteres soportados. En Java, esos problemas no existen: sólo existe una máquina virtual.

Manejo automático de memoria:

Ya se ha mencionado, que el lenguaje Java se compone de objetos. Lo que no se ha descripto, es que esos objetos pueden y deben crearse, y tienen una vida que dura hasta su destrucción. Mientras que la creación de los objetos se deja bajo la voluntad del programador, la destrucción definitiva de un objeto ocurre cuando no es más referenciado por otros objetos del programa. De esta forma, se elimina una de las causas más comunes de error en otros lenguajes, como la destrucción por el programador de objetos aun en uso en el programa, o la falta de destrucción de objetos que ya son inútiles, pues no se usan en el resto de la ejecución, pero que molestan con empleo de recursos. Esta técnica de manejo automático. Esta técnica de manejo automático de memoria ocupada por los objetos se denominan garbage collection, algo así como recolección de basura. En una aplicación Java hay siempre un proceso, ejecutado como un hilo de ejecución separado, que se ocupa de recorrer la memoria donde se encuentran los objetos, y determinan cuáles son pueden liberarse y destruirse. Bye (adiós) punteros y problemas de memoria.

Seguridad:

Todo el que ha trabajado en una computadora personal, se ha topado de una u otra forma con los problemas de virus, o de confidencialidad de los datos. Al parecer Internet, y distribuirse programas por toda las red, el problema de la seguridad ha tomado una nueva dimensión, más grave, ya que actualmente a nuestra máquina pueden llegar aplicaciones hostiles y virus malignos, desde cualquier punto del planeta. Java ha sido adaptado a Internet, pensando mucho en el tema seguridad. Una "applet" java se ejecuta en un entorno, que impide su intromisión en la máquina cliente. No hay, entonces, posibilidad de un virus Java, viajando por toda la red.

Java no se aísla y evoluciona:

Como Java trata de ser un lenguaje de producción, no un lenguaje académico o ideal, o tiene "miedo" de comunicarse con librerías de otros lenguajes. Tiene capacidades definidas para implementar clases y métodos (o funciones), escritos, por ejemplo, en C/C++. Esto nos permite usar lo que ya está hecho, en cada plataforma de implementación. Igualmente, recordemos que Java es un lenguaje de uso general, y muchas de las rutinas y librerías que necesitaremos para un proyecto, pueden ser escritas en Java. Debido al éxito del lenguaje, y a su difusión, cada día aparecen nuevas herramientas y paquetes de clases escritas por otros programadores, listas para ser usadas en nuestro próximo sistema.

Programando para el mundo:

Cuando Ud. Comience a programar en Java, y en especial para la Web, experimentará una sensación, que hasta la llegada de Java, era difícil de encontrar: el hecho de generar aplicaciones que pueden ser ejecutadas por millones de personas, en ambientes disímiles. Sus programas podrán viajar por la red de redes, y ser fruto de satisfacción y diversión. Es un nuevo universo de programación, que apenas comenzamos a explorar.

LOS PAQUETES DE JAVA - Johanna Carrasco

Un paquete de Java es un sistema de las clases que se agrupan juntas.

Esto que agrupa ayuda a organizar las clases de Java y las clases múltiples codevent de Java con el mismo nombre.

Los paquetes informáticos son colecciones de clases, contenidas en una colección que las une. Prácticamente son bibliotecas a las que el usuario puede acceder y que ofrecen varias funciones.
Los usuarios pueden también crear paquetes informáticos, por ejemplo, haciendo que contengan todas las clases que ha definido para poner en marcha algunas funciones que luego usará en varios programas. Sin embargo, esto no nos interesa porque lo que queremos es ver los paquetes informáticos más interesantes en Java.
Esta es la auténtica potencia de Java, el número de clases ya establecidas que realizan las más variadas tareas, y es también la parte que sigue creciendo más y más, y que sigue poniendose al día con las nuevas versiones de Java (JDK 1.3 bien contiene 18Mb). Los paquetes informáticos de Java son tantos que sólo describiré algunos por encima en un capítulo entero (el capítulo 3) del curso. Veremos de forma detallada más o menos dos, es decir, los que nos sirven para definir interfaces gráficas y apliques. Obviamente todos los paquetes informáticos del lenguaje están descritos en la mastodóntica guía en línea del JDK que se puede bajar junto al paquete del compilador (La JDK Documentation 1.3 beta es de 105 Megabyte, comprimida es de unos treinta Megas). Ésta tambien es gratuita y, si os apetece pasar un par de horas bajándola, os aconsejo que la cojáis junto al compilador. De todas formas está a vuestra disposición en línea (tenéis el enlace en la página www.javasoft.com o www.java.sun.com , es prácticamente igual, son primos hermanos).
El núcleo del lenguaje Java contiene sólo las palabras claves para la construcción de las clases, los comentarios, las construcciones normales en if, switch, while, do-while, for, etiquetas, break, continue e return (falta el goto), que veremos en detalle en el próximo capítulo. Todo lo demás está contenidos en los paquetes informáticos del lenguaje, incluidas las normales primitivas de Entrada y de Salida. En este párrafo veremos la lista de los paquetes informáticos de Java y veremos uno en particular, el que nos interesa para escribir nuestra primera aplicación Java aún antes de haber visto las construcciones, es decir, en las que podemos encontrar las instrucciones de entrada y salida.

La lista completa de los paquetes informáticos de Java 1.2.1 en orden alfabético es el siguiente:

com.sun.image.codec.jpeg
com.sun.java.swing.plaf.windows
com.sun.java.swing.plaf.motif
java.applet
java.awt
java.awt.color
java.awt.datatransfer,
java.awt.dnd
java.awt.event
java.awt.font
java.awt.geom
java.awt.im
java.awt.image
java.awt.image.renderable
java.awt.print
java.beans
java.beans.beancontext
java.io
java.lang
java.lang.ref
java.lang.reflect
java.math
java.net
java.rmi
java.rmi.activation
java.rmi.dgc
java.rmi.registry
java.rmi.server
java.security
java.security.acl
java.security.cert
java.security.interfaces
java.security.spec
java.sql
java.text
java.util
java.util.jar
java.util.zip
javax.accessibility
javax.swing
javax.swing.border
javax.swing.colorchooser
javax.swing.event
javax.swing.filechooser
javax.swing.plaf
javax.swing.plaf.basic
javax.swing.plaf.metal
javax.swing.plaf.multi
javax.swing.table
javax.swing.text
javax.swing.text.html
javax.swing.text.html.parse
javax.swing.text.rtf
javax.swing.tree
javax.swing.undo
org.omg.CORBA
org.omg.CORBA.DynAnyPackage
org.omg.CORBA.ORBPackage
org.omg.CORBA.portable
org.omg.CORBA.TypeCodePackage
org.omg.CosNaming
org.omg.CosNaming.NamingContextPackage
sun.tools.ttydebug
sunw.io, sunw.util.

Realmente parecen pocos, parece que haya dicho una tontería cuando me refería a la potencia de Java, sin embargo si pensáis que sólo el paquete informático Java.io comprende 50 clases y 10 interfaces, comprenderéis que los de antes son una colección de clases consistente.
Llegados a este punto nos gustaría hacer la entrada y la salida de consolle y para hacerlo debemos usar el paquete informático java.lang .
para usar un paquete informático en una de nuestras clases, antes de definir la clase, tenemos que introducir la instrucción import. Por ejemplo, si queremos usar el paquete informático java.awt tenemos que introducir al comienzo de nuestro archivo:

import java.awt.*;

El * indica que queremos usar todas las clases, en cambio si queremos usar sólo una clase lo podemos especificar, por ejemplo, import java.awt.Frame; podremos usar la clase Frame del awt. En nuestro caso, en el que queremos hacer una operación de entrada, tendremos que declarar al empezar import java.lang.*;
o, sabiendo que la clase del paquete informático java.lang que contiene los métodos para hacerlo es System, podremos escribir

import java.lang.System;

La clase System, a su vez, contendrá en su interior una import java.io (que es el paquete informático para la entrada y la salida) para acceder a las clases de la entrada y de la salida, y las usará para mandar lo que queramos en la pantalla.
Vimos un ejemplo de paquete informático que en su interior llama a otro paquete informático para que lleve a cabo unas tareas. En estas bibliotecas Java ocurre eso a menudo y es precisamente este fenómeno que hace de Java un lenguaje incomprensible para la mayoría. Sin embargo, superado este inconveniente que se refiere a este aspecto del lenguaje, la programación se hace fácil e inmediata.
He introducido el paquete informático java.lang. Ahora os digo también que este es el más importante de Java, en éste están contenidos las clases fundamentales del lenguaje, hasta el punto de que no hace falta declarara el import, porque Java lo introduce automáticamente.
Además me gustaría detenerme en un aspecto fundamental de la introducción de los paquetes informáticos. Si importo en mi archivo el paquete informático java.lang, éste importará a su vez el paquete informático java.io, y yo desde mi archivo no podré usar las clases de java.io; para hacerlo tengo que importarlo explícitamente. Esto sucede aunque programe una aplicación en más de un archivo (con más clases), en cada archivo tengo que importar los paquetes informáticos que necesito para la clase que estoy estableciendo, no basta con importarlos en una sola. Veamos pues las clases que contiene este paquete informático java.lang tan importante para el lenguaje:

Boolean
hemos dicho que los tipos de datos se pueden representar también con objetos dichos;

contenedores
es una clase que genera los contenedores para los tipos de datos boolean (verdadero, falso).

Byte
es la clase que genera los contenedores para los tipos de datos enteros cortos (de un byte).

Character
es una clase que genera los contenedores para los tipos de datos caracteres.

Character.Subset
es la clase que genera los contenedores para los tipos de datos caracteres con codificación unicode.

Character.UnicodeBlock
es la clase que genera los contenedores para los tipos de caracteres con codificación unicode 2.0.

Class
representa las clases y las interfaces a runtime (en ejecución), en Java es posible, en tiempo de ejecución, crear, ejecutar y compilar clases. El compilador y el ejecutor se mezclan de una forma rara, sin embargo a nosostros no nos sirven estas clases "especiales" porque escribiremos unas aplicaciones fáciles.

ClassLoader
cargador de clases a tiempo de ejecución.

Compiler
compilador de clases a tiempo de ejecución.

Double
es la clase que genera los contenedores para los tipos de datos reales en coma móvil de 64 bit.

Float
es la clase que genera los contenedores para los tipos de datos reales de 32 bit en coma móvil.

Integer
es la clase que genera los contenedores para los tipos de datos enteros.

Long
es la clase que genera los contenedores para los tipos de datos enteros dobles.

Math
contiene métodos que simulan funciones matemáticas.

Number
clase de objetos contenedores de números genéricos.

Object
es la clase de la que derivan todas las clases del lenguaje Java, es decir, cada clase es subclase (no necesariamente directa) de ésta.

Package
contiene métodos para extrapolar informaciones en los paquetes informáticos de Java.

Process
Java es un lenguaje que permite gestionar Thread, es decir pequeños programas que corren en paralelo. Esta clase se ocupa de ellos, como las demás clases de java.lang: Runtime, RuntimePermission, Thread, ThreadGroup, ThreadLocal, Throwable

SecurityManager
para la seguridad

Short
es la clase que genera los contenedores para los tipos de datos enteros cortos.

String
es la clase que genera los contenedores para los tipos de datos cadenas de caracteres.

StringBuffer
es la clase que genera los contenedores para los tipos de datos cadenas de caracteres modificables.

System
es la clase que interactúa con el sistema y contiene muchos métodos útiles, y unas referencias a otras clases (llamadas class field), es la que usaremos, por ejemplo, para crear una salida sobre la pantalla a caracteres.

Void
es la clase que genera los contenedores para los tipos de datos void, es decir, sin tipo. Éste parece un tipo de dato inútil, sin embargo veremos que no lo es en absoluto, además es utilísimo. En realidad, es útil cuando queremos definir un método-procedimiento (un método que no tiene valor de vuelta), en Java existen sólo dos funciones que obligan a devolver un valor del tipo que declaran. Declarando un método como void, se simula el procedimiento, es decir, no se necesita la vuelta.
JOHANNA CARRASCO GOMEZ
Cod. 221336104