Sommario Sommario Sommario Valutazione di espressioni RPN

Sommario
Sommario
Protocollo
Esempio 1
esempio: stack (ma non solo...)
valutazione di espressioni RPN
vantaggi della programmazione imperativa
Astrazione sui dati
(economia di risorse)
stack come oggetto immutabile (link)
programmazione nello stile funzionale
Esempio 2
sottosequenza comune più lunga
Astrazione relativa allo stato
stack come oggetto che evolve (array)
vantaggi della programmazione funzionale
programmazione nello stile imperativo
(trasparenza referenziale)
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 1
Sommario
Settembre 2005,
Diapositiva 2
Valutazione di espressioni RPN
ItemSequence rpn = espressione RPN;
Stack stack = pila vuota;
Inoltre, primi esempi di:
while ( ci sono ancora elementi di rpn ) {
interfacce
Item item = successivo elemento di rpn;
classi astratte
if ( item è un valore ) {
inserisci item nello stack;
} else if ( item è una operazione ) {
esegui l'operazione nello stack;
}
}
// lo stack contiene il risultato
eredità
polimorfismo
Università di Udine
Dipartimento di Matematica e Informatica
Università di Udine
Dipartimento di Matem atica e Informatica
Settembre 2005,
Diapositiva 3
Università di Udine
Dipartimento di Matem atica e Informatica
Settembre 2005,
Diapositiva 4
Protocollo: Stack
Protocollo: Stack
Il tipo è caratterizzato dalle operazioni
Acquisizione di informazioni
Costruttore (stack vuoto)
new :
Stack
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 5
Protocollo: Stack
pop :
apply :
Università di Udine
Dipartimento di Matematica e Informatica
Stack x Item
Stack
Stack x Oper
Stack
boolean
size :
Stack
int
top :
Stack
Item
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 6
Settembre 2005,
Diapositiva 8
Modelli realizzativi
Creazione di nuove strutture
push :
empty :
Funzionale "puro"
Stack
static boolean empty( Stack stk )
Stack
static int size( Stack stk )
Stack
static Item top( Stack stk )
Settembre 2005,
Diapositiva 7
Università di Udine
Dipartimento di Matematica e Informatica
Modelli realizzativi
Modelli realizzativi
Funzionale "puro"
Funzionale "OOP"
static Stack push( Item itm, Stack stk )
boolean empty()
stk.empty()
static Stack pop( Stack stk )
int size()
stk.size()
static Stack apply( Oper opr, Stack stk )
Item top()
stk.top()
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 9
Modelli realizzativi
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Modelli realizzativi
Funzionale "OOP"
Imperativo "OOP"
Stack push( Item itm )
stk.push(x)
boolean empty()
stk.empty()
Stack pop()
stk.pop()
int size()
stk.size()
Stack apply( Oper opr )
stk.apply(o)
Item top()
stk.top()
Università di Udine
Dipartimento di Matematica e Informatica
Diapositiva 10
Settembre 2005,
Diapositiva 11
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 12
Modelli realizzativi
Valutazione di espressioni RPN
ItemSequence rpn = espressione RPN;
Stack stack = new EvalStack();
Imperativo "OOP" (oggetti che evolvono)
while ( ci sono ancora elementi di rpn ) {
void push( Item itm )
stk.push(x)
void pop()
stk.pop()
void apply( Oper opr )
stk.apply(o)
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Item item = successivo elemento di rpn;
if ( item è un valore ) {
stack = stack.push(item);
} else if ( item è una operazione ) {
stack = ((EvalStack)stack).apply(item);
}
}
// stack.top() rappresenta il risultato
Diapositiva 13
Protocollo: ItemSequence
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 14
Valutazione di espressioni RPN
ItemSequence rpn = ... ... ;
Stack stack = new EvalStack();
Il protocollo puo rimanere astratto: interfaccia
while ( rpn.hasMoreItems() ) {
Item item = rpn.nextItem();
public abstract boolean hasMoreItems();
if ( item instanceof Value ) {
stack = stack.push(item);
} else if ( instanceof Operation ) {
stack = (...).apply((Operation) item);
}
}
// stack.top() rappresenta il risultato
public abstract Item nextItem();
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 15
Università di Udine
Dipartimento di Matematica e Informatica
Settembre 2005,
Diapositiva 16
Sviluppo Top-down
Operazioni nello stile Smalltalk
ItemSequence rpn = new RPNTail(exp);
Stack stack = new EvalStack();
OOP "pura"
while ( rpn.hasMoreItems() ) {
Item item = rpn.nextItem();
itm3 = itm1.apply( opr, itm2 );
if ( item instanceof Value ) {
stack = stack.push(item);
} else if ( instanceof Operation ) {
stack = (...).apply((Operation) item);
}
}
// stack.top() rappresenta il risultato
Università di Udine
Di parti mento di Matemati ca e Informati ca
S ettembre 2005,
Diaposi tiva 17
sum = first.plus( second );
Uni versità di Udine
Di par ti mento di Matematica e I nformati ca
Realizzazione delle classi...
Settembre 20 05, Diaposi tiva 18
Esercizio
Variante delle classi "Stack" e "EvalStack"
tali ch e i metodi top() e pop()
siano realizzati da un’unica operazione:
Item pop()
Università di Udine
Di parti mento di Matemati ca e Informati ca
S ettembre 2005,
Diaposi tiva 19
Uni versità di Udine
Di par ti mento di Matematica e I nformati ca
Settembre 20 05, Diaposi tiva 20