Skip to main content

Что такое дизайн по договору®?

Проектирование по Контракту® - это метод, используемый для разработки программного обеспечения, основанного на установлении четко определенных параметров интерфейса или контрактов для всех частей программы. Хотя Design by Contract® можно рассматривать как концептуальный стиль разработки, который реализуется с помощью документации или моделирования, он более широко используется для ссылки на собственный или сторонний механизм в некоторых языках программирования, который фактически требует неявного кодирования контрактов внутри программа. Целью использования Design by Contract® является то, что программа будет разработана и, в конечном счете, закодирована гораздо более полным образом, что устранит более тривиальные ошибки, в то время как выполнение контрактов вспомогательным языком позволяет легко находить и фиксировать любые остаточные ошибки. Программа, которая использует контракты для функций и классов, может иметь более модульную структуру, в которой отдельные классы могут легко повторно использоваться в других программах благодаря четкому определению их контрактов.

Основой философии программирования Design by Contract® является идея реальных деловых контрактов. В этой модели каждый метод и класс в объектно-ориентированной программе определяют контракт, которому должен соответствовать любой другой метод или объект, взаимодействующий с ним. Каждый класс также может иметь контракт, называемый инвариантом класса, которому он должен следовать внутри, чтобы гарантировать, что внешние контракты не нарушат его способность функционировать.

Две части контракта, которые наиболее важны при проектировании и кодировании, - это предварительные условия и постусловия. Эти две части модели Design by Contract® определяют состояние программы перед вызовом метода и состояние программы после завершения выполнения метода. Другие части контракта могут различаться в зависимости от реализации, но могут включать перекрестные ссылки на другие модули, условия синхронизации и требования к порядку выполнения.

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

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