Hochschule Niederrhein Fachbereich 03 Bachelor Informatik Java 2 - Vertiefung WS 2015/16 Prof. Dr. Nitsche Übung 04 Typsystem, RO-Objects, SW-Entwicklungstools Aufgabe 1: Typsystem Gegeben seien folgende Klassendefinitionen: class A { int x; public void setX(int x) { this.x = x; } B2 foo(B2 x) { return x; } } class B1 { int x; B1(int x) { this.x = x; } } class B2 extends B1 { B2(int x) { this.x = x; } } class B3 extends B2 { B3(int x) { super(x); } } Welche der folgenden Typen A1..A14 sind Subtypen von A? Begründen Sie Ihre Antwort. Falls es kein Subtyp ist: Gibt es einen Compilerfehler, einen Laufzeit-Fehler oder einen semantischen Fehler? class A1 extends A { public void setX(long x) { this.x = (int) x; } } class A2 extends A { void setX(int x) { this.x = x; } } class A3 extends A { public void setX(int x) { if (x < 0) throw new IllegalArgumentException(“x >= 0!“); this.x = x; } } S. 1 / 4 Hochschule Niederrhein Fachbereich 03 Bachelor Informatik Java 2 - Vertiefung WS 2015/16 Prof. Dr. Nitsche Übung 04 class A4 extends A { public B2 foo(B2 x) { return x; } } class A5 extends A { private B2 foo(B2 x) { return x; } } class A6 extends A { B2 foo(B3 x) { return x; } } class A7 extends A { B3 foo(B3 x) { return x; } } class A8 extends A { B3 foo(B2 x) { return x; } } class A9 extends A { B1 foo(B2 x) { return x; } } class A9 extends A { B2 foo(B2 x) { return new B3(x.x); } } class A10 extends A { B3 foo(B2 x) { return new B3(x.x); } } class A11 extends A { B3 foo(B2 x) { return new B3(x.x); } } class A12 extends A { B2 foo(B2 x) { return (B2) new B3(x.x); } } class A13 extends A { B2 foo(B2 x) { return (B2) new B1(x.x); } } class A14 extends A { B2 foo(B2 x) { if (x instanceof B3) throw new Exception(“”); else return x; } } S. 2 / 4 Hochschule Niederrhein Fachbereich 03 Bachelor Informatik Java 2 - Vertiefung WS 2015/16 Prof. Dr. Nitsche Übung 04 Aufgabe 2: Tests mit jUnit Modifizieren Sie Ihre Testfälle von Aufgabe 2 dahingehend, dass Sie diese als jUnit-Tests ausführen können. Ergänzen Sie Ihre Testklasse um die Initialisierung der Test-Umgebung und ggf. der einzelnen Testfälle, und markieren Sie die auszuführenden Test-funktionen. Geben Sie jeweils das erwartete Ergebnis Ihrer Testfälle an und führen Ihre Klasse als jUnitTest aus. Ist alles korrekt abgelaufen? Erstellen Sie nun einen Testfall, bei dem Sie ein inkorrektes Resultat als Testergebnis angeben. Die Testdurchführung sollte jetzt einen Fehler melden. Optional: Sie können sich auch weitere jUnit-Tests erstellen. Aufgabe 3: ant-Makefiles Schreiben Sie ein ant-File, um Ihr Programm zu kompilieren und zu einer jar-Datei zu verpacken. Das fertige jar-File sollte dann direkt ausführbar sein (von der JVM) – in Windows z.B. per Doppelklick auf die jar-Datei. Experimentieren Sie dann mit weiteren Anwendungen von ant. Starten Sie z.B. Ihre jUnitTests oder auch die Generierung der javadoc-Kommentare (siehe nächste Aufgabe) aus einem ant-Skript heraus. Optional: Ergänzen Sie Ihr jar-File um zusätzliche Dateien oder Bibliotheken. Sie können z.B. • • Eine Textdatei zur Laufzeit auslesen und ausgeben. Diese Datei wird im jar-File mit gespeichert. Eine Bilddatei in einem Fenster anzeigen. S. 3 / 4 Hochschule Niederrhein Fachbereich 03 Bachelor Informatik Java 2 - Vertiefung Prof. Dr. Nitsche WS 2015/16 Übung 04 Aufgabe 4: Dokumentation mit javadoc Ergänzen Sie Ihr Programm um (einige) geeignete javadoc-Kommentare, z.B. zur Dokumentation ihrer Klasse Student. Generieren Sie nun die Dokumentation zu Ihrer Klasse mittels javadoc. Aufgabe 5: RO-Objects: Studentenverwaltung (Hackversuche abwehren) Modifizieren Sie Ihr Programm zur Studentenverwaltung dahingehend, dass die öffentlich zugänglichen Methoden wie z.B. • Liste aller Studenten • Liste aller Prüfungen eines Studenten jeweils nur RO-Objekte (Read-Only-Objekte) zurückliefern, damit von außerhalb der Klassen der Studentenverwaltung die Daten zwar gelesen (und angezeigt werden können), jedoch nicht verändert werden können. S. 4 / 4