Arquivar por categoria Padrões de Projeto

Exemplo Simples de Design by Contracts

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).

,

Nenhum comentário.

Design by Contracts (DbC) – “Padrão por Contratos”

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.

, ,

Nenhum comentário.