Previous Entry Share Next Entry
Я наконец то стал понимать DbC
opportune_fl
Вот прочитал эту статью [C++]Проектирование по контракту и принцип LSP на примере «Почему класс Человек не может быть подтипом класса Камин».

Наконец то до меня дошло что же это такое "проектирование по контракты". Когда читал "Программист-прагматик" не так сильно вник в это.

Вот, что написано в статье:
"DbC: функции снабжаются предусловиями(preconditions) и постусловиями(postconditions). Своё выполнение функция начинает только, если предусловия удовлетворены. После своего завершения фукнция гарантирует, что постусловия и инварианты класса будут соблюдены/непротиворечивы".

Наконец то я понял, что исходя из этого принципа проектируем функцию не только проверяя ее входные данные, но и "положение дел" после завершения работы функции. Получается очень мощный инструмент. практически самотестирующийся код без тестов, как таковых.

В статье очень показательно для меня поясняются правила DbC:
Правила DbC:
1. Предусловия в производных классах можно только ослаблять, но не усиливать.
2. Постусловия можно усиливать, но не ослаблять.

Конечно, есть свои заморочки при использовании данного соглашения, но соблюдение DbC делает архитектуру более стройной.

Ссылки вдогонку:
Проектирование по контракту (статья на Хабре)

UPD [2010.04.19]: Code Contracts в .NET 4.0 Контрактное программирование реализовано в .NET. Как Delphi-разработчик просто мечтаю, чтобы Embarcadero сделали что-то наподобие и в Delphi.

?

Log in