Cos'è un design di contratto®?
Design by Contract® è un metodo utilizzato per sviluppare software che si basa sulla creazione di parametri di interfaccia ben definiti o contratti, per tutte le parti di un programma. Sebbene Design by Contract® possa essere visto come uno stile di sviluppo concettuale che viene implementato attraverso la documentazione o la modellazione, viene utilizzato più ampiamente per fare riferimento a un meccanismo nativo o di terze parti all'interno di alcuni linguaggi di programmazione che richiedono effettivamente la codifica implicita dei contratti all'interno di un programma. L'obiettivo di utilizzare Design by Contract® è che un programma sarà sviluppato e, infine, codificato in modo molto più completo che rimuove errori più banali, mentre l'applicazione dei contratti da parte del linguaggio di supporto rende eventuali errori residui facilmente trovati e catturati. Un programma che utilizza contratti per funzioni e classi può avere un design più modulare in cui le singole classi possono essere riutilizzate facilmente in altri programmi a causa della chiara definizione dei loro contratti.r La filosofia di programmazione Design by Contract® è l'idea di contratti commerciali nel mondo reale. In questo modello, ogni metodo e classe in un programma orientato agli oggetti definisce un contratto con il quale qualsiasi altro metodo o oggetto che interagisce con esso deve attenersi. Ogni classe può anche avere un contratto, chiamato invariante di classe, che deve seguire internamente per garantire che i contratti esterni non compromettano la sua capacità di funzionare.
Le due parti di un contratto che sono più importanti durante la progettazione e la codifica sono le condizioni preliminari e le post-condizioni. Queste due parti del modello Design by Contract® definiscono lo stato del programma prima che venga chiamato un metodo e lo stato del programma dopo che il metodo ha completato l'esecuzione. Altre parti di un contratto possono variare in base all'implementazione ma possono includere riferimenti incrociati ad altri moduli, condizioni di sincronizzazione e requisiti di ordine di esecuzione.
Sviluppando contratti per ogni classe e metodo, l'interazione delle diverse parti di un programma può essere facilmente mappata e prevista. L'applicazione dei contratti, attraverso l'uso di asserzioni o altri meccanismi, garantisce anche che il programma non tenterà di eseguire se vi è una violazione dei contratti, perché qualsiasi produzione prodotta in quello stato non sarebbe tecnicamente non valida. Se implementato come funzionalità di lingua madre, Design di Contract® può aiutare a garantire che un prodotto finale operi come previsto con poche possibilità di errori imprevisti.
Alcune delle complicazioni fornite con l'uso della filosofia Design by Contract® includono tempi di progettazione più lunghi e uno sviluppo più granulare di un sistema prima dell'inizio della codifica, che a volte può essere difficile con un grande progetto. Più praticamente, il meccanismo di convalida del contratto utilizzato in un linguaggio di programmazione che supporta in modo nativo i contratti può rallentare l'esecuzione del programma. Una scarsa comprensione di tLa progettazione della metodologia di contratto per contratto può portare a un programma che utilizza i contratti per eseguire il controllo degli errori di base, portando potenzialmente a un'applicazione che è soggetta a crash improvvisi dopo il rilascio.