Changes between Version 8 and Version 9 of Variante2


Ignore:
Timestamp:
Aug 20, 2006, 8:47:29 PM (18 years ago)
Author:
soujak
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Variante2

    v8 v9  
    4343 * L'aggiunta di una operazione non deve richiedere nessun
    4444   cambiamento al modello
    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?''
    5252
    5353Le scelte di design devono essere imposte al cliente.
     
    5656 * Il codice e i pattern non conformi a questa specifica non
    5757   devono fare parte del sistema fornito
    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'.''
    6262
    63 === Scelte progettuali ===
     63=== Diaro di bordo: dubbi, problemi e conseguenti scelte ===
     64
     6520060725-1758 [gnappo] [[BR]]
     66Le API di manipolazione generiche sono dei getter e setter che agiscono
     67sull'intero modello. Per approfondire seguite il
     68[http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/EserciziProgetto2.pdf link].
     69Se non bastasse vi rimando all'
     70[http://www.cs.unibo.it/~solmi/teaching/labss_2005-2006/esercizi/labss_il_model_iterators.zip esempio]
     71del prof. Solmi: prestate attenzione alle classi !LanguageEntity e alle varie
     72Abstract* (sono particolarmente chiarificatrici).
    6473
    657420060818-1918 [SoujaK] [[BR]]
     
    6877sollevamento di un eccezione).
    6978
     7920060820-1238 [SoujaK] [[BR]]
     80Natura del modello: la struttura solitamente pensata come un albero di
     81espressioni e' rappresentata grazie a campi interni degli oggetti che compongono
     82l'aggregato. Si tratta di `List` o `ArrayList` nel caso di nodi non terminali,
     83altrimenti tipi specifici (bool, String, int) a seconda del caso. Il problema
     84che sorge e' come riuscire a far attraversare un aggregato cosi' eterogeneo da
     85un Visitor o da un Iterator.
     86'' Forse potrebbe avere senso fare come e' stato fatto per Variante 1, cioe'
     87far diventare i campi interni degli !SchemeValue. ''
     88
     8920060820-1332 [SoujaK] [[BR]]
     90Le API di manipolazione specifica (`getter` e/o `setter`) diventano piu' che mai
     91necessari in questa variante, perche' le operazioni sul modello devono essere
     92effettuate all'esterno di esso. Affinche' i `Visitor` riescano nel loro intento
     93hanno ovviamente bisogno di conoscere l'oggetto che intendono visitare.
     94
     9520060820-1817 [SoujaK] [[BR]]
     96Durante l'implementazione dei Visitor si pone un problema di natura progettuale:
     97chi e` responsabile dell'attraversamento della struttura a oggetti?[[BR]]
     98La possibilita' di utilizzare un Iterator esterno e` stata discussa da tutta la
     99squadra e non verra' realizzata sebbene si lasci tale facolta' al cliente.
     100Rimane pertanto da chiedersi se chi si fa carico dell'iterazione e' la stessa
     101struttura ad oggetti (come accade sovente a detta della GoF) oppure i `Visitor`
     102(si veda "GoF - ''Design Pattern'' - pagg 340-1). [[BR]]
     103Il dott. Solmi, nel suo esempio sui `Visitor` snatura il significato di
     104`Visitor` declassandoli a miseri `proxy` usati per evitare di esporre
     105pubblicamente le operazioni come `evaluate` o `prettyPrint`. La richiesta di
     106chiarimenti, inoltrata al professore esattamente un mese fa (20060720-1854), non
     107ha ancora avuto risposte.[[BR]]
     108A mio avviso demandare l'attraversamento della struttura a oggetti `Visitor` e'
     109la soluzione migliore in termini di eleganza e chiarezza dell'algoritmo di
     110visita, dal momento che la sua implementazione risiede, in tutte le sue
     111componenti, proprio fra i metodi di visita degli oggetti. [[BR]]
     112Faro' cosi'.
     113 
    70114=== Appunti vari ===
    71115
     
    77121   `getter` e `setter`) per permettere all'iteratore di accedere in maniera
    78122   indiretta ai campi di istanza.
    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 
    89124
    90125
    91126=== Operazioni aggiunte ===
    92127Questo e' il posto in cui rendere note le proprie scelte.
     128