Книга е още в много ранна фаза на написване


Обработка на изключенията: работа с грешките



страница13/73
Дата25.07.2016
Размер13.53 Mb.
#6732
1   ...   9   10   11   12   13   14   15   16   ...   73

Обработка на изключенията:
работа с грешките


От началото на езеците за програмиране насам обработката на грешките е била ви­наги един от най-трудните моменти. Тъй като е толкова трудно да се направи добра схема за обработка на грешки, много езици просто игнорират този въ­прос, предавайки проблема на разработчиците на библиотеки, които пък вземат половинчати мерки, въвршещи в много случаи работа, но които могат лесно да бъдат провалени, изобщо просто като бъдат игнорирани самите те. Главният проблем на повечето схеми за обработка на грешки е, че те се осно­ва­ват на бдителността на програмиста за спадване на приета схема, която не е на­ло­жена от самия език. Ако програмистът не е бдителен, каквито често биват те, когато бър­зат, схемата лесно може да бъде забравена.

Обработката на изключения връзва обработката на грешки направо в езика и да­же операционната система. Изключението е обект, който е “изхвърлен” от част­та на грешката и може да бъде “хванат” от подходящ обработчик на из­клю­чения проектиран да обработи съотватния конкретен тип грешка. Сякаш обра­ботката на изключения е друг, паралелен път, който пресмятанията могат да поемат, ако нещата се сбъркат. И понеже то използва друг път на из­пъл­не­ние, не е необходимо да си пречи с вашия код, който не се занимава с грешки. То­ва прави кодирането по-просто, понеже не сте принудени постоянно да про­ве­рявате за грешки. В добавка изхвърленото изключение не прилича на върната стой­ност на грешката от функция или флаг сложен от функция с цел да от­бе­ле­жи наличието на грешка, те могат да бъдат игнорирани. Изключението не може да бъде игнорирано, така че ще му дойде времето в някой момент. Накрая, из­клю­ченията дават начин надеждно да се излезе от лошата ситуация. Наместо про­сто да излезете (да завърши програмата - б.пр.) често може нещата да се опра­вят и изпълнението да продължи, което довежда до много по-добри про­гра­ми.

Обработката на изключения в Java изпъква сред останалите езици, понеже тук то е вградено от самото начало и потребителят на езика е принуден да го из­полз­ва. Ако не си направите програмата да обработва правилно изключения, по­лучавате грешки при компилация. Тази гарантирана състоятелност прови обра­ботката на грешки много по-лесна.

Нищо не пречи че обработката на изключения не е ОО черта, макар и в ООП ези­ците изключението да е представено обикновено с обект. Обработката на изклю­чения съществува от преди ООП.

Многонишково изпълнение


Основна идея в компютърното програмиране е изпълняването на повече от една задача едновременно. Много програмни проблеми изискват възможността про­грамата да може да спре текущото изпълнение, да свърши нещо друго и да се върне към основната си задача. Много подходи е имало за решението. Пър­во­начално програмисти с познаване на машината на ниско ниво писали про­гр­а­ми за обслужване на прекъсванията и отклонението от главния процес се за­поч­вало с хардуерно прекъсване. Въпреки че работело добре, това било трудно и непреносимо, така че правело преместването на протрамата на нов тип ма­ши­на скъпо и бавно.

Понякога прекъсванията са важни за критични задачи,у но в повечето случаи се ис­­ка просто задачата да се раздели на конкурентно работещи парчета, които съв­местно да я правят по-диалогична. В рамките на програмата тези отделно ра­бо­тещи процеси се наричат нишки и основната концепция се нарича мно­го­ниш­ковост. Общ пример за многонишковост е потребителският интерфейс. Чрез използването на многонишковост потребителят може да натисне бутон и да получи бърз отговор, наместо да чака завършването на цялата работа.

Както обикновено, нишките са само начин да се ангажира време от един про­це­сор. Когато операционната система поддържа повече от един процесор и та­ки­ва са налични, всяка нишка може да се изпълнява на отделен процесор и па­ра­лел­но с другите. Едно от удобните неща на мултитрединга е, че програмистът на високо ниво не е необходимо да се грижи дали процесорите са много или са­мо един. Програмата логически се разделя на нишки и ако има повече от един про­цесор, тя просто работи по-бързо.

Всичко това прави нишките да звучат доста прости. Има клопка: разделяемите ре­сурси. Ако има повече от една нишка, която се нуждае от даден ресурс, има­те проблем. Например не може два процесора едновременно да подават ин­фор­ма­ция към принтер. За да се реши проблемът ресурсите, които трябва да се спо­делят, като принтера, трябва да бъдат заключени по време на използването им. Така че нишката заключва ресурса, свършва си работата и го отключва, та­ка че друга да може да го използва.

Нишковостта е вградена в Java, което прави сложният проблем много по-прост. Ниш­ковостта се поддържа на обектно ниво, така че нишката се представя с обект. Java също осигурява заключване на ресурси с определени ограничения. Мо­же да заключва паметта на всеки обект (която памет е, в края на краищата, раз­деляем ресурс) така че само една нишка да я използува едновременно. Това се постига с ключовата дума synchronized. Другите ресурси трябва да се за­ключ­ват явно от програмиста, типично чрез създаване на обект, който пред­ста­вя ключалката и трябва да бъде пробван преди ресурсът да се използва.

Упоритост


Като се създаде обект, той съществува, колкото е необходим, но по никакъв на­чин след завършването на програмата. Докато на пръв поглед това има смисъл, има и ситуации, в които би било чудесно обектът да си запазва стойностите и ко­гато програмата не работи. При следващо стартиране на програмата такъв обект ще съдържа същата информация, каквато при предишното е получил. Раз­­бира се, това би могло да се постигне чрез писане на файлове, например бази данни, но в цялостния дух на ООП всичко да е обекти просто трябва да се на­прави обект, който е упорит (понякога - устойчив, б.пр.)и да се грижи за всички детайли вместо про­гра­миста.

Java 1.1 поддържа “лека упоритост,” което означава, че лесно може да запом­ня­те и възстановявате обекти. Причината да е “лека” е, че все още трябва явно да се викат функции за запомнянето и възстановяването. В някоя бъдеща версия мо­же да се появи по-пълно обслужване на "упоритост".





Сподели с приятели:
1   ...   9   10   11   12   13   14   15   16   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница