Exception Handling/de: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
Fehlercodes oder Ausnahmebehandlung, was ist besser? | |||
Das hängt ganz davon ab <span class="smiley">;)</span> | |||
==“Schweinchen in der Mitte” – wie Funktionen sich dumm halten== | |||
<font size="smaller">(Anders als bei dem [http://de.wikipedia.org/wiki/Schweinchen_in_der_Mitte Ballspiel] ''[de.wikipedia.org]'' fängt unser “Schweinchen” die Ausnahmen nie, aber Funktionen haben ja keine Gefühle – Gott sei Dank!)</font> | |||
Eigentlich wollte ich hier durch ein konkretes Anwendungsbeispiel motivieren. Das Beispiel, das mich selbst auf den Trichter brachte, ist nicht quelloffen, weshalb ich es nicht zitieren kann. Ich hoffe ein anwendbares Beispiel nachreichen zu können und beschränke mich hier zunächst auf die Darstellung des Prinzips. | |||
==Prinzip== | |||
Wenn A B aufruft und B eine Funktion C aufruft, die formal und (hinsichtlich der “gut”-Fälle) semantisch in B bekannt ist, deren tatsächliche Implementierung aber durch A ausgewählt wird, dann können wir B unter Einsatz von Ausnahmen frei vom Wissen über Fehler halten, die in der tatsächlichen Implementierung von C (nennen wir sie D) auftreten, aber nicht in die Semantik von C passen. | |||
<font size="smaller">Ich bin bemüht, das hier letztlich so einfach und verständlich wie möglich zu formulieren und damit längst nicht am Ziel. Klagen und Anregungen sind willkommen.</font> | |||
==Notizen und Material== | |||
* Anwendbarkeit z.B. zur Trennung medien- und inhaltsspezifischen Funktionen bei Eingaben | |||
* wenn hier Quelltext, dann: verständlich, knapp, getestet | |||
* Wissen des Aufrufers bleibt auf die Gut-Fälle beschränkt, nur die äußere Steuerung kennt (manche) Fehlerfälle. | |||
* doppelte Verschachtelung auf dem Aufruf-Stack: a1->b1->a2->b2 | |||
* Grundlage: indirekte Aufrufe mittels virtueller Methoden (ja, das geht auch mit Funktionszeigern) | |||
* (Bemerkung: Der überraschende Qualitätsübergang erinnert stark an den “Knall-Effekt” der bei [http://de.wikipedia.org/wiki/Minimax-Algorithmus Minimax] ''[de.wikipedia.org]'' durch den Einsatz von [http://de.wikipedia.org/wiki/Alpha-Beta-Suche Alpha- /Beta-Abschneidungen] ''[de.wikipedia.org]'' eintritt: [http://qt.io/groups/qt_german/wiki/AlphaBetaCut AlphaBetaCut]) |
Revision as of 13:57, 25 February 2015
Fehlercodes oder Ausnahmebehandlung, was ist besser?
Das hängt ganz davon ab ;)
“Schweinchen in der Mitte” – wie Funktionen sich dumm halten
(Anders als bei dem Ballspiel [de.wikipedia.org] fängt unser “Schweinchen” die Ausnahmen nie, aber Funktionen haben ja keine Gefühle – Gott sei Dank!)
Eigentlich wollte ich hier durch ein konkretes Anwendungsbeispiel motivieren. Das Beispiel, das mich selbst auf den Trichter brachte, ist nicht quelloffen, weshalb ich es nicht zitieren kann. Ich hoffe ein anwendbares Beispiel nachreichen zu können und beschränke mich hier zunächst auf die Darstellung des Prinzips.
Prinzip
Wenn A B aufruft und B eine Funktion C aufruft, die formal und (hinsichtlich der “gut”-Fälle) semantisch in B bekannt ist, deren tatsächliche Implementierung aber durch A ausgewählt wird, dann können wir B unter Einsatz von Ausnahmen frei vom Wissen über Fehler halten, die in der tatsächlichen Implementierung von C (nennen wir sie D) auftreten, aber nicht in die Semantik von C passen.
Ich bin bemüht, das hier letztlich so einfach und verständlich wie möglich zu formulieren und damit längst nicht am Ziel. Klagen und Anregungen sind willkommen.
Notizen und Material
- Anwendbarkeit z.B. zur Trennung medien- und inhaltsspezifischen Funktionen bei Eingaben
- wenn hier Quelltext, dann: verständlich, knapp, getestet
- Wissen des Aufrufers bleibt auf die Gut-Fälle beschränkt, nur die äußere Steuerung kennt (manche) Fehlerfälle.
- doppelte Verschachtelung auf dem Aufruf-Stack: a1->b1->a2->b2
- Grundlage: indirekte Aufrufe mittels virtueller Methoden (ja, das geht auch mit Funktionszeigern)
- (Bemerkung: Der überraschende Qualitätsübergang erinnert stark an den “Knall-Effekt” der bei Minimax [de.wikipedia.org] durch den Einsatz von Alpha- /Beta-Abschneidungen [de.wikipedia.org] eintritt: AlphaBetaCut)