Informatik II – Übung 6 Gruppe 7 Leyna Sadamori [email protected] DEBRIEFING Übung 5 11. April 2013 Informatik II – Gruppe 7 – Übung 6 2 U5A1-4 § Im Prinzip alles richtig. § Falls am Ende noch Zeit, dann Einsicht in die Best Of’s… 11. April 2013 Informatik II – Gruppe 7 – Übung 6 3 THEORIE Java – Vererbung, Polymorphie, abstrakte Klassen, Interfaces Fabrikmethode 11. April 2013 Informatik II – Gruppe 7 – Übung 6 4 Java Beispiel" Java – Vererbung § Warum braucht/verwendet man Vererbung? § Code Reuse § Besseres Code Design (Modularisierung) Basisklasse § Schlüsselwörter § extends (SubClass extends SuperClass) § super erlaubt Zugriff auf die Basisklasse § Konstruktor: super()! § Methoden: super.method()! § http://docs.oracle.com/javase/tutorial/java/IandI/super.html § private, protected, public! Abgeleitete (speziellere) Klasse § http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html 11. April 2013 Informatik II – Gruppe 7 – Übung 6 5 Java Beispiel" Java – Polymorphie § Statischer Typ vs. Dynamischer Typ § Vererbung è SubClass hat alle Felder und Methoden von SuperClass (kann aber noch zusätzliche haben) § Eine abgeleitete Klasse darf sich hinter einer Basisklasse “verstecken”, aber nicht umgekehrt! § Beispiel: § Ein Potentiometer ist ein variabler Widerstand, somit verhält sich jeder Poti wie ein Widerstand § Aber: Ein Widerstand kann sich nicht wie ein Poti verhalten! § Vorsicht bei Type Casts! § instanceof testet auf dynamischen Typ 11. April 2013 Informatik II – Gruppe 7 – Übung 6 6 Java – Abstrakte Klassen Java Beispiel" § Abstrakte Klassen § Manchmal ist es sinnvoll, eine Methode zu definieren, aber nicht zu implementieren. § Warum? Polymorphie! Man kann “der Welt” über die abstrakte Methodendefinition eine Funktionalität zur Verfügung stellen, dessen Implementierung unter den abgeleiteten Klassen variiert. § Warum nutzt man nicht einfach “normale” Vererbung und überschreibt die Methoden der Basisklasse? Weil es dann schwieriger wird, nachzuvollziehen, welche Implementierung gerade “aktiv” ist. § Wichtige Merkmale § Schlüsselwort abstract § Man kann sowohl Methoden implementieren, als auch nur deklarieren § Man kann keine Objekte einer abstrakten Klasse instanziieren (Polymorphie!) 11. April 2013 Informatik II – Gruppe 7 – Übung 6 7 Java Beispiel" Java – Interfaces § Vom Prinzip her ähnlich zu abstrakten Klassen, aber: Nur Methoden deklarieren, nicht implementieren § Vorteil: Eine Klasse kann mehrere Interfaces implementieren, aber nur von einer Klassen erben § Wann nutzt man Interfaces? § Wenn man als Entwickler eine Schnittstelle anbieten will (wie das Wort schon sagt) § Beispiel: Ich implementiere ein Netzwerk Simulationsprogramm, was mir Strom und Spannung in einer Schaltung simuliert. Ich definiere in einem Interface, dass ich von allen Komponenten die Impedanz für eine gegebene Frequenz benötige. Wie die Impedanz berechnet wird, darum muss sich jeder kümmern, der seine Bauteile implementiert. § Wichtig § Gute Dokumentation! Da keine Implementierung vorhanden ist, muss der JavaDoc Kommentar aussagekräftig sein, damit klar ist, was implementiert werden muss! § Schlüsselwörter: interface, implements! 11. April 2013 Informatik II – Gruppe 7 – Übung 6 8 Fabrikmethode § Szenario: § Ein Interface IStack spezifiziert die Funktionsweise (push, pop, etc.) eines Stacks. § Programmierer A implementiert dieses Interface auf unterschiedliche Weise, zuerst mit ArrayStack, später mit ListStack. § Programmierer B braucht für sein Programm einen Stack. Es wird derzeit nur ArrayStack angeboten. Jetzt ersetzt Programmierer A ArrayStack durch ListStack. Programmierer B muss nun alle Zeilen im Code von new ArrayStack() auf new ListStack() ändern. § Lösung: Fabrikmethoden! Programmierer A stellt eine Factory zur Verfügung. Programmierer B ruft Factory.createStack() auf, und bekommt ein Objekt vom statischen Typ IStack. Der tatsächliche (dynamische) Typ des Objekts kann ArrayStack oder ListStack sein. 11. April 2013 Informatik II – Gruppe 7 – Übung 6 9 BRIEFING Übung 6 11. April 2013 Informatik II – Gruppe 7 – Übung 6 10 U6A1 – Klassen, Schnittstellen, Casting § U6A1a § UML Klassendiagramm (vereinfacht, ohne Felder und Methoden) § U6A1c/d § Für die cleveren: Denkt daran, in der Klausur gibt’s nur Stift und Papier! § Kommentiert die Zeilen aus, die zu Fehlern führen 11. April 2013 Informatik II – Gruppe 7 – Übung 6 11 U6A2 – Fabrikmethode § U6A2c – JUnit Tests § Assert.assertTrue(boolean condition) § Assert.assertFalse(boolean condition)! § http://junit.sourceforge.net/javadoc/ 11. April 2013 Informatik II – Gruppe 7 – Übung 6 12 U6A3 – Polymorphie § U6A3a § Ähnliche Implementierung wie U5A1+2 § U6A3c § Ähnliche Implementierung wie U5A3 § Tipp: Nutzt die Hilfe von Eclipse! 11. April 2013 Eclipse Beispiel" Informatik II – Gruppe 7 – Übung 6 13 U6A4 – Stack (schon wieder) § Freiwillig § Bei Fragen, an mich wenden 11. April 2013 Informatik II – Gruppe 7 – Übung 6 14 TIPPS UND TRICKS 11. April 2013 Informatik II – Gruppe 7 – Übung 6 15 …viel Spass! 11. April 2013 Informatik II – Gruppe 7 – Übung 6 16