Как быть честным
Как быть честным
Теперь нам понятно, как обманывать. Но как же быть честным? Объявляя подпрограмму повторно, мы можем сохранить ее исходные утверждения, но также мы вправе:
[x]. заменить предусловие более слабым;
[x]. заменить постусловие более сильным.
Первый подход символизирует щедрость и великодушие: мы допускаем большее число случаев, чем изначально. Это не причинит вред клиенту, который на момент вызова удовлетворяет исходному предусловию. Второй подход означает, что мы выдаем больше, чем от нас требовалось. Это не причинит вред клиенту, полагающемуся на выполнение по завершении вызова исходных постусловий.
Итак, основное правило:
Правило (1) Утверждения Переобъявления (Assertion Redeclaration)
При повторном объявлении подпрограммы предусловие может заменяться лишь равным ему или более слабым, постусловие - лишь равным ему или более сильным.
Это правило отражает тот факт, что новый вариант подпрограммы не должен отвергать вызовы, допустимые в оригинале, и должен, как минимум, представлять гарантии, эквивалентные гарантиям исходного варианта. Он вправе, хоть и не обязан, допускать большее число вызовов или давать более сильные гарантии.
Как явствует из названия, это правило применимо к обеим формам повторного объявления: переопределению и реализации отложенного компонента. Второй случай важен особо, - утверждения будут связаны со всеми эффективными версиями потомков.
Утверждения подпрограммы, как отложенной, так и эффективной, задают ее семантику, применимую к ней самой и ко всем повторным объявлениям ее потомков. Точнее говоря, они специфицируют область допустимого поведения подпрограммы и ее возможных версий. Любое повторное объявление может лишь сужать эту область, не нарушая ее.
Как следствие, создатель класса должен быть осторожным при написании утверждений эффективной подпрограммы, не привнося излишнюю спецификацию (overspecification). Утверждения должны описывать намерения подпрограммы, - ее абстрактную семантику, - но не свойства реализации. Иначе можно закрыть возможность создания иной реализации подпрограммы у будущих потомков.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
PNG — быть или не быть?
PNG — быть или не быть? В Wikipedia указывается, что вместо .ico можно использовать .png как наиболее перспективный из форматов, применяемых для сжатия изображения без потери качества. При соответствующем объявлении файла в секции head страницы позади планеты всей у нас остается
Быть или не быть
Быть или не быть С одной стороны, продвижение в поисковых подсказках сулит очевидные преимущества владельцу проекта, с другой – чревато негативными последствиями. Так или иначе, оно осуществляется искусственно, а это само по себе противоречит правилам поисковых систем.
Имитационные игры — быть или казаться?
Имитационные игры — быть или казаться? В современном понимании главным для всех направлений развития искусственного интеллекта является его способность извлекать информацию из окружающей среды и использовать ее для "самообучения", по сути дела перепрограммирования, с
Что должно быть на главной странице
Что должно быть на главной странице Главная страница любого интернет-магазина – с одной стороны, важная имиджевая составляющая, лицо, а с другой – не входная точка (место, куда посетитель попадает, впервые оказавшись на вашем сайте). Это далеко не всегда главная страница
Быть в авангарде
Быть в авангарде Следующий ключевой пункт, на который следует обратить внимание, - это актуальность. IT развивается абсолютно бешено и замедляться не планирует. Можно писать замечательные консольные программы на паскале, но только вряд ли они найдут благодарных
4. Миф о том, что «информация хочет быть свободной»
4. Миф о том, что «информация хочет быть свободной» Есть другой миф, равно противоположный заблуждению «фабричной модели», который часто затрудняет размышление об экономике программного обеспечения с открытым исходным кодом. Это — утверждение о том, что «информация,
Быть богатым или сильным?
Быть богатым или сильным? Автор: Юрий РомановГуляя по дорожкам университетского сквера, густо засыпанным опавшей листвой, мы говорили о китайской электронике и китайском экономическом чуде. Мой собеседник Валентин Игоревич Сазонов, профессор, математик-экономист, все
Должны ли исключения быть объектами?
Должны ли исключения быть объектами? Фанатики объектной ориентации (многие ли из тех, кто открыл красоту этого подхода, не рискуют стать его фанатиками?) могут критиковать представленный механизм за то, что исключения не являются гражданами первого сорта в программном
Может ли быть польза от неведения?
Может ли быть польза от неведения? Поскольку введенные только что понятия играют важную роль в последующем, стоит еще раз повторить несколько последних положений. (На самом деле, в этом коротком пункте не будет ничего нового, но он поможет лучше понять основные концепции
Может ли самолет быть имуществом?
Может ли самолет быть имуществом? Наш первый подходящий пример относится скорее к моделированию систем, чем к проектированию программных продуктов. Однако он наглядно иллюстрирует ситуацию, в которой множественное наследование необходимо.Пусть класс AIRPLANE описывает
Изменения. Быть или не быть
Изменения. Быть или не быть Предположим, команда пришла к выводу, что «мы слишком слабо общались внутри команды, поэтому мы постоянно мешали друг другу и переделывали архитектурные решения».Что нам с этим делать? Организовать ежедневные встречи для обсуждения
Не быть слишком доверчивым
Не быть слишком доверчивым Доверие — это страшная вещь в сетях с неправильной настройкой. Как только вы войдете в одну машину, другие машины доверят вам войти в них. Если вам необходима доверительная конфигурация (а абсолютная необходимость возникает лишь в редких
Быть или не быть Microsoft Office для Linux Максим Плакса
Быть или не быть Microsoft Office для Linux Максим Плакса Опубликовано 13 февраля 2013 Слух о предстоящем выходе версии Microsoft Office для Linux появился 5 февраля. Об этом якобы проговорился автору сайта Phoronix один из сотрудников Microsoft во время проходившего в Брюсселе
Горизонт должен быть ровным
Горизонт должен быть ровным Снимая пейзажи (или портреты на фоне пейзажа), старайтесь обращать внимание на горизонт. Уделяя все внимание модели или другому объекту съемки, вы можете забыть о ровном положении камеры, и горизонт «упадет» (рис. 13.11). Для полного контроля над
Голубятня: RSS как он должен быть
Голубятня: RSS как он должен быть Автор: Сергей ГолубицкийОпубликовано 23 марта 2012 годаСегодня пофилософствуем на одну из самых важных и горячих тем айтишной жизни: управление информационными потоками. После перехода три с половиной года назад на Mac OS X мой подход к