Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
В объектно-ориентированном программировании, объектно-ориентированном проектировании и объектно-ориентированном анализе, идентичность объекта – это его уникальность, его отличие от любого другого объекта, вне зависимости от значений его свойств. Обладание идентичностью является фундаментальным свойством объектов. Это тесно связано с философским понятием идентичности.
In object oriented programming, object oriented design and object oriented analysis, the identity of an object is its being distinct from any other object, regardless of the values of the objects' properties. Having identity is a fundamental property of objects. This is closely related to the philosophical concept of identity.
Идентификация и ссылки
Ссылка может использоваться для обращения к объекту с определенной идентичностью. Ссылка содержит информацию, необходимую для реализации свойства идентичности в языке программирования, и обеспечивает доступ к объекту с этой идентичностью. Тип объекта, на который указывает ссылка, – это роль. Как правило, ссылки изоморфны адресам памяти. Однако несколько ссылок могут указывать на один и тот же объект, если используется какое-либо отображение адресов (виртуальные адреса, таблицы страниц, сегменты памяти). Идентичность объекта менее полезна как семантическая концепция в средах или ситуациях, где структура объектов не инкапсулирована, и два объекта считаются одним и тем же, если у них идентичные свойства, даже если это не один и тот же физический экземпляр (структурное равенство). Тем не менее, идентичность объекта может обеспечить оптимизацию. Функция, проверяющая, являются ли два аргумента одним и тем же объектом, может быстро вернуть положительный результат, если у обоих аргументов одинаковая идентичность (они являются ссылками на один и тот же экземпляр). Только если аргументы – различные объекты, необходимо рассматривать отдельные свойства для определения равенства, что является более затратной операцией. Например, большие целые числа могут быть объектами, выделенными в куче, и два больших числа считаются равными, если они представляют одно и то же число. Было бы неэффективно тратить машинные циклы в функции равенства, не используя информацию о том, что сравниваемые аргументы являются ссылками на одно и то же большое число.
A reference can be used to refer to an object with a specific identity. A reference contains the information that is necessary for the identity property to be realized in the programming language, and allows access to the object with the identity. A type of a target of a reference is a role. Typically, references are isomorphic to memory addresses. However, multiple such references can refer to the same object, if some form of address mapping is present (virtual addresses / page tables / memory segments). Object identity is less useful as a semantic concept in environments or situations in which the structure of objects is not encapsulated, and two objects are considered to be the same object based on having identical properties, even if they are not actually the same physical instance (structural equivalence). However, object identity can nevertheless provide optimization. A function which tests whether two arguments are the same object can quickly short circuit to an affirmative answer if the two arguments have the same identity (are references to the same instance). Only if the argument are distinct objects do the individual properties need to be considered to determine equality, which is a more expensive operation. For instance, bignum integers may be heap allocated objects such that two bignums are considered to be the same if they represent the same number. It might be a waste of machine cycles in the equality function not to take advantage of the discovery that the two arguments being compared are references to the same bignum.
Последствия идентичности
Идентичность объектов позволяет рассматривать объекты как «черные ящики». Объект не обязан раскрывать свою внутреннюю структуру. К нему все равно можно обращаться по его идентификатору, а к другим его свойствам – через его внешнее поведение, связанное с этой идентичностью. Идентичность предоставляет механизм для обращения к тем частям объекта, которые не представлены в интерфейсе. Таким образом, идентичность является основой полиморфизма в объектно-ориентированном программировании. Идентичность позволяет сравнивать ссылки. Две ссылки можно сравнить, чтобы определить, указывают ли они на один и тот же объект. Благодаря свойству идентичности, такое сравнение обладает особыми характеристиками. Если сравнение ссылок показывает, что они равны, то очевидно, что обе ссылки указывают на один и тот же объект. Если ссылки не равны, это не обязательно означает, что объекты, на которые они указывают, различны. Идентичность двух объектов одного типа считается одинаковой, если любое изменение одного объекта влечет за собой изменение другого.
Identity of objects allows objects to be treated as black boxes. The object need not expose its internal structure. It can still be referred to, and its other properties can be accessed via its external behaviour associated with the identity. The identity provides a mechanism for referring to such parts of the object that are not exposed in the interface. Thus, identity is the basis for polymorphism in object oriented programming. Identity allows comparison of references. Two references can be compared whether they are equal or not. Due to the identity property, this comparison has special properties. If the comparison of references indicates that the references are equal, then it's clear that the two objects pointed by the references are the same object. If the references do not compare equal, then it's not necessarily guaranteed that the identity of the objects behind those references is different. The object identity of two objects of the same type is the same, if every change to either object is also a change to the other object.
Идентичность и объектно-ориентированная концептуальная модель
Идентичность позволяет построить платонический идеальный мир, онтологию или концептуальную модель, которая часто используется как основа объектно-ориентированного мышления. Концептуальная модель описывает клиентское представление домена, терминологии или API. Этот мир содержит объекты-точки как экземпляры, свойства этих объектов и связи между ними. Объекты в этом мире могут быть сгруппированы в классы, свойства объектов – в роли, а связи – в ассоциации. Все элементы этого мира вместе со связями между ними формируют структуру мира. Эти группы являются типами соответствующих экземпляров мира.
Identity allows the construction of a platonic ideal world, the ontology or conceptual model, that is often used as basis of object oriented thinking. The conceptual model describes the client side view to a domain, terminology or an API. This world contains point like objects as instances, properties of the objects and links between those objects. The objects in the world can be grouped to form classes. The properties of the objects can be grouped to form roles. The links can be grouped to form associations. All locations in the world together with the links between the locations form the structure of the world. These groups are types of the corresponding instances of the world.