Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre los paquetes (packages) en Java los cuales existen para evitar nombres de conflictos, para controles de acceso, para hacer busqueda/localizacion y hacer un uso mas facil de clases, interfaces, enumeraciones y anotaciones.

Podemos definir que un paquete es un grupo de tipos relacionados (clases, interfaces, enumeraciones y anotaciones) proveedores de proteccion de acceso y administracion de espacio de nombres. Algunos de los paquetes basicos mas utilizados en java son:

  • java.lang, agrupa las clases fundamentales
  • java.io, se agrupan las clases para las funciones de entrada y salida

Los programadores pueden definir sus propios paquetes para agrupar los tipos antes mencionados, una buena practica es agrupar las clases implementadas por ti asi de esta forma otra persona puede determinar cuales son los tipos utilizados en el paquete. Desde que el paquete crea un nuevo espacio de nombre se acabaran los conflictos de nombres con otros paquetes. El uso de paquetes, como dijimos antes, no solo nos proveera un mejor control de acceso sino tambien una forma mas facil de localizar las clases relacionadas, pasemos a la creacion de un paquete.

Anuncios

Cuando creamos un paquete, al principio del archivo debemos usar linea con la palabra package y luego un nombre para designarlo como contenedor de las clases que se incluiran en el paquete, en cada archivo solamente puede haber una linea package, esto se aplicara a todos los elementos del archivo, para compilar un paquete debemos usar el switch -d y su sintaxis es asi:

javac -d <DirectorioDestino> NombredelPaquete.java
Anuncios

Despues de esto se creara un directorio con el nombre del paquete en el destino informado y se guardaran los clases compiladas en el mismo. Pasemos a un ejemplo, para ello utilizaremos las clases creadas en el post anterior, tomemos la interfaz Animal.java y modifiquemoslo de la siguiente manera:

package animales;

interface Animal
{
        public void comer();
        public void viajar();
}
Anuncios

Como se puede observar solamente agregamos la primera linea. Nuestro siguiente modificacion sera sobre la clase Mamifero.java donde la modifiquiremos de la siguiente manera:

package animales;

public class Mamifero implements Animal
{
        public void comer()
        {
                System.out.println("Mamifero come");
        }

        public void viajar()
        {
                System.out.println("Mamifero se desplaza");
        }

        public int numeroPiernas()
        {
                return 0;
        }

        public static void main(String[] args)
        {
                Mamifero m = new Mamifero();
                m.comer();
                m.viajar();
        }
}
Anuncios

En esta clase hacemos la misma modificacion que en el anterior simplemente agregamos la primera linea, con nuestras modificaciones realizadas podemos proceder a compilarlo.

Nota: Es una buena practica siempre nombrar a nuestro paquete en minusculas y de forma distinta a las clases y/o interfaces para evitar confusiones.
Anuncios

Para compilar nuestro paquete deberemos usar los siguientes comandos:

tinchicus@dbn001vrt:~/programacion/java/codigo$ javac -d . Animal.java
tinchicus@dbn001vrt:~/programacion/java/codigo$ javac -d . Mamifero.java
Anuncios

Con este comando crearemos nuestro paquete animales y a su vez compilara las clases dentro del directorio del paquete, veamos como se creo nuestro nuevo directorio:

tinchicus@dbn001vrt:~/programacion/java/codigo$ ls -l
total 60
-rw-r--r-- 1 tinchicus tinchicus 132 ene 19 18:40 Animal.class
drwxr-xr-x 2 tinchicus tinchicus 4096 feb 7 11:22 animales
-rw-r--r-- 1 tinchicus tinchicus 85 feb 7 10:09 Animal.java
-rw-r--r-- 1 tinchicus tinchicus 1222 ene 18 22:55 Empleado.class
-rw-r--r-- 1 tinchicus tinchicus 789 ene 18 22:54 Empleado.java
-rw-r--r-- 1 tinchicus tinchicus 694 ene 19 17:55 EncapTest.class
-rw-r--r-- 1 tinchicus tinchicus 438 ene 18 23:25 EncapTest.java
-rw-r--r-- 1 tinchicus tinchicus 685 ene 19 18:40 Mamifero.class
-rw-r--r-- 1 tinchicus tinchicus 356 feb 7 10:14 Mamifero.java
-rw-r--r-- 1 tinchicus tinchicus 830 ene 18 22:55 PruebaAbstracta.class
-rw-r--r-- 1 tinchicus tinchicus 462 ene 18 17:36 PruebaAbstracta.java
-rw-r--r-- 1 tinchicus tinchicus 861 ene 19 17:55 RunEncap.class
-rw-r--r-- 1 tinchicus tinchicus 278 ene 19 17:55 RunEncap.java
-rw-r--r-- 1 tinchicus tinchicus 1205 ene 18 17:35 Salario.class
-rw-r--r-- 1 tinchicus tinchicus 699 ene 18 17:35 Salario.java
tinchicus@dbn001vrt:~/programacion/java/codigo$
Nota: Si hubiera mas clases se deberian agregar como vimos anteriormente.
Anuncios

Observen como entre todos los archivos se creo un directorio con el nombre de nuestro paquete y si hacemos un listado de nuestro directorio obtendremos el siguiente resultado:

tinchicus@dbn001vrt:~/programacion/java/codigo/animales$ ls -l
total 8
-rw-r--r-- 1 tinchicus tinchicus 141 feb 7 11:22 Animal.class
-rw-r--r-- 1 tinchicus tinchicus 703 feb 7 11:22 Mamifero.class
tinchicus@dbn001vrt:~/programacion/java/codigo/animales$
Anuncios

En este caso tendremos las dos clases de nuestro paquete, si probamos de ejecutarlo obtendremos la siguiente salida:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java animales.Mamifero
Mamifero come
Mamifero se desplaza
tinchicus@dbn001vrt:~/programacion/java/codigo$
Anuncios

Al haber creado nuestro paquete podemos ver como se cambio la forma de llamar a nuestra clase porque debemos primero utilizar el nombre del paquete, en este caso animales, y luego la clase pertinente (en este caso Mamifero), y el resultado es igual a lo visto en el post anterior, nuestro siguiente paso sera hablar sobre el metodo import.

Anuncios

La palabra import es utilizado para llamar a metodos de otras clases no pertenecientes a nuestro paquete, ya hemos visto algunos casos donde para poder utilizar algunas propiedades del lenguaje Java hemos utilizado esta palabra para poder cargar paquetes propios del lenguaje, veamos un ejemplo suponiendo que tenemos una nueva clase llamada Jefe para nuestro ejemplo de Empleado visto en posts anteriores, si compilaramos nuevamente nuestras clases pero ahora armando un paquete llamado pagaempleado, el mejor metodo seria usar el siguiente codigo:

package pagaempleado;

public class Jefe
{
	public void pagaEmpleado(Empleado e)
	{
		e.chequeCorreo();
	}
}
Anuncios

Este seria el mejor metodo porque al estar todos en el mismo paquete las clases se encuentran entre ellas pero en el caso de no poder compilarlos hay dos formas de poder utilizarlo el primer caso seria renombrar los nombres de la clase Empleado a su nombre completo:

pagaempleado.Empleado
Anuncios

La otra forma seria utilizar la palabra import para invocar al paquete y poder acceder a los metodos de las clases de dicho paquete, para ello se pueden usar dos formas, la primera es:

import pagaempleado.*;
Anuncios

Donde le diremos que “importe” todas las clases del paquete informado, otra forma es especificar la clase que necesitamos:

import pagaempleado.Empleado;
Anuncios

Asi podriamos decirle que solamente traiga las clases necesarias pero cuando no sabemos cuales necesitamos es preferible utilizar el comodin asterisco (*), aunque es una practica poca recomendable, nuestro siguiente paso sera la estructura de los directorios.

Anuncios

La estructura de directorios de los paquetes nos permite algunas ventajas, entre las mas importantes es tener todas nuestras clases en un solo directorio (o carpeta) y a su vez Java sabra interpretarlo como un solo conjunto, para utilizarlo en codigo se debe usar de la siguiente forma:

nombrePaquete.nombreClase // P.E: animales.Mamifero

Pero en el S.O. lo veremos de la siguiente forma:

Unix:
animales/Mamifero.class

Windows:
animales\Mamifero.class
Anuncios

En resumen, hoy hemos visto como es y como trabajan los paquetes en Java, como se compilan, como se pueden configurar y usar, como podemos implementar otros paquetes en nuestros paquetes y su estructura de directorios, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00