Cikkjelölt:Előfeltétel
Ez egy olyan cikkjelölt, ami kevés vagy ellenőrizetlen információt tartalmaz, ezért vagy más minőségvédelmi okból nem a cikkek között van, de a témája miatt feljavításra érdemes lehet. A vitalapon le van írva, hogy miben segíthetsz konkrétan ebben az esetben, a Wikipédia:Feljavításra váró cikkjelöltek lapon pedig az, hogy általában miben. |
Ezt a cikkjelöltet feljavítás hiányában hamarosan törölhetik, a törlés tervezett dátuma: 2024. szeptember 6., 00:00 (CEST). Ha meg szeretnéd tartani, építsd tovább. A feljavítás után szólj a járőröknek, hogy már cikké tehető. Bővebben a cikkjelöltekről ide kattintva olvashatsz. |
Ez a szócikk nem tünteti fel a független forrásokat, amelyeket felhasználtak a készítése során. Emiatt nem tudjuk közvetlenül ellenőrizni, hogy a szócikkben szereplő állítások helytállóak-e. Segíts megbízható forrásokat találni az állításokhoz! Lásd még: A Wikipédia nem az első közlés helye. |
Ez a szócikk láthatóan fordítás eredménye (valószínűleg gépi fordítás). Segíts te is átnézni, hogy ne maradjanak benne magyartalan megfogalmazások, hibás linkek és téves hivatkozások. Ha ezeket kijavítottad, bátran távolítsd el a sablont. Ha a sablonnal nem a jelöltek között találkozol, nevezd át, vagy értesítsd a járőröket! |
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.