Ho sentito parlare di Design by Contract molto tempo fa e sono sempre stato confuso da questa domanda. L'approccio utilizza l'analogia del fornitore-cliente del mondo reale per descrivere le relazioni caller-callee. Rimane, che se un cliente assicura i presupposti prima di chiamare un fornitore, il fornitore otterrà i benefici evitando il controllo delle condizioni preliminari; e, d'altra parte, se il fornitore assicura post-condizioni, il cliente otterrà benefici evitando di controllarli; sono tutti felici. Questo è ciò che è scritto in Wikipedia , su sito web EiffelSoftware e in miliardi di altri luoghi.
Ma. Il mondo è crudele. E nella maggior parte dei casi, nel mondo reale, tutti preferiscono controllare ciò che lui ha per lavoro invece di essere sicuro che il lavoro sia eseguito correttamente. Anche nell'esempio sopra, siamo controllati in aeroporto per le condizioni preliminari (biglietto, bagaglio, ecc.), Il fornitore non si fida di noi. E alla fine del volo, vogliamo essere sicuri che siamo davvero a Chicago e il nostro bagaglio non è stato perso.
Quindi, quali sono i vantaggi dei controlli effettuati da un cliente anziché da un fornitore? Non vedo differenza. L'analogia con il mondo reale è cattiva o mi sono perso qualcosa? Potremmo scambiare controllori di postcondizioni e precondizioni e comunque chiamarlo design per contratto?