Выразительная сила утверждений
Выразительная сила утверждений
Как можно было заметить, применяемый язык утверждений является языком обычных булевых выражений, обогащенный несколькими понятиями, такими как old. Как результат, он ограничен и не позволяет включить в наши классы некоторые свойства, достаточно просто выражаемые в математической нотации, используемой при описании АТД.
Утверждения класса стек дают хороший пример того, что выразимо, и что не выразимо в нашем языке. Мы найдем, что многие аксиомы и предусловия из спецификации АТД, приведенной в лекции 6, прямым образом отображаются в утверждения класса. Например, аксиома
A4. not empty (put (s, x))
задает постусловие not empty процедуры put. Но в некоторых случаях в классе нет непосредственного двойника. Ни одно из постусловий для remove, приводимое до сих пор, не отражает аксиому
A2. remove (put (s, x)) = s
Мы, конечно, можем ввести эту аксиому неформально, добавив в постусловие комментарий, описывающий это свойство:
remove is
-- Удалить элемент вершины
require
not_empty: not empty -- i.e. count > 0
do
count := count - 1
ensure
not_full: not full
one_fewer: count = old count - 1
LIFO_policy: -- item является последним элементом, помещенным в стек
-- и еще не удален, если таковое имело место.
End
Подобные неформальные утверждения, синтаксически выраженные комментариями, появлялись в инвариантах цикла для maxarray и gcd.
В таких случаях два из принципиальных использований утверждений, обсуждаемых ранее, остаются применимыми, по крайней мере, частично: помощь в создании корректного продукта и его документации (утверждения, заданные комментариями, будут появляться в краткой форме класса). Другие использования, в частности отладка и тестирование, предполагают вычисление выражений, и становятся теперь неприменимыми.
Было бы предпочтительнее выражать все утверждения формально. Лучший способ достичь этой цели - расширить язык выражений, так чтобы он позволял задавать любые свойства. Это требует возможности описания сложных математических объектов - множеств, последовательностей, функций, отношений. Необходим и мощный по выразительности язык, например, язык логики предикатов первого порядка, допускающий выражения с кванторами всеобщности и существования. Существуют формальные языки спецификаций, обладающие, по крайней мере, частью такой выразительной силы. Наиболее известными являются языки Z, VDM, Larch, OBJ-2; как Z, так и VDM имеют ОО-расширения, например, Object-Z. Библиографические замечания к лекции 6 дают необходимые ссылки.
Включение полного языка спецификаций в язык этой книги полностью изменило бы ее природу. Смысл языка в том, чтобы он был простым, легким в обучении, применимым во всех программистских конструкциях. Он должен допускать быструю компиляцию и эффективную реализацию с производительностью, соизмеримой с C или Fortran.
Вместо этого, в механизме утверждений мы пошли на инженерный компромисс: он включает достаточно формальных элементов, оказывающих существенный эффект на качество ПО, но останавливается в точке убывания - границе, за которой выгоды от большей формализации, начинают оборачиваться потерями простоты и эффективности.
Определение границы во многом определяется личным выбором. Я был удивлен, для программистского сообщества в целом эта граница не изменилась со времен первого издания этой книги. Наша деятельность требует большего формализма, но профессиональное сообщество еще не осознало этого.Так что пока и на ближайшее будущее утверждения остаются булевыми выражениями с некоторыми расширениями. Это не такое уж и строгое ограничение, поскольку булевы выражения допускают вызов функций.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Глава 15. Сила коллектива
Глава 15. Сила коллектива Самое массовое средство коммуникации просто не может не стать коллективным пропагандистом и агитатором, а главное – организатором. Во времена Владимира Ленина таковыми были газеты, потом эта роль отошла к радио, затем к телевидению, ну а теперь
2.6.1. Успешное доказательство конъюнкции целевых утверждений
2.6.1. Успешное доказательство конъюнкции целевых утверждений Пролог пытается согласовать с базой данных входящие в конъюнкцию целевые утверждения в том порядке, в каком они написаны (слева направо), где бы они ни появились – в теле правила или в вопросе. Это означает, что
Любопытство — это сила
Любопытство — это сила Майк Кларк, независимый консультант/программистМои родители утверждают, что в детстве я был крайне любознательным. Задавал множество вопросов, читал все, что попадалось под руку, а принцип работы механизмов изучал, разбирая их на части. Как
ТЕХНОЛОГИИ: Сила отражения
ТЕХНОЛОГИИ: Сила отражения Авторы: Константин Курбатов, avocetКогда вы заходите в серьезный фотомагазин, вы сразу чувствуете всенепременную любовь и уважение продавцов и консультантов. Они с удовольствием расскажут вам о достоинствах и недостатках зума на очередной
Введение утверждений в программные тексты
Введение утверждений в программные тексты Как только корректность ПО определена как согласованность реализации с ее спецификацией, следует предпринять шаги по включению спецификации в сам программный продукт. Для большинства в программистском сообществе это все еще
Использование утверждений
Использование утверждений Теперь мы уже познакомились со всеми конструкциями, содержащими утверждения. Разумно, еще раз взглянуть на те преимущества, которые мы можем получить от этого. Выделим четыре основных применения.[x]. Помощь в создании корректного ПО.[x]. Поддержка
Использование утверждений для документирования: краткая форма класса
Использование утверждений для документирования: краткая форма класса Второе использование является основным в производстве повторно используемых программных элементов и, более обще, в организации интерфейсов модулей в большой программной системе. Постусловия,
Мониторинг утверждений в период выполнения
Мониторинг утверждений в период выполнения Пришло время, дать полный ответ на вопрос: "какой эффект производят утверждения в период выполнения?". Как отмечалось, ответ определяется разработчиком, имеющим возможность управлять параметрами компиляции. Выбор нужных
«Грубая сила»
«Грубая сила» Насколько безопасны зашифрованные файлы и пароли? Считается, что существует два способа взлома алгоритмов шифрования – «грубая сила» и разнообразные «разумные» методы криптоанализа (методы дешифровки сообщений). Для разных алгоритмов шифрования найдены