Co je to Design by Contract®?
Design by Contract® je metoda používaná pro vývoj softwaru, který se spoléhá na stanovení přesně definovaných parametrů rozhraní nebo kontraktů pro všechny části programu. Přestože Design by Contract® lze chápat jako koncepční vývojový styl, který je implementován prostřednictvím dokumentace nebo modelování, v širším smyslu se používá k označení nativního nebo třetího mechanismu v některých programovacích jazycích, který ve skutečnosti vyžaduje implicitní kódování smluv v rámci program. Cílem při použití Design by Contract® je, že bude vyvinut program a nakonec kódován mnohem úplnějším způsobem, který odstraní triviální chyby, zatímco vymáhání smluv podpůrným jazykem umožňuje snadno najít a zachytit všechny zbytkové chyby. Program, který používá smlouvy na funkce a třídy, může mít modulárnější design, ve kterém lze jednotlivé třídy snadno znovu použít v jiných programech, protože jsou jasně definovány jejich smlouvy.
Základem programovací filozofie Design by Contract® je myšlenka obchodních smluv ve skutečném světě. V tomto modelu každá metoda a třída v objektově orientovaném programu definuje smlouvu, kterou musí dodržovat jakákoli jiná metoda nebo objekt, který s ní interaguje. Každá třída také může mít smlouvu nazvanou invariant třídy, že musí interně dodržovat, aby zajistila, že externí smlouvy neohrozí její schopnost fungovat.
Dvě části smlouvy, které jsou při navrhování a kódování nejdůležitější, jsou předpoklady a podmínky. Tyto dvě části modelu Design by Contract® definují stav programu před voláním metody a stav programu po dokončení provádění metody. Další části smlouvy se mohou lišit podle implementace, ale mohou zahrnovat křížové odkazy na jiné moduly, podmínky synchronizace a požadavky na pořadí provedení.
Vývojem kontraktů pro každou třídu a metodu lze snadno zmapovat a předpovědět interakci různých částí programu. Vymáhání smluv, buď pomocí tvrzení nebo jiných mechanismů, také zajišťuje, že se program nebude pokoušet provést, pokud dojde k porušení smluv, protože jakýkoli výstup vytvořený v tomto státě by byl stejně technicky neplatný. Je-li implementován jako funkce v rodném jazyce, Design by Contract® může pomoci zajistit, že finální produkt bude fungovat podle očekávání, s malou šancí na nepředvídané chyby.
Mezi komplikace, které přicházejí s používáním filozofie Design by Contract®, patří delší doba návrhu a podrobnější vývoj systému před začátkem kódování, což může být někdy obtížné u velkého projektu. Praktičtěji mechanismus ověření smlouvy používaný v programovacím jazyce, který nativně podporuje smlouvy, může zpomalit provádění programu. Špatné porozumění metodice Design by Contract® může vést k programu, který používá smlouvy k provádění základní kontroly chyb, což může vést k aplikaci, která je náchylná k náhlým selháním po vydání.