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