Institut für Informatik III
Universität Bonn

Datenbanken * Informationssysteme * Softwaretechnologie * Computergrafik * Mustererkennung * Bildverarbeitung * Künstliche Intelligenz * Robotik 

Vorlesung Softwaretechnologie SS'99
Univ.-Prof. Dr. Armin B. Cremers
P. Costanza, G. Kniesel, J. Wolff

15.04.1999
 

Übungsblatt 2

(zu bearbeiten bis 22.4.1999)

Aufgabe 2.1: (SE-Prinzipien)
Überlegen Sie, wozu die in der Vorlesung angesprochenen sieben Prinzipien dienen und fassen Sie sie dementsprechend in kleinere Gruppen zusammen, so daß jede Gruppe bestimmte Eigenschaften beim SW-Design unterstützt.

Aufgabe 2.2: (SE-Prinzipien / Modularität)
Betrachten Sie das Prinzip der Modularität etwas genauer. Beschreiben Sie am Beispiel eines Häuserbaus, welche Arbeiten zur Fertigstellung notwendig sind und ob sie sequentiell oder parallel ausgeführt werden können. Erläutern Sie Ihre Vorgehensweise bei der Lösung der Aufgabe.

Aufgabe 2.3: (SE-Prinzipien / Modularität)
Will man das Prinzip der Modularität in der Praxis anwenden, so sollten die folgenden drei Ziele verfolgt werden, nämlich

  1. das vorliegende komplexe System zu zerlegen,
  2. das System aus bereits existierenden Moduln zusammenzusetzen und
  3. jede Komponente des Systems einzeln zu verstehen.

Diskutieren Sie die Bedeutung dieser Ziele und überlegen Sie, wie sich in diesem Zusammenhang die Begriffe "top-down" und "bottom-up" einordnen lassen.

Aufgabe 2.4: (Objektorientierung / Typsysteme)
In der Vorlesung wurden Typen und Subtypen wie folgt eingeführt:

Diskutieren Sie anhand der folgenden zwei Beispiele,


class SuperClass {
   void doSth(arg:SuperClass) {
        arg.base();
   }
   void base {...}
}

         
class SubClass  extends SuperClass {
   void doSth(arg:SubClass) {
        arg.extra();
   }
   void extra {...}
}

class SuperClass {
   SuperClass doSth(SuperClass arg) {
        return new SuperClass();
   }
}
            
class SubClass extends SuperClass {
   SubClass doSth(SuperClass arg) {
        return new SubClass();
   }
}
Beispiel 1: "Kovariante" Argumente
Beispiel 2: "Kovariante" Ergebniswerte

Tip: Versuchen Sie sich jeweils Anwendungsfälle der beiden Klassen zu konstruieren, in der die Subtypbeziehung / Ersetzbarkeit angenommen wird, so daß diese Anname anschließend zu Fehlern führt.

Aufgabe 2.5: (Praxis: JUnit)
Für folgende Übung installieren Sie JUnit. Erarbeiten Sie sich das Beispiel, das sich im Verzeichnis $INSTALL_DIR/samples/ befindet. (Hinweise hierzu befinden sich im Verzeichnis $INSTALL_DIR/doc/, sowie ein ausführlicher Artikel auf der JUnit-Homepage.) Überlegen Sie sich anschließend, welche Änderungen an den Beispielquelltexten durchgeführt werden müßten, um zusätzlich zu den bekannten europäischen Währungen den Euro zu unterstützen? Welche Alternativen gibt es? Bei welcher Alternative können die existierenden Testprogramme unverändert übernommen werden? Mit welchen zusätzlichen Testfällen kann die neue Funktionalität getestet werden? (Wer Lust hat, kann die Euro-Unterstützung implementieren. ;-) Quelltexte, die an costanza@cs.uni-bonn.de geschickt werden, werden gerne genauer begutachtet und kommentiert.)

Literatur:

Die Grundlage für die Aufgaben 2.1 bis 2.3 liefert Kapitel 3 aus dem Buch von Ghezzi et al.