45997 (Объектно-ориентированная СУБД (прототип)), страница 9

2016-07-31СтудИзба

Описание файла

Документ из архива "Объектно-ориентированная СУБД (прототип)", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45997"

Текст 9 страницы из документа "45997"

DD 1+ ;

: PriNCH [NOID NCH] C2C2 Channels 4 TON SP SP 1+ [NOID NCH+1] ;

7.6 Работа с базовыми объектами

PROGRAM $SYSOBJS

B16

LONG VAR ADRSTR LONG VAR LENSTR

0 VALUE N_OID 4 VALUE N_BHR 8 VALUE N_KH

0C VALUE N_TRC 10 VALUE N_VAL 14 VALUE N_HIS

13 VALUE JRECLEN

: G_OID N_OID GOTO ; : W_OID G_OID OLS ;

: G_BHR N_BHR GOTO ; : W_BHR G_BHR OLS ;

: G_KH N_KH GOTO ; : W_KH G_KH OLS ;

: G_TRC N_TRC GOTO ; : W_TRC G_TRC OLS ;

: G_VAL N_VAL GOTO ; : W_VAL G_VAL OLS ;

: G_HIS N_HIS GOTO ; : W_HIS G_HIS OLS ;

18 VALUE SZ_HDROBJ

: W_NULLBLK -1 OLS -1 OLS 0 OLS 0 OLS ;

[Описание системных объектов]

ACT VAR DATWR

LONG VAR OIDV

LONG VAR VALINT

[**** ROOT ****]

SZ_HDROBJ HSIZE+ HSIZE+ 4+ VALUE SIZE_ROOT

:: : CLONE_ROOT '' DATWRROOT ! DATWR NEWOBJ1 ;

:: : CLONE_INT ! VALINT '' DATWRINT ! DATWR NEWOBJ1 ;

:: : CLONE_SET 4 CLONE_INT ;

:: : CLONE_SEQ 4 CLONE_INT ;

:: : CLONE_AGG 0C CLONE_INT ;

:: : CLONE_STR [A L] ! LENSTR ! ADRSTR '' DATWRSTR ! DATWR

LENSTR SIZE_ROOT + 4- ! SIZE_X NEWOBJ3 ;

:: : SET_BHR [OID_BHR OID] N_BHR E2 SET_X1 ;

:: : SET_KH [OID_KH OID] N_KH E2 SET_X1 ;

: SET_X1 [ADR OID] C2C2 N_TRSC E2 NEWJREC

C LOADOBJ FINDOID C BR- DD SET_X11 ;

: SET_X11 PrioQueNUM 2 Channels !NCHAN GOTO OLS ;

:: : SET_INT [int oid] C HIPRIO PUSH ! VALINT 4 '' OLSI POP NEWDREC ;

: OLSI VALINT OLS ;

:: : GET_INT [OID] TODATA ILS ;

:: : TODATA [OID] C LOADOBJ C HIPRIO FINDOID PrioQueNUM

3 Channels !NCHAN 0 GOTO ;

:: : SET_STR [A L OID] C HIPRIO

PUSH ! LENSTR ! ADRSTR LENSTR '' OLSS POP NEWDREC ;

: OLSS ADRSTR LENSTR DO DWS1 D ;

ACT VAR BYTE_STR

:: : PRINT_STR '' PRIS ! BYTE_STR ACCESS_STR ;

:: : COPY2BUF_STR '' C2BUF ! BYTE_STR ACCESS_STR ;

:: : ACCESS_STR [OID] TODATA LENVMEM 0 GOTO DO BYTE_STR ;

: PRIS IBS TOB ;

: C2BUF IBS ABUF !TB !1+ ABUF ;

: DD_ROOT

OIDV OLS 0 OLS 0 OLS 0 OLS SZ_HDROBJ HSIZE+ OLS [val]

SZ_HDROBJ OLS [his]

W_NULLBLK [W_NULLBLK] DATWR ;

LONG VAR SIZE_X

: DATWRROOT -1 OLS -1 OLS 0 OLS 4 OLS 0 OLS ;

: DATWRINT -1 OLS -1 OLS 4 OLS 4 OLS VALINT OLS ;

: DATWRSTR -1 OLS -1 OLS LENSTR OLS LENSTR OLS ADRSTR LENSTR DO DWS1 D ;

: DWS1 [A] C @B OBS 1+ ;

: NEWOBJ1 [] SIZE_ROOT ! SIZE_X NEWOBJ3 ;

: NEWOBJ3 '' DD_ROOT ! WRI_DATA

NEWID C ! OIDV SIZE_X C2 D.NEWOBJ [OID] ;

9 VALUE LCH

LCH LONG VCTR CLONEHDR VAR DATCH LONG VAR LENVMEM1

:: : CLONE [OID] C HIPRIO

C LOADOBJ FINDOID PrioQueNUM C PUSH 2 Channels !NCHAN 0 GOTO

CLONE1 []

'' CC_ROOT ! WRI_DATA NEWID C 0 ! CLONEHDR SZ_HDROBJ HSIZE+ C2 D.NEWOBJ

[OID] POP 3 Channels C ! DATCH !NCHAN LENVMEM C ! LENVMEM1

C2 [OID_NEW LEN OID_NEW] CLONE_DATA [OID_NEW] ;

: CLONE1

ILS 1 ! CLONEHDR [BHR] ILS 2 ! CLONEHDR [KH]

ILS 3 ! CLONEHDR [TRC] 0 4 ! CLONEHDR

SZ_HDROBJ 5 ! CLONEHDR -1 6 ! CLONEHDR

-1 7 ! CLONEHDR 0 8 ! CLONEHDR

0 9 ! CLONEHDR ;

: CCR1 [N] C CLONEHDR OLS 1+ ;

: CC_ROOT 0 LCH 1+ DO CCR1 D ;

: CLONE_DATA [LEN OID] '' COPY_DATA E2 NEWDREC [] ;

: COPY_DATA [] DATCH NCHAN LENVMEM1 DO_IOBSCC DD ;

:: 0 VALUE N_TRSC

[Запись новых данных, запись в журнал]

: NEWDREC [SIZED PROC OID] N_VAL N_TRSC C3 NEWJREC FINDOID

PrioQueNUM [SIZE PROC N] C PUSH

2 Channels !NCHAN

[SIZED PROC] ! WRI_DATA NEWVM1 G_VAL C OLS [ADR_DATA]

[перечитать канал данных]

GOTO POP 3 Channels LCTX [] ;

[новая запись в журнал. На вх: номер транз. и адрес из заголовка]

: NEWJREC [addr_hdr TRANS OID] C LOADOBJ FINDOID PrioQueNUM

[. TRANS N] C PUSH 4 Channels

!NCHAN JRECLEN UPSIZE OLS POP NCHAN PUSH 2 Channels !NCHAN

C GOTO ILS POP !NCHAN

E2 OWS OLS W_DATIME [] ;

B10

[Запись текущего времени]

: W_DATIME 1979 OWS 12 OBS 31 OBS TMGET TMS ;

: TMS [num] N2T GBR E2 GBR E2 GBR E2 OBS OBS OBS 100 * OWS ;

B16

[просмотр журнала объекта]

[Переключиться на журнал]

: OBJ.J [OID]

C LOADOBJ FINDOID PrioQueNUM 4 Channels !NCHAN ;

: JVIEW [oid] CR ."Updated data:"

OBJ.J LENVMEM JRECLEN / D 0 GOTO DO JVIEW1 ;

: JVIEW1 CR ."Trans= " ILS .D SP

IWS BR N_BHR ."Behav.=" N_VAL ."AddrVal=" N_KH ."Knowhow="

ELSE ."?????? =" ILS SP .D SP JDATAV1 ;

: JDATAV1 S( BASE@ ) B10 IWS IBS IBS 2 TON #. TOB 2 TON #. TOB 4 TON

SP SP #: POS2 #: POS2 #. POS2 # IWS 4 TON TOB ;

: POS2 [B] IBS 2 TON TOB ;

[Определить размер объекта в памяти = заголовок + данные]

: SIZEMEMOBJ [N] C PrioQueOID BR0 T0 SMEMO1 [0/size] ;

: SMEMO1 3 Channels !NCHAN LENVMEM HSIZE+ HSIZE+ SZ_HDROBJ + [size] ;

7.7 Выполнение действий

PROGRAM $M3

[Выполнение действий (knowhow)]

FIX 1000 BYTE VCTR BUFTXT [Буфер для текста действий]

FIX LONG VAR ABUF

: BEGABUF 0 ' BUFTXT ! ABUF ;

: RUNCMD [OID_KH] BEGABUF "KH$" S2BUF N2BUF ABUF BEGABUF ABUF E2 C2 -

TEXEC ;

: MAKECMD [OID_KH] BEGABUF ": KH$" S2BUF C N2BUF # ABUF !TB !1+ ABUF

COPY2BUF_STR " ; " S2BUF

ABUF BEGABUF ABUF E2 C2 - TEXEC ;

: S2BUF [A L] DO S2BUF1 D ;

: S2BUF1 C @B ABUF !TB !1+ ABUF 1+ ;

: N2BUF [N] 8 DO CTN-SB D 8 [C1 .. Cn n] DO CTB ;

: CTN-SB [N] C 0F & #0 + E2 -4 SHT [C N'] ;

: CTB ABUF !TB !1+ ABUF ;

LONG VAR OIDK

: NEW_VOC "PROGRAM $KH_VOC" TEXEC ;

: RUN_KH [OID_KH] NEW_VOC C MAKECMD RUNCMD ;

7.8 Кэширование объектов

PROGRAM $LS_CASH

[ Каналы: 1 - Header M.Obj 2 - Header D.Obj 3 - M.Data 4 - D.History ]

[Считаем, что все объекты -- стабильные]

: LOADOBJ [OID] C FINDOID [искали в кэше] C BR- LOADOBJ-1 DD ;

: LOADOBJ-1 D [OID] [Ищем в каталоге БД объект] [C] LOADOBJ1 [LOADOBJ2]

LenPrioQue 1- HIPRIO1 [] ;

: 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.

END TRANSACTION

9.3 Объектно-ориентированные базы данных

Позволяют хранить данные произвольной степени сложности (детали САПР) и вида (звук, изображение). Позволяют программировать на уровне инфологической модели, т.е. исчезают заботы о нормализации. Новые алгоритмы могут работать одновременно со старыми, обеспечивая преемственность. Например, если бухгалтерские проводки в следующем году проходят по новой схеме, переход на нужную схему в зависимости от даты СУБД выполнит сама.

Реализация для ООБД на формальном языке:

{«*»(1.1) ~> summa(Client.num_sch=Schet.num_sch(Schet, Client)), «:=»(True) ~> Premia(Client)}

Порядок действий:

  1. Умножение счетов на 1.1

    1. Операция селекции выбирает множество счетов

    2. Операция проекции выбирает интересующую часть счета – сумму

    3. На суммы посылается операция «умножить» с аргументом 1.1

  1. Пометка клиентов, как получивших премию

    1. Операция проекции выделяет интересующую часть информации о клиенте – атрибут «премия»

    2. Операция присвоения посылается на выделенный атрибут «премия» с аргументом True

Примечание 1: В операция селекции и проекции имеется некоторое отличие от операций реляционной алгебры. Например, операция проекции, выбирающая сумму, возвращает множество сумм. На самом деле множество сумм содержит не суммы, а иденти­фи­ка­торы атомарных объектов, хранящих суммы. Поэтому множество может содержать не­сколько одинаковых сумм и не теряется связь данных с оригинальным объектом-хранителем (счетом).

Примечание 2: Оба изменения происходят в пределах одной транзакции, посколь­ку эти действия являются экземплярами одного множества. Оба порядка дейст­вий: «сначала умножить, потом – пометить» и «Сначала пометить, потом – умножить» равно­правны, поскольку действия хранятся в множестве. Если порядок ва­жен, т.е. второе воздействие использует результат первого, то необходимо исполь­зовать не множество, а после­дова­тельность.

Операции над сложными структурами транзитивно распространяются на опера­ции над компонентами по алгоритмам, описанным выше в разделе «Уточнение методов решения задачи». Таким образом, нет нужды во многих случаях писать циклы, обработку вло­жен­ных структур. Использование итераторов позволяет создавать собст­венный алго­ритм выбора элементов для обработки циклов.

9.4 Будущее применения различных баз данных

В прошлые годы много внимания уделялось вопросу трудоемкости разработки програм­много обеспечения. Возросшая сложность программ и объемы используемых данных не позволяют начать разрабатывать новый продукт «с нуля». Теперь вперед выходят технологии, позволяющие создавать легко сопровождаемые программы.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее