КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Реализация объектного подхода в ORACLEВ результате широкого распространения объектно-ориентированного подхода лидеры в производстве реляционных СУБД стремятся наделить свои продукты объектно-ориентированными возможностями, чтобы повысить конкурентоспособность своих продуктов. Компания ORACLE здесь не стала исключением. В целом объектная реализация в ORACLE традиционна для объектного подхода вообще. Строго говоря, СУБД ORACLE не является объектной. Точнее будет сказать, что в СУБД ORACLE есть объектное расширение – возможности по созданию и использованию объектов, причем возможности эти несколько ограничены по сравнению с большинством языков высокого уровня. Ограничения, в частности, касаются слабой реализации принципа инкапсуляции (все свойства и методы объектов являются открытыми), нет возможности вызывать перегруженные методы предков и т.д. Тем не менее, объектная модель ORACLE развивается от версии к версии, и ее возможностей уже сейчас вполне достаточно для решения большинства задач методами объектно-ориентированного подхода.
Хранение объектов в столбцах реляционных таблиц Например, для описания некоторого абстрактного адреса создадим тип:
CREATE OR REPLACE TYPE address_typ AS OBJECT( City varchar2(20), Location VARCHAR2(50));
Примечание: объекты, как и пакеты, имеют интерфейс и реализацию. И также как и пакеты, создаются в два этапа – сначала заголовок (интерфейс), потом тело (реализация). В том случае, когда объект не содержит методов, тело объекта не указывается.
-- воспользуемся этим типом для описания отделов: CREATE TABLE DEPARTMENTS( Dep_Id NUMBER CONSTRAINT departments_pk PRIMARY KEY, Caption VARCHAR2 (50), Addr address_typ );
CREATE SEQUENCE Departments_seq;
-- заведем отдел и изменим данные некоторых сотрудников: INSERT INTO Departments VALUES (Departments_seq.NEXTVAL, 'Отдел продаж', NEW address_typ('141980', 'Дубна', 'Университетская, 19'));
Здесь выражение NEW address_typ('141980', 'Дубна', 'Университетская, 19') означает обращение к конструктору объекта.
Примечание: каждый объект имеет свой конструктор по умолчанию, создаваемый СУБД автоматически при компиляции объекта. Но программист имеет возможность создавать и собственные конструкторы.
-- выполним запросы к полям, содержащим объекты: SELECT d.Caption, d.Addr.ZIP, d.Addr.City, d.Addr.Location FROM Departments d;
Примечание: перед именем поля, содержащим объект, необходимо указывать название таблицы.
|