Ayuda con Práctica Programacion orientada objetos

A ver si me podéis echar una mano porque se me acaba el tiempo para la entrega y entre el agobio y la frustración no soy capaz de sacar nada.

Tengo que hacer con bluej un TPV ( terminal punto de venta ) y no se como llevarlo a cabo.

Me piden hacer un inventario de los productos del establecimiento de manera que estén identificados por un código, una descripción, el precio, el precio sin IVA y la cantidad en stock.

Se tiene que poder dar de alta y de baja nuevos productos y poder importar productos desde un fichero.

Hacer un ticket para cada venta que vaya con un código de formato AAAAMMDDHHMM.

De momento he creado una clase Producto que crea los productos que yo indique y ahora quiero pasarlos a la clase inventario.

No se si esta es la sección adecuada del foro.
En la clase inventario, pon de atributo una lista o array de objetos producto, y en esa clase los métodos para añadir/eliminar. Supongo que tendrás que controlar que no se metan 2 productos iguales.
CyberDemon_98 escribió:En la clase inventario, pon de atributo una lista o array de objetos producto, y en esa clase los métodos para añadir/eliminar. Supongo que tendrás que controlar que no se metan 2 productos iguales.


Pongo añadir y eliminar también en inventario no?

Si se te meten dos productos iguales no pasa nada, tendrías el mismo producto en una cantidad de 2
pedriterman escribió:
CyberDemon_98 escribió:En la clase inventario, pon de atributo una lista o array de objetos producto, y en esa clase los métodos para añadir/eliminar. Supongo que tendrás que controlar que no se metan 2 productos iguales.


Pongo añadir y eliminar también en inventario no?

Si se te meten dos productos iguales no pasa nada, tendrías el mismo producto en una cantidad de 2


Pero si hay un atributo de stock no entiendo eso ultimo.
Añadir y eliminar solo en inventario. Supongo que producto tendrás los atributos de un producto, los constructores y los gets/sets.

Añadir y eliminar en inventario.
CyberDemon_98 escribió:
pedriterman escribió:
CyberDemon_98 escribió:En la clase inventario, pon de atributo una lista o array de objetos producto, y en esa clase los métodos para añadir/eliminar. Supongo que tendrás que controlar que no se metan 2 productos iguales.


Pongo añadir y eliminar también en inventario no?

Si se te meten dos productos iguales no pasa nada, tendrías el mismo producto en una cantidad de 2


Pero si hay un atributo de stock no entiendo eso ultimo.
Añadir y eliminar solo en inventario. Supongo que producto tendrás los atributos de un producto, los constructores y los gets/sets.

Añadir y eliminar en inventario.


Te pongo el código de la clase producto:

/**
* Write a description of class Producto here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Producto
{
// instance variables - replace the example below with your own
private int codigo;
private String nombre;
private String descripcion;
private int cantidad;
private int precio;
private int precioiva;

/**
* Constructor for objects of class Producto
*/
public Producto(int codigo, String nombre, String descripcion, int precio, int precioiva)
{
this.codigo = codigo;
this.nombre = nombre;
this.precio = precio;
this.precioiva = precioiva;
this.descripcion = descripcion;
}

/**
* @return codigo de barras del producto.
*/
public int getCodigo()
{
return codigo;
}

/**
* @return nombre del producto.
*/
public String getNombre()
{
return nombre;
}

/**
* @return descripcion del producto.
*/
public String getDescripcion()
{
return descripcion;
}

/**
* @return precio del producto.
*/
public int getPrecio()
{
return precio;
}

/**
* @return precio del producto.
*/
public int getPrecioiva()
{
return precioiva;
}

/**
* @return Codigo y nombre en stock.
*/
public String toString()
{
return codigo + ": " +
nombre +
" descripcion: " + descripcion;
}

}
pedriterman escribió:
CyberDemon_98 escribió:
pedriterman escribió:
Pongo añadir y eliminar también en inventario no?

Si se te meten dos productos iguales no pasa nada, tendrías el mismo producto en una cantidad de 2


Pero si hay un atributo de stock no entiendo eso ultimo.
Añadir y eliminar solo en inventario. Supongo que producto tendrás los atributos de un producto, los constructores y los gets/sets.

Añadir y eliminar en inventario.


Te pongo el código de la clase producto:

/**
* Write a description of class Producto here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Producto
{
// instance variables - replace the example below with your own
private int codigo;
private String nombre;
private String descripcion;
private int cantidad;
private int precio;
private int precioiva;

/**
* Constructor for objects of class Producto
*/
public Producto(int codigo, String nombre, String descripcion, int precio, int precioiva)
{
this.codigo = codigo;
this.nombre = nombre;
this.precio = precio;
this.precioiva = precioiva;
this.descripcion = descripcion;
}

/**
* @return codigo de barras del producto.
*/
public int getCodigo()
{
return codigo;
}

/**
* @return nombre del producto.
*/
public String getNombre()
{
return nombre;
}

/**
* @return descripcion del producto.
*/
public String getDescripcion()
{
return descripcion;
}

/**
* @return precio del producto.
*/
public int getPrecio()
{
return precio;
}

/**
* @return precio del producto.
*/
public int getPrecioiva()
{
return precioiva;
}

/**
* @return Codigo y nombre en stock.
*/
public String toString()
{
return codigo + ": " +
nombre +
" descripcion: " + descripcion;
}

}


Cierto, se me olvido el toString(). Yo lo veo bien.
Tienes mil maneras de hacerlo.

Yo haría la clase Producto, que tendría los atributes que te dicen con sus get/set; la clase Inventario, que tendría los productos indexados por código con un add(producto) y un add(fichero); la clase Venta, que tendría también una colección de productos, además de un método que te devuelva el ticket; y finalmente una clase que se encargue de mostrar los menus y gestionar todo el sistema.
kbks escribió:Tienes mil maneras de hacerlo.

Yo haría la clase Producto, que tendría los atributes que te dicen con sus get/set; la clase Inventario, que tendría los productos indexados por código con un add(producto) y un add(fichero); la clase Venta, que tendría también una colección de productos, además de un método que te devuelva el ticket; y finalmente una clase que se encargue de mostrar los menus y gestionar todo el sistema.


Si no hago GUI no necesito la clase para mostrar los menús, no?
No tengo ni idea de como quieres que se controle el sistema. ¿Es una aplicación de consola? ¿ventanas? ¿otro entorno diferente?

Tu sabrás mejor que nadie los requisitos que tenéis en ese aspecto y como quieres que se controle el sistema. Yo estaba dando por hecho que estabas haciendo una aplicación basada en consola, por o que en mi opinión no sería mala idea tener una clase que se encargue de gestionar la interacción con el usuario (mostrar menús, permitir añadir productos, realizar compras...)
kbks escribió:No tengo ni idea de como quieres que se controle el sistema. ¿Es una aplicación de consola? ¿ventanas? ¿otro entorno diferente?

Tu sabrás mejor que nadie los requisitos que tenéis en ese aspecto y como quieres que se controle el sistema. Yo estaba dando por hecho que estabas haciendo una aplicación basada en consola, por o que en mi opinión no sería mala idea tener una clase que se encargue de gestionar la interacción con el usuario (mostrar menús, permitir añadir productos, realizar compras...)


Pues la práctica tiene varios niveles y la interfaz es el mas alto. Si no he entendido mal, si hago el nivel que está por debajo solo tengo que enviarle los archivos del bluej y una memoria de práctica.
No se si pasa igual que en c#, pero el método toString() ¿lleva override?
No se si he entendido bien, pero un producto no crea productos. En tal caso añades productos a un inventario, por lo que te tendría que quedar en formato:
m_inventory.add(~whatever);

Luego lo que tienes que mirar es donde va cada propiedad. ¿El código es una propiedad del producto? ¿El stock es una propiedad del producto? Obviamente, un producto tendrá un código, pero el stock de este producto lo tendrás en el inventario.

La arquitectura más adecuada es que sea el inventario el que gestione todos los productos. Tendrás que tener tu lista de productos y pedirle al inventario que te informe sobre los productos que tiene y sobre las propiedades de los mismos.

De hecho, si el producto es meramente informativo, ni si quiera el inventario debería darte un producto, si no que tendrías que preguntarle al inventario la propiedad del producto que buscas. Si el producto fuese a ser utilizado por alguien más, puedes devolverlo, pero preferentemente el inventario es el administrador de los productos y es él el que lo maneja todo, por lo que la aplicación a priori no tiene motivos para depender del objeto producto. De esta forma si un día quieres guardar cadáveres en el inventario no necesitas ir preguntando por uno o por otro, si no que el propio inventario te dará lo que necesites con el identificador adecuado, el cual también podrá ser transparente. Si consigues que el inventario administe todos los productos no solo te ahorrarás el tener que ir pasando el objeto por la aplicación, si no que además evitarás dependencias.
He decidido hacerlo un poco menos generalizado y he creado una especie de tienda de componentes informáticos con una clase componentes y varias subclases para poder cumplir con el apartado de la herencia y parece que lo llevo bien encaminado. No paso mucho por aquí porque estoy todo el rato con la práctica.
12 respuestas