Кто должен обеспечить сохранность инвариантов
Кто должен обеспечить сохранность инвариантов
Квалифицированные вызовы в форме a.f(...), выполняемые на стороне клиента, всегда начинаются и заканчиваются в состоянии, удовлетворяющем инварианту. Подобного правила нет для неквалифицированных вызовов в форме f(...), недоступных для клиентов, но используемых в квалифицированных вызовах для служебных целей. Как следствие, обязанность управлять инвариантами возлагается только на модули, экспортируемые всем клиентам или выборочно. Закрытые методы, недоступные клиентам, не обязаны беспокоиться об инвариантах.
Закончим обсуждение правилом, точно определяющим, когда утверждение является корректным инвариантом класса:
Правило инварианта
Утверждение Inv является корректным инвариантом класса, если и только если оно удовлетворяет следующим двум условиям:
1 Каждая процедура создания, применимая к аргументам, удовлетворяющим ее предусловию в состоянии, в котором атрибуты имеют значения, установленные по умолчанию, вырабатывает заключительное состояние, гарантирующее выполнение Inv.
2 Каждая экспортируемая процедура класса, примененная к аргументам в состоянии, удовлетворяющем Inv и предусловию, вырабатывает заключительное состояние, гарантирующее выполнение Inv.
Заметьте, в этом правиле:
[x]. Предполагается, что каждый класс обладает процедурой создания, задаваемой конструктором по умолчанию, при отсутствии явного ее определения.
[x]. Состояние объекта определяется значениями всех его полей (значениями атрибутов класса для этого конкретного экземпляра).
[x]. Предусловие программы может включать начальное состояние и аргументы.
[x]. Постусловие может включать только заключительное состояние, начальное состояние, (используя нотацию old) и, в случае функций, возвращаемое значение, заданное предопределенной сущностью Result.
[x]. Инвариант может включать только состояние.
Утверждения могут использовать функции, но такие функции фактически являются ссылками на атрибуты - состояние.Математическое выражение правила Инварианта появится позже в этой лекции.
Можно использовать правило Инварианта как основу для ответа на вопрос, что означает нарушение инварианта в период выполнения системы? Мы уже установили, что нарушение предусловия означает ошибку (жучок) клиента, нарушение постусловия - ошибка поставщика. Для инвариантов ответ такой же, как и для постусловий11.2).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
(6.2) Как обеспечить доступ пользователям локальной сети к моим ресурсам?
(6.2) Как обеспечить доступ пользователям локальной сети к моим ресурсам? Сделать это стало немного сложнее, чем в W9х, зато возможностей по настройке стало гораздо больше. Для начала, как и в W9x надо убедиться, что установлен File and Printer Sharing for Microsoft Networks. После этого, открываем
8.1. Как обеспечить доступ к моим ресурсам другим пользователям сети?
8.1. Как обеспечить доступ к моим ресурсам другим пользователям сети? C самого начала в системе существует папка под названием Shared Documents, расположенная в Document and SettingsAll UsersShared Documents, которая расшарена по умолчанию, и очень удобна для обмена файлами и документами, причём не
Как обеспечить анонимность перемещений в Интернете при противодействии черному PR
Как обеспечить анонимность перемещений в Интернете при противодействии черному PR Поскольку противник, совершивший на вас нападение в Интернете, может представлять угрозу вашей жизни и здоровью, считаем необходимым подробно остановиться на вопросах обеспечения
Принцип 2. Даже минимальное преимущество может обеспечить победу
Принцип 2. Даже минимальное преимущество может обеспечить победу Гнедая трехлетка вылетает на последний круг. Ваше сердце бешено колотится, руки судорожно сжимают билет, губы шепчут молитву – и в эту секунду она пересекает финишную черту. Вы с волнением ждете, что скажут
Как обеспечить в приложении возможность подключения модулей
Как обеспечить в приложении возможность подключения модулей Подключаемый к приложению модуль является динамической библиотекой, которая реализует какой-нибудь один или несколько интерфейсов. Интерфейс — это класс, содержащий только чисто виртуальные функции. Связь
68. Широко применяйте assert для документирования внутренних допущений и инвариантов
68. Широко применяйте assert для документирования внутренних допущений и инвариантов РезюмеИспользуйте assert или его эквивалент для документирования внутренних допущений в модуле (т.е. там, где вызываемый и вызывающий код поддерживаются одним и тем же программистом или
Ты должен
Ты должен Большинство людей следует чьим угодно планам, только не своим. Всё, что нужно сделать, чтобы отделить себя от других, — это остановиться и хорошенько присмотреться к своей карьере. Тебе нужно придерживаться своего плана, а не чьего-то еще.Как составить такой
ИДЕИ: Пять инвариантов ИТ-образования
ИДЕИ: Пять инвариантов ИТ-образования Автор: Шутов, ИльяПоводом для написания этой статьи, как ни странно, послужила очередная попытка воспользоваться интерфейсом Office 2007. Видимо, я не попадаю в то счастливое подмножество пользователей, для которых эргономисты компании
Форма и свойства инвариантов класса
Форма и свойства инвариантов класса Синтаксически инвариант класса является утверждением, появляющимся в предложении invariant, стоящим после всех предложений feature, и перед предложением end. Вот пример:class STACK4 [G] creation...Как в STACK2...feature...Как в STACK2...invariantcount_non_negative: 0 <= countcount_bounded:
Роль инвариантов класса в программной инженерии
Роль инвариантов класса в программной инженерии Свойство (2) правила инвариантов показывает, что неявно их можно рассматривать как добавления к предусловиям и постусловиям каждой экспортируемой программы класса. Посему принципиально понятие инварианта класса
Сохранность носителей
Сохранность носителей Любое устройство хранения информации рассчитано на вполне определенные условия эксплуатации и область применения. Реальная жизнь вносит в эти спецификации свои коррективы. Если при создании отдельного компьютера или сети ориентироваться лишь на
Закон 1. Невозможно обеспечить безопасность клиентской части
Закон 1. Невозможно обеспечить безопасность клиентской части В первом законе безопасности следует определить пару понятий. Что именно имеется в виду, когда говорят о клиентской части (client-side)? Рассматривая сетевое (клиент-серверное) окружение, авторы определили бы
Закон 11. Безопасность нельзя обеспечить покровом тайны
Закон 11. Безопасность нельзя обеспечить покровом тайны В основе обеспечения безопасности покровом тайны (STO – «security through obscurity») лежит идея о том, что что-то безопасно только в силу своей неочевидности, отсутствия рекламы или интереса с чьей-либо стороны. Хорошим примером
Обучиться самому (или обеспечить обучение сотрудников)
Обучиться самому (или обеспечить обучение сотрудников) Даже когда процедуры реагирования на инцидент имеются, системные администраторы и пользователи могут быть не обучены их применению. Политики и процедуры, которые не были ясно усвоены, не принесут много пользы. При
Обеспечить понимание вопросов безопасности всеми руководителями
Обеспечить понимание вопросов безопасности всеми руководителями Особенно важно, чтобы все руководители понимали риски, связанные с незащищенностью систем. Если этого не будет, то принимаемые ими решения непреднамеренно могут подвергать опасности репутацию компании,
Как обеспечить сохранность файлов
Как обеспечить сохранность файлов Уважайте свой труд: вы приобрели дорогую фототехнику, фотографировали, старались, получили хорошие снимки, но можете случайно их лишиться, если вовремя не задумаетесь о сохранности файлов.Не надейтесь, что все обойдется и информация