projeto final: implementação de design by contract copyright, 1997 © dale carnegie &...
Post on 07-Apr-2016
215 Views
Preview:
TRANSCRIPT
Projeto Final: Implementação de Projeto Final: Implementação de Design by ContractDesign by Contract
Copyright, 1997 © Dale Carnegie & Associates, Inc.
André Felipe (afls2@cin.ufpe.br)André Felipe (afls2@cin.ufpe.br)Marcelo Guedes (msg@cin.ufpe.br)Marcelo Guedes (msg@cin.ufpe.br)
Patrícia Muniz (pmf@cin.ufpe.br)Patrícia Muniz (pmf@cin.ufpe.br)Vaninha Vieira (vvs@cin.ufpe.br)Vaninha Vieira (vvs@cin.ufpe.br)
Recife – PE – BrasilRecife – PE – BrasilAgosto - 2004Agosto - 2004
Disciplina: Paradigmas de Linguagem de ProgramaçãoDisciplina: Paradigmas de Linguagem de ProgramaçãoProf.: Augusto SampaioProf.: Augusto Sampaio
Design by Contract : Agosto 03, 2004 2 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Agenda
Introdução a Design by Contract (DbC) Projeto Parte I - Implementação de DbC em Funcional1 Projeto Parte II - Implementação de DbC em OO1 DbC em OO2 – Uma Discussão Conclusões
Design by Contract : Agosto 03, 2004 3 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Agenda
Introdução a Design by Contract (DbC) Projeto Parte I - Implementação de DbC em Funcional1 Projeto Parte II - Implementação de DbC em OO1 DbC em OO2 – Uma Discussão Conclusões
Design by Contract : Agosto 03, 2004 4 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Design by Contract - Introdução
Mecanismo para especificação precisa dos elementos/componentes de software, embutido na própria linguagem de programação.
Bertrand Meyer (1987) – Linguagem Eiffel Motivação:
Confiabilidade: Corretude + Robustez Estabelecer para cada elemento do software, um mecanismo de definição
precisa, do que se supõe que ele faz.
Premissas básicas: Um sistema é visto como um conjunto de componentes cuja interação é
baseada em especificações precisas, definidas por obrigações mútuas: CONTRATOS
Para o time da Eiffel Software, é um conceito tão importante quanto: Classes, Herança, Objetos, Polimorfismo, Dynamic Binding, ...
Design by Contract : Agosto 03, 2004 5 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Conceito Básico
Um Cliente, ao solicitar a um Fornecedor a execução de um Serviço, estabelece um contrato:
Em termos de elementos de software...
Serviço
(definem o contrato)
Pré-Condição Pós-Condição
CLIENTE FORNECEDOR
(deve garantir)(deve garantir) (exige)
Um Objeto,Uma Rotina
pode ser...
Um Método, Função, Procedimento, Loop, Classe
pode ser...
Design by Contract : Agosto 03, 2004 6 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Conceitos - básicos
Cláusulas: Definidas por ASSERTIONS, i.e., expressões booleanas
Cláusulas encontradas em implementações de DbC: Pré e Pós-Condições, em
Métodos de uma classe; Procedimentos; Funções
public class Set {... /** * Adds element to this set, provided element is not already in the set * * PRE: element != null && this.contains(element) == false * * POST: this.getLength() == old.getLength() + 1 && * this.contains(element) == true */ public void addElement(Object element) { ... }}
Design by Contract : Agosto 03, 2004 7 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Conceitos - básicos
Cláusulas encontradas em implementações de DbC (cont): Invariante, em Classe
Variante e Invariante, em Loop
public class Buffer {.../** INVARIANT: 0 <= in - out && in - out <= buffer.length; **/}
public boolean contains(Object o) {
for (int i = 0; i < buffer.length; i++) {
/** INVARIANT: 0 <= i && i <= buffer.length; **/
/** VARIANT: buffer.length - i **/
if (buffer[i].equals(o)) return true;
return false;
}
}
Design by Contract : Agosto 03, 2004 8 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
DbC – Benefícios e Problemas
Benefícios: Método que ajuda a especificar e documentar componentes no próprio
código. Framework efetivo para depuração, teste e de maneira mais geral,
garantia da qualidade. Abordagem sistemática para construção de software orientada a objetos e
livre de erros. Técnica para lidar com um eventual comportamento anormal de
componentes, proporcionando um mecanismo efetivo para tratamento de exceções.
Proporciona um melhor entendimento da metodologia OO, e de forma mais geral, de construção de software.
Problemas: Se usado exaustivamente, vai diminuir o desempenho do sistema.
Design by Contract : Agosto 03, 2004 9 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Implementações de DbC para Java:
• Algumas opções:
• JASS
• JML
• iContract
• Características
• Pré-compiladores para java
• Estendem DbC original com expressões
• FORALL
• EXISTS
Design by Contract : Agosto 03, 2004 10 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Agenda
Introdução a Design by Contract (DbC) Projeto Parte I - Implementação de DbC em Funcional1 Projeto Parte II - Implementação de DbC em OO1 DbC em OO2 – Uma Discussão Conclusões
Design by Contract : Agosto 03, 2004 11 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
DbC em Funcional1
Estende Linguagem Funcional1 com pré e pós-condição Corpo da função é uma expressão que pode incluir ou não definição
de pré e pós condições, obrigatoriamente juntas A aplicação da função a um argumento retorna um valor, desde que a
pré e a pós condição sejam atendidas Alteração no contexto: definição da função passa a conter suas pré e
pós condições
Design by Contract : Agosto 03, 2004 12 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
DbC em Funcional1 (cont.)
Checagem de tipos passa a incluir: verificação das expressões associadas à pré e pós condições, garantindo
que as mesmas retornem valores booleanos mapeamento do identificador "result", usado na pós condição, no tipo
retornado pela função
Aplicação da função passa a incluir: execução da expressão associada à pré condição antes da função
propriamente dita inclusão, no contexto de execução, do valor retornado pela aplicação da
função, com o identificador "result" execução da expressão associada à pós condição após a função
propriamente dita
Design by Contract : Agosto 03, 2004 13 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Agenda
Introdução a Design by Contract (DbC) Projeto Parte I - Implementação de DbC em Funcional1 Projeto Parte II - Implementação de DbC em OO1 DbC em OO2 – Uma Discussão Conclusões
Design by Contract : Agosto 03, 2004 14 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
DbC em OO1
Estende OO1 com invariante de classe, pré e pós condições de métodos
A pós-condição não possui o elemento "result", visto que os métodos em OO1 não retornam valores
Associado ao conceito de information hidding Mudanças nas definições:
Definições de classes passam a conter o invariante da classe Definições de métodos passam a conter expressões de pré e pós-
condição
Design by Contract : Agosto 03, 2004 15 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
DbC em OO1
Checagem de tipos passa a incluir: verificação das expressões associadas ao invariante, pré e pós condições,
garantindo que as mesmas retornem valores booleanos
A instanciação da classe passa a incluir: a execução da expressão associada ao invariante, após a inicialização dos
atributos do objeto
A execução de um método passa a incluir: a execução da expressão associada ao invariante, antes da pré-condição e
do corpo do método a execução da expressão associada à pré-condição, antes do corpo do
método a execução da expressão associada à pós-condição, após o corpo do
método a execução da expressão associada ao invariante, após a pós-condição e
do corpo do método
Design by Contract : Agosto 03, 2004 16 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Alterações na BNF - OO1
ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao
| "classe" Id "{" DecVariavel ";" "@inv" DecAssertion ";" DecProcedimento "}"
| "proc" Id "(" ListaDeclaracaoParametro ")" "{" "@pre" DecAssertion ";" Comando "}" | "proc" Id "(" ListaDeclaracaoParametro ")" "{" "@pos" DecAssertion ";" Comando "}" | "proc" Id "(" ListaDeclaracaoParametro ")" "{" "@pre" DecAssertion ";" "@pos" DecAssertion ";" Comando "}"
DecAssertion ::= Expressao | DecAssertion "," DecAssertion
| Expressao "<" Expressao | Expressao ">" Expressao | Expressao "<=" Expressao | Expressao ">=" Expressao
DecClasse ::= "classe" Id "{" DecVariavel ";" DecProcedimento "}“| DecClasse "," DecClasse
DecProcedimento ::= "proc" Id "(" ListaDeclaracaoParametro ")" "{" Comando "}“| DecProcedimento "," DecProcedimento
Design by Contract : Agosto 03, 2004 18 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Alterações no código - Classes Criadas / Alteradas
DecAssertion DecAssertionSimples DecAssertionComposta InvarianteNaoAtendidoException PosCondicaoNaoAtendidaException PreCondicaoNaoAtendidaException
DefClasse - para que contenha a expressão do invariante DecClasseSimples - para que contenha o invariante e salve no contexto um objeto
DefClasse com a expressão do mesmo DecProcedimentoSimples - para que contenha a pré e a pós e retorne um objeto
Procedimento com as expressões dos mesmos
Procedimento - para que contenha as expressões de pré e pós New - para que execute o invariante no construtor da classe ChamadaMetodo - para que execute o invariante antes e após a chamada de
procedimento ChamadaProcedimento - para que execute a pré antes, e a pós depois do método
Design by Contract : Agosto 03, 2004 19 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Agenda
Introdução a Design by Contract (DbC) Projeto Parte I - Implementação de DbC em Funcional1 Projeto Parte II - Implementação de DbC em OO1 DbC em OO2 – Uma Discussão Conclusões
Design by Contract : Agosto 03, 2004 20 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Linguagem OO2
Estende a Linguagem OO1 com herança e subtipos Procedimentos (métodos) podem ser redefinidos O contexto também é estendido com:
uma estrutura para registrar a hierarquia de classes
Um programa é um comando
Design by Contract : Agosto 03, 2004 21 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
DbC e Herança
Deve obedecer ao princípio de herança comportamental A redefinição de um método herdado pode:
Manter ou enfraquecer a pré-condição do método original (precond_pai OR precond_filho)
Manter ou fortalecer a pós-condição do método original (precond_pai AND precond_filho)
Uma classe herdada pode manter ou fortalecer o Invariante da classe original. (Invariante_pai AND Invariante_filho)
Fortalecer uma pré-condição, ou enfraquecer a pós-condição ou invariante, seria um caso de “subcontratação desonesta” e poderia levar a desastres no comportamento do sistema.
Design by Contract : Agosto 03, 2004 22 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Agenda
Introdução a Design by Contract (DbC) Projeto Parte I - Implementação de DbC em Funcional1 Projeto Parte II - Implementação de DbC em OO1 DbC em OO2 – Uma Discussão Conclusões
Design by Contract : Agosto 03, 2004 23 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Conclusões
Implementação das linguagens se mostrou bastante robusta, facilitando a implementação do conceito de DbC tanto em Funcional1 quanto em OO1
Métodos em OO1 não retornam valor Não foi considerada a variável result no contexto de execução DbC em OO1 não pode utilizar retornos de métodos, apenas variáveis da
classe e parâmetros de métodos
O invariante não obrigatoriamente deve ser executado antes das pré-condições e do corpo dos métodos
Design by Contract : Agosto 03, 2004 24 :: 24
{afls2, msg, pmf, vvs}@cin.ufpe.br
Referências
http://www.codeproject.com/csharp/designbycontract.asp http://archive.eiffel.com/doc/manuals/technology/contract/ http://www.brent.worden.org/articles/2000/designByContract.html Liskov, B. H, Wing, J. M. 1994. A Behavioral Notion of Subtyping
Projeto Final: Implementação de Projeto Final: Implementação de Design by ContractDesign by Contract
Copyright, 1997 © Dale Carnegie & Associates, Inc.
André Felipe (afls2@cin.ufpe.br)André Felipe (afls2@cin.ufpe.br)Marcelo Guedes (msg@cin.ufpe.br)Marcelo Guedes (msg@cin.ufpe.br)
Patrícia Muniz (pmf@cin.ufpe.br)Patrícia Muniz (pmf@cin.ufpe.br)Vaninha Vieira (vvs@cin.ufpe.br)Vaninha Vieira (vvs@cin.ufpe.br)
Recife – PE – BrasilRecife – PE – BrasilAgosto - 2004Agosto - 2004
http://www.cin.ufpe.br/~pmf/in1007http://www.cin.ufpe.br/~pmf/in1007
top related