La idea es gestionar un mismo material (libros) de dos formas distintas, y con atributos distintos, según si se está funcionando como una biblioteca o como un tienda de libros.
El programa ha de ser ambivalente para ambas situaciones.
Bien, ya ha escrito la clase básica Material
Esta clase, va a tener dos hijas, una para los libros de tienda y otros para los libros de la biblioteca.
Esta podría ser la clase LibroTienda, que añade el atributo para el precio de venta, el cuál se puede proporcionar como parámetro del constructor
public class LibroTienda extends Material {
private double precioVenta;
public LibroTienda(String isbn, String nombre, String autor, double precioVenta) {
super(isbn, nombre, autor);
this.precioVenta = precioVenta;
}
public double getPrecioVenta() {
return precioVenta;
}
public void setPrecioVenta(double precioVenta) {
this.precioVenta = precioVenta;
}
}
Y esta la clase LibroBiblioteca, con dos atributos nuevos para los días que lleva prestado y el valor de multa para un posible retraso en su devolución.
Dichos atributos, parece lógico que se inicialicen a 0 al construir el libro.
public class LibroBiblioteca extends Material {
private int diasPrestamo;
private double valorMulta;
public LibroBiblioteca(String isbn, String nombre, String autor) {
super(isbn, nombre, autor);
diasPrestamo = 0;
valorMulta = 0d;
}
public int getDiasPrestamo() {
return diasPrestamo;
}
public void setDiasPrestamo(int diasPrestamo) {
this.diasPrestamo = diasPrestamo;
}
public double getValorMulta() {
return valorMulta;
}
public void setValorMulta(double valorMulta) {
this.valorMulta = valorMulta;
}
}
Bien, tenemos los dos tipos de material/libros.
Ahora hay que hacer que el programa pueda gestionar de dos formas distintas.
Para ello haremos otras dos clases, cada una enfocada a distinto tipo de negocio.
A pesar de ser negocios distintos, van a tener dos funciones básicas con el mismo nombre: transacción y cambios.
Es aquí donde podemos crear una interfaz, para indicar que esas dos clases han de tener esas dos funciones, aunque su comportamiento será distinto en cada una.
Esa interfaz es tan simple como esto:
public interface IOperarMaterial {
public void cambios();
public void transaccion();
}
Esta interfaz, la implementarán las clases que modelan los distintos tipos de negocio.
Una clase para el negocio de la tienda librería:
import java.util.ArrayList;
public class OperarLibreria implements IOperarMaterial {
private ArrayList<LibroTienda> libros = new ArrayList<LibroTienda>();
@Override
public void cambios() {
// TODO Codigo para que la tienda cambie un libro vendido por otro
//Se debe informar la fecha del cambio y el nombre del nuevo libro por el que fue cambiado.
}
@Override
public void transaccion() {
// TODO Codigo para vender un libro
}
}
Y otra para el negocio de la biblioteca:
import java.util.ArrayList;
public class OperarBiblioteca implements IOperarMaterial {
private ArrayList<LibroBiblioteca> libros = new ArrayList<LibroBiblioteca>();
@Override
public void cambios() {
// TODO Código para hacer la devolución de un libro prestado
//mostrar la fecha de la devolución del libro.
}
@Override
public void transaccion() {
// Codigo para realizar un préstamo a un usuario
}
}
Estas clases, no están terminadas. Intenta escribir el código de cada método, según cada caso.
Por ejemplo para que la tienda venda un libro (transacción) tendrá que preguntar que libro se va a vender, eliminarlo del ArrayList y mostrar en pantalla el precio de venta a modo de factura.
Cuanto tengas esas clases terminadas, ya lo último es crear la clase principal, con dos objetos como atributos para los dos tipos de negocio.
Y mostrar un menú, por ejemplo que empiece preguntando si se quiere operar como libreria o como biblioteca.
Y luego preguntar si se quiere hacer una transaccion o un cambio.
Y ya entonces pedirle al objeto correspondiente (libreria o bliblioteca) que invoquen a sus métodos según lo que haya elegido el usuario.
public class Main {
private static OperarLibreria libreria = new OperarLibreria();
private static OperarBiblioteca biblioteca = new OperarBiblioteca();
public static void main(String[] args) {
// TODO Menu para elebir entre modelo de negocio y preguntar
//que operacion se quiere realizar
}
}
Intenta terminar tú todas estas clases, si no lo consigues, muestra por aquí lo que tengas y te ayudamos a completarlo.
Un saludo.