КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Абстрактные объекты ⇐ ПредыдущаяСтр 4 из 4 Абстрактные объекты – это объекты, экземпляры которых нельзя создать (по аналогии с абстрактными классами в ООП). Такие объекты создаются для того, чтобы в последствии выступить в качестве супертипов в наследовании. Для того чтобы сделать объект абстрактным, в его объявление надо добавить параметр NOT INSTANTIABLE. Указание параметра NOT FINAL в этом случае является обычным, так как мало практического смысла в том, чтобы создавать абстрактный объект, который нельзя унаследовать.
Пример: Допустим, есть иерархия объектов (см. рис. 1):
Рис. 1. Иерархия объектов
DROP TYPE sales_manager_typ; DROP TYPE boss_typ; DROP TYPE employee_typ; DROP TYPE department_typ;
-- создадим объект department_typ для хранения информации об отделе:
CREATE OR REPLACE TYPE department_typ IS OBJECT( Dep_Id NUMBER, Caption varchar2(50) ); /
-- создадим абстрактный объект employee_typ, обладающий основным набором свойств, -- а также метод, определяющий количество отработанных работником дней:
CREATE OR REPLACE TYPE employee_typ IS OBJECT( Name VARCHAR2(30), Hire_Day DATE, MEMBER FUNCTION DaysAtCompany RETURN NUMBER ) NOT INSTANTIABLE NOT FINAL; /
CREATE OR REPLACE TYPE BODY employee_typ IS MEMBER FUNCTION DaysAtCompany RETURN NUMBER IS BEGIN RETURN TRUNC(sysdate-Hire_Day); END; END; /
-- создадим объект boss_typ, наследующий все свойства и методы объекта -- employee_typ (для простоты примера данный объект не будет иметь собственных -- свойств и методов):
CREATE OR REPLACE TYPE boss_typ UNDER employee_typ(); /
-- создадим объект sales_manager_typ, наследующий все свойства и методы объекта -- employee_typ и имеющий дополнительное свойство, обозначающее принадлежность к -- отделу:
CREATE OR REPLACE TYPE sales_manager_typ UNDER employee_typ( Dep department_typ ); /
Примечание: данные о взаимозависимостях типов можно посмотреть в таблице USER_TYPES: SELECT supertype_name, type_name FROM user_types ORDER BY 1, 2;
|