Fortgeschrittene objektorientierte Programmierung
LVA 185.211, VL 2.0, 2008 S
2. Übungsaufgabe
Lernen Sie Eiffel und entwickeln Sie ein Programm in Eiffel (siehe unten).
Ziel der Aufgabe ist das Sammeln von Erfahrungen zu
- dynamisch überprüften Zusicherungen und
- kovarianten Eingangsparametertypen und
CAT calls
.
Umfangreiche Informationen zur Programmiersprache Eiffel (Tutorials,
Bücher, Beispiele, etc.) finden Sie unter dem
Cetus-Link zu Eiffel.
Zur Lösung der Übungsaufgabe können Sie zwischen zwei
verschiedenen Eiffel-Systemen wählen: ISE-Eiffel als eher kommerzielles
System mit umfangreicher Entwicklungsumgebung (empfohlen) und SmartEiffel
als open source System (eher nur für Puristen). Da sich vor allem die
Bibliotheken dieser beiden Systeme stark voneinander unterscheiden, ist
eine Portierung von einem System auf das andere oft mit erheblichem Aufwand
verbunden.
ISE-Eiffel:
Die Firma ISE wurde von Bertrand Meyer, dem Entwickler von Eiffel,
gegründet und vertreibt vor allem Eiffel-Produkte und Support.
Die Eiffel-Entwicklungsumgebung von ISE,
EiffelStudio,
ähnelt VisualStudio und ist für die Entwicklung von open source
Software auf vielen Plattformen frei verfügbar. Die kommerzielle Version
unterscheidet sich davon nur in den Lizenzvereinbarungen und im Support.
Sowohl zu EiffelStudio als auch zu Eiffel selbst finden Sie umfangreiche
online Dokumentation.
SmartEiffel:
SmartEiffel
wurde (ursprünglich unter dem Namen SmallEiffel) als GNU-Projekt
entwickelt, um neben dem (damals ausschließlich) kommerziellen ISE-Eiffel
auch ein frei verfügbares open source Eiffel zu haben. Aus rechtlichen und
historischen Gründen gibt es bedeutende Unterschiede zwischen SmartEiffel
und ISE-Eiffel, vor allem hinsichtlich der Bibliotheken. Obwohl SmartEiffel
keine integrierte Entwicklungsumgebung besitzt, ist es für diese Übung
ausreichend.
Aufgabe:
Folgende Aufgabenstellung soll als Anregung dienen. Wenn Sie wollen,
können Sie in Eiffel auch eine andere Aufgabe vergleichbaren Umfangs
lösen, durch die Sie die eingangs genannten Erfahrungen sammeln.
Schreiben Sie ein Programm zur Verwaltung von Konten. Jedes Konto verfügt
über Angaben zu den Zeichnungsberechtigten, einen Kreditrahmen (bei dessen
Überschreitung die Bank in der Regel keine weitere Überziehung
zulässt), je einen Prozentsatz für die Sollverzinsung (Zinsen
für den Betrag, um den das Konto überzogen ist) und Habenverzinsung
(Zinsen für das Guthaben am Konto) und den aktuellen Betrag am Konto.
Es sollen Operationen für Bareinzahlungen, Barauszahlungen,
Überweisungen zwischen Konten sowie Abfragen und Änderungen der
zu den Konten gespeicherten Daten (ausgenommen Änderungen des Guthabens)
unterstützt werden.
Auf Konten sollen zumindest folgende Zusicherungen gelten: Die Verzinsung und
der Kreditrahmen sollen stets innerhalb der vom Kreditinstitut vorgegebenen
Grenzen bleiben. Es gibt einen Mindestbetrag von 5 Euro für jede
Einzahlung, Auszahlung und Überweisung.
Entwickeln Sie zwei Untertypen des Kontos: Ein Studentenkonto und ein
Pensionskonto. Diese Konten sollen jeweils nur einen Zeichnungsberechtigten
haben, der Student bzw. Pensionist ist. Überprüfen Sie, ob die
Zeichnungsberechtigten tatsächlich die richtigen Typen haben, wobei
Student
und Pensionist
Untertypen von Person
sind.
Studenten- und Pensionskonten sollen folgende Unterschiede zu normalen Konten
aufweisen: Für Verzinsungen und Kreditrahmen gelten engere Grenzen als bei
normalen Konten, dafür gelten niedrigere Mindestbeträge für
Einzahlungen, Auszahlungen und Überweisungen (1 Euro). Überlegen Sie
sich weitere Zusicherungen, die die Möglichkeiten und vor allem Grenzen
von Zusicherungen in Eiffel demonstrieren.
Schreiben Sie ein einfaches Programm zum Testen der Konten (interaktiv oder
auch nicht), das die Einschränkungen von CAT calls
auslotet.
Achten Sie generell auf ein sinnvolles Sichtbarmachen von features
in
anderen Programmteilen.