210 likes | 299 Views
Semântica de Java. Java and the Java Virtual Machine - Definition, Verification, Validation Robert Stark, Joachim Schmid, and Egon Borger Wolfram Schulte. Introdução. Objetivos Definição rigorosa, mas legível Base para padronização de Java (ambiguidades e inconsistencias foram detectadas)
E N D
Semântica de Java Java and the Java Virtual Machine - Definition, Verification, Validation Robert Stark, Joachim Schmid, and Egon Borger Wolfram Schulte
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
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
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
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
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
Abstract State MachinesTipos de Funções • Estáticas • Dinâmicas • Controladas • Monitorada • Interativas • Derivadas
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
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
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
JavaIEstado • 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
JavaITransiçõ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
JavaIExpressõ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
JavaIComandos • Figura 3.3, página 42
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
JavaCEstado • 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
JavaCRegras 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
JavaCRegras de Transição • Expressões • Figura 4.4, página 64 • Comandos • Figura 4.5, página 66
JavaCInicialização • Inicialmente nenhuma classe é inicializada • Inicialização ocorre no primeiro uso ativo • Superclasses devem ser inicializadas antes • O mesmo não ocorre com superinterfaces
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
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