9.Mechanizm obsługi wyjątków w językach obiektowych i porównanie cech tego mechanizmu z „proceduralną” obsługą błędów.

Wyjątek to mechanizm kontroli przepływu służący do obsługi zdarzeń wyjątkowych, a w szczególności sytuacji błędnych.

Nawet w poprawnie napisanych programach należy się liczyć z możliwością wystąpienia sytuacji wyjątkowych. Nie można przykładowo przewidzieć, że podczas wpisywania do pliku skończy się miejsce na dysku (bo zajął je inny proces), lub że podczas przesyłania danych zerwie się połączenie.

Dobrze napisany kod powinien zakładać możliwość wystąpienia takich sytuacji wyjątkowych. Zazwyczaj jednak nie da się podjąć żadnych działań naprawczych w miejscu ich wykrycia. Trzeba przerwać normalny tok działania programu i przekazać informacje o błędzie "na zewnętrz", do szerszego kontekstu (do metody, która wywołała daną metodę lub jeszcze dalej), gdzie mogą być podjęte działania napracze.

Starsze języki programowania jak C nie zawierały żadnych specjalnych mechanizmów ułatwiających radzenie sobie w takich sytuacjach. Istniało natomiast kilka ogólnie przyjętych schematów postępowania. Można zwracać specjalną wartość oznaczającą błąd lub ustawiać glabalnie dostępną flagę, którą następnie trzeba skontrolować.
Sprawdzanie czy błąd nie wystąpił po wywołaniu każdej kolejnej metody, skutkowało wielokrotnym napęcznieniem kodu oraz drastycznie utrudniało jego stworzenie i zrozumienie. Brak specjanlnych mechanizmów wymuszających obsługę sytuacji wyjątkowych jest i był ważnym ograniczeniem przy tworzeniu dużych, solidnych i łatwych w pielęgnowaniu programów.

Nowoczesne obiektowe języki programowania mają wbudowany specjalny mechanizm ułatwiający i upraszczający radzenie sobie z obsługą systuacji wyjątkowych. W chwili wykrycia takiej sytuacji można stworzyć specjalny obiekt nazywany wyjątkiem (ang. exception), zawrzeć w nim wszystkie informacje na temat tego, co się stało i przy pomocy specjalnej instrukcji throw (w niektórych językach raise) zgłosić ten wyjątek do obsłużenia. Zgłoszenie wyjątku wymusza przerwanie normalnego trybu wykonywania programu i rozwinięcie stosu wywołań, aż do napotkania kontekstu zawierającego kod obsługi dla wyjątków tego rodzaju. Jeżeli cały stos zostanie rozwinięty, a wyjątku nie obsłużono, program jest przerywany.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License