Поддерживать
www.wikidata.ru-ru.nina.az
U etogo termina sushestvuyut i drugie znacheniya sm Isklyuchenie Dlya uluchsheniya etoj stati zhelatelno Najti i oformit v vide snosok ssylki na nezavisimye avtoritetnye istochniki podtverzhdayushie napisannoe Prostavit snoski vnesti bolee tochnye ukazaniya na istochniki Posle ispravleniya problemy isklyuchite eyo iz spiska Udalite shablon esli ustraneny vse nedostatki Obrabo tka isklyuchi telnyh situa cij angl exception handling mehanizm yazykov programmirovaniya prednaznachennyj dlya opisaniya reakcii programmy na oshibki vremeni vypolneniya i drugie vozmozhnye problemy isklyucheniya kotorye mogut vozniknut pri vypolnenii programmy i privodyat k nevozmozhnosti bessmyslennosti dalnejshej otrabotki programmoj eyo bazovogo algoritma V russkom yazyke takzhe primenyaetsya bolee korotkaya forma termina obrabotka isklyuchenij IsklyucheniyaObshee ponyatie isklyuchitelnoj situacii Vo vremya vypolneniya programmy mogut voznikat situacii kogda sostoyanie vneshnih dannyh ustrojstv vvoda vyvoda ili kompyuternoj sistemy v celom delaet dalnejshie vychisleniya v sootvetstvii s bazovym algoritmom nevozmozhnymi ili bessmyslennymi Klassicheskie primery podobnyh situacij privedeny nizhe Celochislennoe delenie na nol Konechnogo rezultata u dannoj operacii byt ne mozhet poetomu ni dalnejshie vychisleniya ni popytka ispolzovaniya rezultata deleniya ne privedut k resheniyu zadachi Oshibka pri popytke schitat dannye s vneshnego ustrojstva Esli dannye ne udayotsya poluchit lyubye dalnejshie zaplanirovannye operacii s nimi bessmyslenny Ischerpanie dostupnoj pamyati Esli v kakoj to moment sistema okazyvaetsya ne v sostoyanii vydelit dostatochnyj dlya prikladnoj programmy obyom operativnoj pamyati programma ne smozhet rabotat normalno Poyavlenie signala avarijnogo otklyucheniya elektropitaniya sistemy Prikladnuyu zadachu po vsej vidimosti reshit ne udastsya v luchshem sluchae pri nalichii kakogo to rezerva pitaniya prikladnaya programma mozhet pozabotitsya o sohranenii dannyh Vidy isklyuchitelnyh situacij Isklyuchitelnye situacii voznikayushie pri rabote programmy mozhno razdelit na dva osnovnyh tipa sinhronnye i asinhronnye principy reakcii na kotorye sushestvenno razlichayutsya Sinhronnye isklyucheniya mogut vozniknut tolko v opredelyonnyh zaranee izvestnyh tochkah programmy Tak oshibka chteniya fajla ili kommunikacionnogo kanala nehvatka pamyati tipichnye sinhronnye isklyucheniya tak kak voznikayut oni tolko v operacii chteniya ili v operacii vydeleniya pamyati sootvetstvenno Asinhronnye isklyucheniya mogut voznikat v lyuboj moment vremeni i ne zavisyat ot togo kakuyu konkretno instrukciyu programmy vypolnyaet sistema Tipichnye primery takih isklyuchenij avarijnyj otkaz pitaniya ili postuplenie novyh dannyh Nekotorye tipy isklyuchenij mogut byt otneseny kak k sinhronnym tak i k asinhronnym Naprimer instrukciya deleniya na nol formalno dolzhna privodit k sinhronnomu isklyucheniyu tak kak logicheski ono voznikaet imenno pri vypolnenii dannoj komandy no na nekotoryh platformah za schyot glubokoj konvejerizacii isklyuchenie mozhet fakticheski okazatsya asinhronnym Obrabotchiki isklyuchenijObshee opisanie V otsutstvie sobstvennogo mehanizma obrabotki isklyuchenij dlya prikladnyh programm naibolee obshej reakciej na lyubuyu isklyuchitelnuyu situaciyu yavlyaetsya nemedlennoe prekrashenie vypolneniya s vydachej polzovatelyu soobsheniya o haraktere isklyucheniya Mozhno skazat chto v podobnyh sluchayah edinstvennym i universalnym obrabotchikom isklyuchenij stanovitsya operacionnaya sistema Naprimer v operacionnuyu sistemu Windows vstroena utilita Dr Watson kotoraya zanimaetsya sborom informacii o neobrabotannom isklyuchenii i eyo otpravkoj na specialnyj server kompanii Microsoft Vozmozhno ignorirovanie isklyuchitelnoj situacii i prodolzhenie raboty no takaya taktika opasna tak kak privodit k oshibochnym rezultatam raboty programm ili vozniknoveniyu oshibok vposledstvii Naprimer proignorirovav oshibku chteniya iz fajla bloka dannyh programma poluchit v svoyo rasporyazhenie ne te dannye kotorye ona dolzhna byla schitat a kakie to drugie Rezultaty ih ispolzovaniya predugadat nevozmozhno Obrabotka isklyuchitelnyh situacij samoj programmoj zaklyuchaetsya v tom chto pri vozniknovenii isklyuchitelnoj situacii upravlenie peredayotsya nekotoromu zaranee opredelyonnomu obrabotchiku bloku koda procedure funkcii kotorye vypolnyayut neobhodimye dejstviya Sushestvuet dva principialno raznyh mehanizma funkcionirovaniya obrabotchikov isklyuchenij Obrabotka s vozvratom podrazumevaet chto obrabotchik isklyucheniya likvidiruet voznikshuyu problemu i privodit programmu v sostoyanie kogda ona mozhet rabotat dalshe po osnovnomu algoritmu V etom sluchae posle togo kak vypolnitsya kod obrabotchika upravlenie peredayotsya obratno v tu tochku programmy gde voznikla isklyuchitelnaya situaciya libo na komandu vyzvavshuyu isklyuchenie libo na sleduyushuyu za nej kak v nekotoryh staryh dialektah yazyka BASIC i vypolnenie programmy prodolzhaetsya Obrabotka s vozvratom tipichna dlya obrabotchikov asinhronnyh isklyuchenij kotorye obychno voznikayut po prichinam ne svyazannym pryamo s vypolnyaemym kodom dlya obrabotki sinhronnyh isklyuchenij ona maloprigodna Obrabotka bez vozvrata zaklyuchaetsya v tom chto posle vypolneniya koda obrabotchika isklyucheniya upravlenie peredayotsya v nekotoroe zaranee zadannoe mesto programmy i s nego prodolzhaetsya ispolnenie To est fakticheski pri vozniknovenii isklyucheniya komanda vo vremya raboty kotoroj ono vozniklo zamenyaetsya na bezuslovnyj perehod k zadannomu operatoru Sushestvuet dva varianta podklyucheniya obrabotchika isklyuchitelnyh situacij k programme strukturnaya i nestrukturnaya obrabotka isklyuchenij Nestrukturnaya obrabotka isklyuchenij Nestrukturnaya obrabotka isklyuchenij realizuetsya v vide mehanizma registracii funkcij ili komand obrabotchikov dlya kazhdogo vozmozhnogo tipa isklyucheniya Yazyk programmirovaniya ili ego sistemnye biblioteki predostavlyayut programmistu kak minimum dve standartnye procedury registracii obrabotchika i razregistracii obrabotchika Vyzov pervoj iz nih privyazyvaet obrabotchik k opredelyonnomu isklyucheniyu vyzov vtoroj otmenyaet etu privyazku Esli isklyuchenie proishodit vypolnenie osnovnogo koda programmy nemedlenno preryvaetsya i nachinaetsya vypolnenie obrabotchika Po zavershenii obrabotchika upravlenie peredayotsya libo v nekotoruyu naperyod zadannuyu tochku programmy libo obratno v tochku vozniknoveniya isklyucheniya v zavisimosti ot zadannogo sposoba obrabotki s vozvratom ili bez Nezavisimo ot togo kakaya chast programmy v dannyj moment vypolnyaetsya na opredelyonnoe isklyuchenie vsegda reagiruet poslednij zaregistrirovannyj dlya nego obrabotchik V nekotoryh yazykah zaregistrirovannyj obrabotchik sohranyaet silu tolko v predelah tekushego bloka koda procedury funkcii togda procedura razregistracii ne trebuetsya Nizhe pokazan uslovnyj fragment koda programmy s nestrukturnoj obrabotkoj isklyuchenij UstanovitObrabotchik OshibkaBD PerejtiNa OshBD Na isklyuchenie OshibkaBD ustanovlen obrabotchik komanda PerejtiNa OshBD Zdes nahodyatsya operatory raboty s BD PerejtiNa SnyatOshBD Komanda bezuslovnogo perehoda obhod obrabotchika isklyuchenij OshBD metka syuda proizojdyot perehod v sluchae oshibki BD po ustanovlennomu obrabotchiku Obrabotchik isklyucheniya BD SnyatOshBD metka syuda proizojdyot perehod esli kontroliruemyj kod vypolnitsya bez oshibki BD SnyatObrabotchik OshibkaBD Obrabotchik snyat Nestrukturnaya obrabotka prakticheski edinstvennyj variant dlya obrabotki asinhronnyh isklyuchenij no dlya sinhronnyh isklyuchenij ona neudobna prihoditsya chasto vyzyvat komandy ustanovki snyatiya obrabotchikov vsegda ostayotsya opasnost narushit logiku raboty programmy propustiv registraciyu ili razregistraciyu obrabotchika Strukturnaya obrabotka isklyuchenij Ne sleduet putat so Strukturirovannaya obrabotka isklyuchenij Strukturnaya obrabotka isklyuchenij trebuet obyazatelnoj podderzhki so storony yazyka programmirovaniya nalichiya specialnyh sintaksicheskih konstrukcij Takaya konstrukciya soderzhit blok kontroliruemogo koda i obrabotchik obrabotchiki isklyuchenij Naibolee obshij vid takoj konstrukcii uslovnyj NachaloBloka Kontroliruemyj kod esli uslovie to SozdatIsklyuchenie Isklyuchenie2 Obrabotchik Isklyuchenie1 Kod obrabotchika dlya Isklyucheniya1 Obrabotchik Isklyuchenie2 Kod obrabotchika dlya Isklyucheniya2 ObrabotchikNeobrabotannyh Kod obrabotki ranee ne obrabotannyh isklyuchenij KonecBloka Zdes NachaloBloka i KonecBloka klyuchevye slova kotorye ogranichivayut blok kontroliruemogo koda a Obrabotchik nachalo bloka obrabotki sootvetstvuyushego isklyucheniya Esli vnutri bloka ot nachala do pervogo obrabotchika proizojdyot isklyuchenie to proizojdyot perehod na obrabotchik napisannyj dlya nego posle chego ves blok zavershitsya i ispolnenie budet prodolzheno so sleduyushej za nim komandy V nekotoryh yazykah net specialnyh klyuchevyh slov dlya ogranicheniya bloka kontroliruemogo koda vmesto etogo obrabotchik obrabotchiki isklyuchenij mogut byt vstroeny v nekotorye ili vo vse sintaksicheskie konstrukcii obedinyayushie neskolko operatorov Tak naprimer v yazyke Ada lyuboj sostavnoj operator begin end mozhet soderzhat obrabotchik isklyuchenij ObrabotchikNeobrabotannyh eto obrabotchik isklyuchenij kotorye ne sootvetstvuyut ni odnomu iz opisannyh vyshe v dannom bloke Obrabotchiki isklyuchenij v realnosti mogut opisyvatsya po raznomu odin obrabotchik na vse isklyucheniya po odnomu obrabotchiku na kazhdyj tip isklyucheniya no principialno oni rabotayut odinakovo pri vozniknovenii isklyucheniya nahoditsya pervyj sootvetstvuyushij emu obrabotchik v dannom bloke ego kod vypolnyaetsya posle chego vypolnenie bloka zavershaetsya Isklyucheniya mogut voznikat kak v rezultate programmnyh oshibok tak i putyom yavnoj ih generacii s pomoshyu sootvetstvuyushej komandy v primere komanda SozdatIsklyuchenie S tochki zreniya obrabotchikov takie iskusstvenno sozdannye isklyucheniya nichem ne otlichayutsya ot lyubyh drugih Bloki obrabotki isklyuchenij mogut mnogokratno vhodit drug v druga kak yavno tekstualno tak i neyavno naprimer v bloke vyzyvaetsya procedura kotoraya sama imeet blok obrabotki isklyuchenij Esli ni odin iz obrabotchikov v tekushem bloke ne mozhet obrabotat isklyuchenie to vypolnenie dannogo bloka nemedlenno zavershaetsya i upravlenie peredayotsya na blizhajshij podhodyashij obrabotchik bolee vysokogo urovnya ierarhii Eto prodolzhaetsya do teh por poka obrabotchik ne najdyotsya i ne obrabotaet isklyuchenie ili poka isklyuchenie ne vyjdet iz obrabotchikov zadannyh programmistom i ne budet peredano sistemnomu obrabotchiku po umolchaniyu avarijno zakroyushemu programmu Inogda byvaet neudobno zavershat obrabotku isklyucheniya v tekushem bloke to est zhelatelno chtoby pri vozniknovenii isklyucheniya v tekushem bloke obrabotchik vypolnil kakie to dejstviya no isklyuchenie prodolzhilo by obrabatyvatsya na bolee vysokom urovne obychno tak byvaet kogda obrabotchik dannogo bloka ne polnostyu obrabatyvaet isklyuchenie a lish chastichno V takih sluchayah v obrabotchike isklyuchenij generiruetsya novoe isklyuchenie ili vozobnovlyaetsya s pomoshyu specialnoj komandy ranee poyavivsheesya Kod obrabotchikov ne yavlyaetsya zashishyonnym v dannom bloke poetomu sozdannoe v nyom isklyuchenie budet obrabatyvatsya v blokah bolee vysokogo urovnya Bloki s garantirovannym zaversheniem Pomimo blokov kontroliruemogo koda dlya obrabotki isklyuchenij yazyki programmirovaniya mogut podderzhivat bloki s garantirovannym zaversheniem Ih ispolzovanie okazyvaetsya udobnym togda kogda v nekotorom bloke koda nezavisimo ot togo proizoshli li kakie to oshibki neobhodimo pered ego zaversheniem vypolnit opredelyonnye dejstviya Prostejshij primer esli v procedure dinamicheski sozdayotsya kakoj to lokalnyj obekt v pamyati to pered vyhodom iz etoj procedury obekt dolzhen byt unichtozhen chtoby izbezhat utechki pamyati nezavisimo ot togo proizoshli posle ego sozdaniya oshibki ili net Takaya vozmozhnost realizuetsya blokami koda vida NachaloBloka Osnovnoj kod Zavershenie Kod zaversheniya KonecBloka Zaklyuchyonnye mezhdu klyuchevymi slovami NachaloBloka i Zavershenie operatory osnovnoj kod vypolnyayutsya posledovatelno Esli pri ih vypolnenii ne voznikaet isklyuchenij to zatem vypolnyayutsya operatory mezhdu klyuchevymi slovami Zavershenie i KonecBloka kod zaversheniya Esli zhe pri vypolnenii osnovnogo koda voznikaet isklyuchenie lyuboe to srazu zhe vypolnyaetsya kod zaversheniya posle chego ves blok zavershaetsya a voznikshee isklyuchenie prodolzhaet sushestvovat i rasprostranyatsya do teh por poka ego ne perehvatit kakoj libo blok obrabotki isklyuchenij bolee vysokogo urovnya Principialnoe otlichie bloka s garantirovannym zaversheniem ot obrabotki to chto on ne obrabatyvaet isklyuchenie a lish garantiruet vypolnenie opredelyonnogo nabora operacij pered tem kak vklyuchitsya mehanizm obrabotki Blok s garantirovannym zaversheniem legko realizuetsya s pomoshyu obychnogo mehanizma strukturnoj obrabotki dlya etogo dostatochno postavit komandu generacii isklyucheniya neposredstvenno pered zaversheniem kontroliruemogo bloka i pravilno napisat kod obrabotchika no nalichie otdelnoj konstrukcii pozvolyaet sdelat kod bolee prozrachnym i zashishaet ot sluchajnyh oshibok Podderzhka v razlichnyh yazykahBolshinstvo sovremennyh yazykov programmirovaniya takie kak Ada C D Delphi Objective C Java JavaScript Eiffel OCaml Ruby Python Common Lisp SML PHP vse yazyki platformy NET i dr imeet vstroennuyu podderzhku strukturnoj obrabotki isklyuchenij V etih yazykah pri vozniknovenii isklyucheniya podderzhivaemogo yazykom proishodit raskrutka steka vyzovov do pervogo obrabotchika isklyuchenij podhodyashego tipa i upravlenie peredayotsya obrabotchiku Za isklyucheniem neznachitelnyh razlichij v sintaksise sushestvuet lish para variantov obrabotki isklyuchenij V naibolee rasprostranyonnom iz nih isklyuchitelnaya situaciya generiruetsya specialnym operatorom throw ili raise a samo isklyuchenie s tochki zreniya programmy predstavlyaet soboj nekotoryj obekt dannyh To est generaciya isklyucheniya sostoit iz dvuh etapov sozdaniya obekta isklyucheniya i vozbuzhdeniya isklyuchitelnoj situacii s etim obektom v kachestve parametra Pri etom konstruirovanie takogo obekta samo po sebe vybrosa isklyucheniya ne vyzyvaet V odnih yazykah obektom isklyucheniem mozhet byt obekt lyubogo tipa dannyh v tom chisle strokoj chislom ukazatelem i tak dalee v drugih tolko predopredelyonnogo tipa isklyucheniya chashe vsego on imeet imya Exception i vozmozhno ego proizvodnyh tipov tipov potomkov esli yazyk podderzhivaet obektnye vozmozhnosti Oblast dejstviya obrabotchikov nachinaetsya specialnym klyuchevym slovom try ili prosto yazykovym markerom nachala bloka naprimer begin i zakanchivaetsya pered opisaniem obrabotchikov catch except resque Obrabotchikov mozhet byt neskolko odin za odnim i kazhdyj mozhet ukazyvat tip isklyucheniya kotoryj on obrabatyvaet Kak pravilo nikakogo podbora naibolee podhodyashego obrabotchika ne proizvoditsya i vypolnyaetsya pervyj zhe obrabotchik sovmestimyj po tipu s isklyucheniem Poetomu poryadok sledovaniya obrabotchikov imeet vazhnoe znachenie esli obrabotchik sovmestimyj s mnogimi ili vsemi tipami isklyuchenij okazhetsya v tekste prezhde specificheskih obrabotchikov dlya konkretnyh tipov to specificheskie obrabotchiki ne budut ispolzovatsya vovse Nekotorye yazyki takzhe dopuskayut specialnyj blok else kotoryj vypolnyaetsya esli ni odnogo isklyucheniya ne bylo sgenerirovano v sootvetstvuyushej oblasti dejstviya Chashe vstrechaetsya vozmozhnost garantirovannogo zaversheniya bloka koda finally ensure Zametnym isklyucheniem yavlyaetsya Si gde takoj konstrukcii net Vmesto neyo ispolzuetsya avtomaticheskij vyzov destruktorov obektov Vmeste s tem sushestvuyut nestandartnye rasshireniya Si podderzhivayushie i funkcionalnost finally naprimer v MFC V celom obrabotka isklyuchenij mozhet vyglyadet sleduyushim obrazom v nekotorom abstraktnom yazyke try line console readLine if line length 0 throw new EmptyLineException Stroka schitannaya iz konsoli pustaya console printLine Privet s line catch EmptyLineException exception console printLine Privet catch Exception exception console printLine Oshibka exception message else console printLine Programma vypolnilas bez isklyuchitelnyh situacij finally console printLine Programma zavershaetsya V nekotoryh yazykah mozhet byt lish odin obrabotchik kotoryj razbiraetsya s razlichnymi tipami isklyuchenij samostoyatelno Dostoinstva i nedostatkiDostoinstva ispolzovaniya isklyuchenij osobenno zametno proyavlyayutsya pri razrabotke bibliotek procedur i programmnyh komponentov orientirovannyh na massovoe ispolzovanie V takih sluchayah razrabotchik chasto ne znaet kak imenno dolzhna obrabatyvatsya isklyuchitelnaya situaciya pri napisanii universalnoj procedury chteniya iz fajla nevozmozhno zaranee predusmotret reakciyu na oshibku tak kak eta reakciya zavisit ot ispolzuyushej proceduru programmy no emu eto i ne nuzhno dostatochno sgenerirovat isklyuchenie obrabotchik kotorogo predostavlyaetsya realizovat polzovatelyu komponenta ili procedury Edinstvennaya alternativa isklyucheniyam v takih sluchayah vozvrat kodov oshibok kotorye vynuzhdenno peredayutsya po cepochke mezhdu neskolkimi urovnyami programmy poka ne doberutsya do mesta obrabotki zagromozhdaya kod i snizhaya ego ponyatnost Ispolzovanie isklyuchenij v celyah kontrolya oshibok povyshaet chitaemost koda tak kak pozvolyaet otdelit obrabotku oshibok ot samogo algoritma i oblegchaet programmirovanie i ispolzovanie komponentov drugih razrabotchikov A obrabotka oshibok mozhet byt centralizovana v aspektah Realizaciya mehanizma obrabotki isklyuchenij sushestvenno zavisit ot yazyka i dazhe kompilyatory odnogo i togo zhe yazyka na odnoj i toj zhe platforme mogut imet znachitelnye razlichiya Eto ne pozvolyaet prozrachno peredavat isklyucheniya mezhdu chastyami programmy napisannoj na raznyh yazykah naprimer podderzhivayushie isklyucheniya biblioteki obychno neprigodny dlya ispolzovaniya v programmah na yazykah otlichnyh ot teh dlya kotoryh oni razrabotany i tem bolee na yazykah ne podderzhivayushih mehanizm obrabotki isklyuchenij Takoe sostoyanie sushestvenno ogranichivaet vozmozhnosti ispolzovaniya isklyuchenij naprimer v OS UNIX i eyo klonah i pod Windows tak kak bolshinstvo sistemnogo PO i nizkourovnevyh bibliotek etih sistem pishetsya na yazyke Si ne podderzhivayushem isklyuchenij Sootvetstvenno dlya raboty s API takih sistem s primeneniem isklyuchenij prihoditsya pisat biblioteki obyortki funkcii kotoryh analizirovali by kody vozvrata funkcij API i v nuzhnyh sluchayah generirovali by isklyucheniya Podderzhka isklyuchenij uslozhnyaet yazyk i kompilyator Takzhe ona snizhaet skorost raboty programmy tak kak stoimost obrabotki isklyucheniya kak pravilo vyshe stoimosti obrabotki koda oshibki Poetomu v mestah programmy kritichnyh po skorosti ne rekomenduyut vozbuzhdat i obrabatyvat isklyucheniya hotya v prikladnom programmirovanii sluchai kogda raznica v skorosti obrabotki isklyuchenij i kodov vozvrata dejstvitelno sushestvenna ochen redki Korrektnaya realizaciya isklyuchenij mozhet byt zatrudnitelnoj v yazykah s avtomaticheskim vyzovom destruktorov Pri vozniknovenii isklyucheniya v bloke neobhodimo avtomaticheski vyzvat destruktory obektov sozdannyh v etom bloke no tolko teh kotorye ne byli eshyo udaleny obychnym poryadkom Krome togo trebovanie preryvaniya tekushej operacii pri vozniknovenii isklyucheniya vstupaet v protivorechie s trebovaniem obyazatelnogo avtomaticheskogo udaleniya v yazykah s avtodestruktorami esli isklyuchenie vozniknet v destruktore to libo kompilyator budet vynuzhden udalit ne polnostyu osvobozhdyonnyj obekt libo obekt ostanetsya sushestvuyushim to est vozniknet utechka pamyati Vsledstvie etogo generaciya neperehvatyvaemyh isklyuchenij v destruktorah v ryade sluchaev prosto zapreshaetsya Dzhoel Spolski schitaet chto kod rasschitannyj na rabotu s isklyucheniyami teryaet linejnost i predskazuemost Esli v klassicheskom kode vyhody iz bloka procedury ili funkcii nahodyatsya tolko tam gde ih yavno ukazal programmist to v kode s isklyucheniyami isklyuchenie potencialno mozhet proizojti v lyubom operatore i analizom samogo koda nevozmozhno uznat gde imenno isklyucheniya mogut proishodit V kode zhe rasschitannom na isklyucheniya predskazat v kakom meste proizojdyot vyhod iz bloka koda nevozmozhno i lyuboj operator dolzhen rassmatrivatsya kak potencialno poslednij v bloke v rezultate slozhnost koda vozrastaet a nadyozhnost snizhaetsya Takzhe v slozhnyh programmah voznikayut bolshie nagromozhdeniya operatorov try finally i try catch try except esli ne ispolzovat aspekty Proveryaemye isklyucheniyaNekotorye problemy prostoj obrabotki isklyuchenij Iznachalno naprimer v C ne sushestvovalo nikakoj formalnoj discipliny opisaniya generacii i obrabotki isklyuchenij lyuboe isklyuchenie mozhet byt vozbuzhdeno v lyubom meste programmy i esli dlya nego ne nahoditsya obrabotchika v steke vyzovov vypolnenie programmy preryvaetsya avarijno Esli funkciya osobenno bibliotechnaya generiruet isklyucheniya to dlya ustojchivoj raboty ispolzuyushaya eyo programma dolzhna perehvatyvat ih vse Kogda po kakoj libo prichine odno iz vozmozhnyh isklyuchenij okazyvaetsya neobrabotannym budet proishodit neozhidannoe avarijnoe zavershenie programmy S podobnymi effektami mozhno borotsya organizacionnymi merami opisyvaya vozmozhnye isklyucheniya voznikayushie v bibliotechnyh modulyah v sootvetstvuyushej dokumentacii No pri etom vsegda ostayotsya veroyatnost propustit neobhodimyj obrabotchik iz za sluchajnoj oshibki ili nesootvetstviya dokumentacii kodu chto vovse ne redkost Chtoby polnostyu isklyuchit poteryu obrabotki isklyuchenij v obrabotchiki prihoditsya specialno dobavlyat vetv obrabotki vseh ostalnyh isklyuchenij kotoraya garantirovanno perehvatit lyubye dazhe zaranee neizvestnye isklyucheniya no takoj vyhod ne vsegda optimalen Bolee togo sokrytie vseh vozmozhnyh isklyuchenij mozhet privesti k situacii kogda budut skryty seryoznye i pri etom trudno obnaruzhivaemye oshibki Mehanizm proveryaemyh isklyuchenij Pozzhe v ryade yazykov naprimer v Java poyavilis proveryaemye isklyucheniya Sushnost etogo mehanizma sostoit v dobavlenii v yazyk sleduyushih pravil i ogranichenij V opisanii funkcii ili metoda klassa v yavnom vide perechislyayutsya vse tipy isklyuchenij kotorye ona mozhet sgenerirovat Funkciya vyzyvayushaya funkciyu ili metod s obyavlennymi isklyucheniyami dlya kazhdogo iz etih isklyuchenij obyazana libo soderzhat obrabotchik libo v svoyu ochered ukazyvat etot tip kak generiruemyj eyu v svoyom opisanii Kompilyator proveryaet nalichie obrabotchika v tele funkcii ili zapisi isklyucheniya v eyo zagolovke Reakciya na nalichie neopisannogo i neobrabotannogo isklyucheniya mozhet byt raznoj Naprimer v Java esli kompilyator obnaruzhivaet vozmozhnost vozniknoveniya isklyucheniya kotoroe ne opisano v zagolovke funkcii i ne obrabatyvaetsya v nej programma schitaetsya nekorrektnoj i ne kompiliruetsya V C vozniknovenie v funkcii neopisannogo i neobrabotannogo isklyucheniya privodit k nemedlennomu zaversheniyu programmy pri etom otsutstvie u funkcii spiska obyavlennyh isklyuchenij oboznachaet vozmozhnost vozniknoveniya lyubyh isklyuchenij i standartnyj poryadok ih obrabotki vneshnim kodom Vneshne v yazyke Java realizaciya takogo podhoda vyglyadit sleduyushim obrazom int getVarValue String varName throws SQLException kod metoda vozmozhno soderzhashij vyzovy sposobnye brosit isklyuchenie SQLException Oshibka pri kompilyacii isklyuchenie ne obyavleno i ne perehvacheno int eval1 String expression int a prev getVarValue abc Pravilno isklyuchenie obyavleno i budet peredavatsya dalshe int eval2 String expression throws SQLException int a prev getVarValue abc Pravilno isklyuchenie perehvatyvaetsya vnutri metoda i naruzhu ne vyhodit int eval3 String expression try int a prev getVarValue abc catch SQLException ex Obrabotka isklyucheniya Zdes metod getVarValue obyavlen kak generiruyushij isklyuchenie SQLException Sledovatelno lyuboj ispolzuyushij ego metod dolzhen libo perehvatit eto isklyuchenie libo obyavit ego kak generiruemoe V dannom primere metod eval1 privedyot k oshibke kompilyacii poskolku vyzyvaet metod getVarValue no ne perehvatyvaet isklyuchenie i ne obyavlyaet ego Metod eval2 obyavlyaet isklyuchenie a metod eval3 perehvatyvaet i obrabatyvaet ego oba etih metoda korrektny v otnoshenii raboty s isklyucheniem vyzyvaemym metodom getVarValue Preimushestva i nedostatki Vozmozhno etot razdel soderzhit originalnoe issledovanie Proverte sootvetstvie informacii privedyonnym istochnikam i udalite ili ispravte informaciyu yavlyayushuyusya originalnym issledovaniem V sluchae neobhodimosti podtverdite informaciyu avtoritetnymi istochnikami V protivnom sluchae etot razdel mozhet byt udalyon 17 noyabrya 2013 Proveryaemye isklyucheniya snizhayut kolichestvo situacij kogda isklyuchenie kotoroe moglo byt obrabotano vyzvalo kriticheskuyu oshibku v programme poskolku za nalichiem obrabotchikov sledit kompilyator Eto osobenno polezno pri izmeneniyah koda kogda metod kotoryj ne mog ranee vybrasyvat isklyuchenie tipa X nachinaet eto delat kompilyator avtomaticheski otsledit vse sluchai ego ispolzovaniya i proverit nalichie sootvetstvuyushih obrabotchikov Drugim poleznym kachestvom proveryaemyh isklyuchenij yavlyaetsya to chto oni sposobstvuyut osmyslennomu napisaniyu obrabotchikov programmist yavno vidit polnyj i pravilnyj spisok isklyuchenij kotorye mogut vozniknut v dannom meste programmy i mozhet napisat na kazhdoe iz nih osmyslennyj obrabotchik vmesto togo chtoby sozdavat na vsyakij sluchaj obshij obrabotchik vseh isklyuchenij odinakovo reagiruyushij na vse neshtatnye situacii U proveryaemyh isklyuchenij est i nedostatki Oni vynuzhdayut sozdavat obrabotchiki isklyuchenij s kotorymi programmist v principe spravitsya ne mozhet naprimer oshibok vvoda vyvoda v veb prilozhenii Eto privodit k poyavleniyu glupyh obrabotchikov kotorye ne delayut nichego ili dubliruyut sistemnyj obrabotchik kriticheskoj oshibki naprimer vyvodyat stek vyzova isklyucheniya i v itoge tolko zamusorivayut kod Stanovitsya nevozmozhnym dobavlenie novogo proveryaemogo isklyucheniya v metod opisannyj v biblioteke poskolku eto narushaet obratnuyu sovmestimost Eto verno i dlya nebibliotechnyh metodov no v etom sluchae problema menee sushestvenna tak kak ves kod v konechnom itoge dostupen i mozhet byt pererabotan Iz za perechislennyh nedostatkov pri obyazatelnosti ispolzovaniya proveryaemyh isklyuchenij etot mehanizm chasto obhodyat Naprimer mnogie biblioteki obyavlyayut vse metody kak vybrasyvayushie nekotoryj obshij klass isklyuchenij naprimer Exception i tolko na etot tip isklyucheniya sozdayutsya obrabotchiki Rezultatom stanovitsya to chto kompilyator zastavlyaet pisat obrabotchiki isklyuchenij dazhe tam gde oni obektivno ne nuzhny i stanovitsya nevozmozhno opredelit bez chteniya ishodnikov kakie imenno podklassy deklariruemyh isklyuchenij brosaet metod chtoby navesit na nih raznye obrabotchiki Bolee pravilnym podhodom schitaetsya perehvat vnutri metoda novyh isklyuchenij porozhdyonnyh vyzyvaemym kodom a pri neobhodimosti peredat isklyuchenie dalshe zavorachivanie ego v isklyuchenie uzhe vozvrashaemoe metodom Naprimer esli metod izmenili tak chto on nachinaet obrashatsya k baze dannyh vmesto fajlovoj sistemy to on mozhet sam lovit SQLException i vybrasyvat vmesto nego vnov sozdavaemyj IOException ukazyvaya v kachestve prichiny ishodnoe isklyuchenie Obychno rekomenduetsya iznachalno obyavlyat imenno te isklyucheniya kotorye pridyotsya obrabatyvat vyzyvayushemu kodu Skazhem esli metod izvlekaet vhodnye dannye to dlya nego celesoobrazno obyavit IOException a esli on operiruet SQL zaprosami to vne zavisimosti ot prirody oshibki on dolzhen obyavlyat SQLException V lyubom sluchae nabor vybrasyvaemyh metodom isklyuchenij dolzhen tshatelno produmyvatsya Pri neobhodimosti imeet smysl sozdavat sobstvennye klassy isklyuchenij nasleduya ih ot Exception ili drugih podhodyashih proveryaemyh isklyuchenij Isklyucheniya ne trebuyushie proverki Nevozmozhno sdelat proveryaemymi voobshe vse isklyucheniya tak kak nekotorye isklyuchitelnye situacii po svoej prirode takovy chto ih vozniknovenie vozmozhno v lyubom ili pochti lyubom meste programmy a predotvratit ih programmist ne v sostoyanii Pri etom bessmyslenno ukazyvat podobnye isklyucheniya v opisanii funkcii tak kak eto prishlos by sdelat dlya kazhdoj funkcii ne delaya programmu ponyatnee V osnovnom eto isklyucheniya otnosyashiesya k odnomu iz dvuh vidov Isklyucheniya predstavlyayushie soboj seryoznye oshibki kotorye po idee voznikat ne dolzhny i kotorye v obychnyh usloviyah ne sleduet obrabatyvat programmoj Takie oshibki mogut voznikat kak vo vneshnej otnositelno programmy srede tak i vnutri neyo Primerom takoj situacii mozhet byt oshibka sredy ispolneniya programmy na Java Ona potencialno vozmozhna pri ispolnenii lyuboj komandy za redchajshimi isklyucheniyami v prikladnoj programme ne mozhet byt osmyslennogo obrabotchika podobnoj oshibki ved esli sreda ispolneniya rabotaet neverno na chto ukazyvaet sam fakt isklyucheniya net nikakoj garantii chto i obrabotchik budet ispolnen pravilno Isklyucheniya vremeni vypolneniya obychno svyazannye s oshibkami programmista Takie isklyucheniya voznikayut iz za logicheskih oshibok razrabotchika ili nedostatochnosti proverok v kode Naprimer oshibka obrasheniya po neinicializirovannomu nulevomu ukazatelyu kak pravilo oznachaet chto programmist libo propustil gde to inicializaciyu peremennoj libo pri vydelenii dinamicheskoj pamyati ne proveril dejstvitelno li pamyat byla vydelena Kak pervoe tak i vtoroe trebuet ispravleniya koda programmy a ne sozdaniya obrabotchikov Vynosit podobnye oshibki voobshe za predely sistemy obrabotki isklyuchenij nelogichno i neudobno hotya by potomu chto inogda oni vsyo taki perehvatyvayutsya i obrabatyvayutsya Poetomu v sistemah s proveryaemymi isklyucheniyami chast tipov isklyuchenij vyvoditsya iz pod mehanizma proverki i rabotaet tradicionnym obrazom V Java eto klassy isklyuchenij unasledovannye ot java lang Error fatalnye oshibki i java lang RuntimeException oshibki vremeni vypolneniya kak pravilo svyazannye s oshibkami kodirovaniya ili nedostatochnostyu proverok v kode programmy nevernyj argument obrashenie po pustoj ssylke vyhod za granicy massiva nevernoe sostoyanie monitora i t p Gran mezhdu ispravimoj i fatalnoj oshibkoj ochen uslovnaya Naprimer oshibka vvoda vyvoda v nastolnoj programme kak pravilo ispravimaya i mozhno soobshit polzovatelyu ob etom i prodolzhit ispolnenie programmy V veb skripte ona zhe fatalnaya esli ona sluchilas so sredoj ispolneniya chto to nehoroshee i nuzhno ostanovitsya vyvedya soobshenie Sm takzheKod oshibki Setjmp longjmpPrimechaniya13 Joel on Software angl Data obrasheniya 7 oktyabrya 2012 22 oktyabrya 2012 goda SsylkiTipichnye scenarii rasprostraneniya i obrabotki isklyuchenij
Вершина