1. ¿Qué vamos a hacer?
Hasta ahora trabajamos en comprender problemas, reconocer objetos importantes y representarlos mediante modelos y diagramas. El siguiente paso es comenzar a convertir esas ideas en código Java organizado.
La idea no es escribir código “suelto”, sino empezar a trabajar como se trabaja en proyectos reales: con una estructura clara, nombres consistentes y responsabilidades separadas.
2. ¿Por qué no alcanza con crear archivos Java sueltos?
Cuando un programa tiene una sola clase, parece suficiente guardar todo en un archivo. Pero en una aplicación real aparecen varias clases: algunas representan datos, otras aplican reglas, otras muestran información al usuario y otras, más adelante, se comunican con una base de datos.
Si mezclamos todo, el programa funciona al principio, pero se vuelve difícil de entender, corregir y ampliar. Por eso vamos a organizar el código en paquetes.
3. ¿Qué es un package en Java?
Un package es una forma de agrupar clases relacionadas. En Java, los paquetes ayudan a ordenar el código y a evitar confusiones cuando el proyecto crece.
Por ejemplo, en un sistema de biblioteca podemos tener un paquete principal:
uy.edu.utu.biblioteca
Y dentro de ese paquete principal, otros paquetes más específicos:
uy.edu.utu.biblioteca.model
uy.edu.utu.biblioteca.service
uy.edu.utu.biblioteca.dao
uy.edu.utu.biblioteca.view
Cada clase debe declarar arriba a qué paquete pertenece:
package uy.edu.utu.biblioteca.model;
public class Libro {
// atributos y métodos
}
Relación entre carpetas y paquetes
En Java, el package y la ubicación del archivo tienen que
coincidir. Cada punto del package se transforma en una carpeta.
| Package | Carpeta correspondiente |
|---|---|
uy.edu.utu.biblioteca |
src/main/java/uy/edu/utu/biblioteca/ |
uy.edu.utu.biblioteca.model |
src/main/java/uy/edu/utu/biblioteca/model/ |
uy.edu.utu.biblioteca.service |
src/main/java/uy/edu/utu/biblioteca/service/ |
uy.edu.utu.biblioteca.view |
src/main/java/uy/edu/utu/biblioteca/view/ |
4. ¿Qué es Maven?
Maven es una herramienta muy usada en proyectos Java. Para nosotros, al comienzo, Maven va a cumplir una función sencilla: ayudarnos a crear un proyecto ordenado y con una estructura estándar.
Maven es la herramienta que nos ayuda a ordenar, compilar y preparar ese programa.
Nos permitirá agregar bibliotecas externas, por ejemplo FlatLaf o un conector JDBC para base de datos.
¿Por qué conviene usar Maven?
- Nos da una estructura de carpetas común para todos los proyectos.
- Facilita que otro programador entienda dónde está cada cosa.
- Permite agregar dependencias, como FlatLaf o un conector JDBC.
- Nos acerca a una forma de trabajo más profesional en Java.
5. Estructura básica de un proyecto Maven
Un proyecto Maven tiene esta estructura general:
biblioteca/
│
├── pom.xml
│
└── src/
└── main/
├── java/
└── resources/
Por ahora nos vamos a concentrar especialmente en dos elementos:
-
pom.xml: archivo de configuración del proyecto Maven. -
src/main/java: carpeta donde va el código Java principal.
El archivo pom.xml
El archivo pom.xml identifica el proyecto y le indica a
Maven cómo debe trabajar.
<groupId>uy.edu.utu</groupId>
<artifactId>biblioteca</artifactId>
<version>1.0-SNAPSHOT</version>
-
groupId: identifica al grupo, institución u
organización:
uy.edu.utu. -
artifactId: identifica el proyecto concreto:
biblioteca. - version: indica la versión actual del proyecto.
Group Id: uy.edu.utu y
Artifact Id: biblioteca, la clase
Main quedará en el paquete
uy.edu.utu.biblioteca.
6. Estructura que vamos a usar en el curso
src/main/java/
└── uy/
└── edu/
└── utu/
└── biblioteca/
├── Main.java
├── model/
├── service/
├── dao/
└── view/
Esta estructura nos permite separar responsabilidades. Cada paquete tiene un propósito.
Clases que representan los objetos principales del problema.
Ej. Libro, Socio, Prestamo
Clases que contienen reglas de negocio y operaciones del sistema.
Ej. BibliotecaService
Clases que más adelante se comunicarán con la base de datos.
Ej. LibroDAO, ConexionBD
Clases que interactúan con el usuario.
Ej. MenuConsola, VentanaPrincipal
Resumen de responsabilidades
7. Ejemplos mínimos de código
Clase del paquete model
package uy.edu.utu.biblioteca.model;
public class Libro {
private String titulo;
private String autor;
private boolean disponible;
public Libro(String titulo, String autor) {
this.titulo = titulo;
this.autor = autor;
this.disponible = true;
}
}
Clase del paquete service
package uy.edu.utu.biblioteca.service;
import uy.edu.utu.biblioteca.model.Libro;
public class BibliotecaService {
public boolean prestarLibro(Libro libro) {
if (!libro.isDisponible()) {
return false;
}
libro.prestar();
return true;
}
}
Clase del paquete view
package uy.edu.utu.biblioteca.view;
public class MenuConsola {
public void iniciar() {
System.out.println("1. Listar libros");
System.out.println("2. Prestar libro");
System.out.println("0. Salir");
}
}
Clase Main
package uy.edu.utu.biblioteca;
import uy.edu.utu.biblioteca.view.MenuConsola;
public class Main {
public static void main(String[] args) {
MenuConsola menu = new MenuConsola();
menu.iniciar();
}
}
Del diagrama de clases al código
-
Cada clase del diagrama se convierte en una clase Java dentro de
model. - Cada atributo del diagrama se convierte en un atributo privado.
- Las relaciones entre clases pueden aparecer como atributos que tienen como tipo otra clase.
-
Las reglas importantes del sistema se colocan en
service. - La interacción con el usuario queda en
view. -
El acceso a base de datos, cuando llegue, quedará en
dao.
public class Prestamo {
private Socio socio;
private Libro libro;
}
Esto significa que un préstamo no guarda solamente textos sueltos,
sino referencias a objetos completos: un Socio y un
Libro.
8. Cierre: ¿por qué hacemos todo esto?
Organizar un proyecto no es un detalle decorativo. Es parte de programar bien. Un programa puede funcionar aunque esté desordenado, pero será difícil de mantener, corregir y ampliar.
A partir de ahora vamos a intentar que nuestros proyectos tengan una estructura clara desde el comienzo. No se trata de hacer algo complicado, sino de acostumbrarnos a una forma de trabajo más ordenada y cercana a la programación profesional.