Informatik II (D-ITET) Übungsstunde 1 [email protected] Distributed Systems Group, ETH Zürich Ablauf Überblick + Administratives Besprechung der Vorlesung Einführungsthemen: Eclipse, JUnit, Serienabgabe Übungsbezogene Themen: Exceptions, Javadoc,... This semester’s menu... (Weitere) Grundlagen der Programmierung Objektorientierung; Modellbildung, Formalisierung, Abstraktion Algorithmen (anhand von Java) Suchen, Rekursion, Backtracking Komplexität Datenstrukturen (Spiel)Bäume, Heaps, Listen Weiteres: Simulation, Testen/Debugging, Parallelität Administratives Abgabe der Übungen (zu zweit!) So viel wie möglich per email... [aber v.a. theoretische Übungen handschriftlich...] Gruppeneinteilung jetzt! Abgabe: Mittwoch, 14:00! Per Email... In der Übungsstunde... Per Briefkasten (CNB H Stock)... Administratives Fragen zum Stoff/Vorlesung/Übungen Folien online:http://people.inf.ethz.ch/mayersi/ Fragen: Per email an mich... Skript: Online Prüfung Sowohl theoretisches Wissen (z.B. Komplexität von Algorithmen) ...als auch «praktische» Programmierung (i.e., mit Papier und Kuli) Testat Wöchentliche Aufgabenblätter Insgesamt mindestens 75% der Aufgaben bearbeitet ...und mindestens 50% der Punkte erreicht Punkte = Punkte der Übungen 1 bis 11 Übung 12: Bonus! Keine verspäteten Abgaben Plagiate Schlechte Prüfungsvorbereitung... 0 Punkte für Aufgabenblatt Ablauf Überblick + Administratives Besprechung der Vorlesung Einführungsthemen: Eclipse, JUnit, Serienabgabe Übungsbezogene Themen: Exceptions, Javadoc,... Thema: Java Kurzrepetition package u0a1; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } Besprechung der Vorlesung Java Programmbau und Ausführung (Übung 0) Datei Mult.java mit einem Java-Programm als Inhalt... 1. Kompilieren: Sourcecode Java Bytecode javac Mult.java ...generiert Datei «Mult.class», die den Bytecode enthält 2. Aufrufen: java Mult.class Besprechung der Vorlesung Algorithmen Altägyptische Multiplikation als Beispiel: Wieviel ist a*b? a wenn (b == 1); a * b = 2a * b/2 wenn (b % 2 == 0); a + (2a * (b-1)/2)sonst; Problem wird auf kleinere «Version» desselben Problems reduziert Rekursion (Erinnerung an Info I?) Warum «kleiner»? Kann man die Rekursion auch über das «a» verankern? Ablauf Überblick + Administratives Besprechung der Vorlesung Einführungsthemen: Eclipse, JUnit, Serienabgabe Übungsbezogene Themen: Exceptions, Javadoc,... Thema: Eclipse IDE Integrated Development Environment Derzeitige Version: Juno Menge an hilfreichen Features, z.B. smarte code completion, Projektverwaltung,... Thema: JUnit 4 Bibliothek zum automatisierten Verifizieren und Validieren von Software Wird mit Eclipse mitgeliefert (als Plugin) Einbinden in Eclipse Projekt: 1. Rechtsklick auf Projekt -> Build Path -> Configure Build Path 2. Add Libraries... 3. «JUnit» 4. «Junit 4» Thema: Übungsabgabe 1. Archiv herunterladen und entpacken 2. Eclipse: Neues Java Projekt 3. Weiter -> «Link additional sources» 4. Bearbeiten/Aufgaben lösen 5. Packen/Zippen + Abschicken - Überprüfen, ob .java-Files auch tatsächlich enthalten sind! Demo? Neues Projekt aus Übung 0 + externe Quellen Übungsdaten Import/Export Programmausführung + Run Configurations Ablauf Überblick + Administratives Besprechung der Vorlesung Einführungsthemen: Eclipse, JUnit, Serienabgabe Übungsbezogene Themen: Exceptions, Javadoc,... Übung 0 Aufgabe 1: HelloWorld.java public static void main(String[] args) { System.out.println("Hello World"); } Aufgabe 2: Signum.java + Main.java public static void main(String[] args) { System.out.println("signum(-3) = " + Signum.signum(-3)); System.out.println("signum(0) = " + Signum.signum(0)); System.out.println("signum(7) = " + Signum.signum(7)); } Aufgabe 3: Automatisiertes Testen Aufgabe 4: Und ein bisschen «Theorie» und Modellbildung mit Wein Übung 1 1. Terminierung & Korrektheit (altägyptische Multiplikation) 2. Rekursion, Aufwandabschätzung für Algorithmen 3. Exceptions, Unit-Testing, Dokumentieren von Programmen Übung 1 - Terminierung & Korrektheit Altägyptische Multiplikation Induktionsbeweis Verankerung (Beweis, dass korrekt für Base Case) Schritt (Erweiterung des Beweises für Schritt i auf Schritt i+1 a) Funktioniert Induktion auch über die Variable a? b) Terminiert der Algorithmus? Beweisen! c) Veränderter Algorithmus! Base Case ist nun nicht mehr (b = 1) sondern (b = 0)! Neuer Beweis erforderlich... Übung 1 - Aufwandabschätzung für Algorithmen Wieviele Methodenaufrufe erzeugen... gerade(int x) verdopple(int x) halbiere(int x) f(int a, int b)noch keine Rekursion! f(int a, int b)nun mit Rekursion! ...Resultat aus b) verwenden! ...Berechnung ist ein bisschen involvierter... Durchbeissen! Übung 1 – Benutzereingaben / Exceptions “An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions.” Exceptions können geworfen (throw) und abgefangen (catch) werden Demo! Tutorial: http://download.oracle.com/javase/tutorial/essential/exceptions/ Übung 1 – Benutzereingaben / Unit Testing Automatisiertes Verfizieren und Validieren von Code JUnit4 Demo (Übung 0)! Übung 1 – Benutzereingaben / Javadoc Semantische Annotationen @author name @version version @since JDK-Version @param name description @return description @exception classname description Demo: Methode halbautomatisch annotieren Generieren von Javadoc für gesamtes Projekt: Project -> Generate Javadoc Tutorial: http://homepages.thm.de/~hg7132/PIS/Uebungen/javadoc_tutorial.html Debugging in Eclipse – Breakpoints – Variablen beobachten – Stepping in/out/step Informatik II (D-ITET) Übungsstunde 1 [email protected] Distributed Systems Group, ETH Zürich