Kivételkezelés
Az ebben a részben bemutatott program a kivételkezeléssel foglalkozik. A program egyelőre nem igényel különös magyarázatot. Azonban néhány megjegyzést teszünk a kivételek használatáról.
A kivételek olyan általában ritkán előforduló események - amelyek nem feltétlenül hibák, (hiszen már a tervezéskor gondolunk rájuk) hanem - amelyekről úgy döntöttünk, hogy egy olyan módon kezeljük őket, hogy megszakítjuk a normál szekvenciális program működését.
Tekintsünk a kivételkezelésre mint lehetőségre két nézőpontból!
Tegyük fel, hogy egy programrészt írunk amely átmásol egy fájlt egy másikba. (Ebben felhasználjuk a nyelv fájlkezeléssel kapcsolatos lehetőségeit.) De például amikor futtatjuk a programunkat, már valaki letörölte azt a fájlt amit át szerettünk volna másolni egy másikba. A kivételkezelés segítségével a tervezéskor dönthettünk úgy, hogy amikor „ezt a hibát” észleljük megszakítjuk a programrészünk működését, hiszen az nem tudja elvégezni a neki szánt fő funkciót. A megszakítás után elvégezhetjük a programrész lezárásához szükséges műveleteket, ha vannak ilynek, majd visszatérünk a programrészt tartalmazó nagyobb egységbe. (Itt programrész és egység alatt értsük a következőket: declare blokk, függvény/eljárás utasítássorozat része. Ezek végén helyezhetőek el a kivételkezelő részek.)
Nézzük a másik oldalt! Tegyük fel (azért, hogy ne ugyanez a példa legyen) egy „általánosabb” vermet szeretnénk írni :) . Ekkor az adatszerkezetünk működését írjuk le, és elvonatkoztatunk attól, hogy a későbbiekben majd ki és mire fogja azt használni. Mit tegyünk akkor, ha valaki véletlenül ki szeretne venni egy elemet egy üres veremből? Erre a kérdésre nem lehet válaszolni, hiszen ezt a verem majdani használójának kell majd eldöntenie, hogy neki akkor mi a legmegfelelőbb. (Amúgy nem feltételezem senkiről, hogy szándékosan csinálna ilyet, de azért felkészülök rá…) A mi dolgunk mindössze annyi, hogy jelezzük a hibát a velem használójának, a kezeléséről nem gondoskodunk. (csak kivételt dobunk…)
Záró megjegyzésünk, hogy a kivételkezelésre építő programozási megoldások szintén nem kívánatosak, amikor a biztonságkritikus alkalmazások fejlesztéséről beszélünk.
kivetelkezeles.adb