Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Проверка эквивалентности






 

Семантика операций, проверяющих эквивалентность (= и /=) должна быть совместимой с семантикой присваивания. Наряду с операцией = можно использовать и equal. Какую из этих операций следует применять, зависит от обстоятельств.

[x]. (E1) Если x и y - ссылки, их можно тестировать как на ссылочную эквивалентность, так и на объектную эквивалентность при условии, что ссылки не void. Мы определили операцию x = y, как обозначающую ссылочную эквивалентность в этом случае. Функция equal, введенная для проверки объектной эквивалентности, дополнена и применима, когда x или y - void.

[x]. (E2) Если x и y - развернутого типа, единственный смысл имеет объектное сравнение.

[x]. (E3) Если x - ссылка, y - развернутого типа, объектное сравнение - единственно возможный смысл операции и в данном случае. Сравнение расширяется, допуская случай, когда x - void, возвращая значение false в этой ситуации, поскольку y не может быть void.

Этот анализ дает желаемую интерпретацию равенства = во всех случаях. Для объектного сравнения всегда доступна функция equal, расширенная на случаи, когда один или оба операнда принимают значение void. Следующая таблица подводит итог семантике сравнения:

Тип цели xТип источника yСсылочныйРазвернутый Ссылочный Ссылочное сравнениеequal(x, y) объектное сравнение, если x не void, иначе - false Развернутый equal(x, y) объектное сравнение, если y не void, иначе - falseequal(x, y) объектное сравнение Таблица 8.2. Семантика сравнения x=y

 

Сравнение таблиц 8.1 и 8.2 показывает совместимость присваивания и операций сравнения в упоминавшемся уже смысле. Напомним, в частности, что equal (x, y) будет истинно после выполнения x: = clone (y) или x. copy (y).

Обсуждаемые проблемы возникают во всех языках, включающих ссылки и указатели, таких как Pascal, Ada, Modula-2, C, Lisp и другие. Они особенно актуальны для ОО-языков, в которых все создаваемые пользователем типы являются ссылочными. В дополнение к причинам, объясняемых в разделе обсуждения, в синтаксисе явно не отражается факт представления объектов ссылками, так что следует быть особо внимательными при проверке эквивалентности объектов.

 

 

Работа со ссылками: преимущества и опасности

 

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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.