| | 5 | === Note preliminari sul documento === |
| | 6 | Questo documento intende essere punto di riferimento in fase di sviluppo e germe |
| | 7 | della documentazione che accompagnera` il progetto. |
| | 8 | |
| | 9 | Questo documento e` presente in duplice copia: fra i sorgenti in modo da essere |
| | 10 | facilmente editabile e leggibile in fase di sviluppo, e sul wiki |
| | 11 | [src:/branches/var2/doc/Appunti] e nel wiki [wiki:Variante2] per aumentarne la |
| | 12 | facilita` di utilizzo. Dal momento che i commenti sul wiki possono essere |
| | 13 | lasciati anche da chi non segue direttamente lo sviluppo, l'utilizzo del file |
| | 14 | presente nei sorgenti e` da ritenersi una copia della pagina wiki; pertanto |
| | 15 | chi effettua modifiche al primo si dovra` preoccupare di sincronizzarlo |
| | 16 | tempestivamente con il secondo. |
| | 17 | |
| | 18 | In caso di divergenze di opinioni su una sezione e` preferibile il commento |
| | 19 | pittosto della brutale modifica, in modo da tenere traccia delle considerazioni |
| | 20 | fatte. Convenzioni utili per i commenti: |
| | 21 | * posporli alla sezione a cui fanno riferimento; |
| | 22 | * usare il carattere ''corsivo'' per indivduarli facilmente; |
| | 23 | * premettere il nome dell'autore accompagnato dalla data. |
| | 24 | |
| | 25 | |
| | 26 | === Specifiche === |
| | 27 | |
| | 28 | Si assuma che il numero e la struttura dei costrutti del |
| | 29 | linguaggio MiniScheme sia dato e non soggetto a |
| | 30 | cambiamenti: |
| | 31 | * Si fornisca l’implementazione di tutti i costrutti originali |
| | 32 | |
| | 33 | Si assuma che il numero delle operazioni polimorfe sia |
| | 34 | destinato ad evolvere rapidamente |
| | 35 | * Si fornisca un interprete e una prettyPrint modulari |
| | 36 | |
| | 37 | Il modello deve supportare la definizione modulare di |
| | 38 | operazioni. |
| | 39 | * Si vuole supportare la definizione di operazioni modulari sia |
| | 40 | sotto forma di visitors che di iteratori |
| | 41 | * Il modello deve fornire API di manipolazione specifiche e |
| | 42 | generiche |
| | 43 | * L’aggiunta di una operazione non deve richiedere nessun |
| | 44 | cambiamento al modello |
| | 45 | |
| | 46 | Le scelte di design devono essere imposte al cliente. |
| | 47 | * Si vuole imporre al cliente l’uso dei pattern stabiliti (in |
| | 48 | particolare quelli creazionali) |
| | 49 | * Il codice e i pattern non conformi a questa specifica non |
| | 50 | devono fare parte del sistema fornito |
| | 51 | [[BR]]''SoujaK 200608181501 [[BR]] |
| | 52 | Quali pattern creazionali? E` necessario il redesign di questa sezione, oppure |
| | 53 | la vecchia Factory adempie gia` a questo compito? Volendo si potrebbe pensare a |
| | 54 | soluzioni alternative, ma reputo la cosa a bassa priorita`. |
| | 55 | |
| | 56 | === Scelte progettuali === |
| | 57 | |
| | 58 | |
| 6 | | * I nostri due visitor (!PrettyPrintVisitor e !InterpreterVisitor) conoscono direttamente la natura dell'albero di espressioni su cui lavorano. Al cliente e' chiaramente lasciata la possibilita' di usare un iterator. |
| 7 | | * Le Expression$NAME vanno arricchite con API di manipolazione specifica (i.e. `getter` e `setter`) per permettere all'iteratore di accedere in maniera indiretta ai campi di istanza. |
| | 62 | * I nostri due visitor (!PrettyPrintVisitor e !InterpreterVisitor) conoscono |
| | 63 | direttamente la natura dell'albero di espressioni su cui lavorano. Al cliente |
| | 64 | e' chiaramente lasciata la possibilita' di usare un iterator. |
| | 65 | * Le Expression$NAME vanno arricchite con API di manipolazione specifica (i.e. |
| | 66 | `getter` e `setter`) per permettere all'iteratore di accedere in maniera |
| | 67 | indiretta ai campi di istanza. |
| 9 | | * (200607251758 - gnappo) [[BR]]Le API di manipolazione generiche sono dei getter e setter che agiscono sull'intero modello. Per approfondire seguite il [http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/EserciziProgetto2.pdf link]. Se non bastasse vi rimando all'[http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/esercizi/labss_il_model_iterators.zip esempio] del prof. Solmi: prestate attenzione alle classi !LanguageEntity e alle varie Abstract* (sono particolarmente chiarificatrici). |
| | 69 | * gnappo 200607251758 [[BR]] |
| | 70 | Le API di manipolazione generiche sono dei getter e setter che agiscono |
| | 71 | sull'intero modello. Per approfondire seguite il |
| | 72 | [http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/EserciziProgetto2.pdf |
| | 73 | link]. Se non bastasse vi rimando all'[http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/esercizi/labss_il_model_iterators.zip esempio] |
| | 74 | del prof. Solmi: prestate attenzione alle classi !LanguageEntity e alle varie |
| | 75 | Abstract* (sono particolarmente chiarificatrici). |