Hvad er et design af Contract®?
Design by Contract® er en metode, der bruges til at udvikle software, der er afhængig af oprettelsen af veldefinerede interface-parametre eller kontrakter for alle dele af et program. Selvom Design by Contract® kan ses som en konceptuel udviklingstil, der implementeres gennem dokumentation eller modellering, bruges den mere vidtgående til at henvise til en indfødt eller tredjepartsmekanisme inden for nogle programmeringssprog, der faktisk kræver implicit kodning af kontrakterne inden for et program. Målet med at bruge Design by Contract® er, at et program vil blive udviklet og til sidst kodet på en meget mere komplet måde, der fjerner mere trivielle fejl, mens håndhævelse af kontrakterne på det understøttende sprog gør eventuelle resterende fejl let at finde og fange. Et program, der bruger kontrakter til funktioner og klasser, kan have et mere modulopbygget design, hvor individuelle klasser let kan genbruges i andre programmer på grund af den klare definition af deres kontrakter.
Grundlaget for programmeringsfilosofien Design by Contract® er ideen om forretningskontrakter i den virkelige verden. I denne model definerer hver metode og klasse i et objektorienteret program en kontrakt, som enhver anden metode eller objekt, der interagerer med den, skal overholde. Hver klasse kan også have en kontrakt, kaldet en klasse invariant, som den skal følge internt for at sikre, at eksterne kontrakter ikke går på kompromis med dens funktionsevne.
De to dele af en kontrakt, der er mest vigtige under design og kodning, er forudsætningerne og efterbetingelserne. Disse to dele af Design by Contract®-modellen definerer programmets tilstand, før en metode kaldes, og programmets tilstand, efter at metoden er afsluttet udførelsen. Andre dele af en kontrakt kan variere efter implementering, men kan omfatte krydshenvisninger til andre moduler, synkroniseringsbetingelser og rækkefølge af udførelseskrav.
Ved at udvikle kontrakter for hver klasse og metode kan interaktionen mellem de forskellige dele af et program let kortlægges og forudsiges. Håndhævelsen af kontrakterne, enten ved hjælp af påstande eller andre mekanismer, sikrer også, at programmet ikke vil forsøge at udføre, hvis der er en overtrædelse af kontrakter, fordi ethvert output, der produceres i denne tilstand, teknisk set vil være ugyldigt. Når implementeret som et sprogfunktion, kan Design by Contract® hjælpe med til at sikre, at et slutprodukt fungerer som forventet med ringe chance for uforudsete fejl.
Nogle af de komplikationer, der følger med brugen af Design by Contract®-filosofien, inkluderer længere designtider og mere granulær udvikling af et system, inden kodning begynder, hvilket nogle gange kan være vanskeligt med et stort projekt. Mere praktisk kan kontraktvalideringsmekanismen, der bruges i et programmeringssprog, der naturligt understøtter kontrakter, bremse programgennemførelsen. En dårlig forståelse af metoden Design by Contract® kan føre til et program, der bruger kontrakter til at udføre grundlæggende fejlkontrol, hvilket potentielt kan føre til et program, der er tilbøjelige til pludselige nedbrud efter frigivelse.