Programmiersprachen
LVA 185.208, VL 2.0, 2008 S
2. Übungsaufgabe
Entwickeln Sie in ML oder Haskell (oder einer anderen stark typisierten
funktionalen Programmiersprache) ein Programm zur Verwaltung von Software
jeder Art (z.B. Texte, Filme, Musikstücke, Computerspiele, etc.) auf
unterschiedlichen Datenträgern. Datenträger können physisch sein
(wie Buch, CD, DVD, Festplatte und Speicherkarte) oder abstrakt (wie
Web-Adresse oder Adresse innerhalb eines anderen Datenträgers).
Von jeder Software kann es mehrere Versionen geben, und jede Version kann auf
mehreren Datenträgern gespeichert sein. Daten wie Titel, Autoren und
Entstehungszeit sollten für jede Software (sofern bekannt) angegeben sein,
weitere Kommentare können dazugegeben werden. Implementieren Sie geeignete
Suchmöglichkeiten nach Software.
Jeder physische Datenträger hat einen eindeutigen Eigentümer und kann
verborgt sein. Es soll möglich sein, Datenträger zu kaufen bzw. zu
verkaufen (also den Eigentümer zu ändern) und auszuborgen bzw. an
andere zu verborgen wobei entsprechende Daten erfasst werden sollen.
Die Daten sollen beim absichtlichen Beenden des Programms nicht verloren gehen,
sondern persistent (in einer Datei) gespeichert werden. Die Datenmengen werden
klein bleiben. Es ist daher problemlos möglich, alle Daten beim
Programmstart einzulesen und vor Beendigung neu zu schreiben.
Bei dieser Aufgabe kommt es darauf an, Daten zu verwalten. Dies scheint in
Widerspruch zu modernen funktionalen Sprachen zu stehen. Bei genauerer
Betrachtung ergeben sich aber viele Lösungsmöglichkeiten.
Umfangreiche Informationen zu Objective Caml (z.B. ein Manual und Interpreter
bzw. Compiler zum Herunterladen) finden Sie unter http://caml.inria.fr/. Falls Sie Ihr Programm
in Objective Caml schreiben, schränken Sie sich bitte auf die funktionalen
Konzepte der Sprache ein. Verzichten Sie auf die Verwendung der
objektorientierten Erweiterungen, die einen Programmierstil ähnlich dem von
Java erlauben würden.
Informationen zu Haskell (beispielsweise die Sprachdefinition) finden Sie unter
http://www.haskell.org/.
Sie haben die Wahl zwischen GHC und Hugs. GHC (http://www.haskell.org/ghc/) is ein eher
umfangreiches System bestehend aus einem Compiler (ghc) und Interpreter (ghci)
und eignet sich auch für größere Anwendungen, bringt aber
vielleicht einen etwas höheren Einlernaufwand mit sich.
Der GHC-Compiler produziert relativ effizienten Code. Hugs (http://www.haskell.org/hugs/) ist ein
im Vergleich zu GHC einfacheres auf einem Interpreter basierendes System, das
für die Lösung dieser Aufgabe vollkommen ausreicht.