Hvad er et design af Contract®?
Design af Contract® er en metode, der bruges til at udvikle software, der er afhængig af etablering af veldefinerede interface-parametre eller kontrakter for alle dele af et program. Selvom design af Contract® kan ses som en konceptuel udviklingsstil, der implementeres gennem dokumentation eller modellering, bruges det mere udbredt til at henvise til en indfødt eller tredjepartsmekanisme inden for nogle programmeringssprog, der faktisk kræver den implicitte kodning af kontrakterne i 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 fra det understøttende sprog gør eventuelle resterende fejl let fundet og fanget. Et program, der bruger kontrakter for funktioner og klasser, kan have et mere modulært design, hvor individuelle klasser let kan genbruges i andre programmer på grund af den klare definition af deres kontrakter.
basis foR Designet efter Contract®-programmeringsfilosofi er ideen om forretningskontrakter i den virkelige verden. I denne model definerer hver metode og klasse i et objektorienteret program en kontrakt, hvor enhver anden metode eller objekt, der interagerer med den, skal overholde. Hver klasse kan også have en kontrakt, kaldet en klasse invariant, at den skal følge internt for at sikre, at eksterne kontrakter ikke går på kompromis med dens evne til at fungere.
De to dele af en kontrakt, der er mest vigtige under design og kodning, er forudsætningerne og efter konditionerne. Disse to dele af designet efter Contract® -modellen definerer programmets tilstand, før en metode kaldes, og programmets tilstand, efter at metoden er afsluttet. Andre dele af en kontrakt kan variere efter implementering, men kan omfatte krydshenvisninger til andre moduler, synkroniseringsbetingelser og ordre-af-eksekutionskrav.
Ved at udvikle kontrakter for hver klasse og metode kan interaktionen mellem de forskellige dele af et program let kortlægges og forudsages. 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 er produceret i denne stat, teknisk set ville være ugyldigt alligevel. Når det implementeres som et modersmål, kan design af Contract® hjælpe med at sikre, at et slutprodukt fungerer som forventet med ringe chance for uforudsete fejl.
Nogle af de komplikationer, der følger med brugen af designet efter Contract® -filosofi, inkluderer længere designtider og mere granulær udvikling af et system, før kodning begynder, hvilket undertiden kan være vanskeligt med et stort projekt. Mere praktisk kan den kontraktvalideringsmekanisme, der bruges på et programmeringssprog, som naturligt understøtter kontrakter, bremse programudførelsen. En dårlig forståelse af tHan design ved Contract® -metodik kan føre til et program, der bruger kontrakter til at udføre grundlæggende fejlkontrol, hvilket potentielt fører til en applikation, der er tilbøjelig til pludselige nedbrud efter frigivelse.