Arquivar por categoria Padrões de Projeto
Exemplo Simples de Design by Contracts
Postado por Ronneesley como Linguagem Nice, Padrões de Projeto em 25 de março de 2009
Como havia comentado anteriormente, Design by Contracts serve para estabelecer um contrato entre o cliente (quem chama uma rotina) e o fornecedor (quem executa uma rotina), abaixo segue um exemplo bem simples da implementação do padrão, na linguagem Nice.
/**
* Classe para calculos de exemplo da folha
*/
class Folha {
/**
* Calcular salario
*/
public float calcularFerias(float salario)
requires //Requerimentos
salario > 0 : "Salario deve possuir um valor"
ensures //Garantias
result >= salario : "Resultado nao e maior do que o salario"
{
//Retorna o valor unitario mais 1/3 do salario
return 4F/3 * salario;
}
}
/**
* Funcao principal
*/
void main(String[] args){
//Cria uma variavel chamada folha do tipo folha
let folha = new Folha();
//Cria uma variavel com o retorno do salario
let salarioFerias = folha.calcularFerias(1800);
//Exibe o resultado do calculo
println("Salario de ferias " salarioFerias);
}
Assim, neste exemplo é garantido o parâmetro salário da função calcularFerias, como sendo um número maior que zero e é garantido que o retorno seja um número maior que o salário.
A quebra do contrato resulta em uma excessão para o sistema, assim garante as pré-condições (requires) e as pós-condições (ensures).
Design by Contracts (DbC) – “Padrão por Contratos”
Postado por Ronneesley como Linguagem Nice, Padrões de Projeto em 23 de março de 2009
Uma das mais novas idéias promisoras é o Design by Contracts, como o nome já diz é um padrão orientado a contratos. Apesar de não ser uma tecnologia relativamente nova, é uma tecnologia que está em crescimento no mercado, pois visa a garantia das pré-condições e pós-condições de funções, desta forma, pode-se determinar a corretude de um determinado algoritmo, pois é indicado o domínio esperado como entrada e saída de uma função.
O grande motivo da tecnologia não ser extremamente conhecida, é o fato das linguagem de mercado não implementarem nativamente o recurso, deixando assim a cargo desenvolvedor a escolha de arcabouços (frameworks), que muitas vezes dificulta a escolha, pois tem-se em mente que a escolha pode estar errada.
Como mencionei em alguns artigos anteriores a linguagem Nice, espero que o leitor esteja interessado em aprendê-la, pois é uma das poucas linguagens que possuem suporte nativo a este recurso.
Neste artigo não irei mostrar como implementar, mas que provavelmente já passou por alguns destes problemas:
- Uma algoritmo que alguém escreveu, que deve ser usada e não tem garantia que o retorno estará em um determinado domínio; ou
- Escrever um algoritmo que garanta que os parâmetros estejam em um determinado domínio.
Possivelmente já passou por um destes problemas, então saiba que a solução pode ser o uso de Design by Contracts.
Este recurso especifica um contrato entre os parâmetros de entrada de uma função e o domínio do retorno, garantindo assim o que deseja.