Progetto di recupero del corso di Programmazione Internet

Specifiche del progetto di recupero

Funzionalita' del programma.

Il programma deve implementare una semplice agenda telefonica contente informazioni su ditte e persone. L'interazione avviene principalmente attraverso comandi testuali immessi dall'utente.
Attraverso questi comandi l'utente puo' inserire e cancellare dei nominativi ed effettuare semplici ricerche.
All'avvio il programma carica automaticamente la lista dei nominativi dal file agenda.xml se presente nel directory di lavoro corrente. All'uscita i nominativi vengono automaticamente salvati nel file agenda.xml nel directory di lavoro corrente. Il formato di tale file e' specificato nel seguito.

Sintassi dei comandi.

<comando> ::= <nuova_persona> | <nuova_ditta> | <cancella_nominativo> | <lista> | <cerca_nominativo>
<nuova_persona> ::= inserisci persona "<cognome>" "<nome>" "<telefono>"
<nuova_ditta> ::= inserisci ditta "<ragione_sociale>" "<telefono>"
<lista> ::= lista
<cancella_nominativo> ::= cancella <numero>
<cerca_nominativo> ::= cerca "<stringa>"

Dove

<cognome>, <nome>, <telefono>, <ragione_sociale>, <stringa>
sono generiche stringhe e
<numero>
e' un numero intero positivo.

Funzionalita' dei comandi.

inserisci persona: aggiunge la persona specificata alla lista dei nominativi.
inserisci ditta: aggiunge la ditta specificata alla lista dei nominativi.
lista: visualizza tutti i nominativi ordinati secondo cognome e/o ragione sociale facendoli precedere da un numero rappresentante la loro posizione.
cancella: rimuove un nominativo dalla lista. Per indicare il nominativo da rimuovere l'utente specifica il suo numero come specificato dal comando lista.
cerca: visualizza tutti i nominativi per i quali:
  se il nominativo rappresenta una persona la stringa specificata nel comando cerca e' presente all'interno del nome o del cognome
  se il nominativo rappresenta una ditta la stringa specificata nel comando cerca e' presente all'interno della ragione sociale
Tali nominativi devono essere preceduti dallo stesso numero d'ordine che hanno se visualizzati attraverso il comando lista.

Formato del file XML.

Il file agenda.xml deve essere valido rispetto al seguente frammento di DTD:

<!ELEMENT agenda (entry)*>
<!ELEMENT entry (person|company)*>
<!ELEMENT person (lastname, firstname, telnum)>
<!ELEMENT company (companyname, telnum)>
<!ELEMENT lastname (#PCDATA)> 
<!ELEMENT firstname (#PCDATA)> 
<!ELEMENT companyname (#PCDATA)> 
<!ELEMENT telnum (#PCDATA)> 

Modalita' di sviluppo

Usare sempre, per ogni revisione sui sorgenti, il tool RCS effettuando il checkin con commenti adeguati.

Per la compilazione e la generazione dei commenti JavaDOC si deve utilizzare il tool ANT come spiegato a lezione

Gruppi

I gruppi dovranno essere composti da due o tre persone. In casi particolari (es. studenti lavoratori) potrebbero essere accettati anche gruppi da uno previo richiesta con mail alla dott. Turrini.

Modalita' di consegna

Occorre consegnare in formato digitale (mail a turrini@cs.unibo.it) un file in formato jar (per info sul formato jar fare riferimento a: http://developer.java.sun.com/developer/Books/JAR/basics/index.html) contenente:

il file build.xml (contenenti almeno i task javac, javadoc, jar piu' il target di init e di clean e un target help, implementato utilizzando il task echo, che permette di visualizzare il nome dei vari target e cosa fanno)

e le seguenti directory:

• src
contiente i sorgenti del progetto. Si ricorda che i sorgenti devono essere scritti seguendo opportune regole di coding style, devono essere commentati in maniera chiara e non banale.
Es. di commento banale:
i++; // incremento della variabile
es. di commento appropriato:
// ricerca della prima posizione libera
while ((tree[firstFreePosition] != null) && (i < size)) {
  firstFreePosition = (firstFreePosition + 1) % size;
  i++;
}
if (tree[firstFreePosition] != null){
  firstFreePosition = -1;
}

• classes
contenente i file .class con il bytecode risultante dalla compilazione dei sorgenti

• doc
contente la documentazione che deve essere scritta e quindi generata automaticamente utilizzando javadoc. Inoltre occorre aggiungere un documento project.html in formato HTML dove vengono descritte le scelte progettuali effettuate (per esempio: uso di una certa struttura dati piuttosto che un'altra, descrizione per sommi capi della struttura del progetto e del codice sorgente dei metodi piu' importanti )

La documentazione deve essere consegnata anche in formato cartaceo lasciandola nella casella di posta dei dottorandi (che si trova al primo piano del dipartimento di informatica) indirizzata alla dott. Turrini.
Vanno consegnate in forma cartacea i seguenti files:

Ogni file deve essere graffettato nell'angolo in alto a sinistra

I tempi per la consegna della documentazione cartacea sono gli stessi della consegna del progetto.

La directory dei sorgenti deve inoltre contenere anche i file generati con RCS (dei quali e' richiesto solo il formato digitale)

• dist
contenente il file jar da installare. Tale file deve contenere i .class e il file manifest nel quale e' indicato l'entry point.
In sostanza facendo java -jar nome.jar deve venire lanciato il vostro programma.

La mail deve avere subjet "consegna progetto <nomeGruppo>" e in attachment il file <nomeGruppo.jar>. Il nome gruppo deve essere di al massimo 6 digit (lettere o numeri) (puo' essere formato con le sillabe iniziali dei cognomi)
Una volta consegnato, si ricevera' una mail di risposta nella quale verra'
indicato la data e l'ora in cui presentarvi per la discussione del progetto.

Tempi di consegna

La consegna va effettuata almeno 10 giorni prima della data dello scritto dell'appello nel quale si ha intenzione di sostenere l'esame.

Valutazione del progetto

Alla discussione del progetto devono essere presenti tutti i membri del gruppo.
Essa mira ad individuare il livello di comprensione di cio' che e' stato consegnato e l'attiva partecipazione di tutti i membri del gruppo alla realizzazione del progetto.
Ecco un esempio delle domande che potranno essere fatte:
spiegare alcune scelte progettuali
spiegare cosa fa un determinato metodo
spiegare l'organizzazione delle classi
spiegare l'utilizzo che e' stato fatto di RCS e ANT

Modalita' Esame

L'esame e' costituito da un progetto, dalla discussione orale dello stesso, e da uno scritto. Se dopo queste prove la valutazione globale dovesse risultare lievemente insufficiente verra' richiesta un'ulteriore prova orale.

Note.

Prevedendo future funzionalita' l'implementazione realizzata deve essere tale per cui i nominativi che rappresentano delle persone devono memorizzare nome e cognome come due stringhe distinte.

Eventuali comandi errati immessi dall'utente (sintassi errata, riferimenti a numeri di nominativi non esistenti, ecc...) non devono compromettere la funzionalita' del programma e devono risultare in messaggi d'errore chiaramente interpretabili dall'utente.

L'uso di un dtd per validare il file agenda.xml e' decisamente raccomandabile.