Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 7 ( ) Wyjątki.
Advertisements

Programowanie wizualne PW – LAB6 Wojciech Pieprzyca.
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.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Programowanie obiektowe PO PO - LAB 6 Wojciech Pieprzyca.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Bezpieczeństwo wyjątków w C++: OpenGL
Szablony (wzorce) Przykład 1: Szablon klasy -
Licznik template<class Count_Type> class Count { public:
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Obliczanie miar ortogonalnych.
Obliczanie miar biegunowych.
pomierzonych metodą ortogonalną
Czytanie numerów puktów i ich współrzędnych z mapy.
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.
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
Java – programowanie obiektowe
#include #include main () { cout
Podstawy informatyki 2013/2014
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 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
Instrukcje sterujące część 2
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 7.
Pierwsze programy.
Przekazywanie argumentów
Programowanie strukturalne i obiektowe
Seminarium problemowe
Instrukcja for. Instrukcja warunkowa mgr inż. Agata Pacek.
Podstawy informatyki 2013/2014
INSTRUKCJE Umożliwiają zapis algorytmu, służą do sterowania przebiegiem programu. warunkowe (podejmowanie decyzji) 1. if-else „jeżeli”, 2. switch-case.
Podstawy informatyki 2013/2014
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
Składnia instrukcji warunkowej if…
K URS JĘZYKA C++ – WYKŁAD 7 ( ) Wyjątki.
Technologie internetowe Wykład 7 Kontrola danych użytkownika.
1 Zagadnienia na egzamin. 2 Język C podsumowanie Struktura programu w języku C Zmienne, Stałe Operacje arytmetyczne Operatory logiczne Priorytety operatorów.
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.
Pliki tekstowe – odczyt i zapis Zajęcia 11. Zapis do pliku tekstowego Prosty program pokazujący sposób zapisu do pliku tekstowego: // writing on a text.
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.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
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.
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
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…
Podstawy informatyki Operacje we/wy
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.
Zapis prezentacji:

Podstawy informatyki 2013/2014 Ł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

1.Zmienne: 1.deklaracja (extern), 2.definicja, 3.inicjalizacja, 4.nazwy zmiennych. 2.Stałe: 1.będące liczbami całkowitymi (hex, oct, dec) 2.będące liczbami zmiennoprzecinkowymi, 3.znakowe (znaki specjalne), 4.tablice znakowe – C-stringi.

3.Instrukcje sterujące: 1.blok instrukcji 2.if 3.if…else 4.switch (ograniczenia) 5.while 6.do…while 7.for 8.break 9.continue 10.goto (inne sposoby wyjścia z zagnieżdżonej pętli)

4.Typy: 1.fundamentalne 2.złożone [] () * & 3.wbudowane 4.definiowane przez użytkownika 5.typ void 5.Czas życia obiektu, zakres ważności, zasłanianie nazw. 6.Specyfikatory: 1.const 2.register 3.volatile 4.static

7.Typ wyliczeniowy enum, instrukcja typedef 8.Operatory: 1.arytmetyczne jedno- i dwuargumentowe, 2.przypisania, 3.logiczne, 4.bitowe, 5.wyrażenie warunkowe, 6.operator przecinek, 9.Priorytety i łączność operatorów.

10.Funkcje: 1.deklaracja, definicja, wywołanie, 2.zwracanie wartości, 3.argumenty formalne i aktualne, 4.przesyłanie argumentów przez wartość i przez referencję, 5.argumenty domniemane, 6.funkcja inline, 7.zmienne lokalne statyczne.

11.Preprocesor: 1.define 2.undef 3.makrodefinicja 4.kompilacja warunkowa 5.include 6.ifndef 7.nazwy predefiniowane: 1.__FILE__ 2.__LINE__ 3.__DATA__ 4.__TIME__

12.Tablice: 1.definicja, inicjalizacja, 2.odwołania do elementów tablicy, 3.stałe tablice, 4.tablice znakowe, 5.tablice wielowymiarowe, 6.przekazywanie tablic do funkcji.

13.Wskaźniki: 1.wskaźniki do pojedynczych obiektów i tablic, 2.wskaźnik jako argument funkcji, 3.wskaźnik do funkcji, 4.wskaźnik do funkcji jako argument innej funkcji, 5.arytmetyka wskaźników, 6.stałe wskaźniki, wskaźniki do stałych, stałe wskaźniki do stałych, 7.dynamiczne tworzenie tablic, usuwanie tablic, 8.wskaźnik do tablicy wielowymiarowej, 9.funkcja zwracająca tablicę (wskaźnik) jedno- i wielowymiarową.

14.Operatory rzutowania. 15.Argumenty z linii poleceń (argumenty funkcji main). 16.Przeładowanie nazw funkcji: 1.lista argumentów przy przeładowaniu, czyli kiedy dwie funkcje o tej samej nazwie mogą współistnieć w tym samym zakresie ważności (błędy w momencie definiowania funkcji oraz błędy w momencie wywołania funkcji), 2.wskaźnik do funkcji przeładowanej,

3.konwersje przy dopasowaniu argumentów aktualnych do argumentów formalnych 1.dopasowanie dokładne (z trywialną konwersją), 2.dopasowanie z awansem, 3.dopasowanie za pomocą konwersji standardowych, 4.dopasowanie za pomocą konwersji zdefiniowanych przez użytkownika, 5.dopasowanie do funkcji z wielokropkiem.

17.Szablony funkcji: 1.definiowanie, 2.parametr szablonu, argument funkcji, 3.funkcja specjalizowana, 4.obiekty lokalne, typy pochodne, obiekty lokalne statyczne, 5.funkcje inline, 6.Run-Time Type Identyfication.

18.Struktury: 1.definicja i rozmiar struktury, 2.obiekty strukturalne, wskaźniki do nich, inicjalizacji obiektów strukturalnych, 3.odwoływanie się do składników struktury, 4.pola bitowe, unie – zastosowanie do konwersji danych, 5.metody składowe struktury, 6.wskaźnik this 7.struktury zagnieżdżone i lokalne, 8.statyczny składnik struktury, 9.wskaźnik do niestatycznego składnika struktury, 10.modyfikator mutable.

19.Klasa biblioteczna std::string: 1.definiowanie stringu, 2.dodawanie, 3.długość, pojemność, 4.rezerwacja pamięci, zmiana rozmiaru, 5.odwoływanie się do poszczególnych znaków w stringu oraz do fragmentów stringu, 6.wyszukiwanie, 7.usuwanie, wstawianie, zastępowanie, zamiana, 8.porównywanie, 9.getline, 10.iteratory stringu.

20.Operacje we/wy: 1.operacje we/wy bitowe i tekstowe, 2.posługiwanie się strumieniami, 3.przeładowane operatory przesunięcia bitowego, 4.domniemania, 5.flagi i maski, 6.zmiany formatowania: 1.funkcje zmieniające flagi, 2.funkcje nie zmieniające flag, ale towarzyszące im parametry, 3.manipulatory, 7.nieformatowane operacje we/wy: 1.funkcje wyjmujące ze strumienia, 2.funkcje wstawiające do strumienia, 3.funkcje dodatkowe, 8.Strumienie płynące do i z plików: 1.flagi stanu błędu strumienia, 2.wybór miejsca czytania i pisania, 9.Strumienie płynące do i z obiektów klasy string

21.Mechanizm obsługi sytuacji wyjątkowych: 1.bloki try i catch, instrukcja throw, 2.throw vs return, 3.blok try i innym bloku try, 4.blok try w bloku catch, 5.powtórne rzucenie tego samego wyjątku, 6.wartość rzuconego obiektu, 7.funkcje exit, abort, 8.funkcje terminete, set_terminate, 9.funkcje unexpected, set_unexpected.

22.Zapis liczb w komputerze: 1.jednostki informacji, 2.systemy addytywne i pozycyjne, 3.reprezentacja liczb całkowitych: 1.liczby nieujemne, 2.kod znak-moduł, 3.kod U1, 4.kod U2, 5.kod z nadmiarem, 6.dodawanie liczb całkowitych, 4.liczby stałoprzecinkowe, 5.liczby zmiennoprzecinkowe (standard IEEE 754), 6.przeliczanie pomiędzy systemami (2, 8, 10, 16), 7.błędy zaokrągleń.

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: