1 | | = 1 = |
2 | | * prodotti aggiungibili a run-time come a tempo di compilazione -> (prototype factory and old factory) under template factory |
3 | | * unica interfaccia esposta al cliente per la creazione dei prodotti |
4 | | * riduzione del consumo di memoria: singleton per il factory manager (non per il prototype, cosi il cliente ...) cosiccome |
5 | | per l'old-factory. |
6 | | * facilitazione della configurazione dei prodotti al solo tempo di costruzione: ai vari metodi create e' sempre passata una |
7 | | lista di argomenti. Per quanto concerne la necessita' di configurare i prototipi sara' il cliente stesso a provvedere |
8 | | ridefinendo il metodo create della prototype factory. |
| 1 | = Variante 1 - Prodotti estendibili = |
10 | | = 2 = |
| 3 | === Introduzione === |
| 4 | * una sorta di framework per lo sviluppo di linguaggi a partire da MiniScheme |
| 5 | * prodotti aggiungibili a run-time come a tempo di compilazione -> (prototype factory and old factory) under template factory |
| 6 | * unica interfaccia esposta al cliente per la creazione dei prodotti |
| 7 | * riduzione del consumo di memoria: singleton per il factory manager (non per il prototype, cosi il cliente ...) cosiccome |
| 8 | per l'old-factory. |
| 9 | * facilitazione della configurazione dei prodotti al solo tempo di costruzione: ai vari metodi create e' sempre passata una |
| 10 | lista di argomenti. Per quanto concerne la necessita' di configurare i prototipi sara' il cliente stesso a provvedere |
| 11 | ridefinendo il metodo create della prototype factory. |
12 | | * operazioni polimorfe e modulari sul modello -> visitor (modualrita'++ e algoritmo esterno al modello) |
13 | | * la visita e` gestita in maniera autonoma dal visitor, che restituisce il controllo soltanto una volta terminato per intero la visita |
14 | | * numero di costrutti non soggetto a cambiamenti -> abstract factory under singleton |
15 | | * api specifiche permettono al visitor l'attraversamneto dell'albero |
16 | | * iterator esterni (algoritmo esterno :)) |
| 13 | = Variante 2 - Operazioni estendibili = |
| 14 | |
| 15 | === Introduzione === |
| 16 | * una sorta di framework per lo sviluppo di interpreti per il linguaggio Minischeme |
| 17 | * estendibilita' delle operazioni -> rendere indipendente il modello dalle relative operazioni (attaccare il concetto di incapsulamento fra dati e operazioni, croce e delizia del paradigma a oggetti) -> mezzi utilizzati: esternare ogni algoritmo dal modello e dove possibile, rendere le operazioni modualari |
| 18 | |
| 19 | == Modello == |
| 20 | * numero di costrutti non soggetto a cambiamenti -> factory under singleton |
| 21 | * le api di manipolazione permettono al visitor l'attraversamento dell'albero |
| 22 | * (albero eterogeneo && obiettivi di iterazione e visita polimorfica) -> aggiunta di `Entity` per permettere al cliente completa liberta' sebbene all'`Interpreter` interessino solo `Expression` (e ` Definition`?) |
| 23 | * implementazioni di default come per `Value` |
| 24 | * api di manipolazione generica implementate con enumerazioni invece che con index per aumentare la tipizzazione |
| 25 | |
| 26 | == Visitor == |
| 27 | * la visita e' gestita in maniera autonoma dal visitor, che restituisce il controllo soltanto una volta terminato per intero la visita |
| 28 | * uso di campi interni per permettere il passaggio dell'ambiente di valutazione (un'informazione indispensabile) |
| 29 | * metodo `visit()` overloaded in modo da demandare alla vm la selezione dei metodi nel caso si voglia trattare con `Entity` |
| 30 | |
| 31 | == Iterator == |
| 32 | * iterator esterni il cliente ha in mano il controllo dell'iterazione |
| 33 | * l'algoritmo di attraversamento risiede all'interno dell'iterator e non all'interno del modello per perseguire l'estendibilita' delle operazioni richieste |
| 34 | * modularizzato in `ModelIterator` (iteratore sull'intero modello) ed `EntityIterator` (iteratore sui figli di una entita') |