Documente Academic
Documente Profesional
Documente Cultură
Abstractos
Fac. Cincias Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Hoje
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Construo e observao
! As especificaes definem tipos de dados, chamados
gneros (sorts).
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Especificao de um Stack
specification
sorts
Stack
constructors
make: > Stack;
push : Stack Element > Stack ;
observers
top: Stack >? Element ;
pop: Stack >? Stack;
isEmpty: Stack ;
domains
S: Stack ;
top (S) if not isEmpty (S);
pop (S) if not isEmpty (S);
axioms
S: Stack ; E: Element ;
top (push (S, E)) = E;
pop (push (S, E)) = S;
isEmpty (make ()) ;
not isEmpty (push (S, E));
end specification"
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Por exemplo:
!
!
! Outro exemplo
! make: Stack
!
Constri um Stack sem elementos, no requer input
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Tipos de operaes
!
Fac. Cincias
Univ. Lisboa
Observers
!
Dois observers:
! top, que devolve o elemento de topo no Stack
! Pop, que devolve o Stack obtido por remoo do
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Predicates (predicados)
!
seta:
isEmpty: Stack;
! serve para inquirir se um Stack no contm elementos
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Operaes parciais
!
domains#
! S: Stack#
! top(S) if not isEmpty(S);#
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Axiomas
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Definio de Axiomas
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Axiomas
!
! Outro:
! pop (push(S, E)) = S;#
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Mais axiomas
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
iff
isEmpty(S) if size(S) = 0;#
! not isEmpty(S) if size(S) != 0;#
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Observers ou Others?
! size observers #isEmpty others#
!
Axioma mais conciso
!
isEmpty(S) iff size(S) = 0;
! size observers #isEmptyobservers#
! Mas as propriedades dos observers tm que ser expressas
contra os constructors:
! isEmpty(make());#
! not isEmpty(push(S,E));#
!
isEmpty uma operao derivada (de size()=0)#
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Especificao de Element
! O que se pede ao gnero (sort) Element?
! Na verdade nada, apenas que exista.
! A especificao de Element pode ser a mais simples
possvel:
! specification
sorts
Element
end specification"
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Fac. Cincias
Univ. Lisboa
Mdulos (modules)
! O significado dos smbolos externos a uma especificao (ex.
Fac. Cincias
Univ. Lisboa
}#
public
public
public
public
public
public
public
public
public
...
RevolutionaryStack () {...};
void push (Object e) {...};
void pop () {...};
Object peek () {...};
int Size () {...};
boolean empty () {...};
boolean equals (Object other) {...};
boolean empty () {...};
void clone () {...};
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Verificao
!
RevolutionaryStack.java e Object ?
!
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa
Refinement binding
refinement
Element is class Object
Stack is class RevolutionaryStack {
make: Stack is RevolutionaryStack();
push: Stack e: Element > Stack is
void push(Object e) ;
pop: Stack ? Stack is void pop();
top: Stack ? Element is Object peek();
isEmpty: Stack is boolean isEmpty();
size: Stack int is int size ();
end refinement
Luis Antunes
Algoritmos e Estruturas de Dados 2010-2011
Fac. Cincias
Univ. Lisboa