Design per contratto
Nel tuo esempio 1, nessun controllo è fatto. L'implementazione presuppone che il cliente rispetti i termini del contratto. Quindi sì, potresti essere tentato di affermare che si tratta di DBC.
Tuttavia ciò che manca è l'espressione del tuo contratto: non ci sono indizi di pre-condizioni, post-condizioni e invarianti nel codice. Questo è mancante.
In C ++ inseriresti assert()
all'inizio e alla fine di ogni funzione. Questi dovevano fare un duro controllo (e interrompere in caso di infrazione) durante il debug, ma sarebbero saltati in versione di produzione.
In Java, annoteresti il tuo codice con javadoc tag @pre
, @post
e @inv
in i commenti per la documentazione, ma anche per l'elaborazione come spiegato qui con strumenti come jContracts o strumenti / librerie simili .
Programmazione difensiva
Nel secondo esempio, si attiva attivamente il controllo se sono soddisfatte le aspettative del contratto e si prende un percorso alternativo di esecuzione per gestire il caso imprevisto (qui con eccezioni). Questo sembra corrispondere all'anticipazione attesa dalla programmazione difensiva.