1. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
MyJOrganizer
uno strumento per la gestione della propria task list
Davide Bellettini
Progetto di Linguaggi e Modelli Computazionali M
11 novembre 2010
Davide Bellettini MyJOrganizer - strumento di gestione task list 1 / 23
2. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Outline
1 Introduzione
2 Analisi e progettazione
Analisi
Il linguaggio
Architettura
3 Implementazione e test
Screenshot
Test
4 Conclusioni
Limiti
Sviluppi futuri
Davide Bellettini MyJOrganizer - strumento di gestione task list 2 / 23
3. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Introduzione
Obiettivi del progetto:
definire un linguaggio che preveda comandi per la
manipolazione di una lista di task, permettendo
l’inserimento, la modifica e la cancellazione di elementi;
realizzare un’interprete per questo linguaggio;
creare un’applicazione desktop (Java/Swing) che fornisca pi`u
viste grafiche dei dati, per evidenziare i differenti aspetti di
interesse;
eseguire comandi leggendoli da standard input o da file;
esportare il contenuto della lista come elenco di comandi;
rendere la lista persistente.
Davide Bellettini MyJOrganizer - strumento di gestione task list 3 / 23
4. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Analisi
Il linguaggio
Architettura
Analisi 1/2
Nell’analisi le entit`a significative che sono emerse sono le seguenti:
Task: `e l’entit`a principale dell’applicazione, rappresenta un
compito da eseguire;
TaskPriority: rappresenta la priorit`a di un task in termini di
urgenza e importanza;
TaskStatus: rappresenta lo stato di lavorazione del task
(aperto, chiuso, annullato, posticipato ecc.);
TaskDependency: rappresenta la dipendenza di sequenza tra
due task (es. “sollevare l’auto con il cric” prima di “smontare
la ruota”).
Davide Bellettini MyJOrganizer - strumento di gestione task list 4 / 23
6. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Analisi
Il linguaggio
Architettura
Il linguaggio
Una tipica frase di inserimento task:
insert task esameLinguaggi:
title: "Linguaggi e Modelli Computazionali M"
description: "Teoria + Progetto"
completion: 90%
urgent: false
important: true
status: "open"
startdate: 2010-09-01
duedate: 2010-11-10
dependencies:
before esameSicurezza
end dependencies
end task
Davide Bellettini MyJOrganizer - strumento di gestione task list 6 / 23
7. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Analisi
Il linguaggio
Architettura
Il linguaggio
Per indicare al sistema che si `e completato un task (impostando il
completamento al 100% e lo stato su “closed”):
done task esameLinguaggi
In alternativa:
update task esameLinguaggi:
set status: "closed"
set completion: 100%
end update
Per eliminare un task:
delete task esameLinguaggi
Davide Bellettini MyJOrganizer - strumento di gestione task list 7 / 23
10. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Analisi
Il linguaggio
Architettura
Grammatica
Simboli non terminali 3/3
DependencyDefinition ::= ( ( <BEFORE> | <AFTER> ) )
<IDENTIFIER>
UpdateField ::= ( <SET> EditableField
| DependencyAdd | DependencyDelete )
EditableField ::= ( TaskTitle | TaskCompletion
| TaskUrgency | TaskImportance
| TaskStatus | TaskStartDate
| TaskDueDate )
DependencyAdd ::= <ADD> <DEPENDENCY>
DependencyDefinition
DependencyDelete ::= <DELETE> <DEPENDENCY>
DependencyDefinition
Per l’elenco dei token si rimanda alla documentazione completa
della grammatica.
Davide Bellettini MyJOrganizer - strumento di gestione task list 10 / 23
11. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Analisi
Il linguaggio
Architettura
Grammatica
Considerazioni:
la grammatica `e di tipo 2 (context-free), in particolare LL(1);
`e possibile utilizzare strumenti automatici per la generazione
del parser (es. JavaCC);
non presenta self-embedding;
il linguaggio prodotto `e quindi di tipo 3 (regolare);
sarebbe possibile definire una grammatica lineare equivalente,
che risulterebbe tuttavia meno comprensibile.
Davide Bellettini MyJOrganizer - strumento di gestione task list 11 / 23
12. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Analisi
Il linguaggio
Architettura
Architettura
Durante la progettazione sono state operate alcune scelte
architetturali:
per la generazione del parser e dell’AST sono stati utilizzati
JavaCC e JTB (mediante un plug-in per Maven);
implementazione secondo il pattern Model-View-Controller;
largo utilizzo di tecnologie standard Java:
JPA (Java Persistence API) per la persistenza dei dati;
JSR 303 (Bean Validation) per la validazione dei dati;
JSR 296 (Swing Application Framework) per la GUI;
MessageBundle per l’internazionalizzazione.
thread dedicato alla lettura dei comandi da console
(adottando TaskCommand come scopo e reinizializzando il
parser dopo ogni comando);
Davide Bellettini MyJOrganizer - strumento di gestione task list 12 / 23
13. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Screenshot
Test
Screenshot 1/8
Vista sorgente (anteprima esportazione)
Davide Bellettini MyJOrganizer - strumento di gestione task list 13 / 23
21. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Screenshot
Test
Test
Le varie parti dell’applicazione sono state testate adottando
approcci differenti:
Per le entit`a principali (Task, TaskPriority, TaskStatus,
TaskDependency) si `e adottato un approccio test-first,
automatizzando i test con l’ausilio di JUnit;
Per quanto riguarda l’interprete s`ı preferito testare
l’applicazione manualmente:
inserendo comandi da console;
leggendo i comandi da file (`e possibile automatizzare questo
tipo di test);
Il comportamento dell’interfaccia grafica `e stato anch’esso
testato manualmente.
Davide Bellettini MyJOrganizer - strumento di gestione task list 21 / 23
22. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Limiti
Sviluppi futuri
Limiti
Il progetto allo stato attuale presenta i seguenti limiti:
l’interfaccia grafica `e adatta pi`u per la visualizzazione che per
la manipolazione della lista;
il sistema `e pensato per un uso individuale, non conosce il
concetto di gruppo di lavoro;
non sono presenti meccanismi di sincronizzazione tra pi`u
postazioni.
Davide Bellettini MyJOrganizer - strumento di gestione task list 22 / 23
23. Introduzione
Analisi e progettazione
Implementazione e test
Conclusioni
Limiti
Sviluppi futuri
Sviluppi futuri
Si individuano come possibili sviluppi futuri:
migliorie dell’interfaccia grafica:
drag & drop;
menu contestuali;
editor in linea;
console integrata;
estensione del linguaggio per aggiungere il concetto di gruppo
di lavoro;
sincronizzazione con servizi di terze parti (es. Google Tasks,
Toodledo ecc.);
statistiche pi`u elaborate;
porting su altre piattaforme (J2ME, Eclipse RCP).
Davide Bellettini MyJOrganizer - strumento di gestione task list 23 / 23