Informatik II Übung 7 Gruppe 7 Leyna Sadamori leyna.sadamori@inf.ethz.ch Informatik II Übung 7 Leyna Sadamori 10. April 2014 1
Administratives Nächste Übung fällt leider aus! Bitte eine andere Übung besuchen. Die Woche danach sind Osterferien Die Woche danach ist 1.Mai Ausweichtermin am Mittwoch Raum muss noch organisiert werden à Benachrichtigung per Mail Informatik II Übung 7 Leyna Sadamori 10. April 2014 2
Debriefing Übung 6 Informatik II Übung 7 Leyna Sadamori 10. April 2014 3
U6A1 Statischer Typ vs. Dynamischer Typ UML Klassendiagramm Informatik II Übung 7 Leyna Sadamori 10. April 2014 4
U6A2 Interfaces Factory Methode return (IStack) new ListStack() è Type Cast unnötig!! JUnit Tests AssertTrue, AssertFalse besser als AssertEquals(, true, ) Informatik II Übung 7 Leyna Sadamori 10. April 2014 5
U6A4 ChunkedListStack Optimierung von size() Man kann die Grösse des Stacks in einer Klassenvariable speichern, z.b. int size! size() gibt dann lediglich size zurück Natürlich muss size bei jeder push() oder pop() Operation angepasst werden! Informatik II Übung 7 Leyna Sadamori 10. April 2014 6
Briefing Übung 7 Informatik II Übung 7 Leyna Sadamori 10. April 2014 7
Java Generics Java Beispiel" Was sind Generics? Generics erlauben es, Interfaces oder Klassen über einen Typen zu parametrisieren Wozu braucht man Generics? (Auszug aus den Java Tutorials) Stronger type checks at compile time. A Java compiler applies strong type checking to generic code and issues errors if the code violates type safety. Fixing compile-time errors is easier than fixing runtime errors, which can be difficult to find. Elimination of casts. Enabling programmers to implement generic algorithms. By using generics, programmers can implement generic algorithms that work on collections of different types, can be customized, and are type safe and easier to read. Quelle: http://docs.oracle.com/javase/tutorial/java/generics/why.html Informatik II Übung 7 Leyna Sadamori 10. April 2014 8
Java Generics Verwendung von Generics Beispiel: public class Box<T> {! // T stands for "Type"! private final T t;!!! public T get() {! return t;! }! }! Learning by doing è Leseverstehen von Generics Java API" Naming Conventions T - Type K - Key V - Value E - Element (used extensively by the Java Collections Framework) N - Number Informatik II Übung 7 Leyna Sadamori 10. April 2014 9
U7A1 Array-Listen und Generics U7A1a Schreibt eine neue Klasse Filter, die das Interface IFilter implementiert ( und ignoriert die Eclipse Fehlermeldungen) FactoryMethode: So wie letzte Übung U7A1b FilterRaw erwartet eine ArrayList mit Gruppen Eine Gruppe ist wiederum eine ArrayList, die Studenten enthält Explizite Type Casts notwendig! Informatik II Übung 7 Leyna Sadamori 10. April 2014 10
U7A1 Array-Listen und Generics U7A1c Jetzt eine Implementierung mit Generics è keine Type Casts mehr nötig Nicht von den doppelten Generics einschüchtern lassen Allgemeiner Hinweis: Lagert die eigentliche Filter-Funktion aus (Student mit ausreichend Punkten) Informatik II Übung 7 Leyna Sadamori 10. April 2014 11
Binäre Suchbäume Suchen Einfügen Traversierung Pre-order: F, B, A, D, C, E, G, I, H (root, left, right) In-order: A, B, C, D, E, F, G, H, I (left, root, right) Post-order: A, C, E, D, B, H, I, G, F (left, right, root) Löschen Tafel Beispiel" Strategie: Ersetzen durch kleinstes Element des rechten Teilbaums Quelle: http://en.wikipedia.org/wiki/preorder_traversal#implementations Informatik II Übung 7 Leyna Sadamori 10. April 2014 12
U7A2 Binäre Suchbäume Binäre Suchbäume zum Sortieren von beliebigen Dingen Der Baum speichert für jedes Ding einen Key (integer), anhand dessen sortiert wird Informatik II Übung 7 Leyna Sadamori 10. April 2014 13
U7A2 Binäre Suchbäume U7A2b Schreibt eine generic Klasse BinarySearchTreeUtils<T>, die das Interface IBinarySearchTreeUtils implementiert Erst die Factory Methode legt den Typ auf String fest und gibt ein Objekt vom Typ IBinarySearchTreeUtils<String> zurück! Iff ist kein Tippfehler! Iff bedeutet if, and only if Remove Sonderfälle zuerst: Baum ist Blattknoten, Baum hat nur ein Kindknoten vorhanden Verwendet die Klasse UnlinkSmallestResult und die Methode unlinksmallest()! unlinksmallest() macht 2 Dinge gleichzeitig: Kleinstes Element finden Kleinstes Element entfernen Informatik II Übung 7 Leyna Sadamori 10. April 2014 14
U7A3 Reversi Turnier Reversi Tafel Beispiel" Spielregeln Framework API: http://www.vs.inf.ethz.ch/edu/i2/reversi/javadoc/index.html?reversi/package-summary.html U7A3a: Eclipse Hinweise Eclipse Demo" Einfügen von externen Libraries Linken von externen Dokumentationen Run Configurations U7A3b: Implentierung von RandomPlayer Strategie 1. Finde mögliche Spielzüge und überprüfe sie auf ihre Gültigkeit 2. Wähle von den möglichen gültigen Spielzügen zufällig einen aus Tafel Beispiel" Informatik II Übung 7 Leyna Sadamori 10. April 2014 15
Tipps und Tricks Informatik II Übung 7 Leyna Sadamori 10. April 2014 16
viel Spass! Informatik II Übung 7 Leyna Sadamori 10. April 2014 17