Defensive Programmierung und Ausnahmebehandlung

8

Vor ein paar Tagen habe ich folgende theoretische Fragen zur Prüfung: (a) Erklären Sie, was defensive Programmierung im Umgang bedeutet    außergewöhnliche Umstände, die während der Ausführung eines a auftreten können   Programm. Sie können auf Beispiele in der Klasse verweisen oder pseudo verwenden  Code zur Beschreibung der Schritte, die zur Verhinderung bestimmter Umstände unternommen wurden beim Versuch, eine Datei zum Beispiel zu lesen. [5 Punkte]

(b) Beschreiben Sie kurz allgemein, was mit der Ausnahmebehandlung gemeint ist    in Java und wie sich das von defensiver Programmierung unterscheidet.   [5 Punkte]

Ich dachte immer, dass defensive Programmierung das ganze Paradigma der Programmierung ist und dass die Ausnahmebehandlung Teil davon ist. Während der Prüfung schreibe ich, dass in der "defensiven Programmierung", Programmierer versuchen, alle möglichen Probleme vor der Ausführung des Logikcodes und später Rückkehr Fehlerwert (Beispiel 0) von dieser Funktion, während in Ausnahmefällen die potenziellen Fehler auftritt und gefangen werden durch speziellen Mechanismus, in dem diese Fehler direkt interpretiert werden. Ist es richtig? Was sollten richtige Antworten sein?

    
kuper006 22.09.2011, 17:58
quelle

2 Antworten

2

Für mich ist das defensive Programmieren der schlimmste Fall: dass Ihre Benutzer völlig verrückte Leute sind und Sie sich und Ihr Programm von ihren verrückten Eingaben verteidigen müssen. Ich glaube, es gibt eine Menge Weisheit in diesem Zitat:

  

Jeden Tag macht die Software-Industrie größere und bessere, narrensichere Software, und jeden Tag macht die Natur größere und bessere Narren. Bis jetzt gewinnt die Natur

Und vergessen Sie nie, dass Ihre Benutzer nicht nur Ihre Kunden sind. Wenn Sie für eine Bibliothek API verantwortlich sind, könnten Ihre Benutzer andere Abteilung sein. In diesem Fall war eines der großartigsten Beschwerden, die ich jemals in meinem Leben gehört habe:

  

Selbst nachdem wir alle fehlgeschlagenen Komponententests gelöscht hatten, funktionierte das Programm nicht

    
SystematicFrank 22.09.2011 18:20
quelle
1

Defensive Programmierung bedeutet für mich, Code zu schreiben, um Fälle zu behandeln, von denen Sie nicht denken, dass sie passieren werden, oder sogar passieren können, weil Sie glauben, dass Ihre eigenen Überzeugungen unzuverlässig sind.

Zum Beispiel (nicht zusammengestellt oder getestet, es gelten die allgemeinen Geschäftsbedingungen):

%Vor%

Darin enthalten wohl defensive Features:

  • Die Null- oder Leer-Guard-Klausel oben; Dies ist eine private Methode, daher sollten Sie in der Lage sein sicherzustellen, dass sie niemals mit einer leeren oder leeren Sammlung aufgerufen wird
  • Der try-catch für NoSuchElementException; Sie können beweisen, dass der enthaltene Code niemals diese Ausnahme auslöst, wenn der Iterator seinen Vertrag erfüllt.
  • Die Nichtigkeitswächterklausel für die Strings (außer dem ersten!), die aus dem Iterator kommen; Da es sich hier um eine private Methode handelt, sollten Sie wahrscheinlich sicherstellen können, dass der Collection-Parameter keine Nullen enthält (und was würden Sie tun, wenn Sie in Sammlungen Nullen einfügen würden?)

Nicht jeder würde zustimmen, dass die Nullkontrollen defensiv sind. Der Versuch-Fang ist bis zu dem Punkt völlig sinnlos.

Für mich ist der Härtetest der defensiven Programmierung, dass Sie nicht glauben, dass die Verteidigung jemals benutzt wird.

    
Tom Anderson 22.09.2011 18:14
quelle