Fast Food Manager
Progetto per Ingegneria del Software (9 CFU)
cdl Informatica (L-31), a.a. 2014-2015 Mario Cianciolo
12/06/2015 M01/000499
Indice generale
Introduzione............................................................................................................................................3
Definizioni..............................................................................................................................................4
Requisiti funzionali................................................................................................................................4
Progettazione..........................................................................................................................................5
Diagrammi delle classi...........................................................................................................................6
Diagramma 1.....................................................................................................................................6
Diagramma 2.....................................................................................................................................7
Diagramma 3.....................................................................................................................................8
Diagrammi di collaborazione.................................................................................................................9
Diagramma 1.....................................................................................................................................9
Diagramma 2...................................................................................................................................10
Diagramma 3....................................................................................................................................11
Diagramma 4....................................................................................................................................11
Design pattern utilizzati........................................................................................................................12
Singleton..........................................................................................................................................12
Factory method................................................................................................................................12
Object pool.......................................................................................................................................12
Frammenti di codice.............................................................................................................................13
Ingrediente e relative classi factory.................................................................................................13
Pietanza e relative classi factory......................................................................................................14
Ordine..............................................................................................................................................14
Coda.................................................................................................................................................15
Object pool per Ordine....................................................................................................................15
Cassiere: inserimento nuovo ordine.................................................................................................16
Cuoco: preparazione ordini..............................................................................................................17
Dirigente: calcolo degli stipendi e gestione del frigorifero.............................................................18
Conclusione..........................................................................................................................................19
Mario Cianciolo (M01/000499) 2
Introduzione
Il software si occuperà di gestire un piccolo fast food, in cui lavorano un dirigente, uno o più cassieri, uno o
più cuochi e uno o più addetti a pulizie e manutenzione. I clienti ordinano e dopo il pagamento viene loro
assegnato un numero sequenziale, dopodiché attendono la preparazione. Su un display al centro della sala
viene visualizzato il numero dell'ultima ordinazione pronta in modo che il cliente possa avvicinarsi per
ritirarla. Il cuoco preleva gli ingredienti da un frigorifero, il cui contenuto è monitorato.
Introduco alcune approssimazioni, per semplificare l'intero progetto: non essendo un software gestionale, esso
non tiene traccia delle spese dell'attività, dunque non si preoccupa di far quadrare i bilanci; né si occupa della
gestione del personale. Inoltre si assuma che tutti gli ingredienti siano presenti - e necessari - in unità
monoporzione: ad esempio, per preparare una data pietanza servono gli ingredienti α e β, ovvero una unità
dell'ingrediente α e una dell'ingrediente β. Il frigorifero contiene esclusivamente prodotti così confezionati.
Per la generazione dei diagrammi UML delle classi e di collaborazione ho utilizzato il programma Umbrello
UML Modeller di KDE. Le immagini sono state esportate in SVG per non perdere definizione.
Mario Cianciolo (M01/000499) 3
Definizioni
Di seguito alcune definizioni che saranno utilizzate nel resto del documento.
INGREDIENTE: singolo elemento monoporzione usato come base per le preparazioni
• FRIGORIFERO: contenitore per gli ingredienti
• PIETANZA: composizione di uno o più ingredienti
• ORDINE: gruppo di pietanze da preparare e servire insieme
• CODA: sequenza in cui gli ordini vengono inseriti, e successivamente vengono estratti dal cuoco per
• essere preparati. L'estrazione avviene nell'ordine di ingresso nella coda (FIFO)
UID: intero sequenziale univoco associato ad ogni ordine non appena viene pagato, e quindi immesso
• nella coda
CASSIERE: dipendente che immette l'ordine nel sistema e, dopo il pagamento, comunica al cliente il
• corrispondente UID
DIRIGENTE: dipendente che rilascia gli stipendi agli altri dipendenti.
•
Requisiti funzionali
Il sistema dovrà permettere ai cassieri di inserire ordini nella coda. Ogni ordine comprenderà una o più
pietanze, ognuna con il proprio prezzo. Il cassiere potrà calcolare il totale dell'ordine, che appena pagato sarà
inserito in coda con un UID. La coda manterrà l'UID dell'ultimo ordine servito.
Il frigorifero ha una capienza massima, e registrerà ogni volta che un ingrediente viene prelevato o introdotto.
Ogni pietanza è composta da diversi ingredienti, ed è disponibile solo se sono presenti tutti gli ingredienti
necessari. La coda è attiva solo se almeno una pietanza è disponibile, altrimenti il locale dovrà chiudere. Il
cuoco estrae gli ordini dalla coda, li prepara e infine imposta l'UID dell'ordine all'ultimo servito.
Ogni dipendente timbra per registrare le proprie ore di lavoro, così il dirigente può calcolare lo stipendio in
base alla paga oraria di ciascuno. Il dirigente può ottenere resoconti sugli ingredienti utilizzati, in modo da
poterli acquistare per tenere il frigorifero pieno.
Legenda: classe attributo operazione
⚫ ⚫ ⚫
Mario Cianciolo (M01/000499) 4
Progettazione
La classe Dipendente ha gli attributi pagaOraria e oreLavoro. Dipendente possiede i metodi timbraInizio() e
timbraFine(): il primo avvia un timer, l'altro lo termina e aggiorna oreLavoro. Possiede infine i metodi
calcolaStipendio() e resetOreLavoro(), le cui funzioni appaiono chiare dal nome.
Dipendente è una classe abstract: emergono le classi derivate Dirigente, Cassiere, Cuoco e Inserviente. Alcune
di esse interagiscono con altre classi. Ogni classe derivata specifica la propria pagaOraria nel costruttore.
Dirigente utilizza i metodi di tutti gli altri Dipendente per calcolare il loro stipendio. Inoltre utilizza i metodi
sul consumo di ingredienti di Frigorifero per poterli reintegrare dopo la giornata lavorativa.
Cassiere utilizza Coda per introdurre ordini nella coda, Ordine e PoolOrdine per creare l'ordine e calcolarne il
totale, Pietanza e CreatorPietanza per popolarlo, tutto tramite il metodo immettiIngrediente().
Cuoco utilizza Coda per
-
Riassunto esame Sociologia dello sviluppo, prof Rovati, libro consigliato Food poverty food bank
-
Riassunto esame Lingua Inglese, prof. Reggiani, libro consigliato Food for Thought, Blanc, Murchison, Law
-
Riassunto esame marketing, prof. Devetag, libro consigliato Marketing manager, Kotler, Keller, Ancarani
-
Riassunto esame inglese, docente Carlini, libro consigliato Food for thought, James Rock