Энергетика


 Дәріс №13. Ерекше жағдайларды өңдеу



Pdf көрінісі
бет19/23
Дата07.02.2022
өлшемі1,03 Mb.
#91462
түріПрограмма
1   ...   15   16   17   18   19   20   21   22   23
Байланысты:
is 1

13 Дәріс №13. Ерекше жағдайларды өңдеу
Дәрістің мақсаты:
ерекше жағдайларды өңдеудің есептеу үдерісін 
түсіндіру. 
Дәрістің мазмұны:
өңдеудің жалпы механизмі және ерекшеліктер 
синтаксисі. 
Ерекше жағдай немесе ерекшелік – бұл түрлі себептердің нәтижесінде 
туындайтын күтпеген немесе авариялық жағдайдың, оқиғаның пайда болуы. 
Мысалы, бөлінетін ресурстардың жетіспеушілігінен. Ерекше жағдайларды 
өңдеу құрылғылары көбінесе программа жұмысы кезінде туатын қателерді 
өңдеу үшін қолданылады. Сондықтан программа жұмысы кезінде туатын қате 
ерекше жағдайдың жеке түрі болып табылады. Ерекшеліктерді өңдеу пайда 
болған ерекшелікті тексеру (жеке жағдайдағы қате), бағдарламаның жұмысқа 
қабілетін қалпына келтіру және оның орындалуын жалғастыруға мүмкіндік 
береді. 


50 
Ерекше жағдайларды өңдеу есептеу процесін логикалық түрде екі 
бөлікке бөлуге мүмкіндік береді: авариялық жағдайды табу және оны өңдеу. 
С++ тілінің ерекшеліктерді өңдеу құралдарының басқа артықшылығы қате 
туралы хабарламаны беру үшін оның өңделуінің орнына қайтарылатын мәнді, 
параметрлерді немесе глобальды айнымалыларды қолдануды талап етпейді. 
Сондықтан функциялар интерфейсі таратылмайды.
Өңдеудің жалпы механизмі және ерекшеліктер синтаксисі. 
 
Ерекше жағдайды өңдеу үш шешу сөз арқылы жүзеге асырылады: try, 
catch және throw. 
Қате туындай алатын, бағдарламалық кодтың фрагменті, байқап көру 
деп аударылатын try-қызметші сөзі алдында жазылған, құрама оператор 
болып табылатын, бақыланатын блокқа кіру керек . 
Егер қате try блогында бар болса, онда ол қоздырылынып (throw),
содан кейін ұсталынып (catch) және өңделінеді. 
Блок try-дан шақырылатын функцияларда, ерекше жағдайды туғыза 
алады. Кез келген ерекше жағдай, catch нұсқасымен ұстап алынуы керек, ал 
ол, ерекше жағдайды қоздыратын try блогынан кейін орналасу керек. try 
блогымен catch нұсқасының бірнешеуі байланыста бола алады. Онда қандай 
catch нұсқасы қолданылатыны ерекше жағдайына байланысты, қалған try 
блогының нұсқалары ескерілмейді. Программаны құратын кластары 
типтермен бірге кез келген типтерді қолдануға болады. Негізінен ерекше 
жағдайлар ретінде, жиі түрде класс типтері қолданылады. 
throw нұсқасының негізгі формасы: throw ерекше_жағдай; 
Нұсқа throw try блогының ішінде, немесе осы блок шақыратын (тура 
немесе жанама) кез келген функцияның ішінде орындалуы керек. Мұндағы 
ерекше жағдай – бұл throw ерекше жағдайымен қоздырылатын нұсқау. 
Егер сәйкес catch нұсқасы үшін жоқ ерекше жағдайы қондырылса, онда 
программаның қалыпты емес аяқталуы болуы мүмкін. Standart C ++ 
стандартына сәйкес өңделмейтін ереше жағдайдың қондырылуы terminate ( )
стандартты кітапханалық функцияның шақырылуына алып келеді. Үнсіздік 
бойынша бағдарламаны аяқтау үшін terminate функциясы abort ( ) 
функциясын шақырады. 
Ерекше жағдайды өңдеудің жай мысалы: 
#include 
int main(void) 
{ cout «″ басы \n″; 
try{ // try блогының басы
cout «″ try блогының ішінде \n″; 
throw 10 // қатені қоздыру 
cout «″ Бұл нұсқа орындалмайды! cout″; 
} catch (int i) //қатені ұстап алу 


51 
cout «″ қате номері қамтылған : «″ i cout « endl; 

cout «″ соңы ″; 
return 0; 

catch нұсқауын орындағанан кейін, бағдарламаны басқару одан кейінгі 
келесі нұсқау беріледі. Оған қарамастан, әдетте catch блогы exit ( ), abort( ) 
немесе қандай да бір функцияны шақырумен бағдарламаны мәжбүр етіп 
аяқтайды. 
Егер осы нұсқау try блогынан шақырылатын функцияға кірсе, онда 
ерекше жағдай try блогына кірмейтін нұсқамен де қоздырылуы мүмкін. 
try блогын функцияның ішінде орналастыруға болады. Мұндай 
жағдайда, функцияға әрбір енген сайын ерекше жағдай өңдеушісі қайта 
орнатылады. 
Кейбір жағдайларда жүйені барлық ерекше жағдайлардың типіне 
тәуелсіз, ұстап алатындай етіп баптау керек. Мұны өте оңай істеуге болады. 
Ол үшін catch нұсқасының келесі формасын қолданыңыз: 
сatch ( …) { //барлық ерекше жағдайларды өңдеу } 
Мұндағы көпнүкте мәндердің кез келген типіне сәйкес келеді. 
try блогынан шақырылатын функция үшін ерекше жағдай типтерінің 
санын шектеуге болады, оны осындай функция қоздыра алады. Нақтысында 
функцияға қандай қандай да бір ерекше жағдайды қоздыруға тыйым салуға 
болады. Ол үшін функцияның анықтамасына throw кілттік сөзін қосу керек: 
Нәтиже_типі функция _аты (аргументтер_тізімі) throw (типтер_ тізімі) 
{…} 
Мұнда типтер тізімі өрісінде, функция қоздыра алатын, ерекше 
жағдайлардың мәндер типтері үтірмен бөлініп келтірілген. Басқа типті 
ерекше жағдайды қоздыруды байқап көргенде, бағдарламаның авариялық 
түрде аяқталуына алып келеді. Қоздыратын ерекше жағдайлар типтерін 
шекте, функцияның try блогынан шақырғаннан кейін мүмкін болатындығын 
түсіну керек. Яғни, функция ішінде try блогы ерекше жағдайдың кез келген 
типін қоздыра алады, себебі ол осы функция ішінде ұсталынады. 
Ерекше жағдайды қайта қоздыруға болады. Мұның мағынасы
әрқайсысы ерекше жағдайды өзінің аспектісінен өңдейтін бірнеше 
процедураға, ерекше жағдайды өңдеуге мүмкіндік беру болып табылады. 
Ерекше жағдай, осы блоктан шақырылатын кез келген функцияда немесе сatch 
блогының ішінде ғана қайта қоздырылады. 
Бір типті ерекше жағдайды қайта өңдеу мысалы: 


52 
#include 
void Exception ( ) 
{ try { // char * типті ерекше жағдайды қоздыру
throw ″ сәлем ″;

// char* типті ерекше жағдайды ұстап алу 
catch (char*) 
{ cout « ″Exception ( ) функциясының ішіндегі char*ұстап алу \n″; 
throw; // char* типті ерекше жағдайды қайта өңдеу, бірақ енді Exception
( ) функциясының ішінде емес. 


int main(void) 
{ cout «″ Басы \n″; 
try{ Exception ( ); 
catch (char*){ cout « ″соңы main ( ) функциясының ішіндегі char*ұстап
алу\n″;} 
cout «″ Соңы ″; 
return 0; 

Бағдарлама экранға мынаны шығарады: 
Басы
Exception ( ) функциясының ішіндегі char*ды ұстап алу 
main ( ) функциясының ішіндегі char*ды ұстап алу 
Соңы. 
New операторының қазіргі уақыттағы спецификациясына сәйкес, ол 
жадыдағы орын бөлу сәтсіз болған кезде ерекше жағдайды қоздырады. 
Жадыдан осындай сұраныс үшін, new операциясынан басқа стандартты 
құрылғылар, операция-функциялар operator new ( ) және operator new[ ] 
көмегімен енгізілетін қайта жүктелген операциялар болып табылады. Үнсіздік 
бойынша, егер new операциясы жадыдан қажет бөлігін бөле алмаса, онда ол 
нөлдік мәнді (NULL) қайтарады және қабаттас xalloc типті ерекшелікті 
құрады. xalloc типі - бұл except.h тақырыптық файылында анықталған 
класс. 
Бақылау сұрақтары: 
1)
Ерекшелік дегеніміз не? 
2)
try блогы және catch операторы не үшін керек? 
3)
Ерекшелік қандай ақпаратты сақтайды? 
4)
Функциялар, глобальды айнымалылар және ерекшелік механизмінің 
қолдау кластары. 
5)
Ерекшеліктегі конструкторлар мен деструкторлар. 


53 


Достарыңызбен бөлісу:
1   ...   15   16   17   18   19   20   21   22   23




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет