Кто должен обеспечить сохранность инвариантов

Кто должен обеспечить сохранность инвариантов

Квалифицированные вызовы в форме a.f(...), выполняемые на стороне клиента, всегда начинаются и заканчиваются в состоянии, удовлетворяющем инварианту. Подобного правила нет для неквалифицированных вызовов в форме f(...), недоступных для клиентов, но используемых в квалифицированных вызовах для служебных целей. Как следствие, обязанность управлять инвариантами возлагается только на модули, экспортируемые всем клиентам или выборочно. Закрытые методы, недоступные клиентам, не обязаны беспокоиться об инвариантах.

Закончим обсуждение правилом, точно определяющим, когда утверждение является корректным инвариантом класса:

Правило инварианта

Утверждение Inv является корректным инвариантом класса, если и только если оно удовлетворяет следующим двум условиям:

1 Каждая процедура создания, применимая к аргументам, удовлетворяющим ее предусловию в состоянии, в котором атрибуты имеют значения, установленные по умолчанию, вырабатывает заключительное состояние, гарантирующее выполнение Inv.

2 Каждая экспортируемая процедура класса, примененная к аргументам в состоянии, удовлетворяющем Inv и предусловию, вырабатывает заключительное состояние, гарантирующее выполнение Inv.

Заметьте, в этом правиле:

[x]. Предполагается, что каждый класс обладает процедурой создания, задаваемой конструктором по умолчанию, при отсутствии явного ее определения.

[x]. Состояние объекта определяется значениями всех его полей (значениями атрибутов класса для этого конкретного экземпляра).

[x]. Предусловие программы может включать начальное состояние и аргументы.

[x]. Постусловие может включать только заключительное состояние, начальное состояние, (используя нотацию old) и, в случае функций, возвращаемое значение, заданное предопределенной сущностью Result.

[x]. Инвариант может включать только состояние.

Утверждения могут использовать функции, но такие функции фактически являются ссылками на атрибуты - состояние.

Математическое выражение правила Инварианта появится позже в этой лекции.

Можно использовать правило Инварианта как основу для ответа на вопрос, что означает нарушение инварианта в период выполнения системы? Мы уже установили, что нарушение предусловия означает ошибку (жучок) клиента, нарушение постусловия - ошибка поставщика. Для инвариантов ответ такой же, как и для постусловий11.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») лежит идея о том, что что-то безопасно только в силу своей неочевидности, отсутствия рекламы или интереса с чьей-либо стороны. Хорошим примером


Обучиться самому (или обеспечить обучение сотрудников)

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

Обучиться самому (или обеспечить обучение сотрудников) Даже когда процедуры реагирования на инцидент имеются, системные администраторы и пользователи могут быть не обучены их применению. Политики и процедуры, которые не были ясно усвоены, не принесут много пользы. При


Обеспечить понимание вопросов безопасности всеми руководителями

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

Обеспечить понимание вопросов безопасности всеми руководителями Особенно важно, чтобы все руководители понимали риски, связанные с незащищенностью систем. Если этого не будет, то принимаемые ими решения непреднамеренно могут подвергать опасности репутацию компании,


Как обеспечить сохранность файлов

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

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