Ce este un Design by Contract®?

Design by Contract® este o metodă folosită pentru a dezvolta software care se bazează pe stabilirea unor parametri de interfață bine definiți, sau contracte, pentru toate părțile unui program. Deși Design by Contract® poate fi privit ca un stil de dezvoltare conceptuală care este implementat prin documentare sau modelare, este folosit mai larg pentru a se referi la un mecanism nativ sau terță parte în cadrul unor limbaje de programare care necesită de fapt codificarea implicită a contractelor în cadrul un program. Scopul utilizării Design by Contract® este ca un program să fie dezvoltat și, în cele din urmă, codificat într-un mod mult mai complet, care să înlăture mai multe erori banale, în timp ce aplicarea contractelor de către limbajul suport face orice erori reziduale ușor de găsit și capturat. Un program care utilizează contracte pentru funcții și clase poate avea un design mai modular în care clasele individuale pot fi reutilizate cu ușurință în alte programe datorită definiției clare a contractelor lor.

Baza filozofiei de programare Design by Contract® este ideea unor contracte de afaceri din lumea reală. În acest model, fiecare metodă și clasă dintr-un program orientat pe obiecte definește un contract prin care orice altă metodă sau obiect care interacționează cu acesta trebuie să respecte. Fiecare clasă poate avea, de asemenea, un contract, numit invariant de clasă, pe care trebuie să-l urmeze în interior pentru a se asigura că contractele externe nu compromit capacitatea sa de a funcționa.

Cele două părți ale unui contract care sunt cele mai importante în timpul proiectării și codificării sunt precondițiile și postcondițiile. Aceste două părți ale modelului Design by Contract® definesc starea programului înainte de apelarea unei metode și starea programului după ce metoda sa încheiat. Alte părți ale unui contract pot varia în funcție de implementare, dar pot include referințe încrucișate la alte module, condiții de sincronizare și cerințe privind ordinea de execuție.

Prin dezvoltarea de contracte pentru fiecare clasă și metodă, interacțiunea diferitelor părți ale unui program poate fi mapată și prezisă cu ușurință. Punerea în aplicare a contractelor, fie prin utilizarea aserțiunilor, fie a altor mecanisme, asigură, de asemenea, că programul nu va încerca să se execute dacă există o încălcare a contractelor, deoarece orice rezultat produs în acea stare ar fi oricum invalid din punct de vedere tehnic. Atunci când este implementat ca caracteristică în limba maternă, Design by Contract® poate ajuta la asigurarea faptului că un produs final va funcționa conform așteptărilor, cu șanse mici de erori neprevăzute.

Unele dintre complicațiile care vin odată cu utilizarea filozofiei Design by Contract® includ timpi mai lungi de proiectare și dezvoltarea mai granulară a unui sistem înainte de începerea codării, ceea ce poate fi uneori dificil cu un proiect mare. Mai practic, mecanismul de validare a contractelor utilizat într-un limbaj de programare care acceptă în mod nativ contractele poate încetini execuția programului. O slabă înțelegere a metodologiei Design by Contract® poate duce la un program care utilizează contracte pentru a efectua verificarea de bază a erorilor, ceea ce poate duce la o aplicație care este predispusă la blocări bruște după lansare.