Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Es sei an dieser Stelle angemerkt, daß die genaue Typisierung mancher Argumente nach einer Datenstruktur<br />
verlangt, die üblicherweise nicht zu den vordefinierten Typen <strong>der</strong> Eiffel-Basisbibliothek gehört. Zur Speicherung<br />
<strong>der</strong> Bücher und Entleiher einer Bibliothek sowie <strong>der</strong> Autoren des Informationssystems benötigen wir eine<br />
generische Klasse, die dem mathematischen Konzept <strong>der</strong> Menge entspricht. Dies ist nötig, weil wir beliebig<br />
viele Bücher, Entleiher und Autoren zulassen wollen, Elemente hinzufügen, nach Kriterien wie Autor und<br />
Titel (und ggf. Entleihstatus) suchen, und entnehmen wollen. Indizes, wie Fel<strong>der</strong> sie anbieten, werden nicht<br />
gebraucht. Stattdessen muß gesichert sein, daß Elemente nicht doppelt vorkommen. Aus diesem Grunde muß<br />
zu den obengenannten problemspezifischen Klassen eine generische Klasse SET hinzugefügt werden, <strong>der</strong>en<br />
Dienstleistungen sich aus den Anfor<strong>der</strong>ungen des Problems und den üblichen Mengenoperationen ergeben.<br />
4.1.6.3 Vollständige Klassenstruktur<br />
An dieser Stelle müsste nun die obige Beschreibung in eine vollständig beschriebene Struktur von Eiffel-Klassen<br />
umgesetzt werden, in <strong>der</strong> alle Dienstleistungen, die für die Modellierung des Problems relevanten Attribute<br />
(z.B. die Komponenten eines Buches) und eventuell weitere für die Verarbeitung hilfreiche features explizit<br />
genannt, typisiert und mit Vor- und Nachbedingungen versehen sind. Der selektive Export gemäß <strong>der</strong> oben<br />
genannten Kunden wäre explizit zu vereinbaren und Erbbeziehungen wären in inherit-Klauseln zu formulieren.<br />
Es würde den Rahmen dieses Skriptes sprengen, dieses Beispiel bis ins letzte Detail auszuführen. Wir belassen<br />
es daher bei <strong>der</strong> bisher gegebenen Feinspezifikation, die mit entsprechendem Platz- und Zeitaufwand (aber<br />
ohne weitere Entwurfsüberlegungen) in eine vollständige Klassenstruktur umgesetzt werden kann.<br />
4.1.7 Ästhetik <strong>der</strong> Programmierung<br />
Ein letzter Aspekt, <strong>der</strong> beim Entwurf – genauso wie bei <strong>der</strong> Implementierung – eine Rolle spielen sollte, ist<br />
eher ästhetischer Natur. Es gibt viele Programme, die ihre Aufgabe erfüllen, aber unter diesen gibt es welche,<br />
<strong>der</strong>en Vorgehensweise man als “schlechten Programmierstil” bezeichnen würde.<br />
Was ein guter und was ein schlechter Programmierstil ist, läßt sich nicht in voller Allgemeinheit sagen, da<br />
die Ansichten darüber zum Teil auseinan<strong>der</strong>driften. Manche halten Programme für gut, wenn sie nur wenige<br />
Klassen und Routinen benötigen, kurzen Code haben, o<strong>der</strong> durch geschickte Anordnung von Anweisungen<br />
sehr effizient sind. An<strong>der</strong>e bevorzugen Programme, in denen <strong>der</strong> Code einer einzelnen Routine kurz ist.<br />
Nach unserer Ansicht sollte ein Entwurf so gestaltet sein, daß seine Struktur für An<strong>der</strong>e durchschaubar<br />
bleibt und die wesentlichen Ideen ohne große Erklärungen erkennbar sind. Dies ist meist <strong>der</strong> Fall, wenn ein<br />
klarer Bezug zur realen Welt zu erkennen bleibt, die modelliert wird, wobei auch die Namensgebung für<br />
Klassen, features und Parameter eine nicht unwesentliche Rolle spielt. Auch bedeutet dies, daß Zusicherungen<br />
– die ja auch einen Teil <strong>der</strong> Dokumentation eines Programms darstellen – nur features benutzen, die auch<br />
exportiert werden. 8 Interessanterweise stimmen die Beurteilungen konkreter vorgegebener Programme durch<br />
verschiedene Personen meist überein 9 und deshalb ist es auch hier wichtig, Erfahrungen zu sammeln und<br />
eigene Programme <strong>der</strong> Kritik an<strong>der</strong>er zu stellen, um die eigene Beurteilungsfähigkeit zu schärfen und im<br />
Laufe <strong>der</strong> Zeit “bessere” Programme zu schreiben.<br />
Ästhetik ist ein Kriterium, das zuweilen auf Kosten <strong>der</strong> Effizienz geht, aber bedeutend ist für das Verständnis.<br />
Dies geht Hand in Hand damit, daß man die Korrektheit eines Programms leicht einsehen und ggf. auch leicht<br />
beweisen kann. Oft versteht man ein Programm viel besser, wenn man die Gründe aufgeschrieben hat, warum<br />
<strong>der</strong> Entwurf und die implementierte Methode auch tatsächlich funktioniert. Dies leitet uns über zum nächsten<br />
Thema, <strong>der</strong> Implementierung von Programmen und dem Nachweis ihrer Korrektheit.<br />
8 Dies wird von Eiffel nicht kontrolliert und lei<strong>der</strong> sind auch die Musterlösungen zuweilen von diesem Prinzip abgewichen.<br />
9 Sie sollten während einer Übungstunde einmal Kriterien zusammentragen, ausdiskutieren und dann eine Liste <strong>der</strong> Kriterien<br />
für einen guten Programmierstil, zusammenstellen, auf die Sie sich einigen können.