2. Dai metodi statici ai metodi dinamici

Dai metodi statici ai metodi dinamici
Compilatore + interprete
www.dimi.uniud.it/nid/
sorgente .java
Materiali
compilazione: javac
Corsi
bytecode .class
Corso sulla Programmazione
Orientata agli Oggetti in Java
Università di Udine
Dipartimento di Matematica e Informatica
interpretato dalla JVM
Settembre 2005,
Diapositiva 1
Università di Udine
Dipartimento di Matem atica e Informatica
Sommario
Settembre 2005,
Diapositiva 2
Sommario
Astrazione su memoria e controllo
Astrazione su memoria e controllo
variabili, strutture di controllo, ...
variabili, strutture di controllo, ...
Astrazione procedurale
Astrazione procedurale
astrazione realtiva a espressioni (funzioni)
astrazione realtiva a espressioni (funzioni)
astrazione relativa a comandi (procedure)
astrazione relativa a comandi (procedure)
Astrazione sui dati
Astrazione sui dati
oggetti immutabili
Università di Udine
Dipartimento di Matematica e Informatica
oggetti immutabili
Settembre 2005,
Diapositiva 3
Università di Udine
Dipartimento di Matem atica e Informatica
Settembre 2005,
Diapositiva 4
Astrazione su memoria e controllo
Astrazione su memoria e controllo
Espressioni:
variabili, strutture di controllo, ...
base + aliquota * (imponibile – inf)
Astrazione procedurale
astrazione realtiva a espressioni (funzioni)
Comandi:
astrazione relativa a comandi (procedure)
baseSucc = base + aliquota*(sup – inf);
Università di Udine
Dipartimento di Matematica e Informatica
Sommario
Settembre 2005,
Astrazione sui dati
oggetti immutabili
Diapositiva 5
Astrazione procedurale: funzioni
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 6
Astrazione procedurale: funzioni
Classi come collezioni di funzoni (metodi statici)
Astrazione di espressioni:
Esempio notevole:
public static double volumeCilindro(
double raggio,
double altezza
){
Math.max(_,_)
Math.abs(_)
...
Math.sin(_)
Math.sqrt(_)
...
return PI_GRECO * raggio * raggio * altezza;
}
Università di Udine
Dipartimento di Matematica e Informatica
Math.PI
Settembre 2005,
Diapositiva 7
Università di Udine
Dipartimento di Matematica e Informatica
...
Settembre 2005,
Diapositiva 8
Esempio: IRPEF
Università di Udine
Di parti mento di Matemati ca e Informati ca
Astrazione procedurale
Settembre 20 05, Diaposi tiva 9
Uni versità di Udine
Di par ti mento di Matematica e I nformati ca
Codifica...
Settembre 20 05, Diaposi tiva 10
IRPEF1.java
Che cosa si potrebbe migliorare
del programma?
Vedi esempo "IRPEF1.java"
Università di Udine
Di parti mento di Matemati ca e Informati ca
S ettembre 2005,
Diaposi tiva 11
Uni versità di Udine
Di par ti mento di Matematica e I nformati ca
Settembre 20 05, Diaposi tiva 12
Esercizio
Astrazione procedurale: funzioni
Compattare le sezioni ripetitive
di codice utilizzando un comando iterativo
...
Si può fare molto anche con gli strumenti
del paradigma funzionale:
... ;
NumeraliBinari.java
while ( ... ) {
... ... ;
... ... ;
}
Università di Udine
Dipartimento di Matematica e Informatica
SottosequenzaComune.java
Settembre 2005,
Diapositiva 13
Esercizi
Settembre 2005,
Diapositiva 14
Astrazione procedurale: procedure
Metodi statici funzionali per calcolare:
In Java il concetto statico di procedura
non funzionale va considerato con cautela
perché non c'è il passaggio dei parametri
per riferimento (parametri "var" del Pascal)
Massimo comun divisore
(algoritmo "di Euclide")
O meglio:
i dati di tipo semplice sono passati solo
per valore, gli oggetti solo per riferimento
Prodotto "del contadino Russo"
Università di Udine
Dipartimento di Matematica e Informatica
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 15
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 16
Sommario
UNICO 2002 ... Lire o Euro?
Astrazione su memoria e controllo
variabili, strutture di controllo, ...
Astrazione procedurale
astrazione realtiva a espressioni (funzioni)
astrazione relativa a comandi (procedure)
Astrazione sui dati
oggetti immutabili
Università di Udine
Di parti mento di Matemati ca e Informati ca
S ettembre 2005,
Diaposi tiva 17
UNICO 2003 ... Euro!
Università di Udine
Di parti mento di Matemati ca e Informati ca
S ettembre 2005,
Uni versità di Udine
Di par ti mento di Matematica e I nformati ca
Settembre 20 05, Diaposi tiva 18
UNICO 2004 ... via i centesimi
Diaposi tiva 19
Uni versità di Udine
Di par ti mento di Matematica e I nformati ca
Settembre 20 05, Diaposi tiva 20
UNICO 200X ... meno aliquote?
Classe
public class IRPEF {
Aggiornare il programma ogni anno
o semplicemente riconfigurarlo?
(da file, DB, via rete, ...)
Quali dati sono veramente indipendenti?
(attenzione alle inconsistenze)
E se c'è la "clausola di salvaguardia"?
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Variabili di istanza
(private)
Costruttore
(public)
Metodi
(public)
supporto...
(private)
} // class IRPEF
Diapositiva 21
Università di Udine
Dipartimento di Matematica e Informatica
IRPEF.java
Settembre 2005,
Diapositiva 22
IRPEF.java
Costruttore:
Variabili di istanza:
private
private
private
private
final
final
final
final
public IRPEF( double[] sca, double[] ali ) {
n = ali.length;
infScaglione = sca;
aliquota = ali;
baseScaglione = new double[n];
baseScaglione[0] = 0.00;
for ( int k=1; k<n; k=k+1 ) {
baseScaglione[k] = imposta( ... );
}
double[] infScaglione;
double[] aliquota;
double[] baseScaglione;
int n;
}
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 23
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 24
IRPEF.java
Classi e oggetti
Metodo:
irpef05 = new IRPEF( ..., ... );
public double irpef( double imponibile ) {
int k = 0;
while ( (k < n-1) && (imponibile > ...) ) {
k = k + 1;
}
return imposta( ... );
In questo caso:
oggetti immutabili
}
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 25
Oggetti immutabili
Settembre 2005,
Diapositiva 26
Verifica della "clausola di salvaguardia"
String
str.substring(_)
Università di Udine
Dipartimento di Matematica e Informatica
Esercizi: IRPEF.java
Esempio notevole:
str.length()
imposta = irpef05.irpef( 36500 );
str.equals(_)
...
...
double[] sca03
double[] ali03
= { ... };
= { ... };
double[] sca03
double[] ali03
= { ... };
= { ... };
irpef03 = new IRPEF( sca03, ali03 );
irpef04 = new IRPEF( sca04, ali04 );
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 27
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 28
Esercizio sui "messaggi"
Protocollo
public class NumeroNaturale {
public class NumeroNaturale {
Variabili di istanza
(private)
Costruttore
(public)
Metodi
(public)
supporto...
(private)
Variabili di istanza
(private)
public NumeroNaturale( int n )
public String rappresentazione( int base )
public NumeroNaturale aggiungi(
NumeroNaturale addendo )
}
supporto...
(private)
}
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 29
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 30