6.1 Nutzen von Sprachmitteln

Die hier vorgeführten Datenstrukturen (Feld, Liste, ...) sind für sich genommen nutzlos. Erst durch die Kombination mit wirklichen Nutzdaten aus einer zu lösenden Problemstellung werden die Strukturen sinnvoll.

Um nicht jede Datenstruktur und die darauf operierenden Algorithmen für jeden möglichen Typ von Nutzdaten (int, double, Student, ...) neu implementieren zu müssen (FeldInt, FeldDouble, FeldStudent, ..., ListeInt, ...), strebt man ein möglichst generisches Programmieren an6.1.

Dieses Ziel kann je nach Programmiersprache und damit je nach Denkweise auf verschiedenen Wegen erreicht werden. Auch wenn der Algorithmus selbst davon nicht beeindruckt sein sollte (er ist ja per Definition von der Implementation unabhängig), ist es doch ungeschickt, einen Algorithmus so zu definieren, daß er bei der später stattfindenden Implementation schwierig oder uneffektiv umzusetzen ist. Auch wenn sich viele Programmiersprachen in einfachen Punkten sehr ähneln (Schleifen, Vergleiche), haben sie doch individuelle Sprachmittel, die man nutzen kann - oder eben nicht, wenn man für die Implementation eines gegebenen Algorithmus die falsche Sprache wählt (falls man die Wahl überhaupt hat).

Wichtige Beispiele für solche Sprachmittel sind:

(Neben den erwähnten Sprachen gibt es natürlich noch eine Unmenge weiterer, deren Nichtnennung keine Wertung sein soll: Forth, Smalltalk, LISP, Perl, Pearl, SQL, diverse Assembler, OCCAM, Spezialsprachen wie lex, yacc, awk, sed, .... Auf alle Sprachen gerecht vergleichend einzugehen, würde den Rahmen dieses Skripts völlig sprengen.)

Zusätzlich zu den genannten Ausdrucksmöglichkeiten einer Sprache ist natürlich auch wichtig, wie die hinter der Sprache stehende Denkweise zum Problem und zum Algorithmus paßt (prozedural oder beschreibend/symbolisch, 4GL).

Um diese Unterschiede in den Sprachen und die dadurch zur Verfügung stehenden Implementationsmöglichkeiten zu veranschaulichen, wird im Folgenden ein Feld betrachtet, in welchem anhand eines gegebenen Suchschlüssel ein Feldelement gesucht werden soll.

Jedes Feldelement besteht aus einem Vornamen, einem Nachnamen, und einer ganzzahligen Kennung (beispielsweise die Matrikelnummer eines Studenten).

Um den Kern dieses Abschnitts möglichst klar zu zeigen, wird der einfachste dafür mögliche Algorithmus verwendet, nämlich lineare Suche: das Feld wird Element für Element anhand des Suchkriteriums (also Vergleich mit dem Suchschlüssel) verglichen. Bei einer Übereinstimmung wird die Suche beendet und als erfolgreich betrachtet. Wurden alle Elemente geprüft, ohne daß eine Übereinstimmung festgestellt werden konnte, dann wird die Suche als nicht erfolgreich beendet.

Abbildung 6.1: Struktogramm lineare Suche
\includegraphics[width=8cm]{strukto_linearesuche.eps}

TODO: Quelltexte kommentieren und vergleichen!



Unterabschnitte
www.wachtler.de