![Page 1: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/1.jpg)
1Laboratorio di Programmazione - Luca Tesei
Condizionale, blocchi
Comando Condizionale
Blocchi
Gestione dei blocchi da parte della macchina astratta Java
Visibilità (scope) ed esistenza delle variabili di frame nei blocchi
![Page 2: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/2.jpg)
2Laboratorio di Programmazione - Luca Tesei
Scelte
● Fino ad ora il corpo dei metodi che abbiamo scritto aveva solo un modo di essere eseguito: in sequenza dalla prima istruzione all’ultima
● In applicazioni non banali il comportamento dei metodi deve variare a seconda dei dati di input
● Il programma deve prendere delle decisioni in base ai dati in suo possesso
● Vediamo quindi come si fa ad effettuare delle scelte nei programmi
![Page 3: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/3.jpg)
3Laboratorio di Programmazione - Luca Tesei
Il costrutto if
● Riconsideriamo la classe BankAccount● Il metodo withdraw preleva dal conto una cifra
qualsiasi● In una applicazione reale, invece, il metodo
dovrebbe controllare se la cifra richiesta è disponibile e solo in quel caso effettuare il prelievo
● Per far questo si può usare lo statement (enunciato) if
![Page 4: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/4.jpg)
4Laboratorio di Programmazione - Luca Tesei
Il costrutto if
public class BankAccount {...public void withdraw(double amount) { if (amount <= balance) balance = balance – amount; }...}
![Page 5: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/5.jpg)
5Laboratorio di Programmazione - Luca Tesei
Il costrutto if
● In questo modo l’assegnamento balance = balance – amount; viene eseguito solo se la condizione tra parentesi tonde è vera.
● Il significato di (amount <= balance) è un valore di tipo boolean, cioè un valore nell’insieme {true, false}
● L’espressione è vera (true) se il valore della variabile amount (parametro esplicito del metodo) è minore o uguale al valore della variabile istanza balance dell’oggetto si cui si sta eseguendo il metodo
![Page 6: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/6.jpg)
6Laboratorio di Programmazione - Luca Tesei
Rappresentazione con diagramma a blocchi
amount <= balance
balance = balance - amount
Vero
Falso
![Page 7: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/7.jpg)
7Laboratorio di Programmazione - Luca Tesei
Il costrutto if
● Se la condizione risulta falsa l’if da solo non fa niente e il controllo passa al comando successivo
● Potremmo pensare, comunque, di avvertire in qualche modo l’utente che il prelievo non è possibile
● Per far questo è possibile aggiungere all’if un’alternativa (else) che contiene un comando che viene eseguito solo se la condizione è falsa (false)
![Page 8: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/8.jpg)
8Laboratorio di Programmazione - Luca Tesei
Il costrutto if-else
public class BankAccount {...public void withdraw(double amount) { if (amount <= balance) balance = balance – amount; else System.out.println( “Importo Richiesto Non Disponibile”); }...}
Attenzione! Questo tipo di output non è adatto quando laclasse è di Back-end. In una versione corretta invece di
stampare un messaggio va lanciata un'eccezione o restituitoun valore di ritorno che segnala l'anomalia
![Page 9: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/9.jpg)
9Laboratorio di Programmazione - Luca Tesei
Il costrutto if-else
La semantica dell’if-else è la seguente:1)Viene calcolato il valore dell’espressione di tipo boolean fra parentesi tonde
2)Se l’espressione ha valore true allora viene eseguito il comando che si trova tra l’espressione e la parola riservata else.
3)Se l’espressione ha valore false allora viene eseguito il comando che si trova dopo la parola riservata else
4)In ogni caso, dopo l’esecuzione del comando corrispondente (caso 2 o caso 3), l’esecuzione continua con l’enunciato che segue
![Page 10: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/10.jpg)
10Laboratorio di Programmazione - Luca Tesei
Rappresentazione con diagramma a blocchi
amount <= balance
balance = balance - amount
Vero
Falso
Importo Richiesto Non Disponibile
![Page 11: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/11.jpg)
11Laboratorio di Programmazione - Luca Tesei
Attenzione: errore!
public class BankAccount {...public void withdraw(double amount) { if (amount <= balance) balance = balance – amount; if (amount > balance) System.out.println( “Importo Richiesto Non Disponibile”); }...}
Errore! Non è la stessa cosa dell'if-else: dopo l'esecuzione delprimo if il valore di balance può essere diverso e l'espressionenegata potrebbe diventare vera, mentre all'inizio era falsa!
![Page 12: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/12.jpg)
12Laboratorio di Programmazione - Luca Tesei
Rappresentazione con diagramma a blocchi
amount <= balance
balance = balance - amount
Vero
Falso
amount > balance
Vero
Falso
Importo Richiesto Non Disponibile
Percorso chenon esiste nell’if-else
![Page 13: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/13.jpg)
13Laboratorio di Programmazione - Luca Tesei
Blocchi
● Il costrutto if o if-else prevede che sia inserito un solo comando dopo l’espressione tra parentesi e dopo la parola riservata else
● Invece potremmo aver bisogno di eseguire più di un comando nel “ramo true” e/o nel “ramo false”
● Per far questo usiamo la possibilità, offerta dal linguaggio Java, di creare blocchi di comandi
![Page 14: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/14.jpg)
14Laboratorio di Programmazione - Luca Tesei
Blocchi
● Un blocco inizia con { e finisce con }● All’interno delle parentesi graffe possono essere
inseriti zero o più enunciati● Un blocco può essere inserito in qualunque
punto all’interno del corpo di un metodo● I blocchi possono essere annidati: un blocco
può contenere altri blocchi che a loro volta possono contenere altri blocchi
● Un blocco viene visto dalla macchina astratta java come un unico enunciato
![Page 15: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/15.jpg)
15Laboratorio di Programmazione - Luca Tesei
Blocchi
● Supponiamo ad esempio che se un utente tenta di prelevare del denaro che non ha, oltre alla stampa del messaggio, venga anche decrementato il saldo di una penale costante
● Possiamo scrivere così:
![Page 16: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/16.jpg)
16Laboratorio di Programmazione - Luca Tesei
Blocchi
public class BankAccount {...public static final double PENALE = 5.0;public void withdraw(double amount) { if (amount <= balance) { double newBalance = balance – amount; balance = newBalance; } else { System.out.println(“Importo Richiesto Non
Disponibile”); balance = balance – PENALE; System.out.println(“Penale di “ + PENALE + “ euro applicata”); } }...}
Blocco del ramotrue
Blocco del ramofalse
![Page 17: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/17.jpg)
17Laboratorio di Programmazione - Luca Tesei
Blocchi e variabili di frame
● Nel blocco del ramo “true” dichiariamo una nuova variabile di tipo double che chiamiamo newBalance
● In Java, quando si apre un nuovo blocco, viene sempre aggiunto un frame nuovo nella pila di frame contenuta nell’attivazione corrente
● Le variabili dichiarate all’interno del nuovo blocco hanno scope (contesto) limitato ad esso
● Esse cesseranno di esistere quando l’esecuzione di tutti i comandi del blocco sarà finita e, quindi, il frame verrà buttato via
![Page 18: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/18.jpg)
18Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
• Ricordiamoci che quando viene riferita una variabile con un certo nome all’interno di un metodo la macchina astratta Java segue un algoritmo ben preciso per rintracciarla:
1. Cerca il nome all’interno del frame in testa alla pila di frame dell’attivazione corrente
3. Se lo trova allora quella è la variabile riferita4. Se non lo trova lo cerca all’interno dei frame
sottostanti dal più recente a quello più in basso. 5. Se non lo trova in nessun frame la variabile non è
stata dichiarata (è un errore che viene segnalato dal compilatore)
![Page 19: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/19.jpg)
19Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi: conflitto
● Il compilatore non permette, all’interno della stessa attivazione, di ridefinire un nome di variabile, anche se in un blocco interno
● Facciamo un esempio. Supponiamo di trovarci nella seguente situazione alla chiamata del metodo withdraw su un certo oggetto creato in un main
![Page 20: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/20.jpg)
20Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non
Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } }
Posizione attuale
![Page 21: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/21.jpg)
21Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
Attivazione delmain (congelata/non raggiungibile)
this
amount 100.0
BankAccount
balance 90.0
HeapAttivazione dellachiamata di withdraw
Primo frame (corrisponde al blocco principale del metodo)
![Page 22: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/22.jpg)
22Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // Non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } }
Posizione attuale
![Page 23: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/23.jpg)
23Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
Attivazione delmain (congelata/non raggiungibile)
this
amount 100.0
BankAccount
balance 90.0newBalance -10.0
![Page 24: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/24.jpg)
24Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non
Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } }
Posizione attuale
![Page 25: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/25.jpg)
25Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
Attivazione delmain (congelata/non raggiungibile)
this
amount 100.0
BankAccount
balance 90.0newBalance -10.0
L’apertura di un nuovo bloccocorrisponde alla crazione di un nuovo frame in testa allapila
![Page 26: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/26.jpg)
26Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non
Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } }
Posizione attuale
![Page 27: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/27.jpg)
27Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
Attivazione delmain (congelata/non raggiungibile)
BankAccount
balance 90.0
Heap
this
amount 100.0
newBalance -10.0
penaltyBalance 85.0
Nuovo frame per il nuovoblocco. La variabile penaltyBalance nasce e muorecon il nuovo blocco
![Page 28: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/28.jpg)
28Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non
Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } }
Posizione attuale
![Page 29: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/29.jpg)
29Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
Attivazione delmain (congelata/non raggiungibile)
BankAccount
balance 85.0
thisamount 100.0
newBalance -10.0
Il frame per il nuovoblocco e la relativa variabile penaltyBalance vengonobuttati via
![Page 30: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/30.jpg)
30Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } } Posizione attuale Blocco del ramo false chiuso
![Page 31: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/31.jpg)
31Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
Attivazione delmain (congelata/non raggiungibile)
BankAccount
balance 85.0
Heap
thisamount 100.0
newBalance -10.0
Il frame per il bloccodel ramo “false” dell’ifviene buttato via (non contienevariabili) alla fine del blocco
![Page 32: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/32.jpg)
32Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
● Alla fine dell’esecuzione del blocco principale di withdraw:
public void withdraw(double amount) { double newBalance = balance – amount; ... }
● viene cancellato il frame principale, ma anche tutta l’attivazione creata per eseguirlo
![Page 33: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/33.jpg)
33Laboratorio di Programmazione - Luca Tesei
Visibilità delle variabili e blocchi
Attivazione delmain (di nuovo in
esecuzione)
BankAccount
balance 85.0
Heap
![Page 34: Condizionale, blocchi - Unicam · Condizionale, blocchi Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle](https://reader033.vdocumenti.com/reader033/viewer/2022042612/5f5ed20ca5850f0ab03b5579/html5/thumbnails/34.jpg)
34Laboratorio di Programmazione - Luca Tesei
Esercizio
● Riprogettare e reimplementare la classe BankAccount secondo i seguenti requisiti:
● è possibile chiedere ad un BankAccount se un prelievo è possibile e, se c'è, a quanto ammonta la penale
● il metodo withdraw non stampa sullo standard output, ma segnala ciò che ha fatto tramite un numero intero scelto fra le due seguenti costanti intere (da definire): WITHDRAW_OK, WITHDRAW_FAILED_PENALTY