Praxis der Programmierung

Ähnliche Dokumente
Praxis der Programmierung

Ausnahmebehandlung. (exceptionhandling) in C++

Ausnahmen (Exceptions)

Praxis der Programmierung

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

Grundlagen der Programmierung Prof. H. Mössenböck. 16. Ausnahmen (Exception Handling)

Grundlagen der Fehlerbehandlung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 06: Ausnahme- und Fehlerbehandlung in Java.

II.4.4 Exceptions - 1 -

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

Einstieg in die Informatik mit Java

4. Objektorientierte Programmierung mit C++

Klausur Programmieren 2 WS 2017/18

Repetitorium Informatik (Java)

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Praxis der Programmierung

1.) Behandlung von Laufzeitfehlern in Visual Basic

Programmieren I. Fehlerbehandlung Exceptions. Heusch 2. Bd, 3 Ratz 10. Institut für Angewandte Informatik

Exceptions. CoMa-Übung VII TU Berlin. CoMa-Übung VII (TU Berlin) Exceptions / 1

Exceptions und Vererbung

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

Einstieg in die Informatik mit Java

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Repetitorium Programmieren I + II

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Programmieren in C++ Templates

Polymorphismus 179. Function.h. #include <string>

Einstieg in die Informatik mit Java

Repetitorium Programmieren I + II

Objektorientierte Programmierung mit C++ SS 2007

Abend 4 Übung : Erweitern von Klassen durch Vererbung

Grundkurs C++ IDE Klassenhierarchien

Objektorientierte Anwendungsentwicklung

Arrays. Einleitung. Deklarieren einer Array Variablen

C# - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Informatik II Übung 5

Grundkurs C++ IDE Klassenhierarchien

Vorkurs C++ Programmierung

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Grundkurs C++ IDE Klassenhierarchien

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Informatik - Übungsstunde

Vorkurs Informatik WiSe 15/16

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

Funktionen: Rückgabewert

Transkript:

Liste, Ausnahmefehler, Template-Funktionen und -Klassen Institut für Informatik und Computational Science Henning Bordihn 1

Stack als einfach verkettete Liste 2

Aufgabe 1 1. Kopieren Sie aus /home/rlehre/w13 die Dateien intstack.cpp und testintstack.cpp. Analysieren Sie die Quellcodes. 2. Ergänzen Sie intstack.cpp um die Implementierungen von top() und pop(). Testen Sie mit testintstack.cpp. 3. Beantworten Sie die Fragen von Aufgabe 1 auf dem Übungsblatt. 3

Stack-Methoden int Stack::top() { return first->value; int Stack::pop() { int res = first->value; StackElement * ontop; ontop = first; first = first->next; delete ontop; return res; 4

Ausnahmefehler 5

Begriff Ausnahmefehler Ausnahmefehler sind Laufzeitfehler oder logische Fehler, die ein unerwartetes Verhalten oder einen Absturz zur Laufzeit verursachen Beispiele: Zugriff auf Array- oder Listenelemente ausserhalb des alloziierten Bereichs Zugriff auf Datenelemente von Instanzvariabeln, die auf kein Objekt zeigen Aufruf von Methoden mit Instanzvariabeln, die auf kein Objekt zeigen Division durch 0 Öffnen einer Datei, die nicht voranden ist Lesen aus einer Datei, die während des Zugriffs gelöscht wird Ausnahmefehler = Exception 6

Behandlung von Ausnahmefehlern Ausnahmefehler können vom Programmierer abgefangen werden kein Programmabbruch kontrolliertes, vom Programmierer festgelegtes Verhalten im Ausnahmefall Trennung von normalem Verhalten und Fehlerbehandlung try { // Versuch, das Programm fehlerfrei auszufuehren // // Anweisungen, die einen Fehler ausloesen koennten catch(...) { //... muss dort stehen! // Anweisungen, die ausgefuehrt werden, // falls ein Ausnahmefehler aufgetreten ist 7

Vordefinierte Ausnahmefehler in Klassen der Satndardbibliothek Basisklasse: exception mehrere abgeleitete Klassen, z.b. ios base::failure Fehlerklasse der Stream-Klassen length error maximale Größe wird überschritten out of range Zugriff mit unzulässigem Index bad alloc new kann keinen Speicher anfordern... Man kann eigene Unterklassen von exception definieren Überschreiben der Methode what(): liefert einen Pointer auf einen C-String mit Fehlerinformationen 8

Unterscheidung von Ausnahemefehlern mehrere catch-blöcke zu einem try-block erst spezielle Fehler (Vererbungshierarchie beachten!), dann allgemeinere catch(...) zuletzt (Behandlung aller weiteren Ausnahmefehler) try { // Anweisungen catch(myexception&) { // Behandlung von Fehlern eines selbst definierten Typs catch(ios::failure&) // Behandlung von Fehlern bei Stream-Nutzung catch(...) { // wenn sonst etwas schief geht 9

throw: Ausnahmefehler ohne Fehlerklasse erzeugen void foo(int problem) { if (problem > 0) throw 0; // erzeugt eine Exception //... int main() { try { foo(1); catch(...) { cout << "Ein Fehler beim Aufruf von foo(int)." Übergabe der Fehlernummer?! 10

throw: Ausnahmefehler ohne Fehlerklasse erzeugen void foo(int problem) { if (problem == 1) throw 1; // erzeugt eine Exception if (problem == 2) throw 2; if (problem > 2) throw (char *) "message"; int main() { int n = 0; catch(int i) { // Anweisungen fuer int cin >> n; catch(char* s) { // Anweisungen fuer char* try { foo(n); catch(...) { // Anweisungen sonst 11

Aufgabe 2 1. Ergänzen Sie in intstack.cpp die Implementierungen von top() und pop() um eine geeignete Exceptionbehandlung. 2. Entfernen Sie aus testintstack.cpp die if-statements und testen Sie Ihre Fehlerbehandlung. 12

Template-Funktionen 13

Minimumfunktion und offene Typen Aufruf min(x,y) sollte für möglichst alle Datentypen funktionieren, für die eine Ordnungsrelation definiert ist Keine Code-Verdopplung! Überladen der Funktion ungünstig Funktion mit offenem Typ definieren Template-Funktionen verwenden offene Typen definieren eine Schablone einer Funktion, die typunabhängiges Verhalten hat Typen werden beim Aufruf der Funktion festgelegt Compiler erzeugt aus der Schablone eine zu den Typen passende Funktion 14

template <typename T> T min(t a, T b) { Beispiel: Minimumfunktion // eine Schablone mit dem Typparameter T // T kann jetzt wie ein Typ verwendet werden return (a < b)? a : b; int main() { int i = 19; int j = 66; int a = min(i,j); // Funktion mit T = int wird jetzt erzeugt Statt typename kann synonym auch class verwendet werden. mehrere Typparameter durch Komma getrennt, z.b. <class T, class S> 15

Festlegung der Zieltypen entweder durch Parameterübergabe oder durch explizite Angabe der Zieltypen: template <typename T1, typename T2, typename T3> T3 foo(t1 x, T2 y) { //... int main() { cout << foo<short,long,int>(23,11); // Rueckgabetyp int 16

Aufgabe 3 Definieren Sie eine Template-Funktion myswap(), die die Werte der ihr übergebenen Parameter vertauscht. Der Datentyp beider Variablen ist identisch aber offen. Denken Sie an call-by-value! Verwenden Sie diesmal aber keine Pointer! Was bietet sich dann an? 17

Template-Klassen / generische Typen 18

Definition von Template-Klassen // Schablone einer Klasse mit einem Typparameter T template <typename T> class Cls { // jetzt kann T wie ein Datentyp verwendet werden, z.b.: T var; T foo(int n, T& t); ; template <typename T> T Cls<T>::foo(int n, T& t) { //... int main() { Cls<int> instance; // Cls<int> ist ein generischer Typ // Compiler legt generischen Typ erst bei der //... // Definition eines Objekts an 19

Aufgabe 4 Kopieren Sie intstack.cpp und testintstack.cpp in neue Dateien stack.cpp bzw. teststack.cpp. Modifizieren Sie die Kopien so, dass der abstrakte Datentyp Stack als generischer Typ definiert wird. 20