Предусловия и статус экспорта

Предусловия и статус экспорта

Возможно, вы заметили необходимость дополнительного требования, не отраженного в принципе обоснованности предусловия. Для того чтобы клиент мог проверить предусловие, оно не должно использовать закрытые свойства класса, недоступность которых отражена в статусе экспорта.

Рассмотрим следующую ситуацию:

-- Предупреждение: это неправильный класс, только в целях иллюстрации.

class SNEAKY feature

tricky is

require

accredited

do

...

end

feature {NONE}

accredited: BOOLEAN is do ... end

end

Спецификация для tricky устанавливает, что любой вызов этой процедуры должен удовлетворять условию, выраженному булевой функцией accredited. Но при экспорте класса эта функция для клиентов является закрытой, поэтому у них нет способа проверить выполнимость условия перед вызовом tricky. Очевидно, подобная ситуация неприемлема.

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

Это правило учитывает все возможные ситуации экспорта, а не только случаи доступности всем клиентам (tricky) или полной недоступности (accredited). Как отмечалось, при обсуждении проблемы скрытия информации, компонент класса можно сделать доступным для некоторых клиентов, явно перечислив их в feature предложении, например feature {A, B, ... }, определяющего доступность только для классов A, B, ... и их потомков. Сформулируем правило языка:

Правило Доступности предусловия

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

В соответствии с этим правилом каждый клиент, способный вызвать программу, способен проверить ее предусловие. По этому правилу класс SNEAKY является коварным, некорректно построенным, поскольку экспортирует tricky с недоступным предусловием. Нетрудно превратить этот класс в правильно построенный, изменив статус экспорта у accredited. Если tricky появится с предложением feature в форме feature {A, B, C}, то accredited должна экспортироваться, по меньшей мере, клиентам A, B, C, появляясь в той же группе feature, что и tricky. Можно задать для accredited собственное feature-предложение в одной из форм: feature {A, B, C}, feature {A, B, C, D, ...} или просто feature. Любое нарушение этого правила приведет к ошибке в период компиляции. Класс SNEAKY, например, будет забракован компилятором.

Подобного правила нет для постусловий. Не является ошибкой в постусловии ссылаться на компоненты, закрытые или экспортируемые избранным клиентам. Просто это означает, что описание эффекта выполнения программы содержит некоторые свойства, непосредственно не используемые клиентом. Подобная ситуация имеет место в процедуре put класса STACK2:

put (x: G) is

-- Добавить элемент x на вершину

require

not full

do

...

ensure

... Другие предложения...

in_top_array_entry: representation @ count = x

end

Последнее предложение в постусловии устанавливает, что элемент массива с индексом count содержит последний втолкнутый в стек элемент. Это свойство реализации, хотя put обычно доступно (экспортируется всем клиентам), массив representation является закрытым. Но ничего ошибочного в постусловии нет. Оно просто включает наряду со свойствами, полезными для клиентов ("Другие предложения"), свойство, имеющее смысл только для тех, кто знаком с полным текстом класса. Такие закрытые предложения не будут появляться в краткой форме класса - документации, предназначенной для авторов клиентских модулей.

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

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

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

Статус подключений

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

Статус подключений Внутренне PHP имеет три статуса подключения:При нормальном выполнении сценария активно состояние NORMAL. Если во время загрузки страницы пользователь нажал кнопку STOP, активным становится состояние ABORTED. Если сценарий выполняется дольше отведенного ему


О сомнительной пользе экспорта испорченных продуктов

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

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


Статус

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

Статус После регистрации ICQ, постоянно будет гостить в вашей области уведомлений (она находится в правой части Панели задач) в виде специального значка. В момент подключения к Интернету вместо значка появится изображение цветка. Если лепестки цветка зеленые, то


1.7.1 Состояние и статус стандартов

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

1.7.1 Состояние и статус стандартов IAB периодически публикует информацию о работе над протоколами. Стадии разработки определяют текущее состояние протокола:? Experimental (экспериментальный)? Proposed (предлагаемый)? Draft (черновик)? Standard (стандарт)Некоторые протоколы маркируются как


Статус нахождения в Skype

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

Статус нахождения в Skype В нижней части окна программы вы можете изменить свой статус нахождения в Skype. Большинство опций этого меню интуитивно понятны (рис. 5.23). Часть из них можно установить самому, а некоторые изменяет программа:? например, статус автоматически


Автоматизация импорта и экспорта

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

Автоматизация импорта и экспорта Назначение спецификации – сохранение параметров импорта или экспорта данных, необходимых программе Access для повторения той или иной операции без участия мастера. Причем в спецификации можно изменить имя исходного или конечного файла


Предусловия

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

Предусловия Частичные функции являются неустранимым фактом процесса проектирования ПО, отражающим очевидное наблюдение: не каждая операция применима ко всем объектам. Но они также являются и потенциальным источником ошибок: если функция f из X в Y является частичной, то


Архитектурная роль селективного экспорта

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

Архитектурная роль селективного экспорта Селективный экспорт это не просто удобство, а неотъемлемая часть ОО-архитектуры. Он позволяет группе концептуально связанных классов обеспечить друг другу доступ ко всем своим компонентам, скрыв их от остального мира в


Статус экспорта процедур создания

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

Статус экспорта процедур создания Для двух процедур создания, объявленных в классе POINT1, предложение feature имело вид feature {NONE}. Это означает, что эти процедуры закрыты для обычных вызовов, но остаются открытыми для порождающих вызовов. Только что представленные два примера


Статус универсальных операций

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

Статус универсальных операций Последние комментарии частично прояснили вопрос о статусе универсальных операций clone, copy, equal, is_equal, deep_clone, deep_equal.Эти операции не являются языковыми конструкциями, невзирая на их фундаментальную значимость для практики. Они поставляются


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

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

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


Предусловия

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

Предусловия Предусловия выражают ограничения, выполнение которых необходимо для корректной работы функции. Здесь:[x]. put не может быть вызвана, если стек заполнен;[x]. remove и item не могут быть применены к пустому стеку.Предусловия применяются ко всем вызовам программы, как


Абстрактные предусловия

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

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


Форматы экспорта, поддерживаемые Flash

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

Форматы экспорта, поддерживаемые Flash Все форматы экспорта графики, поддерживаемые Flash, приведены в табл. 21.1. Из этой таблицы видно, что Flash может экспортировать графику как в векторные, так и в растровые форматы. В последнем случае вся векторная графика


Параметры форматов экспорта

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

Параметры форматов экспорта В этом разделе описываются параметры различных графических форматов, в которые Flash может экспортировать наше изображение, а также диалоговые окна, позволяющие настраивать эти параметры. Эти окна появляются после того, как мы зададим имя