Objektorientierte Programmiertechniken
LVA 185.A01, VU, 3 ECTS, 2015/2016 W

9. Übungsaufgabe

Themen:

Annotationen, aspektorientierte Programmierung

Termine:

Ausgabe: 9.12.2015
Abgabe: 16.12.2015, 12:00 Uhr

Abgabeverzeichnis:

Aufgabe9

Programmaufruf:

java Test

Grundlage:

Skriptum, Schwerpunkt auf den Abschnitten 4.3 und 4.4

Aufgabe

Welche Aufgabe zu lösen ist:

Auf dem Marktplatz von Hinterwaldgstetten gibt es einen Weihnachtsmarkt, auf dem tolle Weihnachtsgeschenke verkauft werden. Als besonderer Kundenservice werden die Geschenke auch in Schachteln verpackt. Jeder Marktstand hat dazu ein eigenes Schachtellager. Geschenke und Schachteln haben unterschiedliche Formen. Die Grundfläche einer Schachtel kann entweder ein Kreis, ein gleichseitiges Sechseck, ein Quadrat oder ein Rechteck sein. Auch Geschenke haben eine Grundfläche, die entweder in einen Kreis, in ein gleichseitiges Sechseck, in ein Quadrat oder in ein nichtquadratisches Rechteck hineinpasst. Geschenke sollen so in einer Schachtel verpackt werden, dass sie nicht verrutschen können. So passt z.B. eine Weinflasche in eine Schachtel mit einem kreisförmigen, aber auch mit einem sechseckigen oder quadratischen Boden. Eine sechseckige Kerze passt in eine Schachtel mit einem sechseckigen, aber auch mit einem kreisförmigen oder rechteckigen Boden. Ein Würfel passt in eine Schachtel mit quadratischem Boden, aber nicht in eine mit rechteckigem Boden, da der Würfel darin verrutschen würde. Ebenso passt eine Flasche nicht eine Schachtel mit rechteckigem Boden und eine sechseckige Kerze nicht in eine Schachtel mit quadratischem Boden, da sie darin verrutschen würde. Ein Buch passt nur in eine Schachtel mit rechteckigem Boden. Rechteckige oder quadratische Geschenke sollen aber nicht in kreisförmigen oder sechseckigen Schachteln verpackt werden, da zu viel Raum verloren gehen würde. Wertvolle Geschenke werden oft mehrfach verpackt, zum Beispiel das wertvolle Geschenk in eine kleine Schachtel, diese Schachtel in eine mittlere und diese in eine große Schachtel, d.h. auch eine Schachtel kann als Geschenk gesehen werden.

Geschenke haben einen Namen, eine Höhe (in cm) und abhängig von der Art des Geschenks Informationen über die Grundfläche (in cm) gespeichert (Kreis: Durchmesser; Sechseck, Quadrat: Seitenlänge; Rechteck: Länge und Breite). Von einer Schachtel werden die Innenmaße (in cm, Höhe und abhängig von der Art Informationen über die Grundfläche) gespeichert. Die Kartondicke beträgt 5mm, d.h. die Aussenmaße einer Schachtel sind um 1cm größer als die Innenmaße. Weiters wird zu jeder Schachtel gespeichert, welches Geschenk sich in der Schachtel befindet.

Entwickeln Sie ein Javaprogramm, das Schachtellager mit leeren Schachteln und Einkaufstaschen der Kunden, die Geschenke und Schachteln mit Geschenken enthält, verwalten kann. Entwickeln Sie Klassen(hierarchien) um Geschenke, Schachteln, Schachtellager und Einkaufstaschen darzustellen. Geschenke und Schachteln, mehrere Schachtellager und Einkaufstaschen sollen erzeugt werden. Die Lager und Einkaufstaschen sollen befüllt werden.

Weiters sollen folgende Methoden und Funktionalitäten unterstütz werden:

Entwickeln Sie eigene Klassen für Geschenke (Bücher, Bälle, ...), mindestens zwei von unterschiedlicher Größe für jede Art von Grundflächen. Sorgen Sie dafür, dass zwischen allen Klassen für Geschenke und Schachteln, die zueinander in einer Untertypbeziehung stehen können, auch tatsächlich Untertyp- und Vererbungsbeziehungen bestehen.

Schreiben Sie eine Klasse Test, die Lager, Taschen, alle Klassen von Geschenken und Schachteln und alle Untertypbeziehungen testet.

Zusätzlich soll der von Ihnen geschriebene Programmcode Meta-Informationen über die Klassen und Methoden enthalten. Versehen Sie jede selbst geschriebene Klasse und jede darin enthaltene Methode mit einer Annotation, die in einem String angibt, welches Gruppenmitglied hauptsächlich für die Entwicklung dieser Klasse bzw. Methode verantwortlich ist.

Da in dem Programm viele Objekte erzeugt werden, soll die Anzahl der dynamisch erzeugten Objekte gezählt werden. Kapseln sie das Zählen der Objekte in einem Aspekt und geben Sie die Anzahl am Ende des Programms am Bildschirm aus.

Daneben soll die Datei Test.java wie gewohnt als Kommentar eine kurze, aber verständliche Beschreibung der Aufteilung der Arbeiten auf die einzelnen Gruppenmitglieder enthalten – wer was gemacht hat.

Warum die Aufgabe diese Form hat:

Durch mehrere Arten von Schachteln, Geschenken, etc. ergibt sich eine umfangreiche Typstruktur. Alle Schwierigkeiten in der Aufgabe sollten mit bekannten Mitteln leicht zu lösen sein. Das gibt Ihnen zum Abschluss der Laborübung Gelegenheit zu zeigen, dass Sie schöne, einfache und gut wartbare Programme schreiben können.

Was im Hinblick auf die Beurteilung zu beachten ist:

Die insgesamt 100 für diese Aufgabe erreichbaren Punkte sind folgendermaßen auf die zu erreichenden Ziele aufgeteilt:

Generizität richtig verwendet, sinnvolle, korrekte Klassenhierarchien 25 Punkte
Annotationen und Reflexion wie vorgeschrieben und sinnvoll eingesetzt 15 Punkte
Aspektorientierte Programmierung richtig eingesetzt 15 Punkte
Lösung wie vorgeschrieben und sinnvoll getestet 15 Punkte
Geforderte Funktionalität vorhanden (so wie in Aufgabenstellung beschrieben) 15 Punkte
Zusicherungen richtig und sinnvoll eingesetzt 10 Punkte
Sichtbarkeit auf so kleine Bereiche wie möglich beschränkt 5 Punkte

Kräftige Punkteabzüge gibt es für

Wie die Aufgabe zu lösen ist:

Es ist wichtig, alle Untertypbeziehungen zu finden und die Ersetzbarkeit auf geeignete Weise (durch durchdachte Zusicherungen, aber auch durch Testfälle) sicherzustellen. Vererbungsbeziehungen, die nicht gleichzeitig auch Untertypbeziehungen sind, müssen unbedingt vermieden werden. Andererseits sollen überall Untertypbeziehungen hergestellt werden, wo das möglich ist. Überlegen Sie sich, wo Sie (abstrakte) Klassen und Interfaces verwenden. Beachten Sie die Sichtbarkeit. Benutzen Sie Generizität und vorgefertigte Containerklassen, wo dies sinnvoll erscheint.

Diese Aufgabe enthält wahrscheinlich weniger inhaltliche Schwierigkeiten als vorangegangene Aufgaben. Gerade deswegen sollten Sie ein schönes, einfaches und gut wartbares Programm abliefern, da solche Qualitätskriterien stärker in die Beurteilung einfließen als gewohnt.

Achten Sie darauf, dass Sie den Programm-Code so klein und einfach wie möglich halten. Jede unnötige Anweisung kann eine versteckte Fehlerquelle darstellen.

Was im Hinblick auf die Abgabe zu beachten ist:

Dieses Programm wird nicht mit dem Standardcompiler javac, sondern mit dem Compiler ajc übersetzt. Damit die Übersetzung funktioniert, müssen alle Klassen gemeinsam mit dem Aufruf übersetzt werden, z.B. mit einem Aufruf ajc -cp /usr/local/lib/aspectjrt.jar *.java. Wenn Sie unbedingt wollen, können Sie Packages verwenden, aber dann müssen Sie auch die Dateien in Unterverzeichnissen in den ajc-Aufruf einbeziehen. Testen Sie ihre Lösung auf der g0, da sich die Version von ajc auf der g0 eventuell von der Version unterscheidet, die Sie zu Hause verwenden. Üblicherweise ist bei einer Standardinstallation von Java ajc nicht inkludiert, laden Sie sich für zu Hause ajc von der Eclipse Webseite. Dort findet sich auch ein detailierter Programming Guide. Gerade für diese Aufgabe ist es besonders wichtig, dass Sie (abgesehen von geschachtelten Klassen) nicht mehr als eine Klasse in jede Datei geben und auf aussagekräftige Namen achten. Sonst ist es schwierig, sich einen Überblick über Ihre Klassen und Interfaces zu verschaffen. Achten Sie darauf, dass Sie keine Java-Dateien abgeben, die nicht zu Ihrer Lösung gehören (alte Versionen, Reste aus früheren Versuchen, etc.).
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
            PK
            OOP
               1. Aufgabe
               2. Aufgabe
               3. Aufgabe
               4. Aufgabe
               5. Aufgabe
               6. Aufgabe
               7. Aufgabe
               8. Aufgabe
               9. Aufgabe
            Typsysteme
         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
         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:
Tutoren
Lehrunterlagen
vorige Aufgabe
Fakultät für Informatik
Technische Universität Wien
Anfang | HTML 4.01 | Datenschutzerklärung | letzte Änderung: 2015-12-09 (Puntigam)