Co to jest projekt kontraktowy®?

Design by Contract® to metoda wykorzystywana do tworzenia oprogramowania, która polega na ustaleniu dobrze zdefiniowanych parametrów interfejsu lub umów dla wszystkich części programu. Chociaż Design by Contract® może być postrzegany jako koncepcyjny styl programowania, który jest implementowany za pomocą dokumentacji lub modelowania, jest on szerzej używany w odniesieniu do mechanizmu natywnego lub zewnętrznego mechanizmu w niektórych językach programowania, który w rzeczywistości wymaga niejawnego kodowania umów w ramach program. Celem korzystania z Design by Contract® jest to, aby program został opracowany i ostatecznie zakodowany w znacznie pełniejszy sposób, który usuwa mniej trywialne błędy, podczas gdy egzekwowanie umów przez język pomocniczy sprawia, że ​​wszelkie błędy resztkowe są łatwe do znalezienia i wychwycenia. Program, który używa kontraktów dla funkcji i klas, może mieć bardziej modułową konstrukcję, w której poszczególne klasy mogą być łatwo ponownie użyte w innych programach ze względu na jasną definicję ich kontraktów.

Podstawą filozofii programowania Design by Contract® jest idea realnych kontraktów biznesowych. W tym modelu każda metoda i klasa w programie zorientowanym obiektowo definiuje kontrakt, zgodnie z którym musi przestrzegać każda inna metoda lub obiekt współdziałający z nim. Każda klasa może również mieć kontrakt, zwany niezmiennikiem klasy, którego musi przestrzegać wewnętrznie, aby zapewnić, że kontrakty zewnętrzne nie zagrażają jej zdolności do funkcjonowania.

Dwie części umowy, które są najważniejsze podczas projektowania i kodowania, to warunki wstępne i warunki końcowe. Te dwie części modelu Design by Contract® definiują stan programu przed wywołaniem metody oraz stan programu po zakończeniu wykonywania metody. Inne części umowy mogą różnić się w zależności od implementacji, ale mogą zawierać odniesienia do innych modułów, warunki synchronizacji i wymagania dotyczące kolejności realizacji.

Opracowując kontrakty dla każdej klasy i metody, można łatwo odwzorować i przewidzieć interakcję różnych części programu. Egzekwowanie kontraktów, czy to poprzez użycie asercji, czy innych mechanizmów, zapewnia również, że program nie będzie próbował wykonać, jeśli dojdzie do naruszenia kontraktów, ponieważ jakiekolwiek dane wyjściowe wytworzone w tym stanie i tak byłyby technicznie nieważne. Po wdrożeniu jako funkcja w języku ojczystym, Design by Contract® może pomóc w zapewnieniu, że produkt końcowy będzie działał zgodnie z oczekiwaniami, z małą szansą na nieprzewidziane błędy.

Niektóre z komplikacji związanych z zastosowaniem filozofii Design by Contract® obejmują dłuższe czasy projektowania i bardziej szczegółowe opracowanie systemu przed rozpoczęciem kodowania, co czasami może być trudne w przypadku dużego projektu. Bardziej praktycznie, mechanizm walidacji kontraktów używany w języku programowania, który natywnie obsługuje kontrakty, może spowolnić wykonywanie programu. Słabe zrozumienie metodologii Design by Contract® może prowadzić do tego, że program wykorzystuje umowy do podstawowego sprawdzania błędów, co może prowadzić do tego, że aplikacja jest podatna na nagłe awarie po wydaniu.