Aritmetica la raccolta dei pedaggi -...

7
Aritmetica Un approccio metodologico alla costruzione dei programmi. Tipi di dati primitivi. Int, float, double Variabili, dichiarazioni e operazioni 2 Progetto dei programmi Definizione del problema Scenario d’esempio Individuazione degli oggetti primari Determinazione del comportamento desiderato Determinazione delle interfacce Definizione delle variabili di istanza Implementazione dei metodi 3 Aritmetica Java offre un tipo predefinito, int, che modella il comportamento dei numeri interi Il 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, new Alle variabili intere si assegnano valori interi int i; i=5; – int i=5; 4 Un esempio: la raccolta dei pedaggi Descrizione del problema Descrizione del problema Modellare un sistema di raccolta dei pedaggi per autostrade I camion pagano $5 per asse più $10 per ogni mezza tonnellata di peso totale Un display nel casello visualizza i pagamenti ed il numero di camion che hanno pagato dall’ultima raccolta 5 Un esempio: la raccolta dei pedaggi Scenario d’esempio Scenario d’esempio Nel casello ci sono lo schermo di un calcolatore ed un lettore di codici a barre Per leggere il numero di assi il casellante legge un codice a barre sul parabrezza del camion Il peso è letto da un codice a barre su un biglietto consegnato dal conducente del camion Le informazioni sul camion e sull’ammontare del pedaggio sono visualizzate sullo schermo Il casellante può richiedere la visualizzazione dei dati registrati dall’ultimo prelievo della cassa All’atto del prelievo della cassa compare un opportuno messaggio con l’indicazione dei dati di riepilogo 6 Un esempio: la raccolta dei pedaggi Scenario d’esempio Scenario d’esempio - Messaggi Messaggi Truck arrival - axles: 5 total weight: 12500 Toll due: $145 Totals since last collection - Receipts: $205 Trucks: 2 *** Collecting receipts *** Totals since last collection - Receipts: $523 Trucks: 5

Transcript of Aritmetica la raccolta dei pedaggi -...

Page 1: Aritmetica la raccolta dei pedaggi - rcost.unisannio.itrcost.unisannio.it/canfora/Programmazione-03/Lucidi/L05.pdf · Aritmetica Un approccio metodologico alla costruzione dei programmi.

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

Page 2: Aritmetica la raccolta dei pedaggi - rcost.unisannio.itrcost.unisannio.it/canfora/Programmazione-03/Lucidi/L05.pdf · Aritmetica Un approccio metodologico alla costruzione dei programmi.

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

Page 3: Aritmetica la raccolta dei pedaggi - rcost.unisannio.itrcost.unisannio.it/canfora/Programmazione-03/Lucidi/L05.pdf · Aritmetica Un approccio metodologico alla costruzione dei programmi.

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;

}

Page 4: Aritmetica la raccolta dei pedaggi - rcost.unisannio.itrcost.unisannio.it/canfora/Programmazione-03/Lucidi/L05.pdf · Aritmetica Un approccio metodologico alla costruzione dei programmi.

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

Page 5: Aritmetica la raccolta dei pedaggi - rcost.unisannio.itrcost.unisannio.it/canfora/Programmazione-03/Lucidi/L05.pdf · Aritmetica Un approccio metodologico alla costruzione dei programmi.

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

Page 6: Aritmetica la raccolta dei pedaggi - rcost.unisannio.itrcost.unisannio.it/canfora/Programmazione-03/Lucidi/L05.pdf · Aritmetica Un approccio metodologico alla costruzione dei programmi.

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

Page 7: Aritmetica la raccolta dei pedaggi - rcost.unisannio.itrcost.unisannio.it/canfora/Programmazione-03/Lucidi/L05.pdf · Aritmetica Un approccio metodologico alla costruzione dei programmi.

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