• Non ci sono risultati.

Implementare Implementare le classi le classi

N/A
N/A
Protected

Academic year: 2021

Condividi "Implementare Implementare le classi le classi"

Copied!
55
0
0

Testo completo

(1)

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 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 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 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 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 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 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 8

Livelli di Astrazione:

Livelli di Astrazione:

Progettazione di Software

Progettazione di Software

(9)

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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 25

Riassunto Javadoc dei Metodi

Riassunto Javadoc dei Metodi

(26)

26 26

Javadoc:

Javadoc:

Dettagli di un Metodo

Dettagli di un Metodo

(27)

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 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 29

Campi di Istanza

Campi di Istanza

(30)

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 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 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 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 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 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 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 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 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 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 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 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 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 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 44

Collaudo con BlueJ

Collaudo con BlueJ

(45)

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 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 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 48

Vita delle Variabili

Vita delle Variabili

(49)

49 49

Vita delle Variabili

Vita delle Variabili

(50)

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 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 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 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 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);

(55)

55 55

Parametri

Parametri Impliciti e Impliciti e this this

Riferimenti

Documenti correlati

Data di inizio dell’incarico (compilare solo se l’incarico è iniziato nell’anno di riferimento della rilevazione) Data di fine dell’incarico. (compilare solo se l’incarico

Riferimento normativo società con diritti speciali o esclusivi insieme con altre attività svolte in regime di mercato (3). Società

Data di inizio dell’incarico (compilare solo se l’incarico è iniziato nell’anno di riferimento della rilevazione) Data di fine dell’incarico. (compilare solo se l’incarico

Data di inizio dell’incarico (compilare solo se l’incarico è iniziato nell’anno di riferimento della rilevazione). Data di

La legge che fornisce questo legame fisico è la cosiddetta legge di Lenz: la forza elettromotrice indotta tende a far circolare nel circuito una corrente I; tale corrente genera

• Risolvere problemi di applicazione delle formule studiate inclusi quelli che richiedono il calcolo delle forze su conduttori in moto in un campo

In aggiunta alle misure spettroradiometriche e di LAI-2000, per un sottocampione di otto parcelle seminate a Gladio, sono state misurate con una frequenza quasi settimanale:

CAMPO 1 SABBIA metà sabbia CAMPO VERDE CAMPO SINT.. A 11 metà sintetico