La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

+ Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010.

Presentazioni simili


Presentazione sul tema: "+ Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010."— Transcript della presentazione:

1 + Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico:

2 + Obiettivi del progetto Creare un linguaggio per gestire le operazioni della cassa di un negozio Inserimento di prodotti per la vendita Dettagli dei prodotti disponibili Vendita al cliente Creare un interprete che controlli le frasi inserite dallutente Simulare i meccanismi di una normale cassa Gestire la persistenza dei dati e fornirne una rappresentazione tabellare

3 + Cerca tra i prodotti presenti una specifica categoriaRimozione dal sistema di una categoria di prodotti Operazione che elimina dal sistema prodotti nella quantità indicata Aggiornamento dei campi opzionali di un prodotto già nel sistema Fornisce al sistema i dettagli dei prodotti inseritiInserisce nel sistema un prodotto da vendere Grammatica – Non Terminali Scopo della grammatica: ::= ::= | | | | | ::= inserisci ::= dettagli prodotti ::= aggiorna ::= vendi ( )+ ::= rimuovi ::= prodotto CODICE_A_BARRE Operazioni principali:

4 + Grammatica – Non Terminali Prodotto: :: = prodotto CODICE_A_BARRE PRODUTTORE ( )+ MODELLO ( )+ LOTTO_PRODUZIONE DATA_ACQUISTO PREZZO ( | ) ( euro | ) Campi obbligatori per un nuovo prodotto

5 + Grammatica – Non Terminali Caratteristiche opzionali per un prodotto: ::= ( COLORE ( )+ )? ( DESCRIZIONE ( )+ )? ( IMMAGINE )? ( NUMERO_TELEFONO_PRODUTTORE ( )* ( )? ( NUMERO_FAX_PRODUTTORE ( )* ( )? ( _PRODUTTORE ( )* ( )+ )? ( MADE_IN )? Posso avere molteplici colori per uno stesso prodotto Posso inserire più descrizioni dello stesso prodotto

6 + Grammatica – Non Terminali Quantità prodotto: ::= QUANTITA ::= Data:

7 + ( )* \>DEFINIRE STRINGHE Grammatica - Terminali > DELIMITARE BLOCCHI LOGICI )*> (. |, ) > DEFINIRE NUMERI DEFINIRE DATA, E NUMERI TELEFONICI )+ > > DEFINIRE URL DI UNIMMAGINE

8 + Esempi frasi del linguaggio Inserisci Prodotto Cerca Prodotto Vendi Prodotto Rimuovi Prodotto Aggiorna Prodotto inserisci prodotto: { CODICE_A_BARRE --> " "; PRODUTTORE --> "Stabilo"; MODELLO --> "Pen 68"; LOTTO_PRODUZIONE --> "aabb1122"; DATA_ACQUISTO --> ; QUANTITA --> 3; PREZZO --> 0,99 euro; } aggiorna prodotto: { CODICE_A_BARRE --> " "; } { COLORE --> "Verde Limone"; DESCRIZIONE --> "PENNARELLO CON PUNTA DI FIBRA PREGIATA. PUNTA INDEFORMABILE. INCHIOSTRO INODORE A BASE DACQUA. PUNTA MEDIA TRATTO 1MM."; IMMAGINE --> /Users/Faust/Desktop/Checkout/ image/Pen_68.jpg; _PRODUTTORE --> MADE_IN --> "Germania"; } prodotto: { CODICE_A_BARRE --> " "; } vendi prodotto: { CODICE_A_BARRE --> " "; } { QUANTITA --> 2; } rimuovi prodotto: { CODICE_A_BARRE --> " "; }

9 + Osservazioni sulla grammatica La grammatica, nella parte sinistra delle di tutte le produzioni, presenta un unico simbolo non terminale. Le produzioni hanno la forma: A α con α (VT VN)*, A VN Secondo la classificazione di Chomsky è una grammatica di Tipo 2 (Context-Free) La grammatica non contiene self-embedding, quindi il linguaggio generato è di Tipo 3 (Regolare)

10 + Osservazioni sulla grammatica La grammatica presenta delle parti di linguaggio opzionali, che possono produrre ε -rules. Per dire che la grammatica sia LL(1) non è più sufficiente che gli Starter Symbols relativi alle parti destre delle produzioni alternative siano disgiunti. Per le produzioni come A α in cui α può genare la stringa vuota i Director Symbols sono DS(A α ) = SS( α ) FOLLOW(A) Nel caso in cui α non generi la stringa vuota i Director Symbols coincidono con gli Starter Symbols Essendo i Director Symbols di produzioni alternative disgiunti, questa è una condizione necessaria e sufficiente per dire che la grammatica è LL(1) E possibile quindi applicare lanalisi ricorsiva discendente (Top-Down) Sono introdotti tanti metodi quanti i simboli non terminali, che si occupano di riconoscere il sotto-linguaggio generato dal simbolo non terminale associato E necessario dunque considerare i Director Symbols

11 + Architettura del sistema Frase del linguaggio Parser CHKParserTokenManager CHKParser SyntaxTree InserisciProdotto CercaProdotto DettagliProdotti VendiProdotto AggiornaProdotto RimuoviProdotto Quantita Data Prodotto ParametriOpzionaliProdotto Visitor IVoidVisitor DepthFirstVoidVisitor CheckoutDepthFirstVisitor SyntaxTreeDepthFirstVisitor Package Visitor generato da JTB. Contiene linterfaccia del visitor IVoidVisitor e implementazioni con visita DepthFirst Package generato da JavaCC, contiene un lexer per analizzare i singoli token e un parser che effettua lanalisi sintattica Percorre lalbero costruendo una sua rappresentazione Package generato da JTB per la costruzione dellAST Percorre lalbero e svolge le operazioni necessarie effettuando controlli sulla semantica

12 + Analisi semantica La classe DepthFirstVoidVisitor è stata estesa da due sottoclassi: CheckoutDepthFirstVisitor: Effettua controlli semantici sulla frase inserita Crea, modifica, rimuove e restituisce righe dalle tabelle del database a seconda delle operazioni richieste SyntaxTreeDepthFirstVisitor: Percorre lalbero e ne crea una sua rappresentazione semplificata omettendo le produzioni non significative Ciascun visitor realizza una visita di tipo depth first avvalendosi del meccanismo del double dispatch

13 + Gestione della persistenza Per laccesso ai dati è stato impiegato il Pattern DAO (Data Access Object). Il pattern consente di poter sostituire il dispositivo di persistenza senza che questo abbia impatto sulla logica di business. Il sistema è diviso in tre parti: Logica di accesso ai dati Implementazione JDBC, che astrae dal database sottostante Implementazione in accordo allo specifico database

14 + Componenti accessori Il sistema dispone di classi accessorie che svolgono attività secondarie Classi per lhighlighting e la segnalazione di errori nelle frasi del linguaggio inserite nelleditor Classi per la generazione automatica delle frasi del linguaggio Classi per la gestione del flusso di frame proveniente dalla webcam Classi per la lettura di codici a barre, del tipo EAN-13, da immagini

15 + Interfaccia grafica ConfermaVendita ConfermaRimozioneCarrello GraphicaluserInterfaceCheckoutAboutBox GraphicaluserInterfaceCheckoutApp GraphicaluserInterfaceCheckoutView Frame che lancia lapplicazione Classe che si occupa della creazione dei vari componenti dellinterfaccia grafica Finestra di dialogo contenente le informazioni sullapplicazione Finestra di dialogo per la rimozione di un prodotto dal carrello e per la conferma della vendita di prodotti WebcamFrame Frame che permette di visualizzare le immagini catturate dalla webcam CarrelloTableModel Classe per la gestione delle tabelle nellinterfaccia grafica Componenti principali:

16 + Interfaccia grafica Campi per limmissione dei dati Frame provenienti dalla webcam Selezione operazioni di gestione

17 + Interfaccia grafica Dettagli prodotto selezionato Selezione prodotto

18 + Interfaccia grafica Prodotti che il cliente vuole acquistare Prodotti presenti in negozio

19 + Interfaccia grafica Area di notifica per eventuali messaggi di errore Area per la scrittura delle frasi del linguaggio Albero che rappresenta lesecuzione di un comando Highlighting del codice

20 + Test e collaudi Suite di test JUnit per verificare la correttezza delle operazioni di lettura e scrittura verso il database File con opportuni errori sintattici e semantici al fine di collaudare il sistema a fronte di situazioni di errore Predisposti opportuni messaggi per segnalare allutente eventuali errori sintattici e semantici Errori sintattici viene segnalata riga e colonna dellerrore e il carattere inaspettato Errori semantici viene esplicitamente segnalato lerrore

21 + Tecnologie Linguaggio di programmazione Java1.6.0_26 Ambienti di sviluppo Eclipse Helios NetBeans Generazione lexer e parser JavaCC (Plug-in Eclipse) Generazione visitor e APT Java Tree Builder (Plug-in Eclipse) Generazione delle documentazione JJDoc Testing JUnit Database Oracle MySQL

22 + Limiti e sviluppi futuri Supporto da parte del linguaggio dellaspetto fiscale legato alle transazioni Estensione del linguaggio con nuove operazioni Gestione di più negozi, con eventuali scambi tra di essi Gestione di categorie di prodotti differenziate, ad esempio alimentari, farmaceutici, elettrici… Supporto a webcam non QuickTime compatibili Riconoscimento di codici a barre diversi da quelli in formato EAN-13


Scaricare ppt "+ Checkout Linguaggio per la gestione di una cassa Progetto per lesame di Linguaggi e Modelli Computazionali LS Fabio Ferretti Anno Accademico: 2009-2010."

Presentazioni simili


Annunci Google