Разработка прототипа системы управления объектно-ориентированной базой данныхРефераты >> Программирование и компьютеры >> Разработка прототипа системы управления объектно-ориентированной базой данных
: LOADOBJ1 6 LOADOBJ3 ;
[открыть дисковый объект в кэше]
: LOADOBJ3 [OID NDIRCH] EL_FIND [OID 1/0] IF0 O_NOTFND [Нет такого объекта]
C LenPrioQue 1- ! PrioQueOID [Занесли в кэш идентификатор объекта]
ILS [OID ADDR_MEM] [получили адрес размещения в дисковой памяти]
LenPrioQue 1- PrioQueNUM
[получили номер отведенной для работы с объектом группы каналов]
[OID ADDR_MEM NUM]
C 2 Channels [OID ADDR_MEM NUM CHANOBJ]
NCHAN NBASECH - !NCHAN [получили номер базового канала]
C3 GOTO LCTX [OID ADDR_MEM NUM] [загрузили заголовок дискового объекта]
E2D [O N]
C 4 Channels [OID NUM CHANHIST] [получили канал для истории]
G_HIS ILS
[O N C HISTORY] [HISTORY д.б. <>0]
GOTO NCHAN E2 LCTX [Открыли историю в канале] !NCHAN [O N]
C 3 Channels G_VAL ILS GOTO LCTX [временно открыли канал данных
напрямую с жесткого диска]
[LOADDM]
NOP [Здесь нужно установиться на объект в памяти и канал данных перекл. на него]
DD [] ;
VAR NCHANDAT
VAR NCHANOBJ LONG VAR LENDAT
: COPY_DAT1 [] NCHANOBJ 0 GOTOC [NCHANOBJ] NCHAN 0 GOTO 8 DO_IOBSCC D 14 OLS
0 OLS 10 GOTOC NCHAN 4 DO_IOBSCC DD -1 OLS -1 OLS LENDAT OLS LENDAT OLS
COPY_DAT ;
: GOTOC [NCHAN n] C2 S( NCHAN ) !NCHAN GOTO [NCHAN] ;
: COPY_DAT [] NCHANDAT NCHAN [SRC_CH DST_CH]
C2 !NCHAN LENVMEM [SRC_CH DST_CH LEN] 0 GOTO DO_IOBSCC DD ;
8. Контрольный пример, демонстрирующий возможности технологии
DB.NEW
Создадим объект "Поведение клоуна" для клоуна
[] "Поведение клоуна" CLONE_STR
[oid_str] OIDSET GET_BHR CLONE
[oid_str oid] SET_NAMEOBJ [oid]
Создадим объект "Клоун":
[ ] "Клоун" CLONE_STR
[ oid_str] CLONE_AGG
[ oid_str oid] SET_NAMEOBJ [ oid]
Определим ему поведение
[oid_bhr oid] SET_BHR
Определим в нем поля: X, Y, Цвет
"X" NEWFID SET_NAMEFID [fid] OIDINT "Клоун" NAMEOID AGG+F []
В ДССП можно определить новое слово
: NEWFIELD [ "Имя объекта" "Имя поля"] NEWFID SET_NAMEFID [A L FID]
OIDINT C4C4 NAMEOID AGG+F DD [] ;
"Клоун" "Y" NEWFIELD
"Клоун" "Цвет" NEWFIELD
Создадим методы.
Создать метод "Идти".
"<тело метода "Идти" >" CLONE_STR [oid_kh]
[oid_kh] "Идти" CLONE_STR E2 C2 SET_KH [OID_STRKH]
"Поведение клоуна" NAMEOBJ SET+E
Аналогично создаются другие методы
.
Подготовка для вызова метода по идентификатору:
"Идти" CLONE_STR C "Клоун" NAMEOBJ METHOD? E2 DELOBJ
Подготовка для вызова метода по имени:
"Идти" CLONE_STR
Вызов
[oid] 0 "Клоун" NAMEOBJ [oid_mth 0 oid_obj] SEND
9. Оценка трудоемкости разработки ПО с использованием традиционного и предлагаемого подходов
В этом разделе будет проведен качественный анализ трудоемкости. Это связано, прежде всего, с особенностью языка реализации, отличного от классических ЯВУ.
Далее, в качестве примера, рассматривается следующая задача:
Клиенты имеют счета. Каждый счет увеличить на 10% и после этого пометить пользователя как получившего премию.
9.1 Табличные базы данных с низкоуровневыми операциями доступа
В качестве примера можно привести FoxPro 2.6 [11]. В ней есть недостаточное для обычных нужд подмножество SQL (SELECT, INSERT INTO); обычно взаимодействие с БД происходит с помощью операторов REPLACE, SCATTER, GATHER, SCAN … ENDSCAN и непосредственного присвоения с указанием в качестве префикса поля имени области, в которой открыта таблица. Такие программы практически непереносимы на клиент-серверные технологии, логика программ весьма сложна и приводит при программировании к трудно обнаруживаемым ошибкам. Достоинствами же являются простота реализации языка таких СУБД и малая требовательность к ресурсам.
Программный код обработки (MS FoxPro 2.6):
SELECT CLIENT
SCAN
SELECT SCHET
REPLACE SUMMA WITH SUMMA*1.1 FOR SCHET.NUM_SCH=CLIENT.NUM_SCH
SELECT CLIENT
REPLACE PREMIA WITH .T.
ENDSCAN
9.2 Реляционные базы данных
Реализация языка SQL позволяет работать с базой данных исключительно средствами SQL. Поддерживаются триггеры, отношения между таблицами, хранимые процедуры. Это типичные клиент-серверные СУБД. Управление целостностью данных возлагается на СУБД. Триггеры позволяют вынести практически все проверки из логики программы. Недостатком является необходимость нормализации таблиц, что затрудняет добавление новых таблиц при сопровождении программного средства, а иногда требует перенормализации, что влечет за собой необходимость изменять программный код, а значит, и новые ошибки.
Программный код обработки (MS Visual FoxPro 3.0 и выше):
BEGIN TRANSACTION
UPDATE SCHET SET SUMMA=SUMMA*1.1
WHERE NUM_SCH IN (SELECT NUM_SCH FROM CLIENT)
UPDATE CLIENT SET PREMIA = .T.
ENDTRANSACTION
9.3 Объектно-ориентированные базы данных
Позволяют хранить данные произвольной степени сложности (детали САПР) и вида (звук, изображение). Позволяют программировать на уровне инфологической модели, т.е. исчезают заботы о нормализации. Новые алгоритмы могут работать одновременно со старыми, обеспечивая преемственность. Например, если бухгалтерские проводки в следующем году проходят по новой схеме, переход на нужную схему в зависимости от даты СУБД выполнит сама.
Реализация для ООБД на формальном языке:
{«*»(1.1) ~> psumma(sClient.num_sch=Schet.num_sch(Schet, Client)), «:=»(True) ~> pPremia(Client)}
Порядок действий:
1 Умножение счетов на 1.1
1.1 Операция селекции выбирает множество счетов
1.2 Операция проекции выбирает интересующую часть счета – сумму
1.3 На суммы посылается операция «умножить» с аргументом 1.1
2 Пометка клиентов, как получивших премию
2.1 Операция проекции выделяет интересующую часть информации о клиенте – атрибут «премия»
2.2 Операция присвоения посылается на выделенный атрибут «премия» с аргументом True
Примечание 1: В операция селекции и проекции имеется некоторое отличие от операций реляционной алгебры. Например, операция проекции, выбирающая сумму, возвращает множество сумм. На самом деле множество сумм содержит не суммы, а идентификаторы атомарных объектов, хранящих суммы. Поэтому множество может содержать несколько одинаковых сумм и не теряется связь данных с оригинальным объектом-хранителем (счетом).
Примечание 2: Оба изменения происходят в пределах одной транзакции, поскольку эти действия являются экземплярами одного множества. Оба порядка действий: «сначала умножить, потом – пометить» и «Сначала пометить, потом – умножить» равноправны, поскольку действия хранятся в множестве. Если порядок важен, т.е. второе воздействие использует результат первого, то необходимо использовать не множество, а последовательность.