Variante 1 - Prodotti estendibili
Introduzione
- una sorta di framework per lo sviluppo di linguaggi a partire da MiniScheme?
- prodotti aggiungibili a run-time come a tempo di compilazione -> (prototype factory and old factory) under template factory
- unica interfaccia esposta al cliente per la creazione dei prodotti
- riduzione del consumo di memoria: singleton per il factory manager (non per il prototype, cosi il cliente ...) cosiccome
per l'old-factory.
- facilitazione della configurazione dei prodotti al solo tempo di costruzione: ai vari metodi create e' sempre passata una
lista di argomenti. Per quanto concerne la necessita' di configurare i prototipi sara' il cliente stesso a provvedere
ridefinendo il metodo create della prototype factory.
Variante 2 - Operazioni estendibili
Introduzione
- una sorta di framework per lo sviluppo di interpreti per il linguaggio Minischeme
- 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
Modello
- numero di costrutti non soggetto a cambiamenti -> factory under singleton
- le api di manipolazione permettono al visitor l'attraversamento dell'albero
- (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
?)
- implementazioni di default come per
Value
- api di manipolazione generica implementate con enumerazioni invece che con index per aumentare la tipizzazione
Visitor
- la visita e' gestita in maniera autonoma dal visitor, che restituisce il controllo soltanto una volta terminato per intero la visita
- uso di campi interni per permettere il passaggio dell'ambiente di valutazione (un'informazione indispensabile)
- metodo
visit()
overloaded in modo da demandare alla vm la selezione dei metodi nel caso si voglia trattare con Entity
Iterator
- iterator esterni il cliente ha in mano il controllo dell'iterazione
- l'algoritmo di attraversamento risiede all'interno dell'iterator e non all'interno del modello per perseguire l'estendibilita' delle operazioni richieste
- modularizzato in
ModelIterator
(iteratore sull'intero modello) ed EntityIterator
(iteratore sui figli di una entita')
Download in other formats: