Programación Avanzada 2.º BT TI · DGETP / UTU
Logo Profe Macón
Programación Avanzada · 2.º BT TI · DGETP/UTU
Prof. Pablo Macón · 2026

De los diagramas al proyecto Java

Maven, paquetes y organización inicial del código para empezar a transformar el modelo conceptual y el diagrama de clases en una aplicación Java ordenada.

Problema real→ Modelo conceptual→ Diagrama de clases→ Proyecto Java

Idea central

Ya no vamos a escribir clases sueltas. Vamos a trabajar con una estructura clara, separando responsabilidades para que el código sea más fácil de entender, corregir y ampliar.

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.

Recorrido de trabajo: comprender el problema, construir el modelo conceptual, pasar al diagrama de clases y crear un proyecto Java organizado con Maven.

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 no es el programa.

Maven es la herramienta que nos ayuda a ordenar, compilar y preparar ese programa.

Más adelante será clave.

Nos permitirá agregar bibliotecas externas, por ejemplo FlatLaf o un conector JDBC para base de datos.

¿Por qué conviene usar Maven?

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:

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>
En VS Code: asumimos que al crear el proyecto Maven con 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.

model

Clases que representan los objetos principales del problema.

Ej. Libro, Socio, Prestamo

service

Clases que contienen reglas de negocio y operaciones del sistema.

Ej. BibliotecaService

dao

Clases que más adelante se comunicarán con la base de datos.

Ej. LibroDAO, ConexionBD

view

Clases que interactúan con el usuario.

Ej. MenuConsola, VentanaPrincipal

Resumen de responsabilidades

Main
Arranca el programa. Es la puerta de entrada de la aplicación.
view
Habla con el usuario: muestra información y pide datos.
service
Aplica reglas de negocio y coordina operaciones.
model
Representa objetos del problema: datos y comportamientos propios de cada entidad.
dao
Guarda y recupera datos. Lo usaremos cuando trabajemos con base de datos.

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

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.

Pensar→ Diseñar→ Organizar→ Codificar→ Probar→ Mejorar