Buscar

4. AED-I-Pre-Pos-Condicoes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 25 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

José Augusto Baranauskas
Departamento de Computação e Matemática – FFCLRP-USP
augusto@usp.br
http://dcm.ffclrp.usp.br/~augusto
PrPréé--condicondiçções e ões e 
PPóóss--condicondiççõesõ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
PrPréé--condicondiçções e Pões e Póóss--condicondiççõesõ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
ExemploExemplo
�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 PrO que são Préé--condicondiçções e ões e 
PPóóss--condicondiçções?õ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
{ 
...
}
ExemploExemplo
6
void WriteSquareRoot(float Number)
// Pré-condição: Number >= 0
// Pós-condição: A raiz quadrada de Number deve
// ser escrita
{ 
...
}
ExemploExemplo
•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
{ 
...
}
ExemploExemplo
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
ExemploExemplo
WriteSquareRoot( -10 );
WriteSquareRoot( 0 );
WriteSquareRoot( 5.6 );
Quais destas chamadas de procedimento respeitam 
a pré-condição?
9
ExemploExemplo
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
ExemploExemplo
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
{ 
...
}
ExemploExemplo
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 ExemploOutro Exemplo
13
Outro ExemploOutro Exemplo
Vowel( 'A' )
Vowel( 'Z' )
Vowel( '?' )
Quais valores serão retornados
por estas chamadas da função?
14
Outro ExemploOutro 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 ExemploOutro 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 prSempre certifique que a préé--
condicondiçção seja vão seja váálida...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
é válida
17
...então a p...então a póóss--condicondiçção se torna ão se torna 
verdade ao fim do procedimentoverdade 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,
eu garanto
18
QuestãoQuestã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ãoQuestã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 
tambtambéém seguem as seguintes regras: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 
tambtambéém seguem as seguintes regras: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++
}
...
}
ExemploExemplo
23
Vantagens do Uso de PrVantagens do Uso de Préé--
condicondiçções e Pões e Póóss--condicondiççõesõ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
ResumoResumo
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 
quandoo 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 ENDTTHE HE EENDND
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, USP.
Modifications for C++ language by Prof. José Augusto Baranauskas, USP, 2005.

Outros materiais