Студопедия

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

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

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






Идентификация объектов






Ключевой частью определения объекта является уникальность его идентификации. В объектно-ориентированной системе каждому объекту в момент его создания присваивается идентификатор объекта (Object Identifier — OID), который обладает следующими свойствами:

- генерируется системой;

- уникально обозначает этот объект;

- является неизменным в том смысле, что его нельзя изменить, пока объект продолжает существовать; после создания объекта его идентификатор OID не может быть использован повторно ни для какого другого объекта, даже после удаления данного объекта;

- не зависит от значений его атрибутов (два объекта могут иметь одинаковое состояние, но всегда обладают разными идентификаторами OID);

- скрыт от пользователя (в идеальном случае).

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

Например, в учебном проекте DreamHome между отношениями S (Staff) и B (Branch) имеется связь. Если каждый объект отделения компании встроить в соответствующие объекты сотрудников, то возникнут проблемы с избыточностью информации и аномалиями обновления.Но если вместо самого объекта отделения компании в соответствующий объект сотрудника встроить идентификатор OID его отделения компании, то в системе по-прежнему останется по одному экземпляру каждого объекта отделения компании и непротиворечивость данных будет поддерживаться гораздо проще. Таким образом, объекты могут использоваться совместно, а их идентификаторы могут применяться для поддержки в системе ссылочной целостности.

Существует несколько способов реализации средств идентификации объектов. В реляционных СУБД идентичность объекта основана на некотором значении, т.е. для обеспечения уникальности всех строк отношения используются значения первичного ключа. Первичные ключи не обеспечивают того уровня идентичности объекта, который требуется в объектно-ориентированных системах. Во-первых, как уже упоминалось выше, первичный ключ является уникальным только внутри отношения, но не во всей системе. Во-вторых, первичный ключ обычно выбирается из атрибутов данного отношения, что означает его зависимость от текущего состояния объекта. Если потенциальный ключ может подвергаться изменениям, то идентификация может обеспечиваться с помощью уникальных идентификаторов, например номеров отделений компании B_N. Однако поскольку значения этого атрибута не контролируются системой, то нет никаких гарантий защиты от нарушений идентичности. Кроме того, искусственно созданные значения ключа, такие как 'B1', 'B2' или 'ВЗ', имеют мало смысла с точки зрения пользователя.

Для обеспечения идентичности в языках программирования часто используются другие методы, включая имена переменных и указатели или адреса виртуальной памяти, но в этих подходах идентичность объекта также может быть нарушена. В большинстве случаев применения баз данных это адресное пространство окажется слишком мало, ведь обеспечение масштабируемости базы данных требует, чтобы идентификатор оставался уникальным для всех устройств хранения, возможно, даже для разных компьютеров в распределенной СУБД. Более того, при удалении объекта занимаемая им прежде память должна быть повторно использована, поэтому для вновь созданного объекта может быть выделено то же пространство, которое ранее занимал удаленный объект. Все ссылки на старый объект, которые становятся недействительными после его удаления, теперь снова становятся действительными, но, к сожалению, они уже указывают на неправильный объект. Аналогичным образом, перемещение объекта в памяти со сменой одного адреса другим нарушает идентичность объекта. В данном случае для обеспечения независимости от состояния и расположения необходимо использовать логический идентификатор объекта.

Ниже перечислены основные преимущества использования идентификаторов OID для обозначения объектов:

- эффективность. Для хранения идентификаторов OID внутри составного объекта требуется очень мало места. Обычно они меньше текстовых имен, внешних ключей или семантических ссылок.

- быстродействие. Идентификатор OID указывает на фактический адрес или место внутри таблицы, в котором находится адрес данного объекта. Это означает, что объекты могут быть быстро обнаружены, независимо от места их текущего хранения: в оперативной или внешней памяти;

- невозможность изменения пользователем. Если идентификаторы OID генерируются системой и скрыты от пользователей, или, по крайней мере, доступны только для чтения, то в такой системе проще обеспечить целостность сущностей и связей. Более того, это позволяет пользователю не заботиться о поддержании целостности данных;

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

Из последнего свойства следует возможность возникновения ситуации: два объекта могут выглядеть совершенно одинаково для пользователя (значения всех атрибутов одинаковы), но при этом обладать разными идентификаторами OID и поэтому считаться разными.

Возникает вопрос: если идентификаторы OID скрыты от пользователя, то как он сможет их различить? Из этого следует, что первичные ключи все еще необходимы для того, чтобы пользователи могли различать такие объекты. При указанном способе идентификации объектов можно провести различия между идентичностью, иногда называемой эквивалентностью объектов, и равенством объектов. Два объекта называются идентичными (эквивалентными) тогда и только тогда, когда они имеют одинаковые идентификаторы OID, что обозначается одним знаком равенства (=). Два объекта называются равными тогда и только тогда, когда они имеют одинаковые состояния, что обозначается двумя знаками равенства (= =).






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