1) Definire una class BankAccount i cui oggetti rappresentano conti bancari. Ogni conto bancario possiede un saldo corrente, da descrivere tramite una variabile di tipo double. Il costruttore deve inizializzare il saldo del conto al valore passato come parametro. Operazione da implementare: - deposit, per depositare una certa quantità di denaro sul conto - withdraw, prelevare una certa quantità di denaro dal conto, purché il saldo sia sufficiente. Il metodo deve ritornare un valore boolean, dove il valore true indica che l'operazione ha avuto successo (in quanto il saldo disponibile era sufficiente), mentre false indica che il credito non è sufficiente ad effettuare il prelievo. - getBalance(), per leggere il saldo corrente (ritorna il valore attuale del saldo) 2) Aggiungere alla classe BankAccount una variabile d'istanza contoDiSupporto, che riferisce un altro oggetto di tipo BankAccount. L'idea è di utilizzare il conto di supporto per i prelievi, quando il saldo disponibile nel conto non è sufficiente ad effettuare l'operazione. Operazioni da implementare: - un metodo per impostare il conto di supporto - modificare il metodo per prelevare soldi dal conto. Se il saldo del conto non è sufficiente, i soldi mancanti devono essere prelevati dai conti di supporto. In generale, dato che ogni conto ne può riferire un altro (di supporto), i soldi devono essere prelevati da un conto alla volta, fino a che tutti i soldi richiesti non sono stati ottenuti. Attenzione: se il saldo totale (somma dei saldi del conto attuale e ogni altro conto di supporto) non è sufficiente, allora nessun saldo dovrebbe essere modificato, ed il metodo dovrebbe restituire il valore false. 3) Aggiungere un codice univoco (rappresentato come un valore int) ad ogni conto corrente. Il codice univoco viene impostato dal costruttore. Per garantire che il codice sia univoco si può usare una variabile statica prossimoCodice che mantiene il valore del prossimo codice disponile per il prossimo conto che verrà creato. Ad ogni creazione di un nuovo conto corrente, la variabile prossimoCodice viene utilizzata per assegnare il codice univoco al conto, e viene incrementata, in modo che alla successiva creazione di un nuovo conto ad esso venga assegnato un diverso codice. 4) Definire nella classe BankAccount un metodo statico boolean fairWithdraw(BankAccount account, double amount) { ... } che prende un conto (account) ed una somma da prelevare (amount), e preleva in modo "equo" tra i saldi del conto attuale e *tutti* i conti di supporto. Il metodo ritorna true se e solo se il saldo totale è sufficiente. Prelevare in modo equo significa che i soldi tolti da ogni conto sono proporzionali al saldo del conto... cioè più soldi ci sono più ne devono essere prelevati.