Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LCD / Объектно-ориентированные средства.doc
Скачиваний:
51
Добавлен:
16.04.2013
Размер:
105.47 Кб
Скачать

Объектно-ориентированные средства

Объектный тип:

  • Атрибуты – структуры данных

  • Методы – функции и процедуры

Объект в Oracle– это экземпляр объектного типа.

  • Переменный – хранится в переменных PL/SQL

  • Постоянный – хранится в базе данных. Либо как строка, либо как столбец таблицы.

Объектный тип в Oracleсостоит из двух частей: спецификации и тела.

Спецификация должна быть всегда. Её синтаксис:

CREATE [OR REPLACE] TYPE имя_объектного_типа

[AUTHID {CURRENT_USER | DEFINER} ]

{ {IS|AS} OBJECT | UNDER имя_супертипа}

(

имя_атрибута тип_данных, … ,

[[[NOT] OVERRIDING] [[NOT] FINAL] [[NOT]

Instantiable] спецификация_метода, …, ]

[PRAGMA RESTRICT_REFERENCES(имя_программы,

уровень_чистоты)]

)

[[NOT] FINAL] [[NOT] INSTANTIABLE];

Здесь спецификация_методапредставляет собой одну из следующих конструкций:

MEMBER {PROCEDURE|FUNCTION} спецификация_программы

STATIC {PROCEDURE|FUNCTION} спецификация_программы

{ORDER|MAP}MEMBER FUNCTION спецификация_функции_сравнения

CONSTRUCTOR FUNCTION спецификация_функции_конструкции

Спецификациями методов могут быть также спецификации вызовов для Java-классов в базе данных или для внешних процедур, написанных на С.

Для создания тела объектного типа используется следующий синтаксис:

CREATE [OR REPLACE] TYPE BODY имя_объектного_типа

{IS|AS}

{

[{ORDER|MAP] MEMBER FUNCTION тело_функции_сравнения;]

[{MEMBER|STATIC} {FUNCTION|PROCEDURE}тело_программы;]

}

Телами программ тоже могут быть спецификации вызовов программ Javaили С.

Наследование типов.

В Oracle, можно определять подтипы объектного типа на основе модели единственности наследования. Но вOracleнет объектного типа главного корневого уровня, который бывает в объектных моделях других языков программирования1. ВOracle, каждый тип самостоятелен, если не объявлено другое.

По умолчанию Oracleопределяет объектные типы какFINAL, а для таких типов не разрешается объявление подтипов. Тип, объявленный какNOT FINALможет быть родительским и иметь подтипы (потомки), при этом в потомке должна быть ссылка на родительский тип с помощью ключевого словаUNDER.

Потомок наследует все атрибуты и методы своего родителя (супер­типа), а также может содержать дополнительные атрибуты и методы. Методы потомка могут заменять соответствующие родительские методы. Изменения родительского типа автоматически переносятся на потомка.

По умолчанию объектные типы объявляются как INSTANTIABLE, т.е. программа может создавать объекты этого типа. ПредложениеNOT INSTANTIABLE указывает, что объекты этого типа не будут создавать­ся (это соответствует абстрактному классу в ООП), причёмOracleне создаёт конструктор для этого типа. Это предложение применяется для типов, которые используются только в качестве родительских типов.

Методы

  • Методы-члены

  • Статические методы

  • Методы-конструкторы

  • Методы сравнения

Метод-член– это процедура или функция, которая определена с ключевым словомMEMBER. Такой метод можно применять только к объектам, для которых были созданы экземпляры.

Статический методобъявляется с ключевым словомSTATIC. Он не имеет доступа к текущему (SELF) объекту, но его можно вызвать в любой момент, используя синтаксистип.метод.

Примечание. Все не статические методы имеют неявный параметрSELF, который указывает на текущий экземпляр объекта. Для этого параметра, по умолчанию, в функциях используется режимIN, а в процедурах –INOUT. Можно изменить режим, включив параметрSELFв список формальных параметров.

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

  • Имеет имя, совпадающее с именем объектного типа;

  • Является функцией, которая возвращает объект этого типа;

  • Принимает атрибуты в любой (именованной или позиционной) нотации;

  • Для атрибутов предложение DEFAULTне применяется, т.е. каждому атрибуту должно быть указано значение (можноNULL);

Встроенный конструктор может быть заменён собственным, при этом заголовок функции начинается словами CONSTRUCTOR FUNCTION, имя функции совпадает с именем объектного типа, а на список параметров ограничений не накладывается. ПредложениеRETURNв заголовке конструктора должно содержать ключевые словаSELFASRESULT.

Пример типа book_cardс конструктором, заданным программистом:

CREATE OR REPLACE TYPE book_card AS OBJECT

{ isbn VARCHAR2(13),

pages INTEGER,

CONSTRUCTOR FUNCTION book_card

{ id IN INTEGER DEFAULT NULL,

title IN INTEGER DEFAULT NULL,