Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Phone Plan

Documenti analoghi
Realizzazione di Phone Plan

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

Veicoli. Veicoli. Veicoli. Veicoli. Veicoli. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A. 2008/2009

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2014/2015. Ancora Phone Plan

Esercitazione n 2. Obiettivi

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 23/07/2018 Proff. E. Denti R. Calegari G. Zannoni Tempo: 4 ore

Fondamenti di Informatica T-1

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

Esercitazione n 2. Obiettivi

Variabili e assegnazione

L assegnamento. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Vending Machine Problemi?

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 16/07/2013 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX

Il diagramma delle classi è raffigurato in Figura 1, insieme alla descrizione della responsabilità sulle associazioni.

Programmi e Oggetti Software

Programmi e Oggetti Software

Un tipo di dato astratto (ADT) definisce una categoria concettuale con le sue proprietà: una definizione di tipo

Istruzioni di selezione in Java 1

Esercitazione n 2. Obiettivi

Internazionalizzazione: il supporto alle culture locali. Internazionalizzazione: il supporto alle culture locali. Formattazione di numeri (1/3)

Internazionalizzazione: il supporto alle culture locali

Richiami di Fondamenti di Informatica - 1

Implementazione delle classi

Fondamenti di Informatica L-A. Esercitazione 6

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Esempio: Interfacce. Gioco Interfacce

Fondamenti di Informatica L-A. Esercitazione 2

Esempio: Interfacce. Gioco Interfacce

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Istruzioni Condizionali

Passare argomenti al programma

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Informatica B Esercitazione 3

Fondamenti di Informatica T-1

L istruzione switch. Esecuzione condizionale (II parte) L istruzione switch. Payroll con menu (I) L istruzione switch. Payroll con menu (II)

Informatica (A-K) 5. Algoritmi e pseudocodifica

Lab 13 Strutture e programmi su più file "

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

Fondamenti di Informatica

Programmazione II. Lezione 18. Daniele Sgandurra 11/1/2011.

Fondamenti di Informatica T-1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Definizione di classi

Lab 13 Strutture e programmi su più file

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Requisiti del cliente 4. Analisi e Progettazione

Espressioni: da dove si parte. Critiche al modello. Critiche al modello. Critiche al modello. Risultato. Fondamenti di Informatica T2 Modulo 2

Analisi e Progettazione

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.)

Fondamenti di Informatica T2 Modulo 2 Lab 1. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Esercizio 1

Progetto PI , passo A.1 versione del 6 febbraio 2007

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Tecniche e strumenti per la validazione di codice Java: un esempio applicativo

Laboratorio Tecniche di valutazione dei progetti di trasporto. 2 lezione: Cos è un investimento? Prof. Ing. Gianfranco Fancello A.

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

PROVA SCRITTA DEL CORSO DI CORSO DI LAUREA IN INGEGNERIA BIOMEDICA ED ELETTRICA 9/6/2008

Sistemi di Elaborazione delle Informazioni

Progetto PI , passo A.1 versione del 16 marzo 2007

Algoritmi di Ricerca. Esempi di programmi Java

Progetto PI , passo A.3 versione del 28 marzo 2007

Progetto. Angelo Di Iorio, ALMA MATER STUDIORUM UNIVERSITA DI BOLOGNA

Microsoft Visio 2007 e Project Francesca Benuzzi

Espressioni: da dove si parte

Ricerca binaria. Corso di Algoritmi e Strutture Dati Esercitazione 4

Progetto E versione del 12 marzo 2007

Algoritmi di Ricerca. Esempi di programmi Java

Progettazione del Software

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr.

Studio degli algoritmi

Programmazione ad oggetti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

TIPI DI DATO ASTRATTO

TIPI DI DATO ASTRATTO

Lab 09 Strutture e programmi su più file

Corso di Laurea Ingegneria Informatica

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

Agenda Contatti - Requisiti. I Dati. Agenda Contatti. Detail. Detail. Fondamenti di Informatica T2 Modulo 2. Università di Bologna A.A.

Progettazione del Software

Fasi di creazione di un programma

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Sintesi di reti sequenziali 1/2

Fondamenti di Informatica T-1 Modulo 2

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 11. Leggibilità. Aprile Leggibilita 1

Fondamenti di Informatica T-1

Esercizio: la classe CashRegister

Esercizi su array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E08. C. Limongelli Gennaio 2012

Transcript:

Università degli Studi di Bologna Facoltà di Ingegneria Fondamenti di Informatica T2 Modulo 2 Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009 Phone Plan Si desidera modellare il funzionamento di un sistema di tariffazione telefonica In particolare, occorre progettare la porzione di sistema che modella il piano telefonico Un piano telefonico consente di calcolare il costo di una chiamata dati istanti di inizio/fine della chiamata stessa, operatore di destinazione e numero di destinazione. 2

Costo chiamata Costo chiamata Costo chiamata Phone Plan Modellare una tariffa a secondi, o una tariffa a scatti? E se le vogliamo entrambe? In realtà le tariffe sono TUTTE a scatti o, al limite, sono tempo continue quando lo scatto dura infinitamente poco (e costa infinitamente poco) Dando la possibilità di definire la durata dell intervallo/scatto in millisecondi forse ce la si cava 3 Phone Plan Durata chiamata Scatto alla risposta più primo scatto Durata chiamata Scatto alla risposta nullo Scatto alla risposta più primo scatto molto molto piccolo! Durata chiamata 4

Phone Plan Un piano telefonico è caratterizzato da: Scatto alla risposta (eventualmente a costo nullo) Durata dell intervallo di tempo standard (in millisecondi) In questo modo si possono modellare sia le tariffe a scatti, sia le tariffe a secondi Per avere una tariffa a secondi impostare l intervallo ad 1 secondo Per avere una tariffa a scatti impostare l intervallo alla durata dello scatto 5 Phone Plan Per ogni operatore di destinazione, i costi delle chiamate possono variare, quindi, per ogni operatore una giornata è suddivisa in fasce orarie (bande) ognuna dotata di ore di inizio e fine validità e costo per intervallo standard di tempo Attenzione: ogni giorno DEVE essere completamente coperto (24h) non possono esserci buchi! 6

Entità Quali sono le entità in gioco? Piano telefonico (PhonePlan) Operatore (Operator) Fascia oraria (Banda) 7 Band Modella la fascia oraria ed è caratterizzato da: Ora di inizio/fine e giorni della settimana in cui è valida Costo dell intervallo Un metodo (isinband) che consente di verificare se la fascia è applicabile per una data/ora passata come parametro Un metodo (isvalid) che consente di verificare se la fascia è valida Ora di inizio precedente l ora di fine Insieme dei giorni di applicabilità non vuoto 8

Band Per modellare ora di inizio/fine validità di una fascia oraria (Band) è eccessivo usare un Date Date è molto flessibile ma fa molto (troppo) più del necessario Ad esempio le informazioni relative a giorni, mesi, anni, non sono assolutamente necessarie Occorre un entità aggiuntiva che consenta di modellare un orario in modo semplice bastano ora e minuti Chiamiamo SimpleTime questa nuova entità 9 SimpleTime Memorizza le ore del giorno in termini di ore e minuti e permette di: Ottenere una nuova istanza di SimpleTime ottenuta aggiungendo i minuti dati al SimpleTime corrente Verificare l uguaglianza fra due SimpleTime (equals) Confrontare due SimpleTime (compareto solita semantica) Verificare la validità di un istanza (isvalid) Ora rappresentata compresa fra minimo e massimo ammissibili (quali sono?) class tlc - hours: int - minutes: int SimpleTime + SimpleTime(int, int) + gethours() : int + getminutes() : int + addminutes(int) : SimpleTime + equals(simplet ime) : boolean + compareto(simpletime) : int 10

Band Finalmente il diagramma class tlc Ba nd - combineddays: DayOfWeekEnum ([]) - starttime: SimpleTime - endtime: SimpleTime - costperinterval: double + Band(SimpleTime, SimpleTime, DayOfWeekEnum[], double) + getstarttime() : SimpleTime + getendtime() : SimpleTime + getcombineddays() : DayOfWeekEnum[] + getcostperinterval() : double + isinband(date) : boolean -endtime -starttime - hours: int - minutes: int SimpleTime + SimpleTime(int, int) + gethours() : int + getminutes() : int + addminutes(int) : SimpleTime + equals(simplet ime) : boolean + compareto(simpletime) : int 11 Operator L operatore è caratterizzato da: Nome dell operatore Insieme di fasce applicabili Consente di: Ottenere un costo per intervallo per una certa data/ora (getcostperinterval) Verificare la validità dei dati (isvalid) Le fasce devono essere valide e, nel loro insieme, devono coprire tutte le ore di tutti i giorni della settimana class tlc Ba nd Operator - name: String - bands: Band ([]) + Operator(String, Band[]) + getname() : String + getbands() : Band[] + getcostperinterva l(date) : double - combineddays: DayOfWeekEnum ([]) - starttime: SimpleTime - endtime: SimpleTime -bands - costperinterval: double + Band(SimpleTime, SimpleTime, DayOfWeekEnum[], double) + getstarttime() : SimpleTime + getendtime() : SimpleTime + getcombineddays() : DayOfWeekEnum[] + getcostperinterval() : double + isinband(date) : boolean 12

Phone Plan Il piano telefonico è caratterizzato da: Nome del piano Intervallo standard Costo dello scatto alla risposta Un insieme di operatori (tutti quelli possibili?) Consente di: Ottenere il costo di una chiamata date le sue caratteristiche: il numero chiamato, l operatore di destinazione e la data/ora di inizio Verificare la validità del piano ogni operatore deve essere valido class tlc Plan - name: String - interval: int - startcallcost: double - operators: Operator ([]) + Plan(String, int, int, Operator[]) + getname() : String + getinterval() : int + getstartcallco st() : double + getcallcost(date, Date, String, String) : double -operators Operator - name: String - bands: Band ([]) + Operator(String, Band[]) + getname() : String + getbands() : Band[] + getcostperinterva l(date) : double 13 Gli algoritmi Fondamentalmente due (il resto è struttura) Calcolo del costo di una chiamata Verifica di validità del piano telefonico Nessuno dei due è veramente complicato perché: Il modo in cui sono strutturate le entità semplifica le cose siamo SMART! 14

Calcolo costo chiamata Plan.getCallCost Input: inizio/fine chiamata, nome operatore, numero dest. Selezionare l operatore dato il suo nome Chiedere all operatore il costo per intervallo dato l istante di inizio della chiamata (Operator.getCostPerInterval) Calcolare il numero di intervalli di cui è composta la durata della chiamata Differenza in millisecondi fra data/ora di inizio e fine chiamata, diviso per la durata dell intervallo Restituire il risultato del prodotto fra numero di intervalli e costo dell intervallo (recuperato in precedenza) Ipotesi semplificativa: se una chiamata cade a cavallo di due fasce orarie, si assume valido il costo per intervallo dell istante iniziale 15 Calcolo costo chiamata Operator.getCostPerInterval Input: istante di inizio chiamata Fra tutte le bande, recuperare quella che fornisce il costo per quell istante (Band.isInBand) Dalla banda recuperata, ottenere il costo per intervallo (Band.getCostPerInterval) 16

Verifica Validità Plan.isValid Verifica che tutti gli Operator siano validi Operator.isValid Verifica che tutte le Band siano valide Verifica che, per ogni giorno della settimana, siano coperte tutte le 24 ore Come fare? 17 Operator.isValid Verificare la validità di tutte le Band in blocco è improponibile Occorre dividere il problema: 1. Valutare la validità di ogni singolo giorno della settimana (metodo statico values() di DayOfWeekEnum) Selezionare le sole Band che afferiscono al giorno in analisi 2. Valutare la copertura di tutte le 24 ore di un giorno a. Ordinare le Band selezionate in base all ora di inizio b. Verificare che la prima Band dell insieme ordinato cominci alle 00:00 e che l ultima termini alle 23:59 c. Verificare che ogni Band nell elenco ordinato, tranne la prima e l ultima, cominci un minuto dopo la fine della Band precedente 18

Esercizio per casa Cosa accade se viene rimossa l ipotesi semplificativa sul calcolo del costo della chiamata? Come cambia il codice? 19