Wie löst man Probleme?
Wir verstehen als Aufgabe und Tätigkeit eines Informatikers
nicht in erster Linie das Schreiben von Programmen ,
sondern das Lösen von Problemen ,
sowohl von eigenen wie auch von solchen der Anwender;
also über eine Problemanalyse
zu einem Systementwurf zu kommen.
Dazu gibt es zwar kein durchgängiges Verfahren,
jedoch eine Reihe von bewährten Strategien
und nützlichen Tipps.
Eine große Schwierigkeit in der Praxis besteht darin,
daß viele Problembereiche außerordentlich umfangreich
und komplex sind; man braucht also Strategien zur
Beherrschung der Komplexität.
Dabei ist es hilfreich, nicht nur ein einzelnes Problem anzugehen,
sondern zu versuchen, eine ganze Problemklasse zu lösen.
So hat man einen besseren Wirkungsgrad und erhält im Idealfall
wiederverwendbare Bausteine.
Häufig beobachtet man, daß ein allgemeineres Problem
leichter und eleganter lösbar ist als ein spezielles
(das damit auch gelöst ist).
Der Grund dafür ist die dabei vorgenommene
Abstraktion, also das Weglassen von für
die spezielle Instanz spezifischen Einzelheiten;
man überblickt so das Wesentliche besser
(das ist Theorie).
Den Instanzen aus einer Problemklasse kann man jeweils ein geeignetes
ganzzahliges Größenmaß zuordnen
(oft gibt es mehrere davon). Damit lautet unsere Grundstrategie:
- kleine Probleme: direkt lösen
- große Probleme: nach der Regel divide et impera
(teile und herrsche) in kleinere Teilprobleme herunterbrechen
und deren Lösungen wieder richtig zusammensetzen.
Die Teilprobleme betrachten wir in diesem Zusammenhang erst als
"schwarzen Kasten", dessen Auswirkung durch einen
Kontrakt beschrieben wird;
und wir untersuchen sie anschließend
für sich weiter. So folgen wir dem Geheimnisprinzip:
wir verwenden nicht mehr Information als lokal benötigt wird.
Für das einzelne Teilproblem kommen,
sofern es nicht direkt lösbar ist,
jeweils zwei Vorgehensweisen in Frage:
Beides wird durch Modula 2 gut unterstützt.
Wir zeigen dies an einem ausführlichen
Beispiel .
zurück |
Inhalt | Index |
vor |
Vorlesung
Klaus Lagally, 22. Februar 2000, 19:36