| Exception-Handling in objektorientierten VB(A)-Programmen |
|
|
|
| Geschrieben von: Christoph Jüngling | ||||||||
| Samstag, den 15. März 2008 um 20:29 Uhr | ||||||||
Seite 1 von 6 VorwortDie in diesem Artikel beschriebenen Mechanismen sind in Visual Basic 6 (VB6) sowie in Visual Basic for Appplications (VBA) einsetzbar. Sie gelten ausdrücklich nicht für VB-Dotnet, wo es bessere Alternativen (strukturiertes Try ... Catch ... Finally) gibt. In Anlehnung an diese neuen Mechanismen wurden die Labels der hiesigen Fehlerbehandlung jedoch bereits "Catch:" und "Final:" genannt. Am "On Error Goto ..." lässt sich prinzipbedingt nichts ändern, und auf ein zusätzlich vorangestelltes Label "Try:" wurde wegen der Redundanz verzichtet. Wer mag, kann dieses jedoch gerne in der "On Error Goto"-Zeile ergänzen.
EinführungFür die Fehlerbehandlung in VB(A)-Programmen gibt es grundsätzlich folgende Möglichkeiten:
Möglichkeit Nummer 1 scheidet grundsätzlich aus, da hier der Benutzer selten eine aussagekräftige Meldung bekommt und vor allem das Programm nicht sinnvoll weitergeführt werden kann. Außerdem bietet diese in der Regel die Option, mittels "Debug"-Button in den Programmcode zu wechseln, was auch in ungeschützten Access-Applikationen nicht unbedingt erwünscht ist. Möglichkeit Nummer 2 ist sicherlich der Regelfall. Dieser hat jedoch den Nachteil, dass bei verschachteltem Funktionsaufruf ein gewisser Aufwand getrieben werden muss, um alle übergeordneten Subs/Funktionen ebenfalls ordnungsgemäß zu beenden. Dies kann z.B. über einen globalen Merker, einen zusätzlichen ByRef-Parameter oder das Funktionsergebnis geschehen. Hinzu kommt der Nachteil, dass auf übergeordneten Ebenen nicht mehr klar erkennbar ist, wo der Fehler ursprünglich her kam, was dessen Behebung erschwert. Möglichkeit Nummer 3 hat zwar den Vorteil des sofortigen Abbruchs aller Ebenen, jedoch ist ein ordnungsgemäßes "Aufräumen" von Objektinstanzen nur unter Schwierigkeiten zu gewährleisten. Dies erfordert unter anderem durchgängig globale Variablen, was gemeinhin weitere Lesbarkeitsprobleme nach sich zieht. Möglichkeit Nummer 4 scheidet meiner Ansicht nach aufgrund der schlechten Lesbarkeit aus und ist daher nur in VBScript zu vertreten, wo die anderen Varianten nicht möglich sind. In Verbindung mit objektorientierter Programmierung tritt noch ein weiterer Aspekt zu Tage: Jede Klasse muss in sich abgeschlossen funktionieren, d.h. auch deren Aufräumarbeiten ("Terminator") müssen unabhängig von einem Fehler durchgeführt werden. Das Zerstören der Klasse muss zwar von außen ausgelöst werden, aber diese Funktion muss zu dem Zeitpunkt bereits über alle fehlerrelevanten Informationen verfügen, da diese nach der Zerstörung nicht mehr verfügbar wären. Zur Lösung dieser Probleme bietet sich eine nähere Betrachtung des Exception-Handlings von VB(A) an.
|
||||||||
| Zuletzt aktualisiert am Samstag, den 15. März 2008 um 21:40 Uhr |