Programación Avanzada 2.º BT TI · DGETP / UTU
Profe MacónPROGRAMACIÓN AVANZADA
2.º BT TI · DGETP/UTU · 2026
CET1 · Análisis y diseño OO
UNIDAD 01 · INTRODUCCIÓN A LA POO · LECCIÓN 01

Del problema al modelo de objetos

Antes de programar una tienda de cómics, necesitamos interpretar qué información guarda, cómo se relacionan sus elementos y qué decisiones exige su implementación.

Análisis orientado a objetosModelo conceptualUMLDiseño orientado a objetosJava
01 · Punto de partida

¿Qué necesita gestionar «La Viñeta»?

Imagina una tienda barrial de cómics en Montevideo. Vende historietas, mangas y novelas gráficas. Cada compra se registra como una venta, asociada a un cliente y a uno o varios productos.

Cliente

Se identifica por su cédula y tiene nombre y correo.

Producto

Tiene código, nombre, precio de venta y stock.

Venta

Tiene número y fecha. Puede incluir varios productos y cantidades distintas.

Una venta no es solamente una lista de productos. Necesitamos registrar cuántas unidades se vendieron de cada artículo y el precio unitario aplicado en esa venta, incluso si después cambia el precio del catálogo.

Ejemplo: la venta n.º 104 registra para una misma clienta dos unidades de «Historias del Río» a $390 cada una y un ejemplar de «Manga Sur» a $520. Son dos renglones de venta, aunque se facturen en una sola operación.

02 · Comprender antes de implementar

Qué hacemos en el análisis orientado a objetos

El análisis OO describe los conceptos relevantes del problema y sus relaciones. Todavía no decide qué constructor tendrá una clase Java, cómo se guardarán los datos ni qué ventana se utilizará.

1. IdentificarReconocemos entidades del dominio: Cliente, Venta, Producto.
2. RelacionarEstablecemos cómo participan unas entidades con otras en una compra.
3. PrecisarDetectamos que la relación entre Venta y Producto necesita datos propios: cantidad y precio unitario.

¿Por qué no empezar directamente por una clase Java?

Porque escribir atributos y métodos antes de entender las relaciones puede llevarnos a un modelo que no representa bien el negocio. Primero estudiamos qué ocurre; después decidimos cómo lo programamos.

03 · Primera representación

El modelo conceptual de la tienda

Este es el primer diagrama que proporcionaste. Léelo como un mapa de los conceptos del negocio, no como una receta para programar.

Diagrama conceptual UML: Cliente se asocia con Venta; Venta se relaciona con Producto; DetalleVenta cuelga mediante línea discontinua de la relación Venta-Producto y contiene cantidad y precioUnitario.
Figura 1. Modelo conceptual aportado para «La Viñeta». DetalleVenta aparece vinculada a la asociación entre Venta y Producto.
La pregunta didáctica: ¿qué información pertenece al producto en general y qué información depende de una venta concreta? El precio vigente y el stock describen al producto; la cantidad comprada y el precio acordado en esa operación describen el detalle de venta.
04 · Interpretar las relaciones

Leer UML sin confundir análisis con código

Cliente — Venta

Una venta se registra para un cliente. Que el diagrama muestre una asociación no define por sí solo cuántas ventas puede tener cada cliente: faltan multiplicidades.

Venta — Producto

Una venta puede incluir distintos productos. Para describir cada participación necesitamos los datos cantidad y precioUnitario.

¿Qué significa la línea discontinua hacia DetalleVenta?

En el diagrama conceptual, DetalleVenta se representa como una clase de asociación: sus atributos pertenecen a una ocurrencia de la relación entre una venta y un producto. Esta es una idea conceptual valiosa, aunque al programar puede convenir representarla mediante objetos y referencias explícitas.

¿Qué no podemos concluir aún?

No se indican multiplicidades (1, 0..*, etc.) ni todas las reglas de negocio. Por tanto, no afirmamos que el dibujo ya resuelva si una venta admite productos repetidos, si puede quedar vacía o cómo se aplica una devolución.

05 · Segunda representación

Del modelo conceptual al modelo de diseño

El segundo diagrama que proporcionaste añade tipos y atributos pensando en la implementación. Ya aparecen decisiones propias del diseño OO: identificadores, tipos Java y referencias entre clases.

Diagrama de diseño UML con clases Cliente, Venta, DetalleVenta y Producto. Cliente: cedula long, nombre y correo String. Venta: numero int, fecha Date, cliente Cliente y detalle DetalleVenta (lista). DetalleVenta: producto Producto, cantidad int y precioUnitario double. Producto: código long, nombre String, precio double, stock int.
Figura 2. Diagrama orientado al diseño aportado. Se conservan su notación y atributos originales para analizarlos en clase.
ConceptoEn el diagrama de diseñoQué significa programando
Clientecedula: long, nombre: String, correo: StringDefinir el estado de cada cliente.
Ventanumero: int, fecha: Date, cliente: Cliente, detalle como listaAsociar cada objeto Venta con un Cliente y con sus renglones.
DetalleVentaproducto: Producto, cantidad: int, precioUnitario: doubleCrear un objeto por renglón con referencia al producto.
Productocodigo: long, nombre: String, precio: double, stock: intRepresentar los artículos del catálogo.
06 · Pensar críticamente el diseño

Qué decisiones debemos tomar antes de codificar

Los rombos del diagrama

En UML, el rombo blanco se utiliza para expresar una agregación compartida. En el diagrama aportado aparece en varias asociaciones. Conviene discutir si esas relaciones realmente representan agregación o si alguna debería modelarse como asociación simple. No cambiaremos el dibujo sin analizarlo.

La lista de detalles

La anotación DetalleVenta(lista) comunica una colección, pero todavía debemos decidir su tipo de implementación: por ejemplo, List<DetalleVenta> en Java.

Multiplicidades

Sería conveniente documentar si una Venta tiene uno o varios detalles y si un Producto puede intervenir en muchas ventas. La intención de negocio se comprende; la cardinalidad exacta debe explicitarse.

Datos y tipos

El diagrama usa double para precios y Date para fechas. Los conservamos para respetar el modelo inicial; más adelante podemos estudiar alternativas como BigDecimal y LocalDate.

Distinción importante: una relación representada en UML no es automáticamente un atributo, ni un rombo indica por sí solo que debamos destruir objetos cuando desaparece otro. Esas decisiones deben justificarse a partir de las reglas del sistema.
07 · Primer puente hacia Java

Cómo comienza a verse el diseño en código

Sin construir todavía todo el programa, podemos escribir una versión mínima que muestre la diferencia entre una clase y una relación entre objetos.

DetalleVenta.java Ejemplo de diseño, no implementación completa
public class DetalleVenta {
    private Producto producto;
    private int cantidad;
    private double precioUnitario;

    public DetalleVenta(Producto producto,
                        int cantidad, double precioUnitario) {
        this.producto = producto;
        this.cantidad = cantidad;
        this.precioUnitario = precioUnitario;
    }
}

El atributo producto es una referencia a otro objeto. La cantidad no se coloca dentro de Producto, porque el mismo artículo puede venderse en cantidades distintas en operaciones diferentes.

Venta.java Fragmento ilustrativo
import java.util.ArrayList;
import java.util.List;

public class Venta {
    private int numero;
    private Cliente cliente;
    private List<DetalleVenta> detalles = new ArrayList<>();
}

Este fragmento introduce la posibilidad de implementar la asociación con una colección. No completa las reglas del negocio, constructores ni operaciones; esas decisiones aparecerán en las lecciones siguientes.

08 · Lo que queremos comprender

Dos diagramas, dos momentos distintos

Modelo conceptual

Explica qué entidades son relevantes, qué relaciones existen y qué información pertenece a cada una.

Pregunta: «¿Qué necesitamos representar?»

→

Modelo de diseño

Decide cómo organizar clases, atributos, tipos y referencias para construir el programa.

Pregunta: «¿Cómo lo representaremos en Java?»

Idea final: analizar no es comenzar a programar: es construir una representación del problema. Diseñar significa tomar decisiones técnicas coherentes con esa representación. El mismo caso de la tienda nos acompañará al estudiar encapsulamiento, asociaciones, colecciones, interfaz gráfica y persistencia.

Comprobación rápida

¿Dónde debería almacenarse la cantidad de unidades compradas en una venta específica?

Micro-entrega de documentación: conserva ambos diagramas y redacta dos decisiones de diseño: por qué existe DetalleVenta y por qué Venta necesita una colección de detalles.
Material en curso