30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

332 11. Exceptions<br />

noch e<strong>in</strong>e zusätzliche Kopie der Exception angelegt wird, da ja call-by-value<br />

<strong>in</strong> C ++ der Standardmechanismus ist.<br />

Um nicht missverstanden zu werden: Die Fallen, <strong>in</strong> die man beim Exception<br />

Handl<strong>in</strong>g stolpern kann, sollen niemanden abschrecken, sondern nur<br />

warnen, worauf man aufpassen muss. Exceptions s<strong>in</strong>d etwas sehr Brauchbares<br />

und sollen auch unbed<strong>in</strong>gt verwendet werden! Die Behandlung von<br />

irgendwelchen “Ausnahmezuständen” ist seit den Urzeiten der <strong>Softwareentwicklung</strong><br />

e<strong>in</strong> heißes Thema und Exceptions s<strong>in</strong>d die sauberste und robusteste<br />

Möglichkeit, mit unerwarteten Ereignissen umzugehen. Code, der robust und<br />

fehlertolerant ist, ist eben bei weitem komplexer als Code, der nur so lange<br />

funktioniert, wie alles im “Normalzustand” bleibt. Wer kann zum Beispiel<br />

behaupten, dass im Falle von Netzwerken der andere Rechner immer erreichbar<br />

ist oder überhaupt existiert? Wer kann vorherbestimmen, ob e<strong>in</strong> File,<br />

das man öffnen will, garantiert vorhanden ist? Es ist also notwendig, e<strong>in</strong>e<br />

Fehlererkennung und entsprechende Behandlung <strong>in</strong> den Code e<strong>in</strong>zubauen.<br />

Es kursiert leider auch noch immer die große Angst vor Performanceproblemen<br />

bei der Verwendung von Exceptions, da e<strong>in</strong> try ... catch e<strong>in</strong><br />

wenig <strong>in</strong>effizienter ist, als z.B. e<strong>in</strong>e Abfrage von return Werten. Diese Angst<br />

ist allerd<strong>in</strong>gs im Normalfall unbegründet. Man darf nämlich nicht außer Acht<br />

lassen, dass e<strong>in</strong>e saubere und übersichtliche Programmstruktur <strong>in</strong> der Regel<br />

e<strong>in</strong>e effizientere Implementation von Algorithmen begünstigt.<br />

E<strong>in</strong> kurzer Vergleich des Exception Mechanismus mit alternativen Techniken<br />

zur Fehlerbehandlung zeigt se<strong>in</strong>e Stärken:<br />

• Man kann e<strong>in</strong>en Fehler ignorieren und e<strong>in</strong>fach probieren, weiterzumachen.<br />

Dass das katastrophale Folgen haben kann, versteht sich von selbst und<br />

deswegen möchte ich diese Art der “Fehlerbehandlung” gar nicht näher<br />

kommentieren.<br />

• Man kann e<strong>in</strong>fach bei e<strong>in</strong>em Fehler das Programm beenden. Dieses Verhalten<br />

führt früher oder später sicher zu e<strong>in</strong>em größeren Desaster. Erstens ist<br />

e<strong>in</strong> Programm, das sich bei jeder Gelegenheit beendet, e<strong>in</strong>e Katastrophe<br />

für die Benutzer. Zweitens bedeutet dieses Verhalten, dass <strong>in</strong>tern durch das<br />

willkürliche Unterbrechen von Abläufen schlimmste Inkonsistenzen entstehen<br />

können. Sobald dann e<strong>in</strong>mal aufgrund e<strong>in</strong>es solchen Verhaltens e<strong>in</strong>e<br />

größere Datenbank <strong>in</strong>konsistent ist, weil e<strong>in</strong>fach beim Beenden nur die halben<br />

Daten geschrieben werden konnten, kann man sich das Lachen kaum<br />

noch verhalten. Dieses Verhalten ist also absolut unbrauchbar!<br />

• Man kann im Fehlerfall e<strong>in</strong>e Meldung z.B. auf Standard-Error schreiben.<br />

Das Problem dabei ist, dass man ja trotzdem irgendwie mit dem Programm<br />

fortfahren muss. Es muss also sowieso e<strong>in</strong>e der anderen, hier erwähnten,<br />

Strategien zusätzlich implementiert werden, denn sonst käme dieses Verhalten<br />

dem Ignorieren des Fehlers gleich.<br />

• Man kann aus allen Methoden und Funktionen im Fehlerfall bewusst<br />

“unmögliche” Ergebnisse zum Signalisieren e<strong>in</strong>es Fehlers liefern. Dies war

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!