View
217
Download
0
Category
Preview:
Citation preview
Aritmetica
Un approccio metodologico alla costruzione dei programmi.Tipi di dati primitivi. Int, float, doubleVariabili, dichiarazioni e operazioni
2
Progetto dei programmi
Definizione del problemaScenario d’esempioIndividuazione degli oggetti primariDeterminazione del comportamento desideratoDeterminazione delle interfacceDefinizione delle variabili di istanzaImplementazione dei metodi
3
Aritmetica
Java offre un tipo predefinito, int, che modella il comportamento dei numeri interiIl tipo fornisce le operazioni aritmetiche di base– Es:+. -. *, /– Espressioni: x+(y/z), System.out.println(rate*hours)
I tipi primitivi NON hanno variabili di istanza, metodi, costruttori, newAlle variabili intere si assegnano valori interi– int i; i=5;– int i=5;
4
Un esempio:
la raccolta dei pedaggi
Descrizione del problemaDescrizione del problemaModellare un sistema di raccolta dei pedaggi per autostradeI camion pagano $5 per asse più $10 per ogni mezza tonnellata di peso totaleUn display nel casello visualizza i pagamenti ed il numero di camion che hanno pagato dall’ultima raccolta
5
Un esempio:
la raccolta dei pedaggiScenario d’esempioScenario d’esempioNel casello ci sono lo schermo di un calcolatore ed un lettore di codici a barrePer leggere il numero di assi il casellante legge un codice a barre sul parabrezza del camionIl peso è letto da un codice a barre su un biglietto consegnato dal conducente del camionLe informazioni sul camion e sull’ammontare del pedaggio sono visualizzate sullo schermoIl casellante può richiedere la visualizzazione dei dati registrati dall’ultimo prelievo della cassaAll’atto del prelievo della cassa compare un opportuno messaggio con l’indicazione dei dati di riepilogo
6
Un esempio:
la raccolta dei pedaggiScenario d’esempio Scenario d’esempio -- MessaggiMessaggi
Truck arrival - axles: 5 total weight: 12500Toll due: $145
Totals since last collection - Receipts: $205 Trucks: 2
*** Collecting receipts ***Totals since last collection - Receipts: $523 Trucks: 5
7
Un esempio:
la raccolta dei pedaggi
Individuazione degli oggetti primariIndividuazione degli oggetti primariUn buon punto di partenza: le parole chiave contenute nella presentazione del problema– Camion, casello, peso, ricevuta …
Nel nostro caso: camioncamion e casellocasello
Class Truck {….
}
Class ToolBooth {….
}
8
Un esempio:
la raccolta dei pedaggi
Comportamento desiderato Comportamento desiderato –– La classe camionLa classe camionMetodi per ottenere le informazioni necessarie al calcolo del pedaggio, numero assi e pesoUn costruttore– Truck– getAxles– getWeight
9
Un esempio:
la raccolta dei pedaggi
Interfaccia Interfaccia –– La classe camionLa classe camionLa creazione di un camion richiede l’indicazione del numero di assi e del peso– Truck(intaxles, int weight)
La richiesta di numero di assi e peso avviene senza parametri– getAxles()– getWeight()
10
Un esempio:
la raccolta dei pedaggiVariabili di istanza Variabili di istanza –– La classe camionLa classe camionOgni oggetto di tipo camion deve memorizzare il proprio numero di assi ed il proprio peso
class Truck {// Methods...// Instance Variablesprivate int axles;private int totalWeight;
}
11
Un esempio:
la raccolta dei pedaggi
Metodo costruttore Metodo costruttore –– La classe camionLa classe camionDeve semplicemente inizializzare le variabili di istanza
public Truck(int axles, int totalWeight) {this.axles = axles;this.totalWeight = totalWeight;
}
12
Un esempio:
la raccolta dei pedaggi
Altri metodi Altri metodi –– La classe camionLa classe camionDevono semplicemente ritornare il valore delle variabili di istanza
public int getAxles() {return axles;}
public int getTotalWeight() {return totalWeight;}
13
Un esempio:
la raccolta dei pedaggi
Comportamento desiderato Comportamento desiderato –– La classe TollboothLa classe TollboothCreazione di un caselloCalcolo del pedaggioVisualizzazione dei dati dall’ultima raccoltaRaccolta– TollBooth– calculateToll– displayData– onReceiptCollection
14
Un esempio:
la raccolta dei pedaggi
Interfaccia Interfaccia –– La classe TollboothLa classe TollboothScenari d’usoCreazione di un caselloTollBooth booth = new TollBooth()Calcolo del pedaggio; richiede la conoscenza delle caratteristiche del camionbooth.calculateToll(truck1);
15
Un esempio:
la raccolta dei pedaggi
Interfaccia Interfaccia –– La classe TollboothLa classe TollboothVisualizzazione dei totalibooth.displayData();Prelievo della cassabooth.onReceiptCollection();
16
Un esempio:
la raccolta dei pedaggiInterfaccia Interfaccia –– La classe TollboothLa classe Tollbooth
class TollBooth {// Methodspublic TollBooth() {...}public void calculateToll(Truck truck) {...}public void onReceiptCollection() {...}public void displayData() {...}// Instance Variables...
}
17
Un esempio:
la raccolta dei pedaggiVariabili di istanza Variabili di istanza –– La classe TollboothLa classe TollboothUn oggetto di tipo casello deve memorizzare le somme ricevute ed il numero di camion passati dall’ultimo prelievo di cassa
class TollBooth {// Methods// …come prima…// Instance Variablesprivate int receiptsSinceCollection, trucksSinceCollection;
}
18
Un esempio:
la raccolta dei pedaggi
Metodo costruttore Metodo costruttore –– La classe TollboothLa classe TollboothDeve inizializzare a zero le variabili di istanza
public TollBooth() {trucksSinceCollection = 0; // Clear out totalsreceiptsSinceCollection = 0;
}
19
Un esempio:
la raccolta dei pedaggi
Metodo Metodo DisplayDataDisplayData –– La classe TollboothLa classe TollboothVisualizza i totali sullo schermo (System.out)
public void displayData() {System.out.print("Totals since lastcollection – " +"Receipts: " + receiptsSinceCollection +" Trucks: " + trucksSinceCollection);
}
20
Un esempio:
la raccolta dei pedaggiMetodo Metodo onReceiptCollectiononReceiptCollection –– La classe TollboothLa classe TollboothVisualizza i totali all’atto del prelievo della cassa e reinizializza le variabili di istanzaUsa il metodo displayData
public void onReceiptCollection() {System.out.println("*** Collecting receipts ***");displayData();trucksSinceCollection = 0; // Clear out totalsreceiptsSinceCollection = 0;
}
21
Un esempio:
la raccolta dei pedaggiMetodo Metodo calculateTollcalculateToll –– La classe TollboothLa classe TollboothCalcola e visualizza il dovuto
public void calculateToll (Truck truck) {int axles = truck.getAxles();int totalWeight = truck.getTotalWeight();int tollDue = 5*axles+10*(totalWeight/1000);System.out.print("Truck arrival - axles: ");System.out.print(axles);System.out.print(" total weight: ");System.out.print(totalWeight);System.out.print(" Toll due: ");System.out.println(tollDue);trucksSinceCollection = trucksSinceCollection + 1;receiptsSinceCollection = receiptsSinceCollection + tollDue;
}
22
la raccolta dei la raccolta dei pedaggi pedaggi Un programma di prova:
class TestTollBooth {public static void main(String [] args) {
// Create the tollboothTollBooth booth = new TollBooth();// Now for some trucksTruck truck1 = new Truck(5, 12500);Truck truck2 = new Truck(2, 5000);Truck truck3 = new Truck(6, 17000);// Let's start collecting tolls!booth.calculateToll (truck1);booth.displayTotals();booth.calculateToll(truck2);// Time to collect the receiptsbooth.onReceiptCollection();// Here comes another truckbooth.calculateToll (truck3);booth.displayTotals();
}}
23
Tipi primitivi in JavaI numeri interi sono un tipo dato base dell’hardware del calcolatoreJava offre un accesso diretto a tale rappresentazione mediante il tipo intI tipi primitivi NON hanno oggetti associati, ma valori
String s = new String(“Hello”) Int i=3
3is Hello
24
Tipi primitivi e classi
referencevariable primitive data variabletype defined by class definition languagevalue created by new underlyingvalue initialized by constructor underlyingvariable initialized by assignment of reference assignment of primitive
value data valuevariable contains referenceto object primitive valueused with messages operator symbolscan specify a receiver yes no
25
Operatori ed espressioni
+ addizione- sottrazione* moltiplicazione/ divisione% resto
Gli operatori agiscono su valori (operandi) per formare espressioni
x+y;(x+y)*(z-3);
26
Literal e costanti
Literal (costanti letterali)2 5 32Costanti– Variabili il cui valore NON può cambiare dopo
l’inizializzazione– Semplificano la lettura e la modifica del codice– Parola chiave: finalfinal
static final intDuePerAxle = 5,DuePerHalfTon = 10TonInPounds = 2000;
ES: modificare il costo perasse da $5 a$7
27
Precedenze
Si applicano le regole soliteMoltiplicazione e divisione prima di addizione e sottrazione2+3*5 è interpretata come 2+(3*5)Ovviamente le parentesi possono cambiare tali precedenza …… e rendere le cose più chiare
28
Assegnamento composto
Molto spesso la viariabile cui assegnare il valore dell’espressione entra anche a far parte dell’espressione– ì=ì+valore;
In generale: x = x op somex = x op some--valuevalue;dove op è un operandoPossono essere abbreviate inx op = x op = somesome--valuevalue
29
Esempi
yearToDate = yearToDate + currentWages;salary = salary * 1.20;
yearToDate + = currentWages;salary * = 1.20;
30
Tavola riassuntiva
Operator Operator Comp.Comp. AssAss. . EffectEffect+ += add and assign- -= subtract and assign* *= multiply and assign/ /= divide and assign% %= take remainder
and assign
31
Incrementi e decrementi
Molto frequenti sono gli incrementi ed i decrementitotal = total + 1; total = total –1;Abbreviati:total +=1; total -=1;Con operatore di incremento/decrementitotal ++; total --;
32
Attenzione !
L’operatore + applicato alle stringhe rappresenta l’operazione di concatenazione“hello” + “ world” “Hello”.concat(“ world”)
L’operatore + per gli oggetti String
33
Metodi e tipi primitivi
Abbiamo detto che i valori int NON sono oggetti, e quindi NON hanno metodiLa realizzazioni di operazioni complesse, quali valore assoluto o elevamento NON sono offerte quali operatori dal linguaggio JavaE’ necessario definire dei metodi opportuniIn quale classe ? Quali oggetti di invocazione ?
34
Metodi e tipi primitivi
Oggetti di invocazione– Metodi statici, nessun oggetti di invocazione– Valori int quali parametri
Classi– Esistono svariate classi predefinite che servono a
raggruppare metodi statici logicamente correlati– Classe Math – metodi statici orientati alla matematica
• Es: static int abs(int a) ….
– Classe Integer – metodi statici per gli interi
35
Ingresso di interiLa lettura di un numero intero avviene in due passi
1. Leggere una linea dallo stream in un oggetto String, usando readLine
2. Convertire la String in un valore int usando il metodo statico parseIntdella classe Integer
String s = br.readLine(); // need s only brieflyint i = Integer.parseInt(s); // converts s to int
36
Ingresso di interi
La linea deve poter essere interpretata come un intero, altrimenti si verifica un erroreOK– 2– 75– -1
KO– Hello– 57 40– 12o
37
La classe Truck
Aggiungere un metodo di lettura …
static public Truck read(DataInputStream ds) {int axles = Integer.parseInt(ds.readLine());int totalWeight = Integer.parseInt(ds.readLine());return new Truck(axles, totalWeight);
}
38
Altri tipi di numeri interi
int modella i numeri compresi tra circa –2 miliardi e +2 miliardiLong è identico al tipo int, ma modella valori compresi tra –8 quintilioni e +8 quintilioni (un quintilione = 1018)Le costanti letterali long hano un “L” alla fineLong y=1000L;
39
Conversioni
E’ sempre possibile assegnare un valore int ad un valore long– Long x,y,z;
int j=55, k;x = 98; // assegna un literal int ad una variabile longy=j; // assegna una variabile int ad una longz = 2*j; // assegna il valore di una espressione
//int ad una variabile long
40
Conversioni
L’assegnazione di un long ad un int richiede una conversione esplicita mediante un castcastvarvar--intint = (= (intint) ) exprexpr--longlongj = (int) y
Altri tipi di numeri interi– Short: -32768 + 32767– Byte: -128 +128
41
I tipi float e doubleI tipi primitivi float e double modellano il comportamento dei numeri floating-point– Numeri che modellano le misure con una determinata
precisioneFloat– 3.4028235 1038 (3.4028235E38f)– 1.4012985 10 -45 (1.4012985E-45f)
Double– 2.2250738585072014 10-308
– 1.79769313486231570 10308
42
IO di float e double
Stampa: versione overloaded dei metodi printe printlnLetturaSi crea un oggetto della classe predefinita Double– Invocando il metodo statico valueOfcon un riferimento ad un
oggetto String per fissae un valore– Sull’oggetto appena creato si invoca il metodo doubleValue
senza argomenti per ottenere il valore
s = keyBR.readLine();Double d = Double.valueOf(s);double x = d.doubleValue();System.out.println(x);
Recommended