PB161 programování v C++ Výjimky Bezpečné programování

Podobné dokumenty
Programování v C++ 1, 17. cvičení

Z. Kotala, P. Toman: Java ( Obsah )

PB161 Programování v jazyce C++ Přednáška 8

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Výjimky a ošetřování chyb v PHP. Who is General Failure and why is he reading my disk?!

Jazyk C++ II. Výjimky

Programování v C++ 2, 4. cvičení

Připravil: David Procházka. Programovací jazyk C++

PB161 Programování v jazyce C++ Přednáška 4

Programování v C++ 1, 6. cvičení

Programování II. Úvod do dědičnosti 2018/19

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Programování v jazyce C a C++

Dědičnost (inheritance)

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

PB161 Programování v jazyce C++ Přednáška 9

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Více o konstruktorech a destruktorech

PB161 Programování v jazyce C++ Přednáška 9

Programování v C++ 1, 5. cvičení

NPRG030 Programování I, 2015/16 1 / :25:32

Výjimky. v C# a Javě

Objektově orientované programování v jazyce Python

Programování II. Polymorfismus

Objektové programování

Jazyk C++ I. Polymorfismus

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private:

Ukazka knihy z internetoveho knihkupectvi

Java - výjimky. private void vstup() throws IOException {... }

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

přetížení operátorů (o)

Objektově orientované programování v jazyce Python

Algoritmizace a programování

dovolují dělení velkých úloh na menší = dekompozice

Generické programování

Programování v C++ 3, 3. cvičení

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Vyřešené teoretické otázky do OOP ( )

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

PB161 Programování v jazyce C++ Přednáška 1

NMIN201 Objektově orientované programování 1 / :36:09

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

NPRG031 Programování II 1 / :25:46

Ošetření chyb a výjimky

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Programování v C++ 2, 8. cvičení

Algoritmizace a programování

Soubor jako posloupnost bytů

Programování v C++ VI

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

Konstruktory a destruktory

Programování v C++ 1, 14. cvičení

24. listopadu 2013, Brno Připravil: David Procházka

Zpracoval:

Pole stručný úvod do začátku, podrobně později - zatím statická pole (ne dynamicky) - číslují se od 0

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Programování v C++ 2, 7. cvičení

Chování konstruktorů a destruktorů při dědění

PB161 Programování v jazyce C++ Přednáška 10

Dynamická identifikace typů v C++.

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Výjimky. Tomáš Pitner, upravil Marek Šabo

Programování v jazyce C a C++

PB161 Programování v jazyce C++ Přednáška 4

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Sdílení dat mezi podprogramy

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

17. Projekt Trojúhelníky

Jazyk C++ I. Polymorfismus

6 Příkazy řízení toku

Implementace LL(1) překladů

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

PODPROGRAMY PROCEDURY A FUNKCE

Úvod do programování. Lekce 1

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

8 Třídy, objekty, metody, předávání argumentů metod

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Jazyk C++ I. Šablony 2

Programování II. Dědičnost změna chování 2018/19

PREPROCESOR POKRAČOVÁNÍ

Programování II. Návrh programu II

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Dědění, polymorfismus

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Úvod do programování

Virtuální metody - polymorfizmus

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

konstruktory a destruktory (o)

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Transkript:

PB161 programování v C++ Výjimky Bezpečné programování

Chyby... Snaha psát programy bez chyb myslet : ) Snaha psát programy se schopností fault tolerance. snaha se z chybového stavu dostat lze řešit testováním všeho možného nebo v C++ využitím výjimek pokusné bloky handlery inteligentní probublávání výjimek...

Výjimky dle C++ C++ podporuje pouze práci se synchronními výjimkami lze chytit stav dělení s nulou vyvolány částí programu nelze chytit stav zmáčknuto CTRL+C Výjimky v C++ jsou organizovány do třídní hierarchie dle dědičnosti. při zachytávání výjimek se bere tato hierarchie v potaz lze vytvářet vlastní výjimky

Pokusný blok try { př íkazy } seznam_handlerů Část programu uzavřené do složených závorek uvozených klíčovým slovem try. Nedojde li k výjimce příkazy bloku se dokončí handlery se přeskočí řízení pokračuje za seznamem handlerů

Pokusný blok (2) try { př íkazy } seznam_handlerů Dojde li v tomto bloku k výjimce zbytek neprovedených příkazů bloku se přeskočí hledá se handler, který ošetří vzniklou výjimku (tzv. výjimku zachytí) nalezne li se, provede se případná série příkazů u něj uvedených řízení pak pokračuje za handlerem nenalezne li se, probublá výjimka do nadřazeného bloku dostane li se výjimka až do nejvyššího bloku a není li ošetřena ani tam, dojde k ukončení programu ( neošetřená výjimka, zavolá se terminate())

Handler catch (deklarace_výjimky) { př íkazy } Seznam handlerů je pak posloupnost jednotlivých handlerů zapsaných přímo za sebou. deklarace_výjimky podobná syntaktická pravidla jako deklarace formálních parametrů funkcí nebudeme li potřebovat uvnitř handleru hodnotu výjimky, netřeba uvádet identifikátor vývolané výjimky výpůstka ( ) značí, že handler ošetří všechny vzniklé výjimky v bloku uvádí se většinou jako poslední handler v seznamu

Handler catch (deklarace_výjimky) { př íkazy } Handler má vždy jen max. jeden parametr bez implicitní hodnoty. Výjimka se považuje za ošetřenou, vstoupí li řízení do handleru. Zavoláme li v handleru throw;, dojde k předání téže výjimky do nadřezeného bloku. částečné ošetření výjimky pozor, v nadřazeném bloku musí být výjimka ošetřena

Výběr handleru Dle typu výjimky uvedenou u handleru. Uplatňují se základní pravidla OOP Pravidla: potomek může vždy zastoupit předka typ vzniklé výjimky se musí úplně shodovat s typem výjimky uvedeným u handleru, kromě: T, const T, T&, const T& u handleru akceptují jednoznačného a dostupného potomka T T* akceptuje výjimku typu U*, lze li T* přetypovat na U* pomocí standardních konverzních ukazatelů

Úkol Doplňte do programu deleni.cc výjimky tak, aby nedošlo k pádu programu, ale k výpisu chybového hlášení. Nepoužívejte ošetření dle C (prostý výpis). Použijte try{}, catch() {}, throw

Pozitivní vlastnost šíření výjimky Při šíření výjimky dochází v probublávaných blocích k volání destruktorů objektových typů s paměťovou třídou auto. Jelikož v C++ nemohou být dvě a více výjimek na stejné úrovni, nesmí dojít k vyvolání jiné výjimky v průběhu hledání vhodného handleru pro ošetření stávající výjimky. destruktory pokud možno psát tak, aby se z nich nemohla výjimka rozšířit nikdy uncaught_exception()

Výjimka v konstruktoru Z konstruktoru se pricipielně rozšířit výjimka může, ale jedná li se o globální objekt, nikdo výjimku nezachytí program končí je li volán konstruktor, ze kterého se rozšíří výjimka, v inicializační části konstruktoru jiné třídy volání (a vznik výjimky) proběhne před vstupem do těla volajícího konstruktoru nemůže tedy výjimku ošetřit program končí (resp. nemusí, ale ošetření nebude... adekvátní)

Výjimky a funkce Rozšíříme význam slova PROTOTYP funkce. typ název (parametry) throw(seznam typ ů); seznam_typů typy výjimek, které se smí z funkce rozšířit při snaze o propagaci jiné výjimy, dojde k chybě volání funkce unexpected() a časem terminate() Je li seznam prázdný, nesmí se z funkce rozšířit žádná výjimka. Není li specifikace throw... uvedena vůbec, smí se z funkce rozšířit libovolná výjimka.

Částečné ošetření výjimky V handleru, který vzniklou výjimku zachytí, zavoláme příkaz: throw; Výjimka je poslána do nadřazeného bloku, jakoby nebyla ošetřena vůbec. Musí ji nějaký handler na její cestě vzhůru něco (handler ; )) zachytit.

Výjimka v handleru try { // 1. try blok try { // 2. try blok } catch (){ // handler pro 2. try } } catch (){ // pro 1. try }

Vlastní výjimky Můžeme specifikovat vlatní typy výjimek lze dědit od standardních. Při přetížení metody what() je nutno dodržet prototyp: const char* what(void) const throw(); Stále platí pravidlo OOP, že potomek může zastoupit předka vytvoříme li vlastní hierarchii výjimek, které budou potomky nějaké výjimky, budou fungovat programi, které nebyly přímo napsány pro naši hierarchii

Úkol error_vector error_vector povinný úkol