Fakultät für Informatik und Mathematik PD Dr. Martin Griebl WS 2006/07 Übungen zur Vorlesung: Programmieren I Blatt 11 (Sichtbarkeit, Packages) Schicken Sie Ihre Programme (die .java Dateien) per eMail an Ihren Übungsleiter (siehe Web-Seite) und geben Sie auch einen Ausdruck ab. Geben Sie zu jedem Programm auch ein Protokoll mit Testläufen ab. Kommentieren Sie Ihre Programme und geben Sie Assertions an. Aufgabe 24 (Gültigkeitsbereiche) Gegeben sind folgende Klassen und Interfaces mit ihren Package Deklarationen. Geben Sie zu jeder Klasse, zu jedem Attribut, zu jeder Methode, zu jedem Parameter und zu jeder lokalen Variable den jeweiligen Gültigkeitsbereich an (in der Form Attribut D.a ist im ” ganzen Package r sichtbar“ etc.). package p; public class A { private int x; public boolean y; String s; public void foo() { s = "Hello, world!"; } } package p; class B extends A { double x; B(int x) { int y = x + 2; x = y * y; } private void foo(A a) { a.foo(); } } package q; public interface I { int foobar(int i); } package q; public class C implements I { private long l; static final int C = 7; final void foo(A a) { if (l>0) { boolean l = a.y; a.s = "bar"; } else { a.foo(); } } public int foobar(int i) { return i*i; } } Aufgabe 25 (Die Türme von Hanoi) Die Türme von Hanoi bestehen aus 3 Säulen, auf die Scheiben gestapelt werden können. Es gibt Scheiben unterschiedlichen Durchmessers und von jedem Durchmesser nur eine Scheibe. Auf einer Säule dürfen nur kleine Scheiben auf größeren liegen. Anfangs sind n Scheiben auf dem ersten Turm korrekt aufgeschichtet. Ziel ist es, diesen Stapel auf den dritten Turm zu verfrachten. Es darf aber bei jedem Schritt immer nur die oberste Scheibe einer Säule auf einen anderen verfrachtet werden. Aufgabe ist es, die Säulen zu programmieren und eine Klasse Hanoi, die drei Säulen verwaltet und eine Lösungsstrategie implementiert (als eigenes Package hanoi). Für die Scheiben reicht eine Modellierung als int-Wert, der dem Durchmesser entspricht. Die Säulen werden als eigene Klasse modelliert, die als Konstruktorparameter die Maximalkapazität für Scheiben bekommt. Intern speichert sie die Scheiben in einem Array zusammen mit einem Füllstandsanzeiger, der den Index im Array speichert, an dem die oberste Scheibe liegt, also z. B. die Anzahl der Scheiben. Methoden gibt es zum Entnehmen der obersten Scheibe, zum Auflegen einer neuen Scheibe und zum Überprüfen, ob der Scheibenstapel die Größenanforderung bezüglich der Stapelung erfüllt. Außerdem soll noch die toString()-Methode überschrieben werden, die einen String berechnet, der die aktuelle Turmkonfiguration widerspiegelt. Hierbei sollen die Attribute private sein und die Methoden package Sichtbarkeit haben (außer toString(), die public ist), damit sichergestellt ist, dass keine unbefugte Klasse die Turmkonfiguration ändern kann. Die Klasse Hanoi besitzt einen Konstruktor, der die Anzahl der Scheiben nimmt und entsprechend die Säulen erzeugt und die Scheiben auf der ersten aufstapelt. Außerdem soll es noch eine Methode hanoi() (natürlich ohne Parameter) geben, die wie im Buch auf S. 91 (siehe auch die zugehörigen Vorlesungsfolien) die Scheiben umstapelt. Dabei ist die (private zu deklarierende) Methode move() entsprechend zu implementieren. Abgabe der Lösung: bis Freitag, 12.01.2007, 11:00 Uhr in den Kasten “Prog I”.