Классика баз данных - статьи

       

обозначенное одним названием может отличаться


Рассмотрим свойства, связанные с методом и реализованные в ООП языках (см. например или ). Известно, что поведение объекта (а значит метод), обозначенное одним названием может отличаться в соответствии с типом объекта или ситуации (параметров). ООП языки учитывают это как принцип полиморфизма, который кратко описывается через выражение "один интерфейс, много обеспечений". Другие принципы ООП наследование и инкапсуляция связаны как с методами, так и с атрибутами. Наследование было уже рассмотрено. Принцип инкапсуляции в ОРСУБД имеет иной оттенок. Даже продвинутые Oracle 9i и IBM DB2 V8 не учитывают степень инкапсуляции через PUBLIC, PRIVATE и PROTECTED как Java или С++. Инкапсуляция в ОРСУБД сводится к замене атрибута на метод, то есть к использованию виртуальных атрибутов. Например, вместо атрибута price может быть использован метод getPrice(). В последующем обсуждении принципы ООП демонстрируются через Oracle SQL и Java/Zigzag.



SQL представление



Ниже, SQL пример создает таблицу "equipments" абстрактного типа "Equipment". Реально строка таблицы "equipments" может быть объектом либо подтипа "Platform" либо "Engine". Каждый подтип определяет уникальный getPrice() метод.

CREATE TYPE Equipment AS OBJECT ( name VARCHAR2(24), NOT INSTANTIABLE MEMBER FUNCTION getPrice() RETURN NUMBER ) NOT INSTANTIABLE NOT FINAL; CREATE TYPE Platform UNDER Equipment ( size NUMBER, OVERRIDING MEMBER FUNCTION getPrice() RETURN NUMBER ); CREATE TYPE BODY Platform AS MEMBER FUNCTION getPrice() IS BEGIN RETURN size * 6 END getPrice; END; CREATE TYPE Engine UNDER Equipment ( power NUMBER, OVERRIDING MEMBER FUNCTION getPrice() RETURN NUMBER ); CREATE TYPE BODY Engine AS MEMBER FUNCTION getPrice() IS BEGIN RETURN 40 + power * 5 END getPrice; END;

CREATE TABLE equipments OF Equipment; INSERT INTO equipments VALUES (Platform('Tower X04', 4)); INSERT INTO equipments VALUES (Engine('Ford U14', 14)); SELECT name, getPrice() price FROM equipments;


Содержание  Назад  Вперед