Cuando escribimos código fuente, es posible que el resultado de nuestro programa sea bastante grande (hablamos de posiblemente miles de líneas de código).
Y si estamos hablando de programación orientada a objetos, podríamos tener cientos o miles de clases distintas y relacionadas entre sí.
Así que es normal agrupar estas clases dentro de paquetes, para hacer más fácil el mantenimiento.
Los paquetes pueden contener clases, pero también puede contener otros paquetes, y así integrar una jerarquía entre ellos.
Hay muchas maneras de agrupar clases dentro de los paquetes. Podemos decir que no hay una manera correcta o incorrecta de hacerlo, pero lo habitual es agruparlos por una similitud semántica.
Veamos un ejemplo. Podíamos agrupar un conjunto de clases que almacene los datos, y crear otro paquete para todo lo relacionado con la interfaz gráfica, ya sean formularios o informes, que se usan para la entrada y salida de datos de la aplicación.
La sentencia package
Muchos lenguajes de programación, como puede ser Java o C#, nos ofrece una sentencia para poder agrupar clases relacionadas. En Java existe la sentencia package
, en C# se usa namespace
, pero en el fondo es lo mismo.
Siguiendo con Java, se escribiría de la siguiente forma
package [.nombre_subpaquete];
Se puede indicar las clases, en el código fuente, que pertenecen a un paquete en particular. Por ejemplo, usaríamos:
package system.domain;
public class Clase {
...
}
Al escribir la declaración package
debe estar siempre al principio del archivo fuente, y esto se aplica a todo el código fuente.
Los nombres de los paquetes son jerárquicos, y están separados por puntos. Lo habitual es escribirlo en minúscula, pero depende de cada lenguaje de programación (en C# se usa la primera letra en mayúscula).
Si no escribimos el nombre del paquete, todas las clases declaradas en ese archivo pertenencen a un paquete sin nombre.
Como importar paquetes en Java
Cuando queramos usar paquetes, ya sea los que hemos creado nosotros, los que vienen en el sistema u otros de terceros, usamos la sentencia import
[en Java] para decirle al compilador dónde encontrar las clases creadas.
Como hemos visto, existe una jerarquía dentro de los paquetes. Puedes tener un paquete, dentro de él uno o más subpequetes, y luego las clases.
Podemos importar un paquete entero, sólo un subpaquete o incluso solamente una clase.
Si queremos importar una clase concreta, la sentencia import
tiene la siguiente sintaxis:
import <nombre_paquete>[.<nombre_subpaquete>].<nombre_clase>;
O si queremos usar un paquete o subpaquete:
import <nombre_paquete>[.<nombre_subpaquete>].*;
Veamos un ejemplo:
package system.domain;
import java.util.List;
import java.io.*;
public class Clase {
...
}
Como ves, hemos importado la clase List
, además de todo el subpaquete java.io
. Así que todo lo que hemos importado se puede usar en cualquier clase de nuestro fichero de código fuente.
En otros lenguajes, el import de Java se escribe de otra manera:
- en C o C++, se usa
#include
. - en VB.NET, se escribe
imports
. - en C#, se importa con
using
.