Implementare Implementare
le classi le classi
C. Horstmann C. Horstmann Fondamenti di programmazione e Java 2 Fondamenti di programmazione e Java 2 3^ edizione Apogeo 3^ edizione Apogeo trad. Nicola Fanizzi trad. Nicola Fanizzi corso di Programmazione, CdS: Informatica TPS corso di Programmazione, CdS: Informatica TPS
2 2
Obiettivi Obiettivi
Familiarizzare col processo di implementazione delle Familiarizzare col processo di implementazione delle classi
classi
Essere in grado di implementare semplici metodi Essere in grado di implementare semplici metodi
Capire lo scopo e l'uso dei costruttoriCapire lo scopo e l'uso dei costruttori
Capire come accedere campi d'istanza e variabili Capire come accedere campi d'istanza e variabili locali
locali
Sperimentare l'importanza dei commenti per la Sperimentare l'importanza dei commenti per la documentazione
documentazione
3 3
Scatole Nere Scatole Nere
Una Una scatola nerascatola nera fa il suo lavoro fa il suo lavoro come per magia
come per magia
Nasconde il lavoro all'internoNasconde il lavoro all'interno
Incapsulamento: nascondere i dettagli meno Incapsulamento: nascondere i dettagli meno importanti
importanti
Qual è il giusto concetto per ogni particolare scatola Qual è il giusto concetto per ogni particolare scatola nera?
nera?
4 4
Scatole Nere Scatole Nere
I concetti si scoprono attraverso un meccanismo di I concetti si scoprono attraverso un meccanismo di astrazione
astrazione
astrazione: togliere caratteristiche inessenziali astrazione: togliere caratteristiche inessenziali finché
finché rimane solo l'essenza del concetto rimane solo l'essenza del concetto
Nella programmazione orientata agli oggetti le Nella programmazione orientata agli oggetti le scatole nere con cui si
scatole nere con cui si costruisconocostruiscono i programmi i programmi sono dette oggetti
sono dette oggetti
5 5
Livelli di Astrazione:
Livelli di Astrazione:
Esempio dal Mondo Reale Esempio dal Mondo Reale
Scatole nere in un'auto: Scatole nere in un'auto:
trasmissione trasmissione
centralina elettronicacentralina elettronica
ecc... ecc...
6 6
Livelli di Astrazione:
Livelli di Astrazione:
Esempio dal Mondo Reale Esempio dal Mondo Reale
Gli utenti di un'auto non han bisogno di capire come Gli utenti di un'auto non han bisogno di capire come funzionano nei dettagli queste scatole nere
funzionano nei dettagli queste scatole nere
L'interazione di una scatola nera con il mondo L'interazione di una scatola nera con il mondo esterno è ben definita:
esterno è ben definita:
I guidatori interagiscono con l'auto usando pedaliera, I guidatori interagiscono con l'auto usando pedaliera, bottoni, ecc.
bottoni, ecc.
Un meccanico sa controllare che la centraline mandi i Un meccanico sa controllare che la centraline mandi i giusti segnali di accensione alle candele
giusti segnali di accensione alle candele
Per i produttori di centraline i transistor e condensatori Per i produttori di centraline i transistor e condensatori sono scatole nere prodotte da un'azienda di componenti sono scatole nere prodotte da un'azienda di componenti
7 7
Livelli di Astrazione:
Livelli di Astrazione:
Esempio dal Mondo Reale Esempio dal Mondo Reale
L'incapsulamento porta all'efficienza: L'incapsulamento porta all'efficienza:
I meccanico si preoccupa solo dei componenti I meccanico si preoccupa solo dei componenti
dell'automobile (es. centralina), non dei sensori o dei dell'automobile (es. centralina), non dei sensori o dei
transistor transistor
Il guidatore si preoccupa solo dell'interazione con la Il guidatore si preoccupa solo dell'interazione con la
macchina (es. fare benzina), non del motore o delle parti macchina (es. fare benzina), non del motore o delle parti
elettroniche elettroniche
8 8
Livelli di Astrazione:
Livelli di Astrazione:
Progettazione di Software
Progettazione di Software
9 9
Livelli di Astrazione:
Livelli di Astrazione:
Progettazione di Software Progettazione di Software
Passato: programmi che manipolavano tipi primitivi Passato: programmi che manipolavano tipi primitivi come numeri e caratteri
come numeri e caratteri
Manipolare troppe di tali quantità primitive diventa Manipolare troppe di tali quantità primitive diventa difficile per i programmatori e porta ad errori
difficile per i programmatori e porta ad errori
Soluzione: Incapsulare i calcoli di routine in scatole Soluzione: Incapsulare i calcoli di routine in scatole nere di tipo software
nere di tipo software
10 10
Livelli di Astrazione:
Livelli di Astrazione:
Progettazione di Software Progettazione di Software
L'astrazione serve ad inventare tipi di dato di alto L'astrazione serve ad inventare tipi di dato di alto livello
livello
Nella programmazione object-oriented, gli oggetti Nella programmazione object-oriented, gli oggetti sono le scatole nere
sono le scatole nere
Incapsulamento: Il programmatore che usa un Incapsulamento: Il programmatore che usa un oggetto deve conoscere il suo comportamento oggetto deve conoscere il suo comportamento esterno, non necessariamente la sua struttura esterno, non necessariamente la sua struttura
interna interna
11 11
Livelli di Astrazione:
Livelli di Astrazione:
Progettazione di Software Progettazione di Software
Nella progettazione di software design, si possono Nella progettazione di software design, si possono progettare buone o cattive astrazioni con la stessa progettare buone o cattive astrazioni con la stessa
facilità facilità
Comprendere la buona progettazione è una parte Comprendere la buona progettazione è una parte importante nella formazione di un ingegnere del importante nella formazione di un ingegnere del
software software
Occorre Occorre
prima:prima: definire il comportamento di una classe definire il comportamento di una classe
12 12
Progettazione dell'Interfaccia Progettazione dell'Interfaccia
Pubblica Pubblica
Comportamento di un conto bancario (astrazione):Comportamento di un conto bancario (astrazione):
Depositare denaroDepositare denaro
Ritirare denaroRitirare denaro
Chiedere il saldoChiedere il saldo
13 13
Progettazione dell'Interfaccia Progettazione dell'Interfaccia
Pubblica: Metodi Pubblica: Metodi
Metodi della classe Metodi della classe BankAccountBankAccount::
Vogliamo supportare le chiamate al metodo simili Vogliamo supportare le chiamate al metodo simili alla seguente:
alla seguente:
harrysChecking.deposit(2000);
harrysChecking.deposit(2000);
harrysChecking.withdraw(500);
harrysChecking.withdraw(500);
System.out.println(harrysChecking.getBalance());
System.out.println(harrysChecking.getBalance());
deposit deposit withdraw withdraw getBalance getBalance
14 14
Progettazione dell'Interfaccia Progettazione dell'Interfaccia Pubblica: Definizione dei Metodi Pubblica: Definizione dei Metodi
Specificatore di accesso (come Specificatore di accesso (come publicpublic) )
Tipo di ritorno (come Tipo di ritorno (come StringString oppure oppure voidvoid) )
Nome di metodo (come Nome di metodo (come depositdeposit) )
Lista dei parametri (Lista dei parametri (doubledouble amountamount per per deposit
deposit) )
Corpo del metodo tra Corpo del metodo tra { }{ }
15 15
Progettazione dell'Interfaccia Progettazione dell'Interfaccia Pubblica: Definizione dei Metodi Pubblica: Definizione dei Metodi
public void deposit(double amount) { . . . } public void deposit(double amount) { . . . } public void withdraw(double amount) { . . . } public void withdraw(double amount) { . . . } public double getBalance() { . . . }
public double getBalance() { . . . }
EsempiEsempi
16 16
Sintassi 3.1: Definizione dei Sintassi 3.1: Definizione dei
Metodi Metodi
specificatoreAccesso tipoRitorno nomeMetodo specificatoreAccesso tipoRitorno nomeMetodo ((tipoParametrotipoParametro nomeParametro nomeParametro,, . . . . . .))
{{
corpoMetodocorpoMetodo }}
Esempio:Esempio:
public void deposit(double amount)public void deposit(double amount) { {
. . . . . . } }
Scopo: Scopo: definire il comportamento di un metododefinire il comportamento di un metodo
17 17
Definizione del Costruttore Definizione del Costruttore
Un costruttore inizializza le Un costruttore inizializza le variabili d'istanzavariabili d'istanza (o d'esemplare)
(o d'esemplare)
Nome del costruttore = nome della classeNome del costruttore = nome della classe
public BankAccount() public BankAccount() {{
// corpo riempito più tardi // corpo riempito più tardi }}
18 18
Definizione del Costruttore Definizione del Costruttore
Il corpo del costruttore viene eseguito quando si crea Il corpo del costruttore viene eseguito quando si crea un nuovo oggetto
un nuovo oggetto
Le istruzioni nel corpo di un costruttore impostano i Le istruzioni nel corpo di un costruttore impostano i dati interni (stato) dell'oggetto che si costruisce
dati interni (stato) dell'oggetto che si costruisce
Tutti i costruttori di una classe hanno lo stesso nomeTutti i costruttori di una classe hanno lo stesso nome
Il compilatore sa distinguere tra i vari costruttori Il compilatore sa distinguere tra i vari costruttori poiché essi accettano parametri differenti
poiché essi accettano parametri differenti
19 19
Sintassi 3.2:
Sintassi 3.2:
Definizione di Costruttore Definizione di Costruttore
accessSpecifier accessSpecifier ClassName
ClassName((parameterType parameterNameparameterType parameterName, . . .), . . .) { {
constructor bodyconstructor body } }
EsempioEsempio
public BankAccount(double initialBalance) public BankAccount(double initialBalance) {
{
. . . . . . } }
20 20
BankAccount BankAccount Interfaccia Pubblica Interfaccia Pubblica
I costruttori pubblici e tutti i metodi di una classe I costruttori pubblici e tutti i metodi di una classe formano l'
formano l'interfaccia pubblicainterfaccia pubblica della classe della classe
public class BankAccount public class BankAccount {{
// Costruttori // Costruttori
public BankAccount() public BankAccount() { {
// corpo da riempire in seguito // corpo da riempire in seguito }
}
public BankAccount(double initialBalance) public BankAccount(double initialBalance) {
{
// corpo da riempire in seguito // corpo da riempire in seguito } }
// Metodi // Metodi
public void deposit(double amount)
21 21
BankAccount BankAccount Interfaccia Pubblica Interfaccia Pubblica
{ {
//
// corpo da riempire in seguitocorpo da riempire in seguito }
}
public void withdraw(double amount) public void withdraw(double amount) {
{
//
// corpo da riempire in seguitocorpo da riempire in seguito }
}
public double getBalance() public double getBalance() {
{
//
// corpo da riempire in seguitocorpo da riempire in seguito } }
// campi privati
// campi privati da riempire in seguitoda riempire in seguito } }
22 22
Sintassi 3.3:
Sintassi 3.3:
Definizione di Classe Definizione di Classe
accessSpecifier
accessSpecifier classclass ClassNameClassName { {
constructors constructors methods methods
fields fields }}
EsempioEsempio
public class BankAccountpublic class BankAccount { {
public BankAccount(double initialBalance) { . . . } public BankAccount(double initialBalance) { . . . } public void deposit(double amount) { . . . }
public void deposit(double amount) { . . . } . . .
. . . } }
ScopoScopo: definire una classe, la sua interfaccia : definire una classe, la sua interfaccia pubblica ed i dettagli implementativi
pubblica ed i dettagli implementativi
23 23
Commentare l'Interfaccia Commentare l'Interfaccia
Pubblica Pubblica
/**/**
Ritira denaro dal conto corrente.
Ritira denaro dal conto corrente.
@param amount l'ammontare da ritirare @param amount l'ammontare da ritirare
*/*/
public void withdraw(double amount) public void withdraw(double amount) {{
// implementato in seguito // implementato in seguito }}
/**/**
Ottiene il saldo del conto corrente.
Ottiene il saldo del conto corrente.
@return il saldo corrente @return il saldo corrente
*/*/
24 24
Commenti di Documentazione Commenti di Documentazione
/**/**
Un conto corrente ha un saldo che può Un conto corrente ha un saldo che può essere cambiato da depositi e prelievi.
essere cambiato da depositi e prelievi.
*/*/
public class BankAccount public class BankAccount {{
. . . . . .
Fornire commenti per la documentazione di Fornire commenti per la documentazione di
Ogni classe Ogni classe
Ogni metodoOgni metodo
Ogni parametroOgni parametro
Ogni valore di ritorno Ogni valore di ritorno
25 25
Riassunto Javadoc dei Metodi
Riassunto Javadoc dei Metodi
26 26
Javadoc:
Javadoc:
Dettagli di un Metodo
Dettagli di un Metodo
27 27
Campi di Istanza Campi di Istanza
Un oggetto memorizza i suoi dati (stato) in campi Un oggetto memorizza i suoi dati (stato) in campi d'istanza
d'istanza
Campo: termine tecnico per l'allocazione in un'area Campo: termine tecnico per l'allocazione in un'area di memoria
di memoria
Istanza di una classe: un oggetto della classeIstanza di una classe: un oggetto della classe
La dichiarazione della classe specifica i campi delle La dichiarazione della classe specifica i campi delle istanze:
istanze:
public class BankAccount public class BankAccount { {
28 28
Campi di Istanza Campi di Istanza
La dichiarazione di un campo consiste nelle parti La dichiarazione di un campo consiste nelle parti seguenti:
seguenti:
Specificatore d'accesso (come privateSpecificatore d'accesso (come private) )
Tipo della variabile (come doubleTipo della variabile (come double) )
Nome della variabile (come balanceNome della variabile (come balance) )
Ogni oggetto di una classe ha il suo insieme di campi Ogni oggetto di una classe ha il suo insieme di campi d'istanza
d'istanza
Si dovrebbero dichiarare tutte le istanze come Si dovrebbero dichiarare tutte le istanze come private
private
29 29
Campi di Istanza
Campi di Istanza
30 30
Sintassi 3.4:
Sintassi 3.4:
Dichiarazione dei campi Dichiarazione dei campi
accessSpecifier
accessSpecifier classclass ClassName ClassName { {
. . . . . .
accessSpecifier fieldType fieldName;accessSpecifier fieldType fieldName; . . .
. . . }}
Esempio:Esempio:
public class BankAccountpublic class BankAccount { {
. . . . . .
private double balance;
private double balance;
. . . . . . } }
ScopoScopo: definire un campo che sia presente in ogni : definire un campo che sia presente in ogni oggetto della classe
oggetto della classe
31 31
Accedere ai Campi d'Istanza Accedere ai Campi d'Istanza
Il metodo Il metodo depositdeposit della classe della classe BankAccountBankAccount può accedere ai campi d'istanza privati:
può accedere ai campi d'istanza privati:
public void deposit(double amount) public void deposit(double amount) {{
double newBalance = balance + amount;
double newBalance = balance + amount;
balance = newBalance;
balance = newBalance;
} }
32 32
Accedere ai Campi d'Istanza Accedere ai Campi d'Istanza
Gli altri metodi non possono:Gli altri metodi non possono:
IncapsulamentoIncapsulamento = nascondere i dati e fornire = nascondere i dati e fornire accesso
accesso attraversoattraverso i metodi i metodi
public class BankRobber public class BankRobber {{
public static void main(String[] args) public static void main(String[] args) { {
BankAccount momsSavings = new BankAccount(1000);
BankAccount momsSavings = new BankAccount(1000);
. . . . . .
momsSavings.balance = -1000; // ERROR momsSavings.balance = -1000; // ERROR } }
} }
33 33
Implementare i Costruttori Implementare i Costruttori
I costruttori contengono istruzioni per inizializzare i I costruttori contengono istruzioni per inizializzare i campi di un oggetto
campi di un oggetto
public BankAccount() public BankAccount() {{
balance = 0;
balance = 0;
}}
public BankAccount(double initialBalance) public BankAccount(double initialBalance) {{
balance = initialBalance;
balance = initialBalance;
}}
34 34
Esempio Esempio
Crea un nuovo oggetto di tipo BankAccountCrea un nuovo oggetto di tipo BankAccount
Chiama il secondo costruttore Chiama il secondo costruttore
(dato che si fornisce un parametro di costruzione) (dato che si fornisce un parametro di costruzione)
Imposta il parametro Imposta il parametro initialBalanceinitialBalance a a 10001000
Imposta il campo balance dell'oggetto Imposta il campo balance dell'oggetto apneaapnea creato ad creato ad initialBalance
initialBalance
Restituisce un riferimento, cioè l'indirizzo in memoria Restituisce un riferimento, cioè l'indirizzo in memoria dell'oggetto come valore dell'espressione
dell'oggetto come valore dell'espressione newnew
Immagazzina il riferimento nella variabile Immagazzina il riferimento nella variabile
BankAccount harrysChecking = new BankAccount(1000);
BankAccount harrysChecking = new BankAccount(1000);
35 35
Implementare i Metodi Implementare i Metodi
Alcuni metodi non ritornano alcun valoreAlcuni metodi non ritornano alcun valore
Alcuni metodi non restituiscono un valore in outputAlcuni metodi non restituiscono un valore in output
public void withdraw(double amount) public void withdraw(double amount) {{
double newBalance = balance - amount;
double newBalance = balance - amount;
balance = newBalance;
balance = newBalance;
}}
public double getBalance() public double getBalance() {{
36 36
Esempio: Chiamata di Metodo Esempio: Chiamata di Metodo
Imposta il parametro amountImposta il parametro amount a a 500500
Preleva il campo Preleva il campo balancebalance dell'oggetto la cui locazione dell'oggetto la cui locazione è immagazzinata in
è immagazzinata in harrysCheckingharrysChecking
Aggiunge il valore di Aggiunge il valore di amountamount a a balancebalance e e immagazzinare il risultato nella variabile
immagazzinare il risultato nella variabile newBalancenewBalance
Immagazzina il valore di newBalanceImmagazzina il valore di newBalance nel campo nel campo balance
balance sovrascrivendo il vecchio valore sovrascrivendo il vecchio valore
harrysChecking.deposit(500);
harrysChecking.deposit(500);
37 37
Sintassi 3.5:
Sintassi 3.5:
Istruzione
Istruzione return return
return
return expressionexpression;;
oppureoppure
return;
return;
Esempio:Esempio:
return balance; return balance;
ScopoScopo: Specificare il valore restituito da un metodo : Specificare il valore restituito da un metodo ed uscirvi immediatamente.
ed uscirvi immediatamente.
Esso diventa il valore dell'espressione relativa alla Esso diventa il valore dell'espressione relativa alla
38 38
File
File BankAccount.java BankAccount.java
01: /**
01: /**
02: Un conto ha un saldo che può essere modificato 02: Un conto ha un saldo che può essere modificato 03: con depositi e prelievi.
03: con depositi e prelievi.
04: */
04: */
05: public class05: public class BankAccountBankAccount 06: {
06: {
07: /**
07: /**
08: costruisce un conto con saldo pari a 0.
08: costruisce un conto con saldo pari a 0.
09: */
09: */
10:
10: publicpublic BankAccount()BankAccount() 11: {
11: {
12: balance = 0;
12: balance = 0;
13: } 13: } 14: 14:
15: /**
15: /**
16: Costruisce un conto con il dato saldo.
16: Costruisce un conto con il dato saldo.
17: @param initialBalance saldo iniziale 17: @param initialBalance saldo iniziale 18: */
18: */
39 39
File
File BankAccount.java BankAccount.java
19:
19: publicpublic BankAccount(double initialBalance)BankAccount(double initialBalance) 20: {
20: {
21: balance = initialBalance;
21: balance = initialBalance;
22: } 22: } 23: 23:
24: /**
24: /**
25: Deposita denaro sul conto.
25: Deposita denaro sul conto.
26: @param amount l'ammontare del deposito 26: @param amount l'ammontare del deposito 27: */
27: */
28:
28: public void public void deposit(double amount)deposit(double amount) 29: {
29: {
30: double newBalance = balance + amount;
30: double newBalance = balance + amount;
31: balance = newBalance;
31: balance = newBalance;
32: } 32: } 33: 33:
40 40
File
File BankAccount.java BankAccount.java
37: */
37: */
38:
38: public void public void withdraw(double amount)withdraw(double amount) 39: {
39: {
40: double newBalance = balance - amount;
40: double newBalance = balance - amount;
41: balance = newBalance;
41: balance = newBalance;
42: } 42: } 43: 43:
44: /**
44: /**
45: Legge il saldo corrente del conto.
45: Legge il saldo corrente del conto.
46: @return il saldo corrente 46: @return il saldo corrente 47: */
47: */
48:
48: public doublepublic double getBalance()getBalance() 49: {
49: {
50: return balance;
50: return balance;
51: } 51: } 52: 52:
53: private double balance;
53: private double balance;
41 41
Collaudare una Classe Collaudare una Classe
Classe di collaudo: classe con un metodo main Classe di collaudo: classe con un metodo main contenente istruzioni per testare un'altra classe contenente istruzioni per testare un'altra classe
Tipicamente svolge i seguenti passi: Tipicamente svolge i seguenti passi:
1)1) CostruireCostruire uno o più oggetti della classe da collaudare uno o più oggetti della classe da collaudare 2)2) Invocare uno o più metodiInvocare uno o più metodi
3)3) Stampare uno o più risultatiStampare uno o più risultati
42 42
Collaudare una Classe Collaudare una Classe
I dettagli sulla costruzione di un programma variano. I dettagli sulla costruzione di un programma variano.
Nella maggior parte degli ambienti, si devono Nella maggior parte degli ambienti, si devono svolgere questi passi:
svolgere questi passi:
1)1) Creare una nuova cartella per il proprio programmaCreare una nuova cartella per il proprio programma 2)2) Creare due file, uno per classe Creare due file, uno per classe
3)3) Compilare entrambi i file Compilare entrambi i file
4)4) Far girare il programma di collaudoFar girare il programma di collaudo
43 43
BankAccountTester BankAccountTester
01: /**
01: /**
02: A class to test the BankAccount class.
02: A class to test the BankAccount class.
03: */
03: */
04: public class
04: public class BankAccountTesterBankAccountTester 05: {
05: {
06: /**
06: /**
07: Tests the methods of the BankAccount class.
07: Tests the methods of the BankAccount class.
08: @param args not used 08: @param args not used
09: */
09: */
10: public static void
10: public static void mainmain(String[] args)(String[] args) 11: {
11: {
12: BankAccount harrysChecking = new BankAccount();
12: BankAccount harrysChecking = new BankAccount();
13: harrysChecking.deposit(2000);
13: harrysChecking.deposit(2000);
14: harrysChecking.withdraw(500);
14: harrysChecking.withdraw(500);
15: System.out.println(harrysChecking.getBalance());
15: System.out.println(harrysChecking.getBalance());
44 44
Collaudo con BlueJ
Collaudo con BlueJ
45 45
Categorie di Variabili Categorie di Variabili
Categorie di variabiliCategorie di variabili
Campi d'istanza (Campi d'istanza (balancebalance in in BankAccountBankAccount) )
Variabili locali (Variabili locali (newBalancenewBalance nel metodo nel metodo depositdeposit) )
Parametri (amountParametri (amount nel metodo deposit nel metodo deposit) )
Un campo d'istanza appartiene ad un oggettoUn campo d'istanza appartiene ad un oggetto
I campi si mantengono in vita fino a quando nessun I campi si mantengono in vita fino a quando nessun oggetto utilizza l'oggetto
oggetto utilizza l'oggetto
46 46
Categorie di Variabili Categorie di Variabili
In Java, il In Java, il garbage collectorgarbage collector periodicamente periodicamente
reclama (la memoria allocata per) oggetti che non reclama (la memoria allocata per) oggetti che non
sono più usati sono più usati
Variabili locali e parametri appartengono ad un Variabili locali e parametri appartengono ad un metodo
metodo
I campi d'istanza sono inizializzati ad un valore di I campi d'istanza sono inizializzati ad un valore di default, ma occorre inizializzare le variabili locali default, ma occorre inizializzare le variabili locali
47 47
Vita delle Variabili Vita delle Variabili
harrysChecking.deposit(500);
harrysChecking.deposit(500);
double newBalance = balance + amount;
double newBalance = balance + amount;
balance = newBalance;
balance = newBalance;
48 48
Vita delle Variabili
Vita delle Variabili
49 49
Vita delle Variabili
Vita delle Variabili
50 50
Parametri Impliciti ed Espliciti Parametri Impliciti ed Espliciti
Il parametro implicito di un metodo è l'oggetto del Il parametro implicito di un metodo è l'oggetto del quale si invoca il metodo
quale si invoca il metodo
Il riferimento Il riferimento thisthis denota tale parametro implicito denota tale parametro implicito
51 51
Parametri Impliciti ed Espliciti Parametri Impliciti ed Espliciti
L'uso del nome di un campo L'uso del nome di un campo d'istanzad'istanza in un metodo in un metodo denota il campo del parametro implicito
denota il campo del parametro implicito
public void withdraw(double amount) public void withdraw(double amount) {{
double newBalance = balance - amount;
double newBalance = balance - amount;
balance = newBalance;
balance = newBalance;
} }
52 52
Parametri Impliciti ed Espliciti Parametri Impliciti ed Espliciti
balancebalance è il saldo dell'oggetto a sinistra del è il saldo dell'oggetto a sinistra del punto:
punto:
significa significa
double newBalance = momsSavings.balance - amount;
double newBalance = momsSavings.balance - amount;
momsSavings.balance = newBalance;
momsSavings.balance = newBalance;
momsSavings.withdraw(500) momsSavings.withdraw(500)
53 53
Parametri
Parametri Impliciti e Impliciti e this this
Ogni metodo ha un solo parametro implicitoOgni metodo ha un solo parametro implicito
Esso è sempre indicato con Esso è sempre indicato con this this
EccezioneEccezione: i metodi statici (: i metodi statici (staticstatic) non hanno ) non hanno parametri impliciti (vedi cap. 9)
parametri impliciti (vedi cap. 9)
double newBalance = balance + amount;
double newBalance = balance + amount;
// actually means // actually means
double newBalance =
double newBalance = thisthis.balance + amount; .balance + amount;
54 54
Parametri
Parametri Impliciti e Impliciti e this this
Quando ci si riferisce ad un campo in un metodo il Quando ci si riferisce ad un campo in un metodo il compilatore automaticamente lo applica a
compilatore automaticamente lo applica a thisthis
momsSavings.deposit(500);
momsSavings.deposit(500);