Утверждения не являются механизмом проверки вводимых данных

Утверждения не являются механизмом проверки вводимых данных

Полезно сосредоточиться на некоторых неявно обсуждавшихся свойствах контрактов. Заметьте, контракты описывают только взаимодействие двух программ (программа - программа). Контракты не задают другие виды взаимодействий: человек - программа, внешний мир - программа. Предусловие не заботится о корректировке ввода пользователя, например программа read_positive_integer, ожидающая в интерактивном режиме ввода пользователем положительного целого. Включение в такую программу предусловия:

require

input > 0

хотя и желательно, но технически не реализуемо. Полагаться на пользователя в контрактах нельзя. В данной ситуации нет заменителя обычной конструкции проверки условия, включая почтенный if - then - else; полезен и механизм обработки исключений.

У утверждений своя роль в решении проблемы проверки ввода данных. При описании критерия Защищенности модуля отмечалось, что Метод поощряет проверку правильности любых объектов, получаемых из внешнего мира - от сенсоров, пользовательского ввода, из сети и т. д. Эта проверка должна быть максимально приближена к источникам объектов, используя при необходимости модули - "фильтры".

Рис. 11.1.  Использование модулей - фильтров

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

44. Предпочитайте функции, которые не являются ни членами, ни друзьями

Из книги автора

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


20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями

Из книги автора

20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями Механизмы ioctl(2) и fcntl(2) обеспечивают способ написания перехватчиков (hooks) в драйверах устройств. Первоначальным историческим использованием ioctl(2) была установка параметров, таких как скорость передачи и количество


20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями

Из книги автора

20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями Механизмы ioctl(2) и fcntl(2) обеспечивают способ написания перехватчиков (hooks) в драйверах устройств. Первоначальным историческим использованием ioctl(2) была установка параметров, таких как скорость передачи и количество


Контроль допустимости вводимых данных

Из книги автора

Контроль допустимости вводимых данных Теперь давайте добавим в нашу страницу default.htm клиентскую поддержку контроля вводимых в форму данных. Нам нужно, чтобы при щелчке пользователя на кнопке Отправить вызвалась функция JavaScript, которая проверяла бы каждый текстовый блок


Утверждения

Из книги автора

Утверждения Поскольку первое правило гласит, что отладку нужно проводить всегда, а вывод подразумевает, что не хотелось бы краснеть за недостаточный объем тестирования кода, необходимо научиться создавать защищенные программы. И первым средством из защитного арсенала


Утверждения

Из книги автора

Утверждения Часто условия, проверяемые в WHERE, IF и т.д., не являются простыми предикатами, а группой нескольких предикатов, каждый из которых при вычислении делает вклад в вычисление общей истинности. Утверждение может состоять из одного предиката или из нескольких


Выполнение проверки базы данных

Из книги автора

Выполнение проверки базы данных Пров базы данных требует исключительного доступа к базе данных. Без исключительного доступа вы получите сообщение об ошибке:OBJECT имя-базы-данных IS IN OSEДля проверки базы данных просто введите команду:gfix -vПроверка будет молча отыскивать и


Утверждения (Assertions)

Из книги автора

Утверждения (Assertions) Компоненты абстрактного типа данных имеют формально специфицированные свойства, отражаемые в соответствующих классах.Утверждения - предусловия и постусловия программ класса и инварианты классов - играют эту роль. Утверждения имеют три основных


Утверждения это не управляющие структуры

Из книги автора

Утверждения это не управляющие структуры Еще одно типичное заблуждение - рассматривать утверждения как управляющую структуру, реализующую разбор случаев. К этому моменту должно быть ясно, что не в этом их роль. Если написать программу sqrt, в которой отрицательные


Инструкция утверждения

Из книги автора

Инструкция утверждения Утверждения, рассматриваемые до сих пор - предусловия, постусловия, инварианты, - это основные составляющие метода. Они устанавливают связь между конструкциями ОО-программных систем и теорией АТД, лежащей в основе метода. Инварианты класса, в


Включение функций в утверждения

Из книги автора

Включение функций в утверждения Булевы выражения не ограничиваются использованием атрибутов и локальных сущностей. Мы уже использовали возможность вызова функций в утверждениях: предусловие для put класса стек было not full, где full - функцияfull: BOOLEAN is-- Is stack full? (Заполнен ли


У11.3 Полные утверждения для стеков

Из книги автора

У11.3 Полные утверждения для стеков Покажите, что введение закрытой функции body, возвращающей тело стека, сделает возможным утверждениям класса STACK полностью отражать спецификацию соответствующего АТД. Обсудите теоретическую и практическую значимость такого


У11.6 Утверждения и экспорт

Из книги автора

У11.6 Утверждения и экспорт Обсудите использование функций в утверждениях, в частности, введение функции correct_index в предусловия программ put и item. Если добавить эту функцию в класс ARRAY, то какой статус экспорта следует ей


Переопределение и утверждения

Из книги автора

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


Наследование и утверждения

Из книги автора

Наследование и утверждения Следствия красоты базисных идей:[x]. Связь наследования с утверждениями и Проектированием по Контракту.[x]. Глобальная структура наследования, где все классы согласованы.[x]. Замороженные компоненты, для которых не применим принцип