hue13 January 30, 2017 1 Abgabehinweise Beachten Sie unbedingt diese Hinweise, sonst erhalten Sie keine Punkte aus dieser Abgabe! Für Details siehe z.b. Folien der nullten Zentralübung 1.1 Namen und Matrikelnummern Tragen Sie Ihre Matrikelnummern und E-Mail-Adressen zeilenweise in die Zelle oberhalb dieser Zelle ein. Achten Sie dabei streng auf die Formatierung, denn die Auswertung erfolgt automatisch. Benutzen Sie keine Leerzeilen. Zwischen Matrikelnummer und E-Mail-Adresse muss genau ein Leerzeichen stehen; sonst keine Leerzeichen, Tabs, Spiegelstriche, oder ähnliches in einer Zeile. Wir empfehlen dringend die Benutzung der Uni-Paderborn E-Mail-Adressen! Format: MatrikelNummer E-Mail-Adresse MatrikelNummer2 E-Mail-Adresse2 z.b.: 123456 teststudent@mail.upb.de 234567 teststudent2@mail.upb.de 345678 vorname.nachname@mail.upb.de Hinweis: Wenn Sie das so in die obere Zelle eingeben, wird in der ausgeführten Markdownzelle (Strg+Enter) alles in einer Zeile angezeigt. Das ist egal; wichtig ist Formatierung der Eingabe. 1.2 Abgabe mit Gruppenaccount Die Abgabe muss mit Ihrem Gruppenaccount erfolgen (gp1_16_... ), den Sie in der Präsenzübung erhalten haben! Abgaben, die über Ihren Einzelaccount erfolgen, werden ignoriert. 1.3 Abgabe: Submit Es reicht nicht, nur das Übungsblatt zu verändern. Sie müssen unter Assignments auf Submit clicken (oder entsprechend über die Kommandozeile), für das entsprechende Übungsblatt! (Wenn Sie Blatt 13 abgeben wolllen hilft es nicht, bei Blatt 1 auf Submit zu drücken!) Für Details siehe Beschreibung Abgabeprozess. 1
1.4 Dateinamen Geben Sie Ihre Lösung in der vom Server erhaltenen Datei hue13.ipynb ab (nicht umbenennen, keine Kopie erstellen, keine anderen Dateien in das Verzeichnis legen). Sonst kann eine Bewertung nicht stattfinden. 1.5 Struktur des Notebooks Fügen Sie keine Zellen hinzu und löschen Sie keine Zellen. Ändern Sie nicht den Typ einer Zelle. Geben Sie Lösungen nur in den Lösungszellen ab. Änderungen in den anderen Zellen werden nach Abgabe automatisch rückgängig gemacht. 2 Abgabetermin: 09.02.2017 um 12:00 Uhr (ACHTUNG! Donnerstagmittag!) 3 Aufgabe 1: Entwerfen und implementieren Sie in Java eine Klasse namens Kreis, die folgende Eigenschaften erfüllt: - sie besitzt die Attribute x, y, radius, kreisfarbe und fuellfarbe - sie besitzt einen Konstruktor, an den Initialwerte aller Attribute übergeben werden können - sie besitzt für jedes der Attribute getter-methoden - sie besitzt eine Methode verschiebe(deltax, deltay), welche die Attribute x und y um deltax bzw. deltay verschiebt. Wählen Sie geeignete Typen für Attribute, Parameter und Rückgabetypen und begründen Sie die Wahl jedes (!) dieser Typen mit einem Kommentar. 4 Aufgabe 2: 4.1 a) Betrachten Sie den Java-Code in der folgenden Zelle: In [ ]: class C { int a; static int b; void method() { a++; b++; void printattrs() { System.out.println("a: " + a); System.out.println("b: " + b); 2
C c1 = new C(); C c2 = new C(); c1.method(); c2.method(); c2.printattrs(); Erklären Sie, weshalb die Attribute a und b von c2 unterschiedliche Werte haben. 4.2 b) Betrachten Sie den Java-Code in der folgenden Zelle: In [ ]: class Drucker { public void verarbeite_druckauftrag() { //... drucke(); public void drucke() { System.out.println("Der Drucker druckt ganz rudimentär."); class Farbdrucker extends Drucker { public void drucke() { System.out.println("Der Drucker druckt in Farbe."); Farbdrucker fd = new Farbdrucker(); fd.verarbeite_druckauftrag(); Erklären Sie, weshalb die Methode drucke() von Farbdrucker (und nicht von Drucker) aufgerufen wird. 4.3 c) Angenommen, folgender Code würde anschließend ausgeführt: Drucker d = (Drucker)fd; d.verarbeite_druckauftrag(); Würde hierdurch eine andere Ausgabe erzeugt? Begründen Sie! 3
4.4 d) Betrachten Sie folgenden Java-Code: class Ober { private int a; String b; protected double c; public boolean d; private int m(int x) { return x + 1; void n() { System.out.println("m(2) ist: " + m(2)); protected int tonumber(string snum) { return Integer.parseInt(sNum); public double blubb() { return a; class Unter extends Ober { //... Auf welche Attribute und Methoden der Klasse Ober kann innerhalb von Methoden, die in der Klasse Unter definiert werden, zugegriffen bzw. nicht zugegriffen werden? Begründen Sie für jedes Attribut / jede Methode einzeln. 5 Aufgabe 3: 5.1 a) Schreiben Sie folgende zwei Klassen: 1) Eine abstrakte Klasse namens Lebewesen, die folgende Attribute und Methoden besitzt: ein int-attribut namens alter, eine abstrakte Methode namens pruefealter() mit einem boolean als Rückgabetyp und eine Methode altere() (ohne Rückgabewert), in welcher das Alter um eins erhöht wird, sofern ein Aufruf der Methode pruefealter() true zurückgibt. 4
2) Eine Klasse namens Mensch, welche eine konkrete Unterklasse der Klasse Lebewesen ist: die Methode pruefealter() soll in ihr true zurückgeben, wenn alter mindestens 0 und höchstens 150 ist (sie muss sonst keine weiteren Attribute / Methoden enthalten). 5.2 b) Schreiben Sie ein Interface namens StringBeobachter. Es soll eine Methode namens benachrichtige mit den Parametern id (int) und neuerwert (String) beinhalten, welche keinen Wert zurückgibt. Schreiben Sie anschließend eine Klasse Anzeige, welche dieses Interface implementiert. Bei Aufruf der Methode sollen beide Parameter auf der Konsole ausgegeben werden. 5.3 c) Beschreiben Sie in eigenen Worten, was in Java (abgesehen von der Syntax) die Unterschiede zwischen Interfaces und abstrakten Klassen sind. 5