Estructura de un proyecto Java
Un proyecto Java es un conjunto de archivos que contienen código fuente, archivos de configuración, librerías, entre otros. En este sentido, para poder crear un proyecto Java, debemos seguir una estructura de carpetas y archivos que nos permita organizar nuestro código de una manera adecuada.
Como hemos visto en este curso, al trabajar en Visual Studio Code, hemos estado creando archivos Java en una carpeta llamada src
, particularmente en el archivo App.java
. Sin embargo, mientras más complejo sea nuestro proyecto, más difícil será mantenerlo si no tenemos una estructura adecuada.
Por este motivo, Java establece diferentes estrategias para organizar nuestros proyectos. En nuestro caso, utilizaremos la estructura de paquetes, que nos permite organizar nuestras clases en diferentes carpetas.
Paquetes
Un paquete es una carpeta que contiene clases relacionadas entre sí. Por ejemplo, si estamos desarrollando un sistema para una biblioteca, podemos tener un paquete para las clases que gestionan los libros, otro paquete para las clases que gestionan los usuarios, etc.
Para crear un paquete en Visual Studio Code, debemos desplegar la sección Java Projects
debajo de los archvos del proyecto. Luego, hacemos clic derecho sobre la carpeta src
y seleccionamos la opción New -> Package
. Esto creará una nueva carpeta dentro de src
con el nombre que nosotros le indiquemos.
Por ejemplo, si creamos un paquete llamado biblioteca
, se creará una carpeta con el mismo nombre dentro de src
. En esta carpeta, podemos crear las clases que gestionan los libros y los préstamos de la biblioteca.
Así, podemos crear un paquete para cada módulo de nuestro sistema, y dentro de cada paquete podemos crear las clases que sean necesarias.
Si prestamos atención, al crear una clase dentro del paquete biblioteca
, Visual Studio Code nos agrega la siguiente línea de código al inicio del archivo:
1package biblioteca;
Esta línea de código nos permite indicar que la clase Libro
pertenece al paquete biblioteca
. Este detalle será de suma importancia en el futuro, cuando queramos acceder a clases que se encuentren en otros paquetes.
A su vez, podemos crear paquetes dentro de otros paquetes. Si hacemos esto, debemos indicar el nombre del paquete padre y el nombre del paquete hijo, separados por un punto.
1package <paquete padre>.<paquete hijo>;
Por último, si no declaramos un paquete, las clases que creemos se encontrarán en el paquete por defecto, el cual se encuentra implícito. Este paquete no tiene nombre, y se representa con dos llaves {}
. Aunque no genera ningún error, no es recomendable crear clases en el paquete por defecto con excepción de la clase principal.
Clase principal
En Java, para poder ejecutar un programa, debemos definir una clase principal. Esta clase es la que contiene el método main
, que es el punto de entrada de nuestro programa. Es decir, para ejecutar un programa en Java, debemos definir la clase que coordina la ejecución del mismo a través de un comportamiento, que es el método main
.
1class Main {2 public static void main(String[] args) {3 // Cuerpo del método4 }5}
Este método, a diferencia de otros, siempre debe tener este nombre y esta firma. Es decir, siempre debe llamarse main
y recibir un parámetro de tipo String[]
(un array de String
) llamado args
, que contiene los argumentos que se le pasan al programa al momento de ejecutarlo.
Esta clase principal no debe se incluida en ningún paquete, sino que debe estar en la raíz del proyecto, es decir, en la carpeta src
.
Importar clases
Cuando trabajamos con paquetes, es importante tener en cuenta que las clases que se encuentran en un paquete no pueden ser accedidas desde otro paquete directamente. Por ejemplo, si tenemos la siguiente estructura de paquetes:
Directorymi-proyecto/
Directorysrc/
Directorybiblioteca/ Paquete para clases de la biblioteca
- Libro.java
- Prestamo.java
Directoryusuarios/ Paquete para gestionar usuarios
- Administrador.java
- Usuario.java
- App.java Clase principal
Si queremos acceder a la clase Libro
desde la clase Administrador
, no podremos hacerlo directamente, ya que estas clases se encuentran en diferentes paquetes. En este caso, debemos importar la clase Libro
en la clase Administrador
para poder acceder a ella. Para lo cual, emplearemos la palabra reservada import
:
1import biblioteca.Libro;
Es decir, siempre que importemos una clase, debemos indicar el nombre del paquete (o paquetes) y el nombre de la clase, separados por un punto.
Por cada clase que importemos, debemos agregar una línea de código con la palabra reservada import
.
1import biblioteca.Libro;2import biblioteca.Prestamo;
Sin embargo, podemos importar todas las clases de un paquete, podemos utilizar el carácter *
:
1import biblioteca.*;
Cabe mencionar que, si no usaremos todas las clases de un paquete, no es recomendable usar este tipo de importación, ya que desperdiciaremos memoria al importar clases que no utilizaremos.