Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler
1: Announcements / Orga
Weihnachtsklausur zählt als Übungsblatt, d.h. die Punkte werden sowohl im Zähler, als auch im Nenner gutgeschrieben. 22ter Dezember, A3, 17:15-18:45 gr. Übung am 15.12. entfällt leider 3
Organisatorisches nächste große Übung entfällt d.h. keine große Übung mehr vor der Klausur Blatt 8 wird erst im Januar abzugeben sein 4
2: Relevantes in Java
.class Files.class files enthalten alles, was man braucht. es gibt Tools, um aus.class files wieder source-code zu machen wenn man ein.class File ohne Implementierung hat, gibt javap <ClassName> das Interface der Klasse aus. 6
javap Beispiel [fuessler@proteus pi1]$ javap List Compiled from "List.java" public interface List{ public abstract java.lang.object insertfirst(java.lang.object); public abstract java.lang.object insertlast(java.lang.object); public abstract java.lang.object removefirst(); public abstract java.lang.object removelast(); public abstract java.lang.object search(java.lang.object); public abstract java.lang.string tostring(); } [fuessler@proteus pi1]$ 7
Exceptions Möglichkeiten der Fehlerbehandlung Methodenrückgabewert (schlecht, weil man den auch für anderes braucht) Ausnahmen (spezieller Algorithmus) 8
Exception Exception auswerfen mit throw Throwable, z.b. throw new Exception; Exception nach oben weiterreichen oder abfangen. 9
Exception Beispiel //... public static int doublepositiveint(int n) throws Exception { if (n < 1) throw new Exception("positive Int required"); return 2*n; } public static void catchex(int n) { try { int result = doublepositiveint(n); } catch (Exception e) { e.printstacktrace(); } } public static void handupex(int n) throws Exception { int result = doublepositiveint(n); } //... 10
Programming by Contract Die Signatur einer Methode sagt dem Benutzer alles, was er wissen muss rückgabewert parameter Exceptions, die ausgeworfen werden können 11
Für die Übung nach oben weiterreichen ist ausreichend try/catch macht auch nur wirklich Sinn, wenn man den Fehler behandeln kann, z.b. wenn eine Datei nicht gefunden wird und man dann beim Benutzer nach einem neuen Namen fragen kann 12
Ein bisschen UML UML - Unified Modelling Language Sprache zur Objekt-Modellierung über ein Dutzend Diagramm-Typen Hier: Klassendiagramme 13
Beispiel 14
15
3: Vorlesung
Interfaces 17
Interface Beispiel FahrzeugCockpit fc = new Boxster(); public void umsteigen() { fc = new 1er(); } public void fahre() { for (int i = 0; i < 100; i++) fc.gibgas(); } 18
Wann Interface? Interfaces immer dann, wenn ich die Methoden beschreiben will, die ein Objekt haben soll, ohne Funktionalität zu vererben. (Abstrakte) Superklassen, wenn ich auch Funktionalität / Attribute vererben will. 19
Datenstrukturen Grundsätzlich benutzt jedes vernünftige Programm Variablen. Wenn man z.b. eine variable Anzahl von ints braucht, bei der ständig vorne Elemente angehängt werden, bietet sich eine Liste an. 20
Liste Allgemein Eine Liste ist ein Speicher für eine variable Anzahl von Elementen und besitzt eine interne Ordnung, d.h. die Reihenfolge bleibt erhalten. 21
Listenimplementierungen mit einem Object[] Feld verkettete Objekte einfach verkettet doppelt verkettet firstunusedelement 8 6 3 1 9 22
mit einem Object Feld public class VectorList implements List { private Object[] elements; private int firstunusedelement; private static final int bucketsize = 20; VectorList() { elements = new Object[bucketSize]; firstunusedelement = 0; } private void growvector(){ Object[] newelements = new Object[elements.length + bucketsize]; System.arraycopy(elements, 0, newelements, 0, elements.length); elements = newelements; } public String tostring(){ StringBuffer sb = new StringBuffer(); for(int i = 0; i < elements.length; i++) sb.append(string.format("%s:", elements[i])); return(sb.tostring()); } /... } 23
Listenoperation firstunusedelement InsertFirst 8 6 3 1 9 2 2 firstunusedelement InsertLast 2 8 6 3 1 9 2 24
Vor / Nachteile Datenstruktur ist übersichtlich ich könnte auch auf Elemente per Index zugreifen braucht viel Hauptspeicher kopier-operationen teuer 25
Verkettete Liste 8 6 9 null null 2 8 InsertFirst(2) 6 9 null null InsertLast(2) 8 6 9 null null 2 26
4: Übungsblatt 4/A3
Geometrie-Aufgabe zunächst Vererbungs-Hierarchie aufbauen dann die Klassen-Dateien anlegen Attribute festlegen, und Konstruktoren Interface-Methoden implementieren 28
29
5: Übungsblatt 7
Hinweise A1 Hanoi-Algorithmus der Vorlesung implementieren. Unter Verwendung der Hanoi.class mit javap kann man das Interface anzeigen Exception einfach nach oben weiterleiten 31
Hinweise A2 Fibonacci mit Laufzeitmessung zeit speichern -> laufen lassen -> differenzzeit bilden 32
Hinweis A3 8 6 9 2 33
Hinweise A4 Funktion erstmal in Formel umwandeln dann vollst. Induktion durchführen guter wikipedia.de Artikel vorhanden 34
Hinweise Blatt8 soweit selbsterklärend B-Baum Operationen auf Papier Fibonacci-Zahlen bei Fragen: über Liste mailen 35
Ende