Базы данных Oracle - статьи



             

Наследование - часть 3


SELECT TREAT(VALUE(p) AS Employee_t) FROM Persons p WHERE dob = '01-01-1970' AND VALUE(p) IS OF(Employee_t);

Некоторые другие свойства иерархии представлений:

  • тип суперпредставления должен быть непосредственным супертипом для типа создаваемого объектного представления;
  • подпредставление наследует объектный идентификатор OID от своего суперпредставления.
  • Свойство подстановочности

    Одно из наиболее значительных преимуществ наследования – это подстановочность (substitutability). Подстановочность – это основная характеристика полиформизма типов (type polymorphism), которая позволяет использовать значение некоторого подтипа там, где ожидается значение супертипа (например, параметры метода), причем в этом случае не требуется предварительных конкретных знаний о подтипе. (Прим. ред. Более подробно о подстановочности см. например [4].). В этой статье, к сожалению, уже нельзя исправить термин "подставляемость" на общеупотребительный термин "подстановочность".)

    Подстановочность экземпляра (Instance substitutability) – это возможность использования значения некоторого объекта подтипа в контексте, объявленном в терминах супертипа. Подстановочность ссылки REF – это возможность использовать ссылку REF на подтип в контексте, объявленном в терминах ссылки на супертип. По умолчанию, объектные столбцы и объектные таблицы обладают свойством подстановочности. Базовая модель хранения – это единая плоская таблица со столбцами, которые соответствуют всем атрибутам всех возможных подтипов. В столбце идентификатора типа (type id column) хранится информация о наиболее специализированном типе данного типа.

    CREATE TABLE dept (id NUMBER, mgr Person_t); INSERT INTO dept VALUES(1, Employee_t(…));

    Динамическая диспетчеризация методов (Dynamic Method Dispatch)

    Метод – это процедура или функция, которая является частью определения объектного типа. Методы могут выполняться в среде исполнения Oracle9i или передаваться для выполнения в другую среду. Методы могут быть реализованы с применением ряда языков, в том числе – PL/SQL, C/C++ и Java.

    Подтип может переопределять любой из нетерминальных методов экземпляра (non-final member methods), определенных для его супертипа, и предоставлять другую реализацию. Когда вызывается метод некоторого экземпляра объекта, осуществляется диспетчеризация метода и вызов конкретной реализации в зависимости от наиболее специализированного типа данного экземпляра. СУБД Oracle поддерживает возможность мультиязыковой динамической диспетчеризации методов. Когда на некотором экземпляре объекта вызывается метод, осуществляется его диспетчеризация и вызов конкретной его реализации, основанной на наиболее специализированном типе данного экземпляра.




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