Typsystem, RO-Objects, SW-Entwicklungstools

Werbung
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
Herunterladen