Введение

В объектно-ориентированном программировании, объектно-ориентированном проектировании и объектно-ориентированном анализе, идентичность объекта – это его уникальность, его отличие от любого другого объекта, вне зависимости от значений его свойств. Обладание идентичностью является фундаментальным свойством объектов. Это тесно связано с философским понятием идентичности.

Идентификация и ссылки

Ссылка может использоваться для обращения к объекту с определенной идентичностью. Ссылка содержит информацию, необходимую для реализации свойства идентичности в языке программирования, и обеспечивает доступ к объекту с этой идентичностью. Тип объекта, на который указывает ссылка, – это роль. Как правило, ссылки изоморфны адресам памяти. Однако несколько ссылок могут указывать на один и тот же объект, если используется какое-либо отображение адресов (виртуальные адреса, таблицы страниц, сегменты памяти). Идентичность объекта менее полезна как семантическая концепция в средах или ситуациях, где структура объектов не инкапсулирована, и два объекта считаются одним и тем же, если у них идентичные свойства, даже если это не один и тот же физический экземпляр (структурное равенство). Тем не менее, идентичность объекта может обеспечить оптимизацию. Функция, проверяющая, являются ли два аргумента одним и тем же объектом, может быстро вернуть положительный результат, если у обоих аргументов одинаковая идентичность (они являются ссылками на один и тот же экземпляр). Только если аргументы – различные объекты, необходимо рассматривать отдельные свойства для определения равенства, что является более затратной операцией. Например, большие целые числа могут быть объектами, выделенными в куче, и два больших числа считаются равными, если они представляют одно и то же число. Было бы неэффективно тратить машинные циклы в функции равенства, не используя информацию о том, что сравниваемые аргументы являются ссылками на одно и то же большое число.

Последствия идентичности

Идентичность объектов позволяет рассматривать объекты как «черные ящики». Объект не обязан раскрывать свою внутреннюю структуру. К нему все равно можно обращаться по его идентификатору, а к другим его свойствам – через его внешнее поведение, связанное с этой идентичностью. Идентичность предоставляет механизм для обращения к тем частям объекта, которые не представлены в интерфейсе. Таким образом, идентичность является основой полиморфизма в объектно-ориентированном программировании. Идентичность позволяет сравнивать ссылки. Две ссылки можно сравнить, чтобы определить, указывают ли они на один и тот же объект. Благодаря свойству идентичности, такое сравнение обладает особыми характеристиками. Если сравнение ссылок показывает, что они равны, то очевидно, что обе ссылки указывают на один и тот же объект. Если ссылки не равны, это не обязательно означает, что объекты, на которые они указывают, различны. Идентичность двух объектов одного типа считается одинаковой, если любое изменение одного объекта влечет за собой изменение другого.

Идентичность и объектно-ориентированная концептуальная модель

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