Designing by Contract (DbC) potrebbe essere un modo per programmare in modo difensivo?
In alcuni casi un modo di programmare è migliore dell'altro?
Designing by Contract (DbC) potrebbe essere un modo per programmare in modo difensivo?
In alcuni casi un modo di programmare è migliore dell'altro?
Risposte:
Il Design by Contract e la programmazione difensiva sono in qualche modo opposti l'uno all'altro: in DbC, definisci i contratti tra collaboratori e programmi presupponendo che i collaboratori rispettino i loro contratti. Nella programmazione difensiva, programmi in base al presupposto che i tuoi collaboratori violino i loro contratti.
Una vera routine di radice quadrata scritta in stile DbC affermerebbe nel suo contratto che non è consentito passare un numero negativo e quindi semplicemente supporre che non possa mai incontrare un numero negativo. Una vera routine di radice quadrata scritta in modo difensivo presuppone che venga superato un numero negativo e prende le dovute precauzioni.
Nota: è ovviamente possibile che in DbC qualcun altro controllerà il contratto. In Eiffel, ad esempio, il sistema del contratto verificherebbe un numero negativo in fase di esecuzione e genererebbe un'eccezione appropriata. In Spec #, il teorema proverà verificare la presenza di numeri negativi al momento della compilazione e fallirà la compilazione, se non può provare che alla routine non verrà mai passato un numero negativo. La differenza è che il programmatore non effettua questo controllo.
Designing by Contract (DbC) potrebbe essere un modo per programmare in modo difensivo?
Sì.
La "programmazione difensiva" è spesso una scusa per perdere tempo. Spesso si perde tempo a controllare le cose che causeranno eccezioni ordinarie. Invece delle eccezioni, vengono scritte istruzioni IF aggiuntive anziché clausole di gestione delle eccezioni.
Definisci il contratto ed eseguilo.
Quando qualcuno viola il contratto, il programma, nel normale corso degli eventi, romperà e solleverà normali eccezioni che possono essere normalmente gestite.
"Programmazione difensiva" e "Prevenzione errori" possono aggiungere errori (poiché i controlli di prevenzione errori sono essi stessi errati) piuttosto che prevenire errori.
La gestione delle eccezioni può mettere a tacere, registrare e gestire un'eccezione molto meglio della "Programmazione difensiva".