Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Синтаксис объявления типов



CREATE [OR REPLACE] TYPE type_name

[AUTHID {CURRENT USER | DEFINER}]

{IS | AS object (

[{MAP | ORDER} member function_spec, ]

[{MEMBER | STATIC} {subrout_pr_spec | call_spec}]

[, { //--// }] …

);

Фрагмент [AUTHID {CURRENT USER | DEFINER}] определяет, с какими правами будут выполняться методы в определенном нами объекте. Если выбрали DEFINER, то методы, определенные в объекте, будут выполняться с правами автора объекта.

В объявлении объекта сами тела функций отсутствуют.

[ CREATE [OR REPLACE] TYPE BODY {IS | AS}

{ {MAP | ORDER} member function_body,

|{MEMBER | STATIC} {subpr_body | call_spec}; }

[{MEMBER | STATIC} {subpr_body | call_spec}; }] …

END; ]

Пример объекта типа STACK.

Определим спецификацию типа:

CREATE TYPE IntArray AS VARRAY(25) OF Integer;

CREATE TYPE Stack AS object(

max_size Integer,

top Integer, - указатель на вершину стека

position IntAttay, - сам стек

MEMBER PROCEDURE initialize,

MEMBER FUNCTION full RETURN BOOLEAN,

MEMBER FUNCTION empty RETURN BOOLEAN,

MEMBER PROCEDURE push (n IN integer), - входной параметр

MEMBER PROCEDURE pop (n OUT integer) - выходной параметр

);

/

Определим тело объекта:

CREATE TYPE BODY stack AS

MEMBER PROCEDURE initialize IS

BEGIN

top:=0; - можно было написать Self.top

position:=IntArray(NULL);

max_size:=position.LIMIT; - определили содержимое поля max_size,

используя метод LIMIT

position.EXTEND (max_size-1,1); - заполняем элементы со 2-го по 25-й значением

первого элемента

END initialize;

MEMBER FUNCTION full RETURN boolean IS

BEGIN

RETURN(top=max_size); - если указатель на вершину стека=max_size, то

стек полностью заполнен

END full;

MEMBER FUNCTION empty RETURN boolean IS

BEGIN

RETURN(top=0); - если указатель на вершину стека=0, то

стек пустой

END empty;

MEMBER PROCEDURE push (n IN integer) IS

BEGIN

IF NOT full THEN

top:=top+1;

position(top):=n;

ELSE

RAISE_APPLICATION_ERROR(-20102,'stack overflow');

END IF;

END push;

MEMBER PROCEDURE pop (n OUT integer) IS

BEGIN

IF NOT empty THEN

n:=position(top);

top:=top-1;

ELSE

RAISE_APPLICATION_ERROR(-20102,'stack underflow');

END IF;

END pop;

END; - закрыли оператор CREATE

/





Дата публикования: 2015-02-18; Прочитано: 188 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...