Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Tu je rozpis rozdielu:
1. Predpoklad:
* Definícia: Podmienka, že musí byť pravdivá * Pred* funkcia sa volá tak, aby funkcia správne fungovala a zaručila jej správanie. Je zodpovednosťou * volajúceho * zodpovednosť za zabezpečenie splnenia predpokladov. Ak je porušená predpoklad, že správanie funkcie je nedefinované; Mohlo by sa zrútiť, priniesť nesprávne výsledky alebo sa správať nepredvídateľne.
* Účel:
* Objasnite očakávané vstupy a prostredie: Predbežné podmienky dokumentujú, čo funkcia očakáva. Vďaka tomu je funkcia ľahšie pochopiteľná a používaná.
* Zabráňte chybám a chybám: Kontrolou predpokladov (pomocou tvrdení) môžete odhaliť a zabrániť chybám na začiatku vývoja.
* Povoľte optimalizáciu: Ak funkcia vie, že určité podmienky budú vždy pravdivé, môže vykonávať optimalizácie, ktoré by inak neboli bezpečné.
* Dokumentácia: Čistá dokumentácia umožňuje ostatným vývojárom používať túto funkciu správne.
* Zodpovednosť: Volajúci * funkcie je zodpovedný za zabezpečenie toho, aby boli všetky predpoklady pravdivé pred zavolaním funkcie.
* Príklad:
`` C
#include
#include
// Funkcia na výpočet faktoriálu čísla
int faktor (int n) {
// Predpoklad:n musí byť nezáporný
assert (n> =0);
if (n ==0) {
návrat 1;
} else {
návrat N * faktor (n - 1);
}
}
int main () {
int výsledok =faktor (5); // predbežná spokojná
printf („faktor 5:%d \ n“, výsledok);
// faktor (-1); // Predpokladá sa porušená! To spôsobí zlyhanie tvrdenia.
návrat 0;
}
`` `
V tomto príklade má „faktor“ funkcia predpoklad, že `n` musí byť nezáporná. Vyhlásenie `ASSERT (n> =0)` Vykonáva túto predpokladu. Ak je `n` negatívny, tvrdenie zlyhá a program sa skončí (v zostavení ladenia).
2. Post -podmienka:
* Definícia: Podmienka, že musí byť pravdivá * Po* funkcii úspešne vykonala. Opisuje stav programu (premenné, dátové štruktúry, návratovú hodnotu) po dokončení funkcie. Je zodpovednosťou * funkcie *, aby sa zabezpečilo splnenie post -podmienok, * za predpokladu, že boli splnené predpoklady.
* Účel:
* zaručte efekt funkcie: Post -podmienky dokumentujú, čo funkcia * sľubuje *.
* Oveďte správnosť: Kontrolou post -podmienok (pomocou tvrdení) môžete overiť, či funkcia prináša očakávané výsledky.
* uľahčovať ladenie: Ak je porušená post -podmienka, naznačuje to chybu v rámci samotnej funkcie.
* Dokumentácia: Jasná dokumentácia umožňuje ostatným vývojárom porozumieť správaniu funkcie.
* Zodpovednosť: Samotná * funkcia * je zodpovedná za zabezpečenie toho, aby boli všetky post -podmienky pravdivé pred návratom.
* Príklad:
`` C
#include
#include
// Funkcia na výpočet štvorca čísla
int Square (int x) {
int result =x * x;
// Post-podmienka:Výsledok musí byť nezáporný (ak X je celé číslo)
assert (výsledok> =0); // To by mohlo zlyhať v dôsledku celočíselného pretečenia, ak je X veľmi veľký.
Výsledok návratnosti;
}
int main () {
int result =štvorcový (5);
printf ("Square 5:%d \ n", výsledok);
int log_number =100000; // môže spôsobiť prepad
result =Square (log_number); // post -podmienka môže zlyhať v dôsledku pretečenia.
printf ("Square %d:%d \ n", log_number, výsledok);
návrat 0;
}
`` `
V tomto príklade má funkcia „Square` post-podmienku, že„ výsledok “musí byť nezáporný (za predpokladu, že„ X “je celé číslo). `Assert (result> =0)` Vyhlásenie skontroluje túto post -podmienku. Ak je výsledok negatívny (napríklad v dôsledku pretečenia celého čísla), tvrdenie zlyhá.
Kľúčové rozdiely sú zhrnuté:
| Funkcia | Predbežná kondícia Post -podmienka |
| ---------------- | ------------------------------------------------------ | ---------------------------------------------------- |
| načasovanie | Začiarknutý * pred * vykonáva funkcia | Začiarknuté * po * vykonávaní funkcie |
| Zodpovednosť | Volajúci funkcie Samotná funkcia
| Účel | Definujte očakávané vstupy a prostredie Definujte zaručené správanie a účinok funkcie
| Porušenie | Označuje problém v * volacom kóde * | Označuje problém * v rámci funkcie * |
| zaručuje | Funkcia môže fungovať správne Funkcia dosiahne zamýšľaný účinok
Ako implementovať v C:
Pretože C nemá vstavanú podporu pre predpoklady a post-podmienky, štandardným prístupom je použiť:
1. `assert ()` makro (od `
2. :Môžete tiež použiť `#ifDef debug` na podmienečne zahrnúť zložitejšie kontrolné a post -podmienkové kontroly, ktoré by mohli zahŕňať viac ako jednoduché porovnanie.
3. Komentáre :Aj keď nepoužívate tvrdenia, je rozhodujúce zdokumentovať predpoklady a post -podmienky v komentároch, aby bol váš kód zrozumiteľný.
4. Testovacie rámce: Zvážte použitie testovacích rámcov, ktoré podporujú kontroly pred/postmpodloží, aby sa uľahčilo testovanie jednotiek.
Príklad s kombinovanými predpokladmi, postkondicionami a komentármi:
`` C
#include
#include
/**
* @Brief vypočíta výkon čísla (základňa zvýšená na exponent).
*
* @param založte základné číslo (celé číslo).
* @param exponent Exponent (nezáporné celé číslo).
*
* @Pre exponent> =0 (exponent musí byť nezáporný).
* @Pre Base! =0 || exponent! =0 (základňa a exponent nie obidve 0 - vyhýba sa nedefinovaným správaním)
*
* @Post vráti základňu zvýšenú na výkon exponentu.
* @Post Ak je exponent 0, výsledok je 1 (s výnimkou základne =0, ktorá sa zakáže).
*
* @return Výsledok základne zvýšenej na výkon exponentu.
* Vráti 1, ak je exponent 0.
*//
int Power (int Base, int exponent) {
// Predpoklady:
assert (exponent> =0);
assert (základ! =0 || exponent! =0); // Zabráňte nedefinovanému správaniu 0^0
int výsledok =1;
pre (int i =0; i
}
// post -podmienky:
if (exponent ==0) {
tvrdiť (výsledok ==1); // Skontrolujte základný puzdro
}
Výsledok návratnosti;
}
int main () {
int result =výkon (2, 3); // 2^3 =8
printf ("2^3 =%d \ n", výsledok);
Výsledok =výkon (5, 0); // 5^0 =1
printf ("5^0 =%d \ n", výsledok);
// napájanie (0,0); // Toto spustí tvrdenie.
návrat 0;
}
`` `
Výhody použitia predpokladov a post -podmienok:
* Vylepšená kvalita kódu: Nútia vás starostlivo premýšľať o predpokladoch a zárukách vašich funkcií.
* ľahšie ladenie: Tvrdenia pomáhajú chytiť chyby včas a určujú zdroj problémov.
* Lepšia dokumentácia: Jasne dokumentujú očakávané správanie vašich funkcií.
* Zvýšená udržiavateľnosť: Uľahčujú váš kód pochopenie a úpravu, čo znižuje riziko zavedenia chýb.
* Formálne overenie: V niektorých prípadoch môžu byť predpoklady a post -podmienky použité s nástrojmi formálneho overovania na preukázanie správnosti vášho kódu.
Začlenením predpokladov a post -podmienok do vášho kódu C (aj keď iba pomocou komentárov a tvrdení) môžete písať robustnejší, spoľahlivejší a udržiavateľný softvér.