Paquetes en Java

Paquetes en Java

Los paquetes son un mecanismo que me permiten crear ‘librerías de clases’ con restricción de visibilidad y acceso.

Definición de un paquete

Para definir un paquete únicamente tenemos que incluir el comando package como primera sentencia de un archivo fuente de Java. La forma general de la sentencia package es:   package Nombre_Paquete Java utiliza los directorios del sistema de archivos para almacenar los paquetes,de tal forma que si declaramos una clase dentro de un paquete llamado MiPaqueteel archivo .class de esa clase se debe almacenar en un directorio llamado MiPaquete. Una sentencia package se puede incluir en más de un archivo fuente, y podremos crear una jerarquía de paquetes dentro de paquetes, separando los niveles por puntos. El archivo classLa forma general de la sentencia package es:   package Nombre_Paquete[.paquete2][.paquete3] Esta jerarquía debe reflejarse en el sistema de archivos del sistema de desarrollo de Java a través de subdirectorios

Protección de acceso

Java distingue cuatro categorías de visibilidad entre elementos e clase: – Subclases del mismo paquete – No subclases del mismo paquete – Subclases en paquetes distintos – Clases que no están ni en el mismo paquete ni en las subclases El control de acceso lo podremos hacer mediante los calificadores public, private y protected. De forma general cualquier cosa declarada como private no se pueden ver desde el exterior de una clase. Si se declara como public puede ser accedida Desde cualquier sitio. Si no se especifica ningún modificador, será visible en las Subclases y en otras clases del mismo paquete. Este esquema de acceso queda recogido en la siguiente tabla:
Private Sin Mod Protected Public
Misma clase SI SI SI SI
Subclase del mismo paquete NO SI SI SI
No subclase del mismo paquete NO SI SI SI
Subclase distinto paquete NO NO SI SI
No subclase distinto paq. NO NO NO SI

Importación de paquetes

Los paquetes de clases se cargan con la palabra clave import, especificando el nombre del paquete como ruta y nombre de clase (es lo mismo que #include de C/C++). Se pueden cargar varias clases utilizando un asterisco (aunque esto aumenta el tiempo de compilación, no el de ejecución).     import java.Date;     import java.awt.*; Si un fichero fuente Java no contiene ningún package, se coloca en el paquete por defecto sin nombre. Es decir, en el mismo directorio que el fichero fuente, y la clase puede ser cargada con la sentencia import: import MiClase;

Paquetes de Java

El lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un sistema de entrada/salida general, herramientas y comunicaciones. En la versión actual del JDK, los paquetes Java que se incluyen son: java.applet Este paquete contiene clases diseñadas para usar con applets. Hay una clase Applet y tres interfaces: AppletContext, AppletStub y AudioClip. java.awt El paquete Abstract Windowing Toolkit (awt) contiene clases para generar widgets y componentes GUI (Interfaz Gráfico de Usuario). Incluye las clases Button, Checkbox,  Choice, Component, Graphics, Menu, Panel, TextArea y TextField. java.io El paquete de entrada/salida contiene las clases de acceso a ficheros: FileInputStream y FileOutputStream. java.lang Este paquete incluye las clases del lenguaje Java propiamente dicho: Object, Thread, Exception, System, Integer, Float, Math, String, etc. java.net Este paquete da soporte a las conexiones del protocolo TCP/IP y, además, incluye las clases Socket, URL y URLConnection. java.util Este paquete es una mezcla de clases útiles (Date, Random, Stack …).

¿Qué es un applet?

Un applet es una clase estándar de Java que permite insertar aplicaciones en Java dentro de página HTML, que se ejecutan en el navegador al ser descargadas por la red.

Aplicaciones vs. Applets

La diferencia respecto a las aplicaciones es la manera de ejecutarse, mientras que una aplicación se inicia al realizar la llamada a su método main (), las applets tienen un ciclo de vida un poco más complejo. Para su ejecución es necesaria la creación de una página HTML que indique al navegador qué es lo que hay que cargar y cómo hay que ejecutarlo. Para ello, se utiliza en la página HTML un conjunto de TAGs, como se muestran a continuación: <HTML> <APPLET CODE = “nombreMiApplet.class”    [NAME = “unNombre   WIDTH = tamañoAlto   HEIGHT = tamañoAncho </APPLET>

Características de los Applets

– Los applets no tienen método main() que comience la ejecución. – Los ficheros de Java compilados (*.class) se descargan a través de la red desde un servidor hasta el navegador, en cuya Java Virtual Machine se ejecutan. – Los Applet pueden incluir ficheros de imágenes y sonidos que se descargaran a través de la Red. – Los applets no tienen ventana propia: se ejecutan en la ventana del navegador (en un “panel” incrustado en la página HTML, puesto que la clase Applet desciende de la clase Panel) – Los Applets tienen importantes restricciones de seguridad, que se chequean al llegar al navegador. – Con muy poco trabajo adicional (casi exclusivamente añadir un método main() que cree una ventana e introduzca en ella el applet) podremos convertir applets en aplicaciones.

Restricciones de Seguridad de los Applets

Los applets son fragmentos de código que inherentemente representan un peligro para el sistema porque se cargan a través de una red y en la mayoría de las ocasiones no podemos certificar su procedencia. El control de seguridad está implementado por el navegador, protegiendo al sistema de lo siguiente: – Ejecutar otro programa externo. – Entrada/salida de ficheros – Llamadas a métodos nativos – Intentos de abrir sockets con cualquier otro sistema, a excepción del que proporcionó el applet. La finalidad de estas restricciones es prevenir que los applets puedan violar la privacidad del sistema o dañar un sistema remoto, restringiendo el acceso a los ficheros locales, evitar que el applet pueda ejecutar código no verificado por la JVM, y la restricción de los sockets es para prevenir la comunicación con otros programas. JDK1.2 proporciona los medios necesarios para especificar un dominio protegido particular o entorno de seguridad, donse se puede ejecutar un determinado applet. Jerarquía de la clase Applet Todas las applets heredan de la clase java.applet.Applet, la cual es una subclase de java.awt.Panel.

La jerarquía de clases Applet y el AWT es la siguiente:

Figura. Jerarquía de clases Apple y el AWT
A partir de la clase Component se heredan los métodos gráficos y de los eventos, mientras que la capacidad de añadir elementos de interface de usuario se heredan de la clase Container

Métodos clave de un Applet

Las aplicaciones inician su ejecución con el método main(), sin embargo en los applets no es así. Cuando el constructor finaliza su tarea, el navegador llama al método init() para realizar la inicialización básica del applet. Una vez init() ha finalizado, el navegador llama al método start() y el applet es visible en nuestro navegador. Los dos métodos init() y start() se ejecutan completos antes de que el applet esté “vivo”, y por esto no se pueden utilizar para programar el comportamiento de ejecución del applet.

Descripción de los Métodos

init() – Esta función es llamada al crearse la applet. Las clases derivadas deben sobrecargar este método para llevar a cabo todas las labores de inicialización (cambiar el tamaño de la ventana, inicializar valores de variables, etc…) destroy() – Esta función es llamada cuando el applet no se va a utilizar más. Las clases derivadas deberían sobrecargarlo para hacer una limpieza final, o matar cualquier thread que quede activo. start() – Se llama cuando el applet se hace visible después de haber sido inicializada y cada vez que se hace visible después de haber estado oculta, se minimiza la ventana o se vuelve a la página del applet desde otra página. Este método debería de sobrecargarse para comenzar una animación, sonido public void start() {   musicClip.play();   } stop() – El método stop() se invoca cada vez que el applet se vuelve invisible. Esto ocurre al minimizar la ventana del navegador, si se cambia de página, etc. Se utiliza para parar las animaciones y liberar recursos de la máquina. public void stop() {   musicClip.stop();   }

El método paint()

Los applets son aplicaciones gráficas por naturaleza, por tanto, aunque es posible utilizar llamadas a System.out.println(), normalmente no se hace, sino que se crea una salida de datos sobre el entorno gráfico. A través del método paint() podremos dibujar en el espacio del applet, y es invocado cuando se muestra la ventana del navegador después de haberla minimizado o iconizado.

El método paint y la clase Graphics

El método paint() necesita como argumento una instancia de la clase java.awt.Graphics este argumento es siempre el contexto gráfico del panel donde está el applet y donde se van a llevar a cabo todas las operaciones de dibujo o de escritura. import java.awt.*;   import java.applet.Applet; public class HolaDeNuevo extend Applet {   public void paint (Graphics g) {        g.drawString (“Hola de nuevo”, 25, 25); //coordenadas   }   }

Otros métodos de la clase applet

repaint() – Este método es llamada cuando el applet necesita ser repintado y no debe sobrecargarse update (Graphics g) – Esta función es llamada cuando se necesita actualizar la pantalla limpia el contenido de la pantalla y a continuación llama al método paint() resize (int ancho, int alto) – Cambia el tamaño del applet

Paso de parámetros a un Applet

El paso de parámetros a un applet, se realiza  a través del tag<PARAM> del fichero HTML. <HTML>   <APPLET CODE = “miApplet.class”    WIDTH = 400 HEIGHT = 300>   <PARAM NAME=“NombreParam1” VALUE=“valor”>   <PARAM NAME=“NombreParam2” VALUE=“valor”>   </APPLET>   </HTML> Cada parámetro tiene un nombre y un valor, que se dan ambos en forma de string. Los nombres de parámetros no distinguen entre mayúsculas y minúsculas, pero sí los valores. El applet recuperará los valores de los parámetros a través del método getParameter getParameter (String atr) – Este método carga los valores pasados a la applet vía la marca HTML. El argumento String es el nombre del parámetro que se quiere obtener y devuelve el valor que tenga asignado el parámetro o null en caso de que no tenga. Para usar getParameter se define una cadena genérica y una vez capturado el mismo se utilizan métodos de conversión de tipos al valor adecuado <HTML>   <APPLET CODE = “miApplet.class”    WIDTH = 400 HEIGHT = 300>   <PARAM NAME=“velocidad” VALUE=“50”>   </APPLET>   </HTML>   public class miApplet extends Applet {        int velocidad;        public void init(){   String pv;   pv = getParameter(“velocidad”);   if (pv == null) {   velocidad = 0;   }   else {   velocidad = Integer.parseInt (pv);   }       }        public void paint (Graphics g) {   g.drawString (String.valueOf(velocidad), 20, 20);        }   }
Print Friendly, PDF & Email