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 soloExpression
(eDefinition
?) - 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 conEntity
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) edEntityIterator
(iteratore sui figli di una entita')
Last modified 18 years ago
Last modified on Sep 29, 2006, 11:47:18 AM