Buscar

Projeto por contrato

Prévia do material em texto

Projeto por contrato 
O contrato é uma metodologia de design e implementação de aplicativos e 
componentes popularizada pela linguagem de programação Eiffel. Consiste 
em considerar os elementos de design como participantes de uma relação 
semelhante ao contrato comercial. 
 
Assim, os componentes podem ser projetados assumindo que certas 
condições de entrada (pré-condições) serão atendidas, enquanto certas 
condições de saída (pós-condições) devem ser garantidas, bem como a 
invariante de classe (propriedades que permanecem invariáveis apesar do 
processamento executado pelo componente). 
 
Esta metodologia promete: 
• Uma melhor compreensão da programação orientada a objetos. Isso 
porque o protótipo de um recurso de uma classe também faz parte do 
contrato que ela oferece. Por raciocínios desse tipo, por exemplo, o 
comportamento covariante dos tipos de retorno dos métodos de Eiffel 
é justificado. 
• Menos erros no código graças a uma melhor representação das 
especificações. 
• Um sistema eficaz para detectar erros. 
• Uma maneira conveniente de documentar seu código ao mesmo tempo 
em que está sendo programado. 
• Aninhamento eficaz com mecanismos de herança e reutilização. 
• Uma forma eficaz de encapsulamento que evita o acesso a outras 
propriedades e métodos. 
• Um agrupamento de operações para o mesmo contexto. Se falamos de 
uma entidade A da qual podemos instanciar dois objetos B e C que 
têm contextos diferentes relacionados à entidade A, com o contrato 
não expomos o negócio que o objeto B tem a oferecer com o de C. Um 
exemplo A = Banco , B = receitas bancárias e C = pagamentos de 
contas. 
As condições do contrato nunca devem ser violadas durante a execução de 
um programa sem bugs. Portanto, os contratos são normalmente verificados 
apenas no modo de depuração durante o desenvolvimento do software. Mais 
tarde, na liberação, as verificações de contrato são desativadas para 
maximizar o desempenho. 
Em muitas linguagens de programação, os contratos são implementados com 
assert. Asserts são compilados por padrão no modo de lançamento em C / C 
++, e similarmente desativados em C # e Java. 
Lançar o interpretador Python com "-O" (para "otimizar") como um 
argumento fará com que o gerador de código Python não emita nenhum 
bytecode para declarações. 
Isso elimina efetivamente os custos de tempo de execução de declarações no 
código de produção - independentemente do número e despesas 
computacionais de declarações usadas no desenvolvimento - uma vez que 
nenhuma dessas instruções será incluída na produção pelo compilador.

Continue navegando