Camping_RIDER: Versuch einer Erläuterung zur Sinnhaftigkeit von Exception-Objekten

Beitrag lesen

Aloha ;)

Die Frage ist, welchen Vorteil es bringt, anstatt eines Fehlertextes an throw() eine Klassenmethode bzw. den Namen einer Klasse zu übergeben? Womit wahrscheinlich sogar eine Instanz erzeugt wird, aber wozu?

Diese Frage ist für mich viel sinnhafter als die ursprüngliche.

Ich versuche dir mal zu antworten:

Auf den ersten Blick hast du Recht, ein Fehlertext genügt oft. Oder um noch weiterzugehen: Eine Fehlernummer reicht in diesen Fällen auch.

Die Objektorientierung als Eigenschaft der Sprache ist kein Argument, soweit will ich dir Recht geben - natürlich ist das ein Argument, wenn es darum geht, warum in dieser Sprache Fehler als Objekt abgebildet werden, es ist aber kein Argument dafür, das woanders ähnlich zu handhaben.

Warum dann ein Fehlerobjekt? Schauen wir dazu mal in die Java-Klasse Throwable aus der alle Java-Fehler abgeleitet sind. In dieser allgemeinsten Fehlerklasse gibt es unter anderem folgende Methoden:

  • getMessage()
  • getStackTrace()

Erstere liefert das, was auch bei Rückgabe eines Fehlertextes erreicht wäre. Aber schon Zweiteres kann ein einfacher Fehlertext nicht mehr: Angeben, an genau welcher Stelle des Programms der Fehler aufgetreten ist, und welche Funktionsaufrufe dahin geführt haben. Es ist also offensichtlich so, dass aus Sicht der Java-Autoren zu einem Fehler nicht nur ein beschreibender Text, sondern eben auch ein Stacktrace gehört - und diese beiden müssen natürlich, wenn sie zusammengehören, auch in ein entsprechendes Objekt gekapselt werden.

Wenn man nun aus dieser allgemeinen Fehler-Klasse spezialisierte Fehler-Klassen ableitet, erhält man dann sogar die Möglichkeit, diesem spezialisierten Objekt noch weitere beschreibende Eigenschaften mitzugeben. So könnte zur Fehlerbehandlung bei einer nicht-existierenden Datei der Dateipfad im Exception-Objekt gespeichert sein, damit dieser zur Fehlerbehandlung sofort zur Verfügung steht. Viele weitere Beispiele sind denkbar, bei denen eine abgeleitete Fehlerklasse sinnvoll erweitert wird.

Das aber wiederum ist nur bei einer Repräsentation als Objekt sinnvoll möglich - nicht in einem String, auch nicht in einer anderen fixen Datenstruktur. Allenfalls in einer Datenstruktur, die genügend objektartige Eigenschaften hat, d.h. hinreichend beliebige, eindeutig identifizierbare Felder aufnehmen kann. In Haskell, das keine Objekte kennt, sind Exceptions durch eine entsprechende Data declaration definiert, denen auch geordnete Argumentlisten mitgegeben werden können.

Grüße,

RIDER

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
# Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[
0 85

Wozu Exception Objects

pl
  • programmiertechnik
  1. 2
    dedlfix
    1. 0
      pl
      1. 1
        dedlfix
        1. 0
          pl
          1. 0
            dedlfix
            1. 0
              pl
              • sonstiges
              1. 0
                dedlfix
                1. 0
                  pl
                  1. 0
                    perl
                    • perl
                    1. 0
                      pl
                      1. 0
                        perl
                        1. 0
                          pl
                          1. 0
                            perl
                  2. 0

                    NonSenseException

                    Camping_RIDER
                    • menschelei
      2. 0
        Robert B.
        1. 0
          Matthias Apsel
          1. 0
            Robert B.
            1. 0
              Rolf B
              1. 0
                Robert B.
        2. 0
          pl
          1. 0
            perl
          2. 0
            Rolf B
            1. 0
              pl
              1. 0
                Robert B.
                1. 0
                  pl
                  1. 0
                    Robert B.
              2. 1
                Rolf B
                1. 0
                  pl
                  1. 3
                    Tabellenkalk
          3. 1
            Robert B.
            1. 0
              pl
              1. 0
                Robert B.
                1. 0
                  pl
                  1. 0
                    Robert B.
                2. 1
                  dedlfix
                  1. 0
                    pl
                    1. 0
                      Robert B.
                      1. 0
                        pl
                        1. 0
                          Robert B.
                    2. 1
                      dedlfix
                      1. 0
                        pl
                        1. 0
                          Robert B.
                          • menschelei
                          • programmiertechnik
                        2. 2
                          dedlfix
            2. 1
              1unitedpower
              1. 0
                Robert B.
          4. 2

            Versuch einer Erläuterung zur Sinnhaftigkeit von Exception-Objekten

            Camping_RIDER
            1. 0
              pl
              1. 0
                Robert B.
              2. 0
                Camping_RIDER
            2. 0
              pl
              1. 0
                Robert B.
                • c++
                • programmiertechnik
                1. 0
                  pl
              2. 0
                Camping_RIDER
      3. 0
        Robert B.
        1. 0
          pl
          1. 0
            Robert B.
    2. 0
      Linuchs
      1. 0
        Matthias Apsel
        1. 0
          Linuchsx
          1. 0
            Matthias Apsel
            1. 1
              Christian Kruse
  2. 3
    Matti Mäkitalo
    1. 0
      pl
      1. 4
        Matti Mäkitalo
  3. 0
    Rolf B
    1. 0
      pl
      1. 0
        Rolf B
        1. 0
          pl
  4. 0
    pl
    1. 0
      Robert B.
      1. 0
        pl
        1. 0
          Robert B.
          • menschelei
          • programmiertechnik
          1. 0
            pl
            1. 0
              Robert B.
              • menschelei
    2. 0
      Rolf B
      1. -1
        pl
        1. 1
          Rolf B
          1. 0
            pl
            1. 1
              Mitleser
            2. 2
              Rolf B
              1. 0
                Robert B.
                • zu diesem forum
              2. 0
                JürgenB
                1. 0
                  Camping_RIDER
        2. 0
          Robert B.
          • menschelei