Programarea contractelor

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 1 decembrie 2014; verificările necesită 33 de modificări .

Programarea prin contract ( design by contract (DbC), programarea prin contract , programarea pe bază de contract ) este o metodă de proiectare software . Acesta sugerează că proiectantul trebuie să definească specificații de interfață formale , precise și verificabile pentru componentele sistemului. În acest caz, pe lângă definiția obișnuită a tipurilor de date abstracte , sunt utilizate și precondiții , postcondiții și invarianți . Aceste specificații sunt denumite „contracte” în conformitate cu metafora conceptuală a termenilor și responsabilităților din contractele de drept civil .

Istorie

Termenul a fost propus de Bertrand Meyer în legătură cu dezvoltarea limbajului Eiffel . Programarea contractelor a luat naștere din verificarea formală , specificațiile formale și logica lui Hoare . Programarea prin contract nu este doar o simplă metaforă pentru proiectarea unei căi. Condiții care facilitează utilizarea programării contractuale:

Descriere

Ideea principală a programării contractelor este un model de interacțiune între elementele unui sistem software bazat pe ideea de obligații și beneficii reciproce . Ca și în afaceri, clientul și furnizorul funcționează în baza unui contract specific . Contractul unei metode sau funcție poate include:

Multe limbaje de programare permit ca astfel de obligații să fie luate în considerare. Programarea contractelor presupune că aceste cerințe sunt esențiale pentru corectitudinea programelor, așa că trebuie aprobate în timpul proiectării. Astfel, programarea contractuală prescrie să începeți scrierea codului prin scrierea aserțiunilor formale de corectitudine (aserțiuni).

În programarea orientată pe obiecte , un contract de metodă include de obicei următoarele informații:

Când se utilizează contracte, codul în sine nu este necesar pentru a verifica executarea acestora. De obicei, în astfel de cazuri, se face o cădere dură în cod[ clarify ] (" fail-fast "), ușurând astfel depanarea execuției contractelor. În multe limbi precum C , C++ , Delphi , PHP , acest comportament este implementat de assert. În versiunea finală a codului, acest comportament poate fi păstrat sau verificările pot fi eliminate pentru a îmbunătăți performanța.

Testele unitare testează un modul în mod izolat, verificând dacă modulul satisface ipotezele contractului și că modulele pe care le folosește își îndeplinesc contractele. Testele de integrare verifică dacă modulele funcționează corect împreună.

Programarea prin contract poate crește reutilizarea codului deoarece obligațiile modulului sunt documentate în mod clar. În general, contractul de modul poate fi gândit și ca o modalitate de documentare a software-ului .

Implementare în limbaje de programare

Suport DbC la nivel de limbă

Limbi care suportă nativ instrumente de programare contract:

Suport DbC cu biblioteci terțe

Instrumente generale

Note

  1. Walter, Bright D Programming Language, Contract Programming . Digital Mars (1 noiembrie 2014). Data accesului: 1 decembrie 2014. Arhivat din original pe 28 noiembrie 2014.
  2. Scala Standard Library Docs - Assertions . EPFL. Preluat la 12 ianuarie 2020. Arhivat din original la 25 decembrie 2019.
  3. David Morgan, Andreas Leitner și Nhat Minh Le. Contracte pentru Java (engleză) (4 februarie 2011). Consultat la 12 iunie 2011. Arhivat din original pe 21 martie 2012.  
  4. GitHub - nrc/libhoare: Design by contract style assertions for Rust . Preluat la 24 februarie 2019. Arhivat din original la 12 octombrie 2018.

Vezi și