Az objektum-orientált programozás (5) - Book, 29. oldal
12.1 Az igény kivételkezelés
Működése során a program időnként vészhelyzetekben. Például a technika az úgynevezett objektum mutatható ki a belső problémák (hibás értékeket a mezők, így fordulhat elő, például nullával osztás), vagy hibát talál, vagy egyéb tárgyak bemeneteket. Ezért van szükség valamilyen mechanizmus felderítésére és vészhelyzetek kezeléséhez (kivételek) a programban.
Amikor a program van kialakítva külön modulokat és különösen akkor, ha ezek a modulok önállóan kifejlesztett könyvtárak, hibakezelés kell két részre osztható:
a generációs információk eredetét a hiba helyzet, amelyet helyben nem megoldható;
hibakezelés megtalálható más helyeken.
Ez a stílus a hibakezelés előnyös, hogy sok a hagyományos módszerek. Tekintsük az alternatíva. Ha probléma merül fel, hogy nem lehet megoldani a helyben, a programban:
a) megállítja a végrehajtás,
b) visszaküldi egy „rossz” értéket,
c) visszatér némi érvényes értéket, és hagyja a program
d) hívja a funkció feldolgozási hibák.
Opció a) - megállítani a végrehajtás - ez az, ami történik alapértelmezés, ha nem elkapni kivételek. A legtöbb hibát, akkor jön valami jobb. Könyvtár funkció, minden bizonnyal a végső végrehajtás, nem lehet használni a programban, az első követelmény, hogy - a megbízhatóság.
B) lehetőség - visszatér egy speciális „hibás” érték - nem mindig valósítható meg, mert gyakran egyszerűen nincs elfogadható hibával (például amikor visszatér egy egyikük elfogadható lehet). Még ha ezt a megközelítést alkalmazzák, gyakran kényelmetlen, mert arra kényszeríti a programozó minden alkalommal ellenőrizze az eredményt a hiba értékét. Ez könnyen megkétszerezhetik a programot.
C opció) - vissza érvényes értéket, és hagyja a program egy kóros állapot - megvan az a hátránya, hogy a hívó fél nem veszi észre, hogy a program egy abnormális állapot. Például sok a szabványos C könyvtár funkciója meghatározza az értékét a globális változó hibakod, hogy hibát jelez. A program azonban a legtöbb esetben nem ellenőrzi ezt a változót rendszeresen ahhoz, hogy ne a későbbi hibákat. Sőt, a globális változók használata rögzítésére hibainformációkat nem működik jól jelenlétében párhuzamos folyamatokat.
D) eljárás - hívja a funkció feldolgozási hibák - tartja a hívott függvény, hogy megoldja a fenti módszerekkel.
kivételkezelés mechanizmus alternatívát nyújt a hagyományos módszerekkel. Ez lehetővé teszi, hogy külön a hibakezelés kódot natív kód algoritmus, így a program érthetőbbé és „tiszta”. Az eredmény egy szabályos módon kezelési hibák, amely egyszerűsíti a kölcsönhatás a külön megírt program töredékek.
Az általános elvek a szituációk kezelésének C ++, Java és C #
helyzetek feldolgozási mechanizmusa módot ad át vezérlő attól a ponttól, a program végrehajtását egy pont felett helyezkedik el a vezérlő, ahol a helyzet határozza meg felvezető (kivételkezelőt). Az alapötlet az, hogy a funkció néz egy megoldhatatlan probléma, be kivételes helyzet, abban a reményben, hogy ez okozta (közvetve vagy közvetlenül) a szolgáltatás nem oldja meg a problémát. A helyzet felvezető fogják hívni, ha végrehajtása Operator-vezetés-helyzet az úgynevezett unit-to-kontroll, illetve funkciókat nevezzük ebben a blokkban. A C ++ és C # szintaktikai vezetési helyzet a következő:
A Java szintaxis a gerjesztés helyzet ugyanaz, kivéve, hogy a dobás nem lehet használni anélkül kifejezést.
Operator-behajtó helyzet a C ++ kifejezése néhány típusát. A Java és C # ez mindig egy objektum valamilyen fajta kirekesztés, amelyet le kell írni kifejezetten. Operator vezetéssel helyzet más néven pont előfordulását (gerjesztés) Helyzet (dob pont). A program része, amely tele volt üzemben gerjesztés helyzetet, mondván, hogy nem volt olyan helyzetben, (ő nyitott helyzetben) benne.
Fontolja meg, hogy a C ++, tudja azonosítani és kezelni számos fellépő hibák az osztályban Vector.
osztály tartomány <>; // osztály helyzetek
int üzemeltető [] (int i);
Tartomány objektum osztály célja, hogy lehet használni, mint egy kivétel, és indítson a legújabb az alábbiak szerint:
int Vektor :: operátor [] (int i)