Ugrás a tartalomhoz

Cikkjelölt:Előfeltétel

A Wikipédiából, a szabad enciklopédiából

A számítógépes programozásban az előfeltétel egy olyan feltétel vagy predikátum, amelynek mindig igaznak kell lennie közvetlenül egy kódrészlet végrehajtása előtt vagy egy művelet előtt a formális specifikációban.

Ha egy előfeltétel sérül, a kódrészlet hatása meghatározatlanná válik, és így előfordulhat, hogy nem hajtja végre a szándékolt feladatát. Azok az előfeltételek, amelyek hiányoznak, elégtelenek, nincsenek formálisan bizonyítva (vagy helytelen próbálkozással vannak bizonyítva), vagy nem ellenőrzik őket statikusan vagy dinamikusan, biztonsági problémákat okozhatnak, különösen olyan nem erősen típusos nyelvekben, amelyek nem biztonságosak.

Gyakran az előfeltételeket egyszerűen az érintett kódrész dokumentációjában tüntetik fel. Az előfeltételeket néha őrökkel vagy állításokkal tesztelik a kódban, és néhány nyelv specifikus szintaktikai szerkezeteket is biztosít erre a célra.

Példa[szerkesztés]

A faktoriális függvény csak akkor van definiálva, ha a paramétere nulla vagy annál nagyobb egész szám. Tehát egy faktoriális függvény implementációjának előfeltétele, hogy a paramétere egész szám legyen, és hogy a paraméter nagyobb vagy egyenlő legyen nullánál. Alternatív megoldásként a nyelv típusrendszere használható annak meghatározására, hogy a faktoriális függvény paramétere természetes szám (előjelnélküli egész), amelyet a fordító típusellenőrzője automatikusan formálisan igazolhat.

Továbbá, ahol a numerikus típusoknak korlátozott a tartományuk (mint a legtöbb programozási nyelvben), az előfeltételnek azt is meg kell határoznia, hogy a paraméter maximális értéke mekkora lehet, hogy elkerüljük a túlcsordulást. (Például, ha egy faktoriális függvény implementációja a 64 bites előjelnélküli egész számot adja vissza eredményként, akkor a paraméternek kisebbnek kell lennie, mint 21, mert a faktoriális(21) nagyobb, mint a maximális előjelnélküli egész szám, amit 64 biten tárolni lehet.) Ahol a nyelv támogatja a tartomány altípusokat (például Ada), az ilyen korlátokat a típusrendszer automatikusan igazolhatja. Bonyolultabb korlátokat formálisan lehet igazolni interaktívan egy verifikátorral.

Az objektumorientált programozásban[szerkesztés]

Az objektumorientált szoftverfejlesztésben az előfeltételek a szerződés alapú tervezés lényeges részét képezik. A szerződés alapú tervezés magában foglalja a végrehajtási feltételeket (utófeltételek) és az osztály invariánsokat is.

Bármely rutin előfeltétele meghatározza azokat az objektumállapotra vonatkozó korlátozásokat, amelyek szükségesek a sikeres végrehajtáshoz. A programfejlesztő szempontjából ez képezi a rutin hívójának szerződésrészét. A hívónak kötelessége biztosítani, hogy az előfeltétel teljesüljön a rutin hívása előtt. A hívó erőfeszítéseinek jutalma a hívott rutin utófeltételében fejeződik ki.

Eiffel-példa[szerkesztés]

A következő Eiffel-példában szereplő rutin egy olyan egész számot vesz argumentumként, amelynek egy érvényes óraértéknek kell lennie a nap folyamán, azaz 0 és 23 között, beleértve mindkettőt. Az előfeltétel a require kulcsszót követi. Ez meghatározza, hogy az argumentumnak nagyobbnak vagy egyenlőnek kell lennie nullával, és kisebbnek vagy egyenlőnek kell lennie 23-mal. A "valid_argument:" címke leírja ezt az előfeltétel-kitételt, és azonosítja azt futásidejű előfeltétel-megsértés esetén.

  set_hour (a_hour: INTEGER)
      -- Set `hour' to `a_hour'
    require
      valid_argument: 0 <= a_hour and a_hour <= 23
    do
      hour := a_hour
    ensure
      hour_set: hour = a_hour
    end

Előfeltételek és öröklődés[szerkesztés]

Az öröklődés jelenlétében az utódosztályok (leszármazott osztályok) által örökölt rutinok az előfeltételeikkel együtt érvényesek. Ez azt jelenti, hogy az örökölt rutinok bármely implementációját vagy újradefiniálását úgy kell megírni, hogy azok megfeleljenek az örökölt szerződésnek. Az előfeltételek módosíthatók az újradefiniált rutinokban, de csak gyengíthetők. Ez azt jelenti, hogy az újradefiniált rutin csökkentheti az ügyfél kötelezettségét, de nem növelheti azt.

Hivatkozások[szerkesztés]

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben a Precondition című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Kapcsolódó szócikkek[szerkesztés]