Esercizio: la classe CashRegister

Documenti analoghi
Esercizio: la classe CashRegister

Esercizio: la classe CashRegister

Capitolo 4. Tipi di dati fondamentali. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

Progettare le Classi

Progettazione di classi

Tipi Fondamentali. C. Horstmann Fondamenti di programmazione e Java 2 3^ edizione Apogeo

Interfacce. Organizzazione di una classe. Organizzazione di una classe. Classi di un progetto. Classi di un progetto

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Java: Compilatore e Interprete

Capitolo 4. Tipi di dati fondamentali

sayhello public private protected return public class Greeter { public String sayhello() { String message = Hello, World! ; return message; } }

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

UML Diagrammi delle classi. UML Diagramma classi 1

Le variabili. Olga Scotti

Numeri e Cara*eri Ing. Massimo Cossen.no Sistemi Informa.vi Aziendali a.a. 2008/2009

Definizione di classi con array di oggetti

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Esercizi della lezione 5 di Java

Concetto di Funzione e Procedura METODI in Java

3. La sintassi di Java

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Livelli di astrazione

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Algoritmi di Ricerca. Esempi di programmi Java

Object Oriented Software Design

Java threads (2) Programmazione Concorrente

Rectangle BankAccount Purse

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Capitolo 8 Progettazione di classi

Progettazione di classi

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Luglio Soluzione degli Esercizi

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

GESTIONE DEI PROCESSI

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione ad Oggetti: JAVA. Esercitazione

Un oggetto per la lettura dalla tastiera

Esempi di esercizi d esame

Inizializzazione, Assegnamento e Distruzione di Classi

Capitolo 4. Tipi di dati fondamentali. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Codifica: dal diagramma a blocchi al linguaggio C++

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione 1 A.A. 2015/2016

Test di unità con JUnit4

L istruzione while. while (condition) istruzione

Realizzazione di Phone Plan. Soluzione - SimpleTime. Realizzazione e testing! Soluzione - SimpleTime. Soluzione - SimpleTime

Java: Compilazione e Traduzione. Fondamenti di Informatica L-B Esercitazione n 3 Introduzione a JAVA. C: Editing, compilazione, esecuzione

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmare in Java. Olga Scotti

Realizzazione di una classe con un associazione

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Capitolo 9. Progettare Classi

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Introduzione ai tipi di dato astratti: applicazione alle liste

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

dall argomento argomento della malloc()

Introduzione alla programmazione in C

Capitolo 13: Gestione delle eccezioni. Capitolo 13. Gestione delle eccezioni Apogeo srl Horstmann-Concetti di informatica e fondamenti di Java 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Multithreading in Java. Fondamenti di Sistemi Informativi

EXCEL FUNZIONI PRINCIPALI

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

La struttura dati ad albero binario

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

Introduzione a Classi e Oggetti

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

CONTABILITA ON LINE GUIDA ALL USO PER COMITATI PROVINCIALI E REGIONALI INSERIRE IN PRIMA NOTA I RICAVI

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a luglio 2013

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Esempio ordini 08UMLEX1.1

Esercizi classi e array

Progettodiclassie Interfacce

Descrizione di un algoritmo

10 - Programmare con gli Array

Synchronized (ancora)

Object Oriented Programming

Corso di Informatica

Scope e visibilità per classi

Tipi di Dato Ricorsivi

Main System Monitor Keyboard

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Allocazione dinamica della memoria - riepilogo

Programmazione Java: Variabili membro, Metodi La parola chiave final

Transcript:

Esercizio: la classe CashRegister Si veda anche il libro di testo: Consigli pratici 3.1 Sezione 4.2 Sezione 8.2 Esercizi 8.1 e 8.2 1 Problema Si chiede di realizzare una classe CashRegister che simuli il comportamento di un registratore di cassa. Per semplicità si considera un registratore di cassa molto semplice. Il compito assegnato specifica quali aspetti di un registratore di cassa devono essere simulati dalla classe. Elenco, in linguaggio naturale, delle operazioni realizzabili da un registratore di cassa semplificato: Registra il prezzo di vendita per un articolo venduto. Consenti l'inserimento della somma di denaro pagata. Calcola il resto dovuto al cliente. 2 Riassunto: progettare una classe 1. Capire cosa deve fare un oggetto della classe Elenco in linguaggio naturale delle operazioni possibili 2. Specificare l'interfaccia pubblica Ovvero, definire i metodi tramite le loro intestazioni 3. Documentare l'interfaccia pubblica 4. Identificare i campi di esemplare a partire dalle intestazioni dei metodi 5. Realizzare costruttori e metodi Se avete problemi a realizzare un metodo forse dovete riesaminare i passi precedenti 6. Collaudare la classe con un programma di collaudo La classe CashRegister Fase 1: capire cosa deve fare la classe Registrare prezzo di vendita per un articolo venduto Consentire inserimento della somma pagata Calcolare resto dovuto al cliente Fase 2: specificare l interfaccia pubblica Trasformare l elenco precedente in un insieme di metodi Specificando parametri e valori restituiti E aggiungendo i costruttori della classe Fase 3: scrivere la documentazione Commenti di documentazione per metodi e classe In questo esercizio saltiamo questa fase 3 4

L interfaccia pubblica di CashRegister public CashRegister() public void recordpurchase(double amount) Commenti di documentazione public void enterpayment(double amount) public double givechange() 5 6 Commentare l'interfaccia pubblica Java ha delimitatori speciali per commenti di documentazione /** Registra la vendita di un articolo @param amount il prezzo dell articolo */ public void recordpurchase(double amount) //corpo del metodo @param nomeparam descrive un parametro esplicito @return descrive il valore restituito dal metodo /** Calcola il resto e azzera la macchina per la vendita successiva @return resto dovuto al cliente */ public double givechange() //corpo del metodo 7 Commentare l'interfaccia pubblica Solitamente si inseriscono brevi commenti anche alla classe, per illustrarne lo scopo /** Un registratore di cassa somma gli articoli venduti e calcola il resto dovuto al cliente */ Usando commenti di documentazione in questo formato si può generare in maniera automatica documentazione in html javadoc NomeClasse.java Genera un documento NomeClasse.html ben formattato e con collegamenti ipertestuali, contenente i commenti a NomeClasse 8

La classe CashRegister La classe CashRegister (v. 1) Fase 4: identificare i campi di esemplare Sono le informazioni che un oggetto deve conservare per svolgere il proprio compito Vanno identificati a partire dalle definizioni dei metodi In questo caso ci servono la spesa totale il pagamento effettuato Fase 5: realizzare costruttori e metodi public CashRegister() purchase = 0; payment = 0; public void recordpurchase(double amount) double newtotal = purchase + amount; purchase = newtotal; 9 10 La classe CashRegister (v. 1) La classe CashRegisterTester (v. 1) public void enterpayment(double amount) payment = amount; public double givechange() double change = payment - purchase; payment = 0; purchase = 0; return change; private double purchase; private double payment; 11 Fase 6: scrivere una classe di collaudo import java.util.scanner; import java.util.locale; Tester public static void main(string[] args) CashRegister register = new CashRegister(); Scanner in = new Scanner(System.in); in.uselocale(locale.us); boolean done = false; while(!done) System.out.println("Prezzo articolo (Q per uscire):"); // (continua) 12

La classe CashRegisterTester (v. 1) Migliorare la classe CashRegister double amount = Double.parseDouble(input); register.recordpurchase(amount); System.out.println("Inserire pagamento"); double amount = in.nextdouble(); register.enterpayment(amount); double change = register.givechange(); System.out.printf(Locale.US, "Resto dovuto: %.2f%n", change); 13 Vogliamo scrivere un metodo enterpayment più comodo da usare I valori di ingresso sono conteggi di monete Il metodo calcola la somma pagata sommando le quantità di monete versate, moltiplicate per i rispettivi valori payment = dollars + quarters * 0.25 + dimes * 0.1 + nickels * 0.05 + pennies * 0.01; Non usiamo numeri magici Definiamo delle costanti (QUARTER_VALUE, DIME_VALUE, ) Saranno costanti di classe (static) 14 La classe CashRegister (v. 2) public void enterpayment(int dollars, int quarters, int dimes, int nickels, int pennies) payment = dollars + quarters * QUARTER_VALUE + dimes * DIME_VALUE + nickels * NICKEL_VALUE + pennies * PENNY_VALUE; public static final double QUARTER_VALUE = 0.25; public static final double DIME_VALUE = 0.1; public static final double NICKEL_VALUE = 0.05; public static final double PENNY_VALUE = 0.01; 15 La classe CashRegisterTester (v. 2) import java.util.scanner; import java.util.locale; Tester public static void main(string[] args) CashRegister register = new CashRegister(); Scanner in = new Scanner(System.in); in.uselocale(locale.us); boolean done = false; while(!done) System.out.println("Prezzo articolo (Q per uscire):"); // (continua) 16

La classe CashRegisterTester (v. 2) double amount = Double.parseDouble(input); register.recordpurchase(amount); System.out.println("Inserire pagamento"); System.out.println("Dollars:"); int dollars = in.nextint(); System.out.println("Quarters:"); int quarters = in.nextint(); System.out.println("Dimes:"); int dimes = in.nextint(); System.out.println("Nickels:"); int nickels = in.nextint(); System.out.println("Pennies:"); int pennies = in.nextint(); register.enterpayment(dollars, quarters, dimes, nickels, pennies); double change = register.givechange(); System.out.printf(Locale.US, "Resto dovuto: %.2f%n", change); Coesione e accoppiamento Una classe dovrebbe rappresentare un singolo concetto Metodi pubblici e costanti elencati nell interfaccia pubblica devono avere una buona coesione Ovvero devono essere strettamente correlate al singolo concetto rappresentato dalla classe La nostra classe registratore di cassa ha scarsa coesione public void enterpayment(int dollars, int quarters, int dimes, int nickels, int pennies) public static final double NICKEL_VALUE = 0.05; public static final double DIME_VALUE = 0.1; public static final double QUARTER_VALUE = 0.25; 17 18 Coesione e accoppiamento La classe Coin Una progettazione più attenta ci porta a definire due classi Una per descrivere il concetto registratore di cassa Una per descrivere il concetto moneta/valuta public class Coin public Coin(double avalue, String aname) public double getvalue() public class Coin public Coin(double value, String name) this.value = value; this.name = name; public double getvalue() return value; public String getname() return name; private double value; public void enterpayment(int coincount, private String name; Coin cointype) 19 20

La classe CashRegister (v. 3) La classe CashRegisterTester (v. 3) import java.util.scanner; import java.util.locale; public void enterpayment(int coincount, Coin cointype) double amount = coincount * cointype.getvalue(); payment += amount; 21 Tester public static void main(string[] args) CashRegister register = new CashRegister(); Coin euro = new Coin(1, "eur"); Coin eurocent = new Coin(0.01, "eucent"); Scanner in = new Scanner(System.in); in.uselocale(locale.us); boolean done = false; while(!done) System.out.println("Prezzo articolo (Q per uscire):"); double amount = Double.parseDouble(input); register.recordpurchase(amount); // (continua) 22 La classe CashRegisterTester (v. 3) done = false; while (!done) System.out.println("Inserire pagamento"); System.out.println("Quantita' taglio (Q per uscire):"); int coincount = Integer.parseInt(input); String coinname = in.next(); if (coinname.equals(euro.getname())) register.enterpayment(coincount, euro); if (coinname.equals(eurocent.getname())) register.enterpayment(coincount, eurocent); System.out.println("Moneta sconosciuta"); double change = register.givechange(); System.out.printf(Locale.US, "Resto dovuto: %.2f%n", change); Coesione e accoppiamento Questa scelta di progetto porta ad accoppiamento tra le due classi La classe CashRegister dipende dalla classe Coin Visualizziamo accoppiamento con diagrammi UML (Unified Modeling Language) La linea tratteggiata con freccia aperta punta alla classe nei cui confronti esiste dipendenza 23 24

25