| 45 | | [[BR]]''20060819-1310 [SoujaK] [[BR]] |
| 46 | | Le operazioni non devono perrtanto risiedere all'interno del modello, ma all' |
| 47 | | esterno, negli specifici visitor/iterator. Il modello esporra' nella sua |
| 48 | | interfaccia la classica `accept(AbstractVisitor)`. Raggruppare l'interfaccia |
| 49 | | dei visitor permette al modello di essere totalmente indipendente dall'aggiunta |
| 50 | | di nuove operazioni. |
| 51 | | E per quanto riguarda gli iteratori?'' |
| | 45 | [[BR]]20060819-1310 [SoujaK] ''Le operazioni non devono perrtanto risiedere |
| | 46 | all'interno del modello, ma all'esterno, negli specifici visitor/iterator. |
| | 47 | Il modello esporra' nella sua interfaccia la classica |
| | 48 | `accept(AbstractVisitor)`. Raggruppare l'interfaccia dei visitor permette al |
| | 49 | modello di essere totalmente indipendente dall'aggiunta di nuove |
| | 50 | operazioni.'' |
| | 51 | [[BR]] 20060819-1617 [SoujaK] [[BR]] ''E per quanto riguarda gli iteratori?'' |
| 58 | | [[BR]]''20060818-1501 [SoujaK] [[BR]] |
| 59 | | Quali pattern creazionali? E' necessario il redesign di questa sezione, oppure |
| 60 | | la vecchia Factory adempie gia' a questo compito? Volendo si potrebbe pensare a |
| 61 | | soluzioni alternative, ma reputo la cosa a bassa priorita'.'' |
| | 58 | [[BR]] 20060818-1501 [SoujaK] ''Quali pattern creazionali? E' necessario il |
| | 59 | redesign di questa sezione, oppure la vecchia Factory adempie gia' a questo |
| | 60 | compito? Volendo si potrebbe pensare a soluzioni alternative, ma reputo la |
| | 61 | cosa a bassa priorita'.'' |
| 63 | | === Scelte progettuali === |
| | 63 | === Diaro di bordo: dubbi, problemi e conseguenti scelte === |
| | 64 | |
| | 65 | 20060725-1758 [gnappo] [[BR]] |
| | 66 | Le API di manipolazione generiche sono dei getter e setter che agiscono |
| | 67 | sull'intero modello. Per approfondire seguite il |
| | 68 | [http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/EserciziProgetto2.pdf link]. |
| | 69 | Se non bastasse vi rimando all' |
| | 70 | [http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/esercizi/labss_il_model_iterators.zip esempio] |
| | 71 | del prof. Solmi: prestate attenzione alle classi !LanguageEntity e alle varie |
| | 72 | Abstract* (sono particolarmente chiarificatrici). |
| | 79 | 20060820-1238 [SoujaK] [[BR]] |
| | 80 | Natura del modello: la struttura solitamente pensata come un albero di |
| | 81 | espressioni e' rappresentata grazie a campi interni degli oggetti che compongono |
| | 82 | l'aggregato. Si tratta di `List` o `ArrayList` nel caso di nodi non terminali, |
| | 83 | altrimenti tipi specifici (bool, String, int) a seconda del caso. Il problema |
| | 84 | che sorge e' come riuscire a far attraversare un aggregato cosi' eterogeneo da |
| | 85 | un Visitor o da un Iterator. |
| | 86 | '' Forse potrebbe avere senso fare come e' stato fatto per Variante 1, cioe' |
| | 87 | far diventare i campi interni degli !SchemeValue. '' |
| | 88 | |
| | 89 | 20060820-1332 [SoujaK] [[BR]] |
| | 90 | Le API di manipolazione specifica (`getter` e/o `setter`) diventano piu' che mai |
| | 91 | necessari in questa variante, perche' le operazioni sul modello devono essere |
| | 92 | effettuate all'esterno di esso. Affinche' i `Visitor` riescano nel loro intento |
| | 93 | hanno ovviamente bisogno di conoscere l'oggetto che intendono visitare. |
| | 94 | |
| | 95 | 20060820-1817 [SoujaK] [[BR]] |
| | 96 | Durante l'implementazione dei Visitor si pone un problema di natura progettuale: |
| | 97 | chi e` responsabile dell'attraversamento della struttura a oggetti?[[BR]] |
| | 98 | La possibilita' di utilizzare un Iterator esterno e` stata discussa da tutta la |
| | 99 | squadra e non verra' realizzata sebbene si lasci tale facolta' al cliente. |
| | 100 | Rimane pertanto da chiedersi se chi si fa carico dell'iterazione e' la stessa |
| | 101 | struttura ad oggetti (come accade sovente a detta della GoF) oppure i `Visitor` |
| | 102 | (si veda "GoF - ''Design Pattern'' - pagg 340-1). [[BR]] |
| | 103 | Il dott. Solmi, nel suo esempio sui `Visitor` snatura il significato di |
| | 104 | `Visitor` declassandoli a miseri `proxy` usati per evitare di esporre |
| | 105 | pubblicamente le operazioni come `evaluate` o `prettyPrint`. La richiesta di |
| | 106 | chiarimenti, inoltrata al professore esattamente un mese fa (20060720-1854), non |
| | 107 | ha ancora avuto risposte.[[BR]] |
| | 108 | A mio avviso demandare l'attraversamento della struttura a oggetti `Visitor` e' |
| | 109 | la soluzione migliore in termini di eleganza e chiarezza dell'algoritmo di |
| | 110 | visita, dal momento che la sua implementazione risiede, in tutte le sue |
| | 111 | componenti, proprio fra i metodi di visita degli oggetti. [[BR]] |
| | 112 | Faro' cosi'. |
| | 113 | |
| 79 | | * Branch: diventeranno figlie delle Expression ? |
| 80 | | * 20060725-1758 [gnappo] [[BR]] |
| 81 | | Le API di manipolazione generiche sono dei getter e setter che agiscono |
| 82 | | sull'intero modello. Per approfondire seguite il |
| 83 | | [http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/EserciziProgetto2.pdf link]. |
| 84 | | Se non bastasse vi rimando all' |
| 85 | | [http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/esercizi/labss_il_model_iterators.zip esempio] |
| 86 | | del prof. Solmi: prestate attenzione alle classi !LanguageEntity e alle varie |
| 87 | | Abstract* (sono particolarmente chiarificatrici). |
| 88 | | |
| | 123 | |