Technische Universität München Institut für Informatik Lehrstuhl für Bioinformatik Einführung in die Programmierung für Bioinformatiker Prof. Dr. B. Rost, L. Richter WS 15/16 Übungsblatt 11 11.1.2016 Aufgabe 11.1 (P) Jasminchen Themengebiet: Jasmin Welche Ausgabe erzeugt das Programm Test.java? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class Test { public static void main ( String [] args ) { B varB = new B ( " AString " , " BString " ) ; varB . setAndPrint ( " CString " ) ; } } class A { private String name ; public A ( String name ) { this . name = name ; } public String getName () { return name ; } public void setAndPrint ( String name ) { this . name = name ; System . out . println ( getName () ) ; } } class B extends A { private final String name ; public B ( String nameA , String nameB ) { super ( nameA ) ; this . name = nameB ; } @Override public String getName () { return name ; } } Überlegen Sie zuerst und überprüfen Sie dann Ihre Antwort, indem Sie das Programm ausführen. Argumentieren Sie, warum die Antwort "BString" richtig ist, indem Sie den entscheidenden Zustand des Programms in JASM.IN darstellen. Ergänzen Sie im folgenden Diagramm die Namenstabelle(n) für varB. Welche Auswirkung hat die Ausführung von Statement 19? Aktualisieren Sie dazu das folgende Diagramm. 2 Der nächste Call-Eintrag ist nun getName(), unverändert aufgerufen auf dem durch varB referenzierten Objekt. Geben Sie den dazugehörigen JASM.IN-Schnappschuss dazu an. Aufgabe 11.2 (P) Iteratoren Themengebiet: Iteratoren Erstellen Sie einen Iterator MyListIterator<T>, der das ListIterator<T>-Interface implementiert für die Klasse MyList<T>. Es sollen alle Methoden des Interfaces ListIterator<T> (auch die optionalen) implementiert werden. Die genaue Funktionalität, Besonderheiten und benötigte Fehlerbehandlung können Sie der Java-Dokumentation https: //docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html entnehmen. Testen Sie Ihre Implementierung ausführlich. Hinweis: Zum besseren Verständnis der Operationen empfiehlt es sich, Zeichnungen für kleine Beispiele anzufertigen. Es ist außerdem empfehlenswert, sich die aktuelle Position des Iterators in einem Integer zu merken. Überlegen Sie sich den Zusammenhang zwischen der Position des Iterators und der Position von Listenelementen. Um sich zu merken, welche Operationen zuletzt ausgeführt wurden bzw. welche Operationen als nächstes ausgeführt werden dürfen, können Sie Variablen vom Typ Boolean verwenden. Damit können die Abhängigkeiten zwischen den einzelnen Methoden kontrolliert werden.