• Nenhum resultado encontrado

Pré-condições e Pós-condições

N/A
N/A
Protected

Academic year: 2021

Share "Pré-condições e Pós-condições"

Copied!
25
0
0

Texto

(1)

José Augusto Baranauskas augusto@usp.br Algoritmos e Estruturas de Dados I

Pré

Pré

-

-

condições e

condições e

Pós

Pós

-

-

condições

condições

‰Nesta aula são descritas pré-condições e pós-condições

‰Elas permitem que um

programador especifique o que um procedimento deve realizar

(2)

Pré

Pré

-

-

condições e Pós

condições e Pós

-

-

condições

condições

‰

Freqüentemente um programador

necessita comunicar precisamente o que

um procedimento deve realizar, sem

qualquer indicação de como esta tarefa

deve ser realizada

‰

Você pode imaginar uma situação onde

isto pode ocorrer?

(3)

Eu não me importo com qual método o procedimento utilizará,

desde que os requisitos sejam respeitados Aqui estão os requisitos

para um procedimento que eu desejo que você

escreva

Exemplo

Exemplo

‰Você é o chefe de um grupo de programadores e você deseja que um dos seus programadores escreva um procedimento como parte de um projeto

(4)

O que são Pré

O que são Pré

-

-

condições e

condições e

Pós

Pós

-

-

condições?

condições?

‰

Um forma de especificar tais requisitos é

através de um par de declarações sobre o

procedimento

‰

A declaração de

pré-condição

indica o

que deve ser verdade antes que o

procedimento seja chamado

‰

A declaração de

pós-condição

indica o

que será verdade quando o procedimento

terminar o seu trabalho

(5)

void WriteSquareRoot(float Number)

// Pré-condição: Number >= 0

// Pós-condição: A raiz quadrada de Number deve // ser escrita {

...

}

Exemplo

Exemplo

(6)

void WriteSquareRoot(float Number)

// Pré-condição: Number >= 0

// Pós-condição: A raiz quadrada de Number deve // ser escrita {

...

}

Exemplo

Exemplo

•A pré-condição e pós-condição

aparecem como comentários no seu programa

•Elas são freqüentemente colocadas após o cabeçalho do procedimento •A pré-condição e pós-condição

aparecem como comentários no seu programa

•Elas são freqüentemente colocadas após o cabeçalho do procedimento

(7)

void WriteSquareRoot(float Number)

// Pré-condição: Number >= 0

// Pós-condição: A raiz quadrada de Number deve // ser escrita {

...

}

Exemplo

Exemplo

Neste exemplo, a pré-condição requer que

Number >= 0

seja verdade sempre que o procedimento for chamado Neste exemplo, a pré-condição

requer que Number >= 0

seja verdade sempre que o procedimento for chamado

(8)

Exemplo

Exemplo

WriteSquareRoot( -10 ); WriteSquareRoot( 0 ); WriteSquareRoot( 5.6 );

Quais destas chamadas de procedimento respeitam a pré-condição?

(9)

Exemplo

Exemplo

WriteSquareRoot( -10 ); WriteSquareRoot( 0 ); WriteSquareRoot( 5.6 );

A segunda e terceira chamadas estão corretas, uma vez que seus argumentos são maiores ou iguais a zero

 

Quais destas chamadas de procedimento respeitam a pré-condição?

(10)

Exemplo

Exemplo

WriteSquareRoot( -10 ); WriteSquareRoot( 0 ); WriteSquareRoot( 5.6 );

Mas a primeira chamada viola a pré-condição, uma vez que seu argumento é menor que zero

 



Quais destas chamadas de procedimento respeitam a pré-condição?

(11)

void WriteSquareRoot(float Number)

// Pré-condição: Number >= 0

// Pós-condição: A raiz quadrada de Number deve // ser escrita {

...

}

Exemplo

Exemplo

A pós-condição sempre indica qual trabalho deve ser realizado pelo

procedimento. Neste caso, quando o procedimento retorna, a raiz

quadrada de Number deve ser escrita

A pós-condição sempre indica qual trabalho deve ser realizado pelo

procedimento. Neste caso, quando o procedimento retorna, a raiz

quadrada de Number deve ser escrita

(12)

bool Vowel(char Letter)

// Pré-condição: Letter é uma letra maiúscula ou

// uma letra minúscula (no intervalo 'A' .. 'Z' ou 'a' .. 'z') // Pós-condição: O valor retornado pela função

// é verdade se Letter é uma vogal; caso-contrário // o valor retornado pela função é falso

{

...

}

Outro Exemplo

Outro Exemplo

(13)

Outro Exemplo

Outro Exemplo

Vowel( 'A' ) Vowel( 'Z' ) Vowel( '?' )

Quais valores serão retornados por estas chamadas da função?

(14)

Outro Exemplo

Outro Exemplo

Vowel( 'A' ) Vowel( 'Z' ) Vowel( '?' ) true false

Ninguém sabe, pois a pré-condição está sendo violada.

Quais valores serão retornados por estas chamadas da função?

(15)

Outro Exemplo

Outro Exemplo

Vowel( '?' )

A violação de uma pré-condição

pode até mesmo resultar em efeitos inesperados

Quais valores serão retornados por estas chamadas da função?

(16)

Sempre certifique que a pré

Sempre certifique que a pré

-

-condição seja válida...

condição seja válida...

‰O programador que chama a função ou procedimento é responsável por certificar que a pré-condição é válida quando o procedimento é chamado

Neste ponto, meu programa chama o seu procedimento, e

eu tenho certeza que a pré-condição

(17)

...então a pós

...então a pós

-

-

condição se torna

condição se torna

verdade ao fim do procedimento

verdade ao fim do procedimento

‰O programador que escreve a função ou procedimento assume que a pré-condição é válida, e certifica que a pós-condição se torna verdade ao fim do procedimento Então meu procedimento será executado e quando isto é feito, a pós-condição será verdade,

(18)

Questão

Questão

‰Suponha que você chame um

procedimento, e você não se certifica que a pré-condição é

verdadeira. Quem é responsável caso esta falha cause algum tipo de desastre? … Você † O programador que escreveu o procedimento ‡ Ninguém

(19)

Questão

Questão

‰Suponha que você chame um

procedimento, e você não se certifica que a pré-condição é

verdadeira. Quem é responsável caso esta falha cause algum tipo de desastre? … Você O programador que chama um procedimento é responsável por certificar que a pré-condição é válida

(20)

Por outro lado, programadores cuidadosos

Por outro lado, programadores cuidadosos

também seguem as seguintes regras:

também seguem as seguintes regras:

‰

Quando você escreve um procedimento,

você deve detectar em quais condições

uma pré-condição será violada

‰

Se você detectar que uma pré-condição foi

violada, estão imprima uma mensagem de

erro e aborte o programa...

(21)

Por outro lado, programadores cuidadosos

Por outro lado, programadores cuidadosos

também seguem as seguintes regras:

também seguem as seguintes regras:

‰

Quando você escreve um procedimento,

você deve detectar em quais condições

uma pré-condição será violada

‰

Se você detectar que uma pré-condição foi

violada, estão imprima uma mensagem de

erro e aborte o programa...

‰

...em vez de causar

um desastre

(22)

void WriteSquareRoot(float Number)

// Pré-condição: Number >= 0

// Pós-condição: A raiz quadrada de Number deve // ser escrita

{

if (Number < 0) // Pré-condição falhou { cout << ”ERROR: Number is negative”;

abort(); // Isto pára um programa em C++ }

...

}

Exemplo

Exemplo

(23)

Vantagens do Uso de Pré

Vantagens do Uso de Pré

-

-condições e Pós

condições e Pós

-

-

condições

condições

‰Resumidamente descreve o comportamento de uma função ou procedimento...

‰...sem entrar em detalhes de implementação

‰Posteriormente, você pode re-implementar o procedimento de uma nova forma...

‰...entretanto os programas (os quais dependem exclusivamente da pré-condição/pós-condição) continuarão a funcionar sem alterações

(24)

Resumo

Resumo

Pré-condição ‰O programador que chama o procedimento certifica que a pré-condição é válida ‰O programador que escreve um procedimento assume que a pré-condição é verdade quando o procedimento inicia sua execução

Pós-condição ‰O programador que escreve um procedimento certifica que a pós-condição é verdadeira ao término do procedimento

(25)

THE END T

THE HE ENDEND

Presentation copyright 1995, The Benjamin/Cummings Publishing Company, For use with Data Structures and Other Objects

by Michael Main and Walter Savitch.

Some artwork in the presentation is used with permission from Presentation Task Force (copyright New Vision Technologies Inc) and Corel Gallery Clipart Catalog (copyright Corel Corporation, 3G Graphics Inc, Archive Arts, Cartesia Software, Image Club Graphics Inc, One Mile Up Inc, TechPool Studios, Totem Graphics Inc).

Students and instructors who use Data Structures and Other Objects are welcome to use this presentation however they see fit, so long as this copyright notice remains intact.

Translation to portuguese by Prof. Maria Carolina Monard, ICMC-USP.

Referências

Documentos relacionados

A Zurich garante ao abrigo desta cobertura os danos materiais causados a bens pertencentes ao senhorio, por um sinistro abrangido pela apólice, até ao limite de 2% do capital seguro

Garantindo, até ao limite do valor fixado nas Condições Particulares, os danos acidentais e imprevistos, sofridos por canalizações subterrâneas de águas ou gás, esgotos ou cabos

Nos termos desta cláusula a Zurich garante a indemnização pelos danos materiais causados a bens pertencentes a terceiros, existentes no local de risco, para fins inerentes à

especificadas tenham sido afectadas exclusivamente por incêndio, raio, explosão ou implosão, assim como pelos prejuízos resultantes de extinção, demolição, evacuação

Nos termos desta Condição Especial, o presente contrato garante as reparações pecuniárias legalmente exigíveis ao Segurado com fundamento em responsabilidade civil

Garantindo, até ao limite estipulado nas Condições Particulares os danos causados a bens pertencentes a terceiros, existentes no local de risco, para fins inerentes à atividade

b) Por qualquer autoridade legalmente constituída, em virtude de medidas tomadas por ocasião das ocorrências acima mencionadas para a salvaguarda ou proteção de pessoas e bens.

1.1.1 A Pré-aprovação de Reparos é uma funcionalidade disponibilizada pelo QuintoAndar aos usuários da sua Plataforma e será válida desde que (i) sejam atendidas as