Semântica de Java
description
Transcript of Semântica de Java
DI
UFPE
Semântica de Java
Java and the Java Virtual Machine - Definition, Verification, Validation
Robert Stark, Joachim Schmid, and Egon Borger
Wolfram Schulte
DI
UFPE
Introdução
Objetivos
Definição rigorosa, mas legível
Base para padronização de Java (ambiguidades e
inconsistencias foram detectadas)
Especificação e avaliação de extensões de Java
Análise e comparação de implementações de Java
Modelo passível de tratamento automático
Validação de esquemas de compilação e de
propriedades de segurança
DI
UFPE
Introdução Requerimentos
Validação por inspeção Técnica de modelagem que:
Expresse conceitos básicos Modele ações básicas de forma abstrata
Abstract State Machines (ASM) Gurevich- Evolving Algebras Semântica operacional em que estados são definidos
algebricamente Pseudo-code envolvendo tipos de dados abstratos
DI
UFPE
Introdução Interpretador de programas Java
“Parsing” Elaboração: tipos e formação Execução
Carga, ligação e execução Semântica dinâmica
Jumps Exceções Concorrência
DI
UFPE
Introdução Características do modelo
Orientado a processo ao invés da sintaxe Separação de aspectos estáticos e dinâmicos
Métodos estruturados Semântica operacional estruturada, semântica natural,
semântica de ações, etc. Adequados para linguagens cujo fluxo de controle segue
a árvore sintática Nenhuma vantagem quando:
Ambientes são mais complexos Concorrência é considerada
DI
UFPE
Abstract State Machines
Estado: estrutura matemática
Conjunto de regras de transição da forma
if Condition then Updates
Condition: predicado
Updates: conjunto de
f(t1,...,tn) := t
Execução: noção tradicional
DI
UFPE
Abstract State MachinesTipos de Funções
Estáticas
Dinâmicas
Controladas
Monitorada
Interativas
Derivadas
DI
UFPE
Abstract State MachinesFormas Especiais de Regras forall x with Condition do Rule choose x with Condition do Rule
Além disso where let if then else Parametrização
DI
UFPE
Visão geral
Cinco sublinguagens
Isolamento de características ortogonais
Imperativas - JavaI
Procedimentais (baseadas em objetos) - JavaC
Orientadas a objetos - Javao
Tratamento de exceções - JavaE
Concorrência - JavaT
DI
UFPE
JavaI
Sintaxe Página 35, Figura 3.1 Programa anotado, como em tempo de execução
Modelo de execução Passeio pelos nós da árvore sintática de um
programa Em cada nó
Uma tarefa é executada Prosseguimento para a próxima tarefa
DI
UFPE
JavaI
Estado Contador de programas abstrato: programa a ser
executado
pos : Pos
restbody: Pos Phrase
Ambiente
locals: Locals
type Locals = Map(Loc Val)
Estado: restbody, post, locals
DI
UFPE
JavaI
Transições Regras de transição: mudanças de estado devido a
Avaliação de expressões Execução de comandos
Estado inicial Determinado por uma phrase dada restbody = a frase pos = posição inicial locals vazio
Execução termina: nenhuma regra é aplicável
DI
UFPE
JavaI
Expressões
Expressões Ordem de avaliação
Da esquerda para direita, de dentro para fora context e yield e yieldUp
Figura 3.2, página 41
DI
UFPE
JavaI
Comandos
Figura 3.3, página 42
DI
UFPE
JavaC
Linguagem com módulos
Sintaxe: páginas 48- 49, Figura 4.3, página 50, 51-52
Informações de tipo já inseridas em tempo de compilação
Ambiente de classes estático
Definido por funções: página 62
DI
UFPE
JavaC
Estado Mais componentes de estado
initialized
globals
Chamada de métods
type Frame = (Class/Msig, Phrase,Pos,Locals)
frames: Frame*
Mais Abr para mudança abrupta de fluxo
DI
UFPE
JavaC
Regras de Transição
Todas as regras de JavaI com
Ambiente definido pelo programa dado
Todos os atributos inicializados com valores “default”
Início
public static void main()
body, restbody, pos, locals
DI
UFPE
JavaC
Regras de Transição
Expressões
Figura 4.4, página 64
Comandos
Figura 4.5, página 66
DI
UFPE
JavaC
Inicialização
Inicialmente nenhuma classe é inicializada
Inicialização ocorre no primeiro uso ativo
Superclasses devem ser inicializadas antes
O mesmo não ocorre com superinterfaces
DI
UFPE
JavaO
Sintaxe: Figura 5.1, página 73 Ambiente
instanceFields defaultVal type lookup
Estado type Val = ... | Ref | Null data Heap = Object(Class,Map(Class/Field,Val)) heap: Ref Heap
Regras de transição: Figura 5.2, página 81
DI
UFPE
JavaE
Sintaxe: Figura 6.1, página 88
data Abr = Break(Lab) | Continue(Lab) |
Return | Return(Val) | Exc(Ref)
Regras de transição:
Figura 6.2, página 91
Figura 6.3, página 93