Hola, no tengo la suficiente información para poder ayudarte mejor, pero quizás esto sea suficiente:
Estas serian tus clases:
Nombre | Atributos | Funciones |
Cliente | -id, -nombre, ... | constructor(name), getId(): id, getNombre(): nombre, .... (Pones el resto) |
Musica | -id, -nombre, -genero, -precio | constructor(name, genero, precio), getId(): id, getNombre(): nombre, reproducir() : void, .... (Pones el resto) |
Venta | -id, -cliente, -musicas, -total | constructor(-cliente, -musicas), getId(): id, getMusicas(): musicas, .... (Pones el resto) |
Ok, lo primero que tienes que entender es que la clase Musica es una clase abstracta. Esto pasa ya que no puedes comprar "Musica" asi como así, tienes que comprarla en un formato ya sea CD, Casete o Vinilo.
Portanto, dicha clase abstracta al ser heredada (por ejemplo por cd) le pedira que esta implemente su constructor y sus metodos abstractos:
public Contructor
(String nombre,
String genero,
int Precio
) { /* ... */
}
public void Reproducir() { /* . PON LO QUE QUIERAS, LA GRACIA ES QUE SE NOTE QUE CADA UNO SE REPRODUCE DE FORMA DISTINTA . */}
(Si necesitas mas código de ejemplo dime)
Bien, ahora, no se si realmente te piden que esto sea "eficiente, gastar pocos recursos o algo así" en dicho caso te la tendrás que ingeniar mas, pero si no te lo exigen... es facil.
(En la siguiente parte supongo que crear cada producto unitariamente, y cada producto osea: CD, Vinilo, Disquete. Tiene su stock, su genero, nombre etc.)
Bueno, probablemente te pidan hacer algo similar a una base de datos, es por esto que puse el campo "id" en todas las clases. Una forma efectiva (probablemente no la mas eficiente) de simular una base de datos con dicho campo es la siguiente:
public class Cliente {
public static int IDENTIFICATOR = 0;
private final int id;
this.id = Cliente.IDENTIFICATOR++;
this.name = name;
}
}
De esta forma, la variable IDENTIFICATOR que al ser static no depende de la instancia sino que es global siempre asignara su valor a la id del cliente y luego aumentara su propio valor en 1, de esta forma el siguiente cliente tendrá una id mas.. Y ya esta, con eso empleaste las IDs autoincrementales.
Bien, ahora como guardamos todos los clientes (para poder hacer una búsqueda, por ejemplo por su id).
Aca podrías usar un Diccionario con la clase Map, pero entiendo que posiblemente este sea un ejercicio basico, (y al menos a mi nunca me mencionaron eso en la universidad... realmente no me enseñaron nada (asco de universidad) ).
Así que usaremos un ArrayList. Que es como un Array cualquiera, solo que no tiene fin, puedes poner todos los elementos que quieras!! (prácticamente hablando).
Entonces en nuestra clase Cliente hacemos agregamos lo siguiente:
public static ArrayList<Cliente> CLIENTES = new ArrayList<>();
Y en el constructor agregamos el add:
CLIENTES.add(this); // justo al final
De esta forma tenemos una "base de datos de clientes". Puedes hacer esto mismo con el resto. Pero recuerda, no lo hagas en binilo, CD, o Disquete... puesto que esto tiene que estar implementado en la clase Musica (De esta forma tendras una "Base de Datos" o mas bien "Tabla" única para toda la música sin importar que sea!)
...
Bueno, ahora para obtener los valores puedes recorrer el arreglo en busca de la ID, o si quieres por el nombre, etc.. eso te lo ingenias. Por ahora te dejo el código de la ID:
public int getId() {
return this.id;
}
public static Cliente findClient(int id) {
for(Cliente cliente : CLIENTES) if(id == cliente.getId()) return cliente;
return null;
}
Si la id es igual al cliente que estamos iterando entonces lo retorna. Y si después de todas las iteraciones no se encuentra... regresa un valor nulo (luego tu validas que si es null imprima un mensaje diciendo que no existe).
Y ahora, recuerdas que en la venta tenias "cliente" y "musicas", pues dichos atributos se verían así:
private Cliente cliente;
private ArrayList<Musica> musicas;
Entonces es facil, al concretar una venta generas un ArrayList con todas las canciones que quiere el cliente y junto a los datos del cliente lo pasas por el constructor. Para que este se almacene en nuestro ArrayList de Ventas, con una id unica... bla bla bla.
Si no te queda claro dime. Y mas tarde te respondo (que tengo que salir).