Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Język C/C++ Funkcje.
C++ wykład 7 ( ) Wyjątki.
Dzisiejszy wykład Wyjątki.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas. 2 Wzorce Często pojawia się konieczność pisania podobnych funkcji lub klas operujących na argumentach.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Bezpieczeństwo wyjątków w C++: OpenGL
formatowanie kodu źródłowego
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
C++ wykład 7 ( ) Wyjątki. Ogólne spojrzenie na wyjątki Wyjątki zaprojektowano do wspierania obsługi błędów. System wyjątków dotyczy zdarzeń synchronicznych.
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Podstawy programowania
Podstawy informatyki 2013/2014
Podstawy programowania II
Podstawy informatyki 2013/2014
Podstawy programowania
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie urządzeń mobilnych – wykład IV
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki 2012/2013
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Programowanie strukturalne i obiektowe
Seminarium problemowe
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie obiektowe 2013/2014
Programowanie obiektowe 2013/2014
Podstawy języka Instrukcje - wprowadzenie
K URS JĘZYKA C++ – WYKŁAD 7 ( ) Wyjątki.
Technologie internetowe Wykład 7 Kontrola danych użytkownika.
Programowanie proceduralne Podstawy Programowania dla geoinformatyków Wykład 3 Rafał Witkowski, 2015.
Wyjątki. Po co nam wyjątki? Często pisząc jakiś kod staramy się go uczynić uniwersalnym, jesteśmy w stanie wykryć sytuacje niepoprawne, ale nasz kod może.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Pakiety numeryczne Optymalizacja
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Pakiety numeryczne Graphical User Interface Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Pakiety numeryczne Tablice: tworzenie, indeksowanie, wymiary Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Pakiety numeryczne Interpolacja i aproksymacja
Podstawy informatyki Zmienne, stałe Instrukcje sterujące Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Pakiety numeryczne Wielomiany Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Podstawy informatyki Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Podstawy informatyki Operacje we/wy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Podstawy informatyki Operatory rzutowania Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały.
Pakiety numeryczne Operatory, instrukcje sterujące, operacje bitowe Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Programowanie Obiektowe – Wykład 6
Dzisiejsze zajęcia będą wyjątkowe…
Obliczenia w Matlabie Tablice
Obliczenia inżynierskie w Matlabie
Obliczenia w Matlabie Interpolacja i aproksymacja
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Obliczenia w Matlabie Analiza statystyczna
Obliczenia w Matlabie Obliczenia symboliczne
Zapis prezentacji:

Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka

Mechanizm obsługi sytuacji wyjątkowych wykorzystuje się, gdy wiemy, że program nie będzie w stanie wykonać poprawnych obliczeń. W takiej sytuacji „rzucamy” wyjątek, czyli przerywamy obliczenia i „przeskakujemy” do procedury obsługi wyjątku.

Mechanizm obsługi sytuacji wyjątkowych 1.Określenie, gdzie zaczyna się obszar, w którym może wystąpić sytuacja wyjątkowa. try – spróbuj 2.Gdy zaistnieje sytuacja wyjątkowa rzucenie wyjątku. throw – rzuć 3.Określenie reakcji na wystąpienie sytuacji. catch – złap

try { //tu coś może się nie udać throw 1;//coś się nie udało } catch(int) { //reakcja na sytuację wyjątkową }

Co może być sytuacją wyjątkową? O tym decyduje programista. Sytuacją wyjątkową może być wszystko, co my wewnątrz programu za taką uznamy.

Kiedy stosować mechanizm obsługi sytuacji wyjątkowych? Gdy dwa odmienne fragmenty kodu muszą ze sobą współpracować: jeden potrafi wykryć sytuację wyjątkową, ale nie potrafi nic na nią poradzić, drugi wie, co zrobić, ale nie potrafi jej wykryć.

double suma(string nazwa) { ifstream plik(nazwa.c_str()); if (plik.good()) { int s=0, li; while (!plik.eof()) { plik>>li; s+=li; } return s; } else { //return ?? }

double suma(string nazwa) { ifstream plik(nazwa.c_str()); if (!plik.good()) throw 1; int s=0, li; while (!plik.eof()) { plik>>li; s+=li; } return s; } int main() { string nazwa="dane.txt"; double s; for(;;) { try { s=suma(nazwa); break; } catch (int) { cout<<"Podaj nazwe pliku\n"; cin>>nazwa; } cout<<s<<endl; return 0; }

throw vs return Mechanizm obsługi sytuacji wyjątkowych umożliwia powrót z funkcji inny niż za pomocą instrukcji return. Różnica w obiektach zwracanych: argumentem return musi być obiekt określonego typu, argumentem throw może być obiekt dowolnego typu. Różnica w przeniesieniu sterowania: instrukcja return powoduje powrót do miejsca wywołania funkcji, instrukcja throw powoduje przejście do procedury obsługi sytuacji wyjątkowej – odpowiedni blok catch.

Po zakończeniu procedury obsługi wyjątku nie następuje żaden powrót do miejsca skąd rzucono wyjątek. Po zakończeniu wykonywania bloku catch zaczyna się wykonywanie instrukcji znajdujących się po wszystkich blokach catch.

Kolejność bloków catch ma znaczenie (analogicznie jak w przypadku else if). try { throw 1; } catch(int){cout<<"int"<<endl;} catch(double){cout<<"double"<<endl;} catch(char){cout<<"char"<<endl;}

Który blok catch wybiera kompilator? Pierwszy pasujący, czyli: rzucamyoczekujemy T->T T->const T T->T & T*->void*obiekt klasy-> klasy podstawowej pochodnej

void f(int a){cout<<"int\n";} void f(...){cout<<"...\n";} int main() { f(1.0); return 0; } int main() { try { throw 1.0; } catch(int){cout<<"int\n";} catch(...){cout<<"...\n";} return 0; } int …

try { throw 1; } catch(...){cout<<"int\n";} catch(int){cout<<"...\n";} BŁĄD

Zagnieżdżanie bloków try try { try { throw 1; } catch (long){cout<<"long\n";} catch (int){cout<<"int\n";} } catch(int){cout<<"int\n";} catch(double){cout<<"double\n";} int

try { try { throw 1; } catch (long){cout<<"long\n";} catch (char){cout<<"char\n";} catch (...){cout<<"...\n";} } catch(int){cout<<"int\n";} catch(double){cout<<"double\n";} …

Re-throw try { try { throw 1; } catch (long){cout<<"long\n";} catch (char){cout<<"char\n";} catch (...){cout<<"...\n";throw;} } catch(int){cout<<"int\n";} catch(double){cout<<"double\n";} int …

Można sprawdzać jaką wartość ma rzucony obiekt. try { throw 1; } catch(int a){cout<<"int = "<<a<<endl;} int = 1

W przypadku bloków try i catch obowiązują normalne zakresy ważności. try { int a=2; throw a; } catch(int) { cout<<"int = "<<a<<endl; } BŁĄD

Funkcja exit Deklaracja: void exit(int status); Jest to funkcja, która kończy działanie programu, ale wcześniej zamyka wszystkie pliki oraz opróżnia wszystkie bufory.

Funkcja abort Deklaracja: void abort(); Jest to funkcja, która kończy działanie programu (brutalnie).

Funkcja terminate Deklaracja: void terminate(); Jest to funkcja wywoływana przez kompilator w chwili, gdy żaden z bloków catch nie złapie wyjątku. Funkcja ta wywołuje funkcję abort.

Funkcja set_terminate Deklaracja: (void (*wsk)()) set_terminate(void (*wsk)()); Jest to funkcja, która mówi kompilatorowi, jaką funkcję ma wywołać z funkcji terminate.

void nie_zlapano() { cout<<"Nie zlapano wyjatku\n"; exit(0); } int main() { set_terminate(nie_zlapano); try { throw 1; } catch(double) {cout<<"double\n";} } Nie zlapano wyjatku

int main() { set_terminate(nie_zlapano); try { throw 1; } catch(int) { cout<<"int\n"; try { throw 1.0; } catch (int){cout<<"int\n";} } catch(double){cout<<"double\n";} catch(char){cout<<"char\n";} } int Nie zlapano wyjatku

Deklarując funkcję możemy podać jakie wyjątki funkcja może rzucać, np.: void fun();funkcja rzuca dowolny wyjątek void fun() throw (int, double);funkcja rzuca int albo double void fun() throw();funkjca nie rzuca żadnych wyjątków

Funkcja unexpected Deklaracja: void unexpected(); Jest to funkcja wywoływana przez kompilator w chwili, gdy z wnętrza funkcji zostanie rzucony nieoczekiwany wyjątek. Funkcja ta wywołuje funkcję terminate.

Funkcja set_unexpected Deklaracja: (void (*wsk)()) set_unexpected(void (*wsk)()); Jest to funkcja, która mówi kompilatorowi, jaką funkcję ma wywołać gdy rzucony zostanie wyjątek niespodziewany.

void fun() throw(int) { throw 1.0; } void niespodziewany() { cout<<"Wystapil niespodziewany wyjatek"; exit(0); } int main() { set_unexpected(niespodziewany); try { fun(); } catch(int) { cout<<"int\n"; } return 0; }

goto for(;;){ goto koniec; } koniec:

throw try{ for(;;){ throw 1; } catch (int){}

Wyjątki standardowe można znaleźć w Thinking in C++ tom II Bruce Eckel Dostępne

Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: