Hausaufgaben 3 - Universität Basel | Informatik

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