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 | |