En Java, los paquetes son una forma de organizar y agrupar las clases de manera lógica, similar a cómo las carpetas organizan archivos en un sistema operativo. Además, seguir las convenciones de nombres es esencial para mantener un código limpio y profesional.
1. ¿Qué es un paquete en Java?
Un paquete es una colección de clases e interfaces relacionadas. Ayuda a:
- Organizar el código: Divide un proyecto grande en módulos más pequeños y manejables.
- Evitar conflictos de nombres: Dos clases con el mismo nombre pueden coexistir en paquetes diferentes.
- Controlar el acceso: Permite definir clases y miembros con visibilidad a nivel de paquete.
Ejemplo de declaración de un paquete:
package com.miempresa.utilidades;
public class Calculadora {
public int sumar(int a, int b) {
return a + b;
}
}
En este ejemplo, la clase Calculadora pertenece al paquete com.miempresa.utilidades.
2. Organización del código en paquetes
Los paquetes reflejan la estructura del sistema de archivos. Por ejemplo:
Si el paquete es com.miempresa.utilidades.
El archivo debe estar en una carpeta con esta estructura
com/
miempresa/
utilidades/
Calculadora.java
Compilar y ejecutar programas con paquetes:
Compilar:
Desde el directorio raíz del proyecto:
javac com/miempresa/utilidades/Calculadora.java
Ejecutar:
Especifica el paquete al ejecutar:
java com.miempresa.utilidades.Calculadora
3. Importar clases de otros paquetes
Para usar clases de otros paquetes, puedes importar la clase o todo el paquete:
Importar una clase específica:
import com.miempresa.utilidades.Calculadora;
public class Principal {
public static void main(String[] args) {
Calculadora calc = new Calculadora();
System.out.println("Resultado: " + calc.sumar(2, 3));
}
}
Importar todas las clases de un paquete:
import com.miempresa.utilidades.*;
public class Principal {
public static void main(String[] args) {
Calculadora calc = new Calculadora();
System.out.println("Resultado: " + calc.sumar(5, 7));
}
}
4. Paquete por defecto
Si no especificas un paquete, la clase pertenece al «paquete por defecto». Sin embargo, usarlo en proyectos grandes no es recomendable porque:
- Las clases no están organizadas.
- Puede causar conflictos de nombres en proyectos colaborativos.
5. Convenciones de nombres en Java
Seguir las convenciones de nombres mejora la legibilidad y consistencia del código. Estas son las principales:
- Paquetes:
- Los nombres de paquetes deben estar en minúsculas.
- Sigue la estructura de nombres de dominio invertido para evitar conflictos globales.
- Ejemplo:
- Dominio:
miempresa.com - Paquete:
com.miempresa.utilidades
- Dominio:
- Clases e interfaces:
- Usa CamelCase con la primera letra en mayúsculas.
- Ejemplo:
- Clases:
Calculadora,CuentaBancaria - Interfaces:
UsuarioAutenticable
- Clases:
- Métodos y variables:
- Usa camelCase con la primera letra en minúscula.
- Ejemplo:
- Métodos:
sumarNumeros,obtenerSaldo - Variables:
cantidadTotal,nombreUsuario
- Métodos:
- Constantes:
- Usa MAYÚSCULAS y separa palabras con guiones bajos (
_). - Ejemplo:
TASA_INTERES,VALOR_MAXIMO
- Usa MAYÚSCULAS y separa palabras con guiones bajos (
6. Buenas prácticas para trabajar con paquetes
- Agrupa clases relacionadas:
- Por ejemplo:
com.miempresa.utilidadespara herramientas genéricas.com.miempresa.modelospara las clases que representan datos.com.miempresa.serviciospara la lógica de negocio.
- Por ejemplo:
- Evita nombres ambiguos:
- Usa nombres significativos y descriptivos.
- Mantén los paquetes consistentes con el proyecto:
- Si cambias la estructura del proyecto, ajusta los nombres de los paquetes para reflejar el cambio.
7. Ejemplo práctico completo
Crea las siguientes carpetas y clases:
Estructura:
com/
miempresa/
modelos/
Persona.java
utilidades/
Formateador.java
principal/
Main.java
Código de las clases:
Persona.java:
package com.miempresa.modelos;
public class Persona {
private String nombre;
public Persona(String nombre) {
this.nombre = nombre;
}
public String getNombre() {
return nombre;
}
}
Formateador.java:
package com.miempresa.utilidades;
public class Formateador {
public static String formatearNombre(String nombre) {
return nombre.toUpperCase();
}
}
Main.java:
package com.miempresa.principal;
import com.miempresa.modelos.Persona;
import com.miempresa.utilidades.Formateador;
public class Main {
public static void main(String[] args) {
Persona persona = new Persona("Ana");
System.out.println(Formateador.formatearNombre(persona.getNombre()));
}
}
Compila y ejecuta:
javac com/miempresa/**/*.java java com.miempresa.principal.Main
Resultado:
ANA
Resumen
- Los paquetes organizan y agrupan clases relacionadas.
- Usa nombres de dominio invertidos para evitar conflictos.
- Sigue las convenciones de nombres para mejorar la claridad del código.
- Organiza tu proyecto en paquetes lógicos como
modelos,servicios, yutilidades.