Классика баз данных - статьи



         

Типы и классы - часть 2


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

Понятие класса отличается от понятия типа. Его спецификация совпадает со спецификацией типа, но это понятие является более динамическим. Класс характеризуется двумя аспектами: фабрика объектов (object factory) и склад объектов (object warehouse). Фабрика объектов может быть использована для создания новых объектов посредством выполнения операции new данного класса или клонирования некоторого объекта-прототипа, являющегося представителем данного класса. Склад объектов означает, что к классу присоединяется его расширение (extension), т.е. множество объектов, которые являются экземплярами класса. Пользователь может манипулировать складом, применяя операции ко всем экземплярам класса. Классы используются не для проверки правильности программы, а скорее для создания и манипулирования объектами. В большинстве систем, которые используют механизм классов, классы являются "гражданами первого сорта" и, как таковыми, ими можно манипулировать во время выполнения, т. е. изменять их и передавать как параметры. В большинстве случаев это делает невозможным проверку типов во время компиляции, но придает системе большую гибкость и однородность.

Конечно, между классами и типами имеется значительное сходство, оба термина использовались в каждом из значений, а в некоторых системах отличие между ними и вовсе едва заметно.

Мы не чувствуем себя вправе отдать предпочтение одному из двух подходов и оставляем право выбора за проектировщиком системы (см. раздел 4.3). Однако мы требуем, чтобы система предоставляла некоторый механизм структурирования данных, будь это классы или типы. Таким образом, классическое понятие схемы базы данных будет заменено на понятие множества классов или множества типов.

Однако мы не видим необходимости в том, чтобы система автоматически поддерживала экстент (extent) типа (т.е. множество объектов данного типа в базе данных) или, если экстент типа поддерживается, чтобы система предоставляла пользователю доступ к нему. Рассмотрим, например, тип прямоугольник, который может использоваться в различных базах данных многими пользователями. Не имеет смысла говорить о множестве всех прямоугольников, поддерживаемых системой, или производить операции над ними. Мы думаем, что более осмысленно отдать на откуп пользователю поддержку его собственного множества прямоугольников и манипулирование ими. С другой стороны, в случае такого типа как служащий весьма удобно, чтобы система автоматически сопровождала экстент этого типа.




Содержание  Назад  Вперед