14. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2009 by IPD Snelting / Universität Karlsruhe (TH)
Was machen wir heute? 1 Rückblick 2 Allgemeines 3 Exceptions 4 Wiederholung Programmierstil Interfaces 5 Lösung Aufgabenblatt 6 6 Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 2 / 28
Übersicht Rückblick 1 Rückblick 2 Allgemeines 3 Exceptions 4 Wiederholung 5 Lösung Aufgabenblatt 6 6 Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 3 / 28
Rückblick Was haben wir letzte Woche gemacht? Vererbung Fragen dazu? Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 4 / 28
Übersicht Allgemeines 1 Rückblick 2 Allgemeines 3 Exceptions 4 Wiederholung 5 Lösung Aufgabenblatt 6 6 Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 5 / 28
Allgemeines Anmeldung Übungsschein Meldet euch für den Übungsschein an! Anmeldung bis 13.02. über das KIT Studierendenportal (ehem. Selbstbedienungsfunktion) Wer sich nicht rechtzeitig anmeldet, dessen Punkte verfallen!! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 6 / 28
Allgemeines Abschlussaufgaben Gibt es konkrete Fragen zu den beiden Aufgaben? Wer hilft mir weiter? Lest auf jeden Fall in der Newsgroup mit und stellt dort Fragen! Anleitung: Auf der Tutoriums-Website unter Zusatzmaterial - Einführung in Praktomat. Derzeit 126 Beiträge zu Aufgabe 1 und 13 Beiträge zu Aufgabe 2! Nutzt die Betreuungsstunden! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 7 / 28
Allgemeines Betreuungsstunden Betreuungsstunden Nutzt die Betreuungsstunden! Di + Do 14:00-15:30 Uhr in R -143 (vor der ATIS auf der rechten Seite) Ihr könnt dort an den Rechnern programmieren und bekommt Unterstützung, wenn ihr mal nicht so recht weiterkommt. Die Beratung findet bis Ende März statt (also auch in den Ferien)! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 8 / 28
Übersicht Exceptions 1 Rückblick 2 Allgemeines 3 Exceptions 4 Wiederholung 5 Lösung Aufgabenblatt 6 6 Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 9 / 28
Exceptions Einführung Eine Exception bezeichnet eine Ausnahme bzw. Ausnahmesituation in einem Java-Programm. In der Regel ist dies ein Fehler, der nicht hätte eintreten oder abgefragt werden sollen. Beispiele Exception in thread main java.lang.arrayindexoutofboundsexception: 12 at ProgTest.main(ProgTest.java:13) Exception in thread main java.lang.arithmeticexception: / by zero at ProgTest.main(ProgTest.java:11) Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 10 / 28
Einführung Exceptions Oft handelt es sich um einen einfachen Programmierfehler, wenn eine Exception auftritt (falsche Index-Berechnung etc.). Dieser sollte dann natürlich direkt behoben werden. Eine zweite Möglichkeit ist, dass Eingaben vom Benutzer zu einer Exception führen, wie beispielsweise ein Taschenrechner, dessen Benutzerschnittstelle das Teilen durch 0 erlaubt. Solche Fälle müssen mit Kontrollstrukturen im Programm abgefangen werden. Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 11 / 28
Exceptions Einführung Manchmal können jedoch auch Fehler auftreten, die im Programmfluss nicht absehbar sind oder deren Möglichkeiten zu vielfältig sind, als das man sie alle mit Kontrollstrukturen abfragen kann. Zugriff auf Dateien (Datei gelöscht, keine Rechte, Festplatte defekt...) Umwandeln von Benutzereingaben in eine Zahl (viele mögliche Eingaben)... Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 12 / 28
Übersicht Exceptions Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 13 / 28
Code Exceptions try {...Programmcode, bei dem eine Exception auftreten könnte } catch (SomeException e) {...was geschehen soll, falls die Exception auftritt } finally {...Code, der auf jeden Fall noch ausgeführt werden soll, egal ob Exception eintritt oder nicht (wird selten verwendet) } Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 14 / 28
Exceptions Aufgabe Aufgabe Sucht euch einen Partner und schreibt ein Code-Fragment, das einen Integer-Wert von der Kommandozeile einliest. Eine nicht korrekte Eingabe (NumberFormatException) soll eine Fehlermeldung ausgeben. Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 15 / 28
Exceptions Verwendung Exceptions sind nicht dazu gedacht, den Kontrollfluss zu ersetzen! NIEMALS den allgemeinen Typ Exception bzw. RuntimeException fangen (Warum?) try-block so kurz wie möglich, niemals um den gesamten Code! Der catch-block muss immer Code enthalten! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 16 / 28
Weiteres Exceptions Man kann auch selbst eine Exception werfen, um diese dann in einem anderen Programmteil wieder zu fangen (beispielsweise in einer Klasse). public class Frac { private int numerator; private int denominator; / Konstruktor, der eine neue rationale Zahl aus den uebergebenen Parametern erzeugt. @param numerator Zaehler @param denominator Nenner @throws ArithmeticException Exception, die ausgeloest wird, wenn versucht wird, den Nenner auf 0 zu setzten. / public Frac(int numerator, int denominator) throws ArithmeticException { this.numerator = numerator; if(denominator == 0) { // Werfen einer Exception, wenn der Nenner 0 i s t. throw new ArithmeticException("Denominator must not get assigned to zero."); } // Wird nur ausgefuehrt, wenn keine Exception geworfen wurde. this.denominator = denominator; } } Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 17 / 28
Übersicht Wiederholung 1 Rückblick 2 Allgemeines 3 Exceptions 4 Wiederholung Programmierstil Interfaces 5 Lösung Aufgabenblatt 6 6 Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 18 / 28
Programmierstil Wiederholung Programmierstil Siehe Folien zum Programmierstil! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 19 / 28
Einführung Wiederholung Interfaces Interfaces (zu deutsch Schnittstellen) definieren alle nötigen public-methoden einer Klasse, ohne dabei eine konkrete Implementierung vorzuschreiben. Sie enthält also nur die Methodendefinition (die Zeile vor Beginn der geschweiften Klammer). Sie liefern so also eine bestimmte Vorgabe zur Implementierung einer Klasse. Beispiel interface Schnittstelle { public void methode1(); public void methode2(string text); public String methode3(); } Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 20 / 28
Wiederholung Interfaces Aufgabe Schreibe ein Interface für geometrische Formen mit folgender Funktionalität: Eine Methode zum Verschieben um übergebene Entfernung in x- und y-richtung. Eine Methode zum Rotieren der Form um den Ursprung mit übergebenem Winkel. Eine Methode zum Rotieren um einen übergebenen Punkt um einen übergebenen Winkel. Eine Methode zur Berechnung des Umfangs Eine Methode zur Berechnung des Flächeninhalts Eine Methode zur Berechnung des Schwerpunkts Eine Methode zur Überprüfung, ob ein übergebener Punkt innerhalb bzw. auf dem Rand der Form liegt oder nicht. Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 21 / 28
Wiederholung Interfaces Sinn und Zweck Auf Basis dieser Schnittstelle lassen sich nun verschiedene geometrische Formen implementieren, z. B. Kreise, Dreiecke, Ellipsen, Parallelogramme, Polygone... Alle Klassen haben auf jeden Fall die Methoden aus dem Interface mit derselben Signatur, sodass man diese allgemein verwenden kann. Aufgabe Schreibt eine Klasse Figure, die eine LinkedList als Attribut hat, die beliebige geometrische Formen enthält. Der Konstruktor soll dabei eine initiale Form übergeben bekommen. Eine Methode zum Hinzufügen weiterer Formen ist erstmal nicht notwendig. Schreibe zusätzlich eine Methode area(), die die Summe der Flächeninhalte aller Formen der Liste berechnet und zurückgibt. Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 22 / 28
Übersicht Lösung Aufgabenblatt 6 1 Rückblick 2 Allgemeines 3 Exceptions 4 Wiederholung 5 Lösung Aufgabenblatt 6 6 Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 23 / 28
Lösung Aufgabe 11 Lösung Aufgabenblatt 6 Siehe Musterlösung. Hinweise JavaDoc-Kommentare aus Interfaces müssen mit /** {@inheritdoc} */ übernommen werden! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 24 / 28
Übersicht Abschluss 1 Rückblick 2 Allgemeines 3 Exceptions 4 Wiederholung 5 Lösung Aufgabenblatt 6 6 Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 25 / 28
Abschluss Feedback-Survey Zur Evaluierung des Tutoriums habe ich einen Online-Fragebogen vorbereitet. Eine persönliche Einladung mit Link bekommt ihr in den nächsten Tagen per Mail. Bitte nehmt euch die Zeit (kostet keine 5min) und füllt den Fragebogen aus. Ihr helft damit auch zukünftigen Generationen! Eure Angaben sind nur für mich bestimmt und werden nicht veröffentlicht oder weitergegeben! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 26 / 28
Ende Abschluss Vielen Dank für eure Aufmerksamkeit und Mitarbeit im Laufe des Semesters! Ich wünsche euch ganz viel Erfolg bei den Abschlußaufgaben und im weiteren Studium! Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 27 / 28
Abschluss Dennis Ewert (Gruppe 6) Programmieren 14. Tutorium WS 2008/2009 28 / 28