Sid 1 2000-period2CD5250 OOP med C++ Mats Medin MDH/IDT Undantag - eng. Exceptions Viktig del av klassbiblioteksdesign “Hoppa direkt ut med felkod” class.

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
OOP Objekt-orienterad programmering
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Föreläsning 1.
Algoritmer och datastrukturer
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Abstract & sealed.
Exception Handling Kapitel 9. Agenda Exceptions try, throw and catch Skapa en egen exception-klass Multipla throw / catch Slänga vidare en exception Olika.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstruktor Ser till att objektets data är korrekt initierade MinKlass::MinKlass(); MinKlass::MinKlass(int.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT Lite OOA/OOD.
Föreläsning 5. Problemet Vi har sett att vi kan ersätta de metoder vi ärver från överklassen med egen funktionalitet (polymorfism) class Bil : public.
int res2=Math.max(tal1,tal2);
4. Arv och dynamisk bindning
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Några småsaker switch break, continue, goto Kommentarer.
Programmering i C# 5. Structer.
OOP Objekt-orienterad programmering
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Multipelt arv Drawable draw() move() position bitmap Persistent save() restore() storage_file_name.
Utveckling med ramverket .net
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
FRÅGEUTVECKLING INOM MSSQL Marcus Medina. Dagens visdomsord ” Exercitatio artem parat ” (Övning ger färdighet) - Tacitus, Germania 24.
Föreläsning 6. Klassmallar Templates kan givetvis även användas för klasser –Standardutseende template // Klassdefinition (*.h) class C { returtyp metod(parametrar…);...
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 1. Innehåll Introduktion till objektorientering –OOP (objektorienterad programmering) –Objekt, instanser, klasser C++ –OO i C++ –Standardbibliotek.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Sid 1 CD5250 Daniel Flemström MDH/IDT COM Extremely Rough Overview.
Sid period2CD5250 OOP med C++ Daniel Flemström MDH/IDT Abstrakta Containertyper Vilka finns fördefinierade? Vad kan dom? #pragma warning(disable:4786)
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Rekursion. En metoddefinition som innehåller ett anrop av sig själv kallas rekursiv.
Objektorienterad programmering
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Lite OOA/OOD.
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Abstrakta Containertyper Vilka finns fördefinierade? Vad kan dom?
Programmering i C# Laborationer.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Programmeringsteknik
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Funktionsmall template void myfunc(Type * arr, int n) { // kod; // objekt av typ Type kan deklareras.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Konstanter float pi; const float pi = ; float *pip = π //Kompileringsfel! const float.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
C++ som ett bättre C Sid 1 6/23/2015CD5250 OOP med C++ Mats Medin MDH/IDT C++ kurs CD5250, vårterminen 2000 Lärare: Mats Medin,
Iteratorer och generiska algoritmer sid. 1 6/28/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Iterator vector ::iterator b = ivec.begin() vector ivec vector.
Överlagring av operatorer, friends, user-defined conversions, klassmallar sid. 1 6/29/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Överlagring av operatorer.
Objektbaserad programmering sid. 1 6/30/2015CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv.
DA7351 Programmering 1 Undantag Klassen Class Rekursion (extra) Föreläsning 19.
Objektorienterad programmering sid. 1 7/15/2015 CD5250 OOP med C++ Mats Medin MDH/IDT Objektorienterad programmering OOP = objektbaserad programmering.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
TDP004 Objektorienterad Programmering Fö 5 Minneshantering.
KPP053, HT2015 MATLAB, Föreläsning 4
Detaljer i exception-hantering
Objektorienterad programmering forts
Föreläsning 15: Exceptions & lite swing, gränssnitt
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Undantag - eng. Exceptions Viktig del av klassbiblioteksdesign “Hoppa direkt ut med felkod” class divisionMedNoll {/*...*/};... if (delaMed == 0) throw divisionMedNoll(); resultatet = taljarUttr / delaMed ;... explicit konstruktoranrop! Exceptions brukar vara klasser

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Exceptions forts jämför C: #define divide_by_zero 7... if (divi == 0) return divide_by_zero ; /* else continue here */ En exception orsakar uthopp genom alla anropande funktioner tills den fångas. Om den inte fångas i programmet anropas terminate() och programmet avslutas.

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Hur man hanterar exceptions try { kompliceradDivision(x,y,z,p,k,result); } catch (divisionMedNoll) { cout << “Division med noll!”; result = 1; }

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Första catch matchar try { // kod.... } catch (divisionMedNoll) { /*...*/} catch (std::bad_alloc) {/*...*/} catch (...) { cout << “det blev nåt fel”; } Fånga specialiserade fel först och vanligaste feltyp sist för att kunna hantera på bästa sätt. (exceptions ingår ofta i arvshierarki)... tar alla exceptions

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Exception specification - i snitt mot användaren void kompliceradDivision(int x, int y, int z, int p, int k, int result) throw(divisionMedNoll, forStortTal); // Garanteras att funktionen ej ger andra // exceptions extern void noProblem(int x) throw(); // noProblem garanterar: inga exceptions alls annars: unexpected() terminate()

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Exception-hantering i flera steg float meanVal() { try { /* kod */ } catch (divisionMedNoll) { cout << “Division med noll i meanVal()”; throw; // divisionMedNoll “kastas” // vidare för hantering i anropande rutin }

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Vad händer med stack,heap? stack unwind - anropsstacken plockas ner för objekt i stacken görs destruktoranrop minnesläckagerisk - om man använt “new” måste man avallokera

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Detaljer i exception-hantering 1throw skapar temporärt objekt av exception- klassen 2exception-objektet tillverkas genom att det första objektet kopieras till speciell lagringsplats –temporärobjektets statiska typ används 3temporärobjektet tas bort 4exception handler letas upp –stack unwind, destruktoranrop därför bör resurser representeras av objekt auto_ptr?!

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Detaljer i exception-hantering forts 5catch (Extype eobj) eobj exception-objektet kopieras till eobj –Om Extype är basklass till exception-objektet kopieras endast basklass-delen eventuellt rethrow skickar exception- objektet (inte eobj) vidare

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Detaljer i exception-hantering forts class Base { virtual print() throw (file_err, io_err); } class Derived { virtual print() throw (file_err); } Mer restriktiv myBaseP->print(); // i värsta fall...

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Detaljer i exception-hantering forts MyClass::MyClass(int test1, int test2) try : medlem1(test1) medlem2(test2) { /* kod */ } catch (...) { /* kod */ }

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT //exception.h namespace std { class exception { public: exception() throw(); exception(const exception &) throw (); exception& operator=(const exception &) throw(); virtual ~exception() throw(); virtual const char* what() const throw(); }

Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Predefined exception classes invalid_argument out_of_rangelength_error domain_error exception logic_errorruntime_error range_error overflow_error underflow_error bad_alloc bad_cast