Software Engineering, Universität Basel, HS 2016 1/3 Hausaufgaben 3 1 Texte Lesen Sie • Vorlesung 4: UML bis nächsten Dienstag 11.10.). 2 Software Projekt: Data Repository Hausaufgabe 1. Implementieren Sie das a dd Kommando (und damit auch die add() Methode der API) wie in https://subversion.cs.unibas.ch/repos/hs16/cs203/showcase/DataRepository/ definiert. Der AddTest muss erfolgreich durchlaufen. 2. Erzeugen Sie eine Distribution (mit dem ANT Build Skript). Beachten Sie, dass Sie das Build Script https://subversion.cs.unibas.ch/repos/hs16/cs203/showcase/DataRepository/build.xml in Zeile 7 Ihren Bedürfnissen anpassen müssen. Abgabe der Distribution auf course und Subversion Checkin bis spätestens Montag, 17.10. abends. Java Tips • Die Klasse java.io.File enthält wichtige Methoden, die Sie brauchen werden, wie length(), mkdirs(), renameTo() und listFiles(). • Damit die Option --move wirklich schnell geht renameTo() verwenden. • Daten aus Dateien werden mittels FileInputStream gelesen und mittels FileOutputStream geschrieben. Wichtig: Streams sind Ressourcen, die nach Gebrauch explizit freigegeben werden müssen (sehr wichtig für Windows!). Und zwar unabhängig davon, ob beim Schreiben oder Lesen etwas schief läuft. • Hier ein Code Snippet zum kopieren von einem InputStream in einen OutputStream: byte[] buffer = new byte[1024]; int size = 0; while ((size = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, size); } In die while Schleife können Sie den Code hinzufügen, der Fortschrittsinformationen liefert. CS203, Universität Basel, HS 2016 c Franz-Josef Elmer Software Engineering, Universität Basel, HS 2016 2/3 Richtlinien an den Code Der Code muss folgenden Richtlinien genügen: 1. Nur Java 7 Sprachfeatures. 2. Keine Third-Party Libraries. 3. Nur ein System.exit() Statement. Dies darf nur in der main() auftreten. 4. Keine printStackTrace() Aufrufe. 5. Keine Method hat mehr als 50 Zeilen. 6. Die Klassen in ch.unibas.informatik.hs16.cs203.datarepository.api dürfen nicht geändert werden. 7. Alle Klassen im Package ch.unibas.informatik.hs16.cs203.datarepository.processing (ausser Factory) sind package protected (also ohne public Qualifier) deklariert. 8. Alle Klassen des Kommandozeilen Clients sind im Package ch.unibas.informatik.hs16.cs203.datarepository.apps.cli. Auch hier sind alle Klassen (ausser der Main Klasse) package protected deklariert. 9. Klassen, die sowohl im Package ch.unibas.informatik.hs16.cs203.datarepository.processing im Package ch.unibas.informatik.hs16.cs203.datarepository.apps.cli nützlich sind sollten in ein gemeinsames Package (ch.unibas.informatik.hs16.cs203.datarepository.common). All Klassen dieses Package hängen nicht von Klassen anderer Packages der Applikation ab. 10. Alle Input- und Outputstreams werden in derselben Method geschlossen in der sie erzeugt wurden. Dazu bedient man sich einem try-catch-finally Statement. Beispiel: InputStream inputStream = null; try { inputStream = new FileInputStream(file); // process inputStream } catch (IOException ex) { // handle exception } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { // silently ignored } } } CS203, Universität Basel, HS 2016 c Franz-Josef Elmer Software Engineering, Universität Basel, HS 2016 3/3 11. Keine Stacktraces auf die Konsole. Um dies garantiert auszuschliessen hilft folgendes Beispiel: public static void main(String[] args) { try { // handle args } catch (Throwable t) { // handle exception } } CS203, Universität Basel, HS 2016 c Franz-Josef Elmer