Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2008 W

7. Übungsaufgabe

Themen:

kovariante Probleme, Untertypen, (mehrfaches) dynamisches Binden

Termine:

Ausgabe: 27.11.2008
reguläre Abgabe: 04.12.2008, 12:45 Uhr
nachträgliche Abgabe: 11.12.2008, 12:45 Uhr

Abgabeverzeichnis:

Gruppe/Aufgabe7

Programmaufruf:

java Test

Grundlage:

Skriptum bis Seite 134

Aufgabe

Welche Aufgabe zu lösen ist:

Entwickeln Sie einen Teil einer Datensicherungsanwendung zum Umgang mit freiem Platz auf Speichermedien. In der abstrakten Klasse oder dem Interface Memory werden folgende Methoden benötigt: Es werden einige Unterklassen von Memory benötigt, die unterschiedliche Speicherarten darstellen: Eine Instanz von HardDisc ist immer zugreifbar, und es braucht nicht überprüft werden, ob das Speichermedium geeignet ist. Bei anderen Speichermedien sind Kontrollen nötig. Für diesen Zweck hat jeder Untertyp von Memory außer den fest eingebauten (HardDisc, USBPort, DVDDrive und BlueRayDrive) eine Methode getId, die eine eindeutige Bezeichnung der Art des Speichers oder Laufwerks zurückgibt. Die Methoden plugIn und load nehmen entsprechende Überprüfungen vor und geben nötigenfalls Fehlermeldungen aus. Die Methoden available und use geben eine Fehlermeldung aus, wenn ein Laufwerk kein geeignetes Speichermedium geladen hat.

Die Klasse Test soll wie üblich die wichtigsten Normal- und Grenzfälle überprüfen und die Ergebnisse in allgemein verständlicher Form in der Standardausgabe darstellen. Simulieren Sie am besten einen vereinfachten Computer mit mehreren fest eingebauten Instanzen von Memory, der wiederholt den freien Speicher überprüft und neuen Speicher anfordert, und testen Sie diesen Computer durch Hinzufügen und Entfernen von wechselbaren Speichermedien.

Lösen Sie die Aufgabe ohne Typumwandlungen und ohne dynamische Typabfragen.

Warum die Aufgabe diese Form hat:

Wie die letzte Aufgabe lässt Ihnen diese Aufgabe viel Entscheidungsspielraum, vor allem für die Gestaltung der Untertypbeziehungen zwischen den Untertypen von Memory. Es gibt mehrere sinnvolle Lösungsvarianten. Die Form der Aufgabe legt die Verwendung kovarianter Eingangsparametertypen nahe, die aber tatsächlich nicht unterstützt werden. Diese Einschränkung wirkt sich auf die Untertypbeziehungen aus. Vielleicht erleichtert mehrfaches dynamisches Binden (durch simulierte Multi-Methoden bzw. das Visitor-Pattern) an der einen oder anderen Stelle die Lösung der Aufgabe. Alternative Techniken, die auf Typumwandlungen und dynamischen Typabfragen beruhen, sind ausdrücklich verboten. Anders als bei den beiden vorangegangenen Aufgaben gibt es keine vorgeschriebenen Testfälle, die zur Selbstkontrolle genutzt werden könnten.

Was im Hinblick auf die Beurteilung zu beachten ist:

Schwerpunkte bei der Beurteilung liegen auf der Entwicklung geeigneter Untertypbeziehungen und dem sinnvollen Einsatz (mehrfachen) dynamischen Bindens zur Vermeidung von Typumwandlungen und dynamischen Typabfragen. Kräftige Punkteabzüge gibt es für Punkteabzüge gibt es unter anderem auch für mangelhafte Zusicherungen, schlecht gewählte Sichtbarkeit und unzureichendes Testen.

Wie die Aufgabe zu lösen ist:

Vermeiden Sie Typumwandlungen oder dynamische Typabfragen von Anfang an, da es schwierig ist, diese aus einem bestehenden Programm zu entfernen. Akzeptieren Sie in einem ersten Entwurf eher kovariante Eingangsparametertypen und lösen Sie diese mithilfe von Techniken, die wir in der Vorlesung kennengelernt haben, auf.

Halten Sie die Anzahl der Klassen, Interfaces und Methoden möglichst klein und überschaubar. Durch die Aufgabenstellung ist eine große Anzahl an Klassen ohnehin kaum vermeidbar, und durch weitere unnötige Strukturierung oder Funktionalität könnten Sie bald den Überblick verlieren. Vermeiden Sie in diesem Zusammenhang auch Exceptions. Einfachheit ist gerade bei der Lösung dieser Aufgabe ein großer Pluspunkt.

Wie in der letzten Aufgabe gibt es mehrere sinnvolle Lösungsansätze. Bleiben Sie bei dem ersten von Ihnen gewählten sinnvollen Ansatz und probieren Sie nicht zuviel herum, damit Ihnen nicht die Zeit davonläuft.

Complang
Puntigam
   Kontakt
   Research
   Lehre
      OOP
      Typsysteme
      EP2
      FOOP
      Prog.spr.
      frühere Lehre
         LVAs 2017 W
         LVAs 2017 S
         LVAs 2016 W
         LVAs 2016 S
         LVAs 2015 W
         LVAs 2015 S
         LVAs 2014 W
         LVAs 2014 S
         LVAs 2013 W
         LVAs 2013 S
         LVAs 2012 W
         LVAs 2012 S
         LVAs 2011 W
         LVAs 2011 S
         LVAs 2010 W
         LVAs 2010 S
         LVAs 2009 W
         LVAs 2009 S
         LVAs 2008 W
            OOP
               Laborübung
               1. Aufgabe
               2. Aufgabe
               3. Aufgabe
               4. Aufgabe
               5. Aufgabe
               6. Aufgabe
               7. Aufgabe
               8. Aufgabe
               9. Aufgabe
               Cacao
            Typsysteme
            Seminar
         LVAs 2008 S
         LVAs 2007 W
         LVAs 2007 S
         LVAs 2006 W
         LVAs 2006 S
         LVAs 2005 W
         LVAs 2005 S
         LVAs 2004 W
         LVAs 2004 S
         LVAs 2003 W
   Links
Sitemap
Kontakt
Schnellzugriff:
Laborübung
Tutoren
Skriptum
Folien
vorige Aufgabe
nächste Aufgabe
Fakultät für Informatik
Technische Universität Wien
Anfang | HTML 4.01 | Datenschutzerklärung | letzte Änderung: 2008-11-27 (Puntigam)