Jass - Java with assertions Sérgio Soares. zAssertions descrevem propriedades que devem ser verdadeiras em determinados pontos da execução do programa.

Slides:



Advertisements
Apresentações semelhantes
Programação Orientada a Objetos*
Advertisements

Sistemas Concorrentes com CSP e Java
Estruturas de Repetição
Orientação a Objetos: Modificador Final para Métodos e Classes
Linguagens de Programação Orientadas a Objetos
Programação Básica em Java
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Polimorfismo e Classes Abstratas Profa
A linguagem C#.
Classes e objetos P. O. O. Prof. Grace.
CRIANDO OBJETOS EM JAVA
Departamento de Estatística e Informática
Programação Orientada a Objetos com Java
PLC – Introdução a POO Java
OO-SC (Meyer) - Cap 121 OO-SC (MEYER) Quando o contrato é quebrado: tratamento de exceções.
GEJAVA IV SCJA – Certificação Sun java associado exame cx
Interfaces.
Atributos, Encapsulamento e Interface em Java
OO-SC (Meyer) - Cap 111 OO-SC (MEYER) Desenho por Contrato Construindo software confiável.
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Introdução à Programação Orientada a Objetos com Java
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Os métodos equals() e hashCode()
Generic Programming Daniel Terzella Leandro Amancio
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta.
Pilhas Profa. Nádia Félix.
Módulo I Capítulo 4: Operador de Repetição
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Iteração – Capítulo 5 Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Integrantes: Alex Motta Carlos Nascimento Paulo Maia.
Introdução à Linguagem C
Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Polimorfismo.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Coleções, Genéricos, Threads Marco Antonio. Collection Principais métodos da interface Collection.
Classes Abstratas e Interface
Aula Prática 1 Monitoria IP/CC (~if669). Roteiro 1.Polimorfismo 2.Superclasses Abstratas 3.Dúvidas 4.Exercício.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Módulo 9 Strings , Coleções e I/O
Programação I Aula 4 (Expressões Booleanas e Expressões de Seleção) Prof. Gilberto Irajá Müller Última atualização 17/3/2009.
Removing Unnecessary Synchronization in Java Sérgio Soares Gente.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Exemplo de desenvolvimento com testes (JUNIT - estudo de caso) Alfredo Goldman.
Construtores e Destrutores
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Paradigmas da Programação – Semestre 1 – Aula 8 Professor: Eduardo Mantovani )
Bruno Inojosa MCP .NET Framework
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Modificadores Programação II.
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Herança.
Conceitos de OO em Java Parte I
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Jass - Java with assertions Sérgio Soares

zAssertions descrevem propriedades que devem ser verdadeiras em determinados pontos da execução do programa yEspecificação formal como parte da linguagem yEspecificação documentada no código Jass

zChecagem em tempo de execução yPrecondições e poscondições yInvariantes (de classe e de loop) e variantes (de loop) yTratamento de violação de assertions (rescue e retry) zExceções indicam violação das condições. zPrecompilador traduz assertions em comandos Java. Jass

zrequire precondição zensure poscondição zìnvariant de classe ou loop zvariant de loop (deve ser positivo e decrescente com a execução do loop) zcheck verifica assertions em qualquer parte do código zrescue bloco executado caso assertion seja false zretry executa novamente o método (só pode ser utilizado dentro do bloco rescue) Comandos de Jass

Exemplos de Assertions /** require a!=0 **/ /** require a!=0; isEven(a) **/ /** require -1 > c.m() **/

zDefinições recursivas yChamar o método que declara a assertion direta ou indiretamente. zSe um método é chamado durante a avaliação de uma assertion e neste método é declarada uma assertion, está não é avaliada. Restrições de Assertions

Construtores especiais zOld(poscondição) yrepresenta o estado inicial do objeto antes da execução do método yo método clone deve ser implementado zchangeonly (poscondição) ylimita a alteração de atributos da classe yos atributos do objeto são comparados com os de Old pelo método equals, o qual deve ser rescrito

public void addElement (Object o) { /** require !isFull(); o != null; **/ buffer[in % buffer.length] = o; in++; /** ensure changeonly{in,buffer}; Old.in == in - 1; **/ } Exemplo de Assertion

Implementação das assertions zNo caso de chamada de métodos na definição da assertion yO corpo do método é copiado em uma versão sem assertions zO invariante de classe vira um método que é chamado na precondição e na poscondição. zEm loops o invariante é checado a cada execução e é criada uma variável para armazenar o variante. zChecks são expandidos como macros

Refinamento zPara cada método sobrescrito: ySe o método abstrato e aplicável o concreto também pode ser chamado yO método concreto é mais determinístico yO invariante da superclasse deve ser válido onde o da subclasse se aplique

Refinamento zEnfraquecer a precondição ypre_a -> pre_c zFortalecer a poscondição ymais restrições (determinismo)

public void addElement (Object o) { /** require !isFull(); o != null; **/ buffer[in % buffer.length] = o; in++; /** ensure changeonly{in,buffer}; Old.in == in - 1; **/ } public void addElement (Object o) { /** require !isFull(); **/ if (o==null) buffer[in % buffer.length] = new Default(); else buffer[in % buffer.length] = o; in++; /** ensure changeonly{in,buffer}; Old.in == in - 1; o!=null ? contains(o) : true; **/ }

Passos para refinar métodos zImplementar a interface jass.runtime.refinement zImplementar a função de “abstração” jassGetSuperState()

public class UnlimitedBuffer {... private Buffer jassGetSuperState() { Buffer b = new Buffer(v.size()+1); b.in = v.size(); b.out = 0; for (int i = 0; i < b.buffer.length-1; i++) b.buffer[i] = v.elementAt(i); return b; } Passos para refinar métodos

Referencias zJass: Java with assertions, May oldenburg.de/~jass.