Design By Contract uses preconditions and postconditions of the public methods in a class together to form a contract between the class and its clients.
a) Nel codice implementiamo precondizioni e postcondizioni come asserzioni o come eccezioni ?
b) Implementiamo precondizioni e postcondizioni nel codice come eccezioni se non soddisfano precondizioni o le post-condizioni non indicano situazioni logicamente impossibili o errori di programmazione?
c) li implementiamo in codice come asserzioni quando non soddisfano le precondizioni o postcondizioni indicano situazioni logicamente impossibili o errori di programmazione?
d) Le precondizioni e le postcondizioni dovrebbero essere definite solo su metodi pubblici?
Modifica
I seguenti controlli non sono considerati parte di un'operazione normale (e come ho già detto, ho visto molti articoli su DbC che utilizzano esempi simili per le condizioni preliminari, in cui i controlli sono stati effettuati su argomenti forniti dall'utente) , dal momento che se l'utente immette dati errati, l'operazione senza controlli non verrà rifiutata e, come tale, il sistema smetterà di funzionare in base alle specifiche:
public User GetUserWithIdOf(int id,
UserRepository userRepository) {
// Pre-conditions
if (userRepository == null)
throw new ArgumentNullException(
"userRepository");
if (id <= 0)
throw new ArgumentOutOfRangeException(
"id must be > 0");
User foundUser = userRepository.GetById(id);
// Post-conditions
if (foundUser == null)
throw new KeyNotFoundException("No user with " +
"an ID of " + id.ToString() +
" could be located.");
return foundUser;
}