Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!