Contexto

Una tienda necesita un pequeño sistema para llevar el control de sus productos: cuántas unidades tiene de cada uno, a qué precio se vende y cómo registrar ventas y reposiciones. Vas a modelar esto con una clase Producto y vas a crear varios objetos independientes a partir de ella, tal como viste en la lección: el plano (Producto) frente a cada edificación concreta (cada producto real del local).

Consigna

Escribí una clase Java llamada Producto.java que represente un artículo de la tienda, y una clase MainInventario.java con el método main que la ponga a prueba.

1. Atributos de la clase Producto

Definí los siguientes atributos públicos (estado del objeto):

  • nombre (String)
  • codigo (String)
  • precio (double)
  • stock (int)

Estructura sugerida para arrancar (completá los cuerpos de los métodos):

public class Producto {
    public String nombre;
    public String codigo;
    public double precio;
    public int stock;

    public void venderUnidades(int cantidad) { /* ... */ }
    public void reponerStock(int cantidad) { /* ... */ }
    public void actualizarPrecio(double precio) { /* ... */ }
    public void mostrarFicha() { /* ... */ }
}

2. Métodos (comportamiento)

  • venderUnidades(int cantidad): si cantidad es mayor a cero y no supera el stock disponible, descontá el stock e imprimí un mensaje de venta exitosa. Si no se cumple alguna condición, imprimí un mensaje de error explicando cuál.
  • reponerStock(int cantidad): si cantidad es mayor a cero, sumala al stock e imprimí la confirmación. Si no, imprimí un error.
  • actualizarPrecio(double precio): el parámetro se llama igual que el atributo (sombreamiento intencional). Usá this.precio para referirte al atributo del objeto y actualizá su valor, mostrando el precio anterior y el nuevo.
  • mostrarFicha(): imprimí todos los datos del producto con un formato prolijo, como en el ejemplo de salida esperada.

3. Instanciación en main

En MainInventario, creá al menos tres objetos Producto distintos con el operador new, asignales atributos diferentes y ejercitá sus métodos. Verificá que modificar un objeto (por ejemplo, vender unidades de productoUno) no afecta en nada a los otros objetos: cada new reserva su propio espacio en el Heap.

4. Referencias: alias vs. objeto nuevo

Para cerrar, comprobá con código la diferencia entre copiar una referencia y crear un objeto nuevo:

Producto copia = productoUno;
copia.stock = 29;
// productoUno.stock también es 29: copia y productoUno son la MISMA
// referencia, apuntando al mismo objeto en el Heap.

Mostrá por consola el valor de productoUno.stock después de modificar copia para dejar en evidencia que no se creó un objeto nuevo, solo una segunda variable apuntando al mismo lugar de memoria.

El formato exacto de tus mensajes puede variar, pero debe comunicar la misma información que la salida esperada de más abajo: qué se vendió, qué se repuso, el cambio de precio y el resultado del aliasing.