Linguagem Imperativa 2 com
Design by Contract
Alunos: Bruno Moreno <[email protected]>
José Elias Queiroga <[email protected]>
Yuri Malheiros <[email protected]>
Samara Martins <[email protected]>
Prof.: Augusto Sampaio
1
Roteiro
 O que é DbC
 Linguagens com DbC
 Exemplo de Uso
 Linguagem imperativa 2 com DbC
 BNF
 Código com DbC
2
Introdução ao DbC
Design by Contract (DbC) ou
Programming by Contract
Criado por Bertand Meyer
implementado no Eiffel.
Definição de contratos.
Hoare logic – {P}
C {Q}
3
Linguagens com DbC
 Eifeel (DbC nativo)
 Lisaac (DbC nativo)
 Nice (DbC nativo)
 PLP LI2 (DbC nativo)
 Java - JML, Contract4J, Jcontractor, C4J
 Ruby – Ruby Contract
 Python - PyDBC
 C# - Code contract
4
Exemplo com JML
pubic class DBCteste{
int var = 0;
//@ invariant var < 20;
//@ pre x > -1 && y > -1;
//@ post \result < 1000;
public static int soma(int x, int y){
int resultado = x + y;
var = resultado + 10;
return resultado;
}
}
DBCteste.soma(10, 10);
5
Linguagem Imperativa 2 - BNF
Declaracao ::= DeclaracaoVariavel
| DeclaracaoVariavelDbC
| DeclaracaoProcedimento
| DeclaracaoProcedimentoDbC
| DeclaracaoComposta
DeclaracaoVariavel ::= "var" Id "=" Expressao [DeclaracaoVariavelDbC]
DeclaracaoVariavelDbC ::= @inv Expressao
DeclaracaoComposta ::= Declaracao "," Declaracao
DeclaracaoProcedimento ::= "proc" Id "(" [ ListaDeclaracaoParametro ] ")" "{" Comando "}"
DeclaracaoProcedimentoDbC ::= @ DeclaracaoDbC DeclaracaoProcedimento
DeclaracaoDbC ::= ParametroDbC | ParametroDbC @ DeclaracaoDbC
ParametroDbC ::= pre Expressao | pos Expressao
6
Linguagem Imperativa 2
{
var x = 0,
var y = 1,
proc teste(int z){
write("The number is:");
write(z);
x := z;
y := z + 3
};
call teste(2)
}
X é sempre
será menor que
10.
Y é sempre
maior que 0,
menor que 10 e
diferente de 5;
O argumento do
procedimento tem que
ser positivo.
7
Linguagem Imperativa 2
{
var x = 0 @inv x > 0,
var y = 1 @inv (y > 0 and y <= 10) and y != 5,
@pre z > -1,
@pos x < 20
proc teste(int z){
write("The number is:");
write(z);
x := z
y := z + 3
};
call teste(2)
}
8
Questions, Please !
9
Download

DbC nativo