МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Объектно-ориентированная СУБД (прототип)

    Данные состояния объекта, входные параметры операции, системные

    объекты, а также все объекты, обладающие определенным поведением, если это

    поведение является объектом, над которым выполняется операция.

    Воздействие операции

    Все воздействия любой операции на объекте, попадают под одну из

    четырех категорий: запрос, создание, модификация, удаление. Для каждой

    операции на объекте определяются соответствующие множества.

    Множество запросов QS(opi(O)) определяется рекурсивно как QS(opi(O)) =

    LocalQS(opi(O)) ( GlobalQS(opi(O)), где

    . LocalQS = (, если нет собственных ivj из O "запрошенных" операцией

    opi. {O}, иначе.

    . GlobalQS =

    Ogq .

    Аналогично определяются можества создания модификации и удаления

    операции opi на объекте O.

    Множество замен определяется как объединение множеств создания,

    модификации и удаления. Конфликт операций – выполнение одного из следующих

    условий:

    1. US(opi(O)) ( US(opj(O')) ( (

    2. QS(opi(O)) ( US(opj(O')) ( (

    3. US(opi(O)) ( QS(opj(O')) ( (

    Пользовательские транзакции можно рассматривать как операции над

    специальным объектом базы данных.

    Пользовательские операции могут быть разбиты на ряд шагов, каждый из

    которых выполняет некоторую логическую единицу работы. Шаги эти также можно

    считать едиными операциями. Такое разбиение позволяет ввести понятие точки

    разрыва. Точка разрыва ставится между двумя шагами на одном уровне любой

    операции.

    Объектно-ориентированное расписание

    Для увеличения производительности СУБД, некоторые операции могут

    взаимодействовать друг с другом в базе данных. Некоторые из этих операций

    могут выполняться на одном объекте. Совместное выполнение многих операций

    (псевдопараллельность) может приводить к произвольному чередованию операций

    (или их шагов). Порядок чередования называется объектно-ориентированным

    расписанием. Так как "пользовательские транзакции" являются только

    операциями на специальном объекте, ОО-расписание можно определить на этом

    объекте как пару (S,= 1- > ;

    [20 WORD VCTR CHAN] [каналы. Начиная с 5-го]

    VAR NCHAN [Номер текущего канала]

    : !NCHAN ! NCHAN ;

    5 VALUE NBASECH [Первый не базовый канал]

    : GETDATA NCHAN 10 * + CHDATA ;

    : PUTDATA NCHAN 10 * + ! CHDATA ;

    [Размер заголовка блока в байтах]

    FIX VAR HSIZE 10 ! HSIZE

    : HSIZE+ HSIZE + ;

    [Pred, Next, BusyLen, Len]

    1 *4 VALUE ctfPREDADDR

    [$M4] [как самодостаточный]

    0 VALUE ctLOWCH [Нижний канал.]

    [0=Оперативная/1=Дисковая память/2=Журнал/-1=свободен]

    1 VALUE ctTEKADR [Логический адрес внутри участка (по данным)]

    2 VALUE ctBUSYLEN [Длина фрагмента, занятая данными]

    3 VALUE ctLEN [Максимальная допустимая длина данных фрагмента]

    4 VALUE ctTEKADR0 [=TEKADR, когда TEKADR стоит на нулевом байте данных

    фрагм]

    5 VALUE ctNEXTADDR [Адрес начала заголовка следующего фрагмента (пф)]

    6 VALUE ctPREDADDR [Адрес начала заголовка предыдущего фрагмента (пф)]

    7 VALUE ctSYNCADDR [Адрес начала заголовка фрагмента (пф)]

    8 VALUE ctCHGCTX [признак изменения контекста]

    9 VALUE ct1STLONG [Первое число в канале]

    [в начальном блоке в начальном слове данных лежит адрес начала данных]

    : LOWCH ctLOWCH GETDATA ; : !LOWCH ctLOWCH PUTDATA ;

    : TEKADR ctTEKADR GETDATA ; : !TEKADR ctTEKADR PUTDATA ;

    : TEKADR0 ctTEKADR0 GETDATA ; : !TEKADR0 ctTEKADR0 PUTDATA ;

    : TEKADR++ TEKADR 1+ !TEKADR ; : !+TEKADR TEKADR + !TEKADR ;

    : BUSYLEN ctBUSYLEN GETDATA ; : !BUSYLEN ctBUSYLEN PUTDATA ;

    : LEN ctLEN GETDATA ; : !LEN ctLEN PUTDATA ;

    : NEXTADDR ctNEXTADDR GETDATA ; : !NEXTADDR ctNEXTADDR PUTDATA ;

    : PREDADDR ctPREDADDR GETDATA ; : !PREDADDR ctPREDADDR PUTDATA ;

    : SYNCADDR ctSYNCADDR GETDATA ; : !SYNCADDR ctSYNCADDR PUTDATA ;

    : CHGCTX ctCHGCTX GETDATA ; : !CHGCTX ctCHGCTX PUTDATA ;

    : FSTLONG ct1STLONG GETDATA ; : !FSTLONG ct1STLONG PUTDATA ;

    TRAP NOMEMORY NOMEMORY#

    : NOMEMORY# ."

    No free memory" ;

    TRAP OUTDATA OUTDATA#

    : OUTDATA# ."

    Out of data. " ;

    TRAP OUTMEM OUTMEM#

    : OUTMEM# ."

    Out of memory. " ;

    TRAP UNKCH UNKCH#

    : UNKCH# ."

    Unknown primitive channel:" NCHAN .D CR ;

    TRAP O_NOTFND NOTFND#

    : NOTFND# ."

    Object not found. OID=" . CR ;

    [*** Информация по каналу ***]

    : IC CR

    ." NCHAN=" NCHAN .D SP ." LOWCH=" LOWCH .D CR

    ."SYNCADDR=" SYNCADDR .D SP ."PREDADDR=" PREDADDR .D SP ."NEXTADDR="

    NEXTADDR .D CR

    ." BUSYLEN=" BUSYLEN .D SP ." LEN=" LEN .D CR

    ." TEKADR0=" TEKADR0 .D SP ." TEKADR=" TEKADR .D CR ;

    CHANNEL DATACH "DATA." CONNECT DATACH

    7.3 Менеджер виртуальной памяти

    PROGRAM $M2

    B16 [физическая организация памяти]

    [вычисление физического адреса и номера базового канала]

    :: : POSIX [addr(i)] NCHAN C NBASECH < BR+ LEAVE [addr nchan] D

    GOTO DELTA2 S( NCHAN ) TOLOW POSIX [addr(i-1)] ;

    :: : TOLOW LOWCH !NCHAN ;

    [Пересчет адреса в адрес нижнего уровня: TEKADR(i) -> TEKADR(i-1)]

    :: : DELTA2 SYNCADDR HSIZE + TEKADR TEKADR0 - + ;

    :: : IBS EON OUTDATA OUTDATA# LAST?

    TEKADR POSIX TEKADR++ S( NCHAN ) !NCHAN BSGOTO

    NCHAN BR 0 IBS0 1 IBS1 [2 IBS2] ELSE UNKCH ;

    :: : OBS EON OUTDATA OUTDATA# LAST?

    TEKADR POSIX TEKADR++ S( NCHAN ) !NCHAN BSGOTO

    NCHAN BR 0 OBS0 1 OBS1 [2 OBS2] ELSE UNKCH ;

    : LAST? TEKADR BUSYLEN TEKADR0 + = IF0 LEAVE NEXTBLK ;

    [переход для базового канала ]

    : BSGOTO [ADDR] NCHAN BR 0 BSGOTO0 1 BSGOTO1 [2 BSGOTO2] ELSE UNKCH ;

    : BSGOTO0 !TEKADR ;

    : BSGOTO1 C !TEKADR HSIZE+ SPOS DATACH ;

    [ : BSGOTO2 C !TEKADR HSIZE+ SPOS JOURCH ;]

    0 %IF

    : ADDR [PARAGRAF OFFSET] + [address] ; [Сейчас пгф=1 байту]

    [Для файлов можно сделать неск. файлов и распределить по ним пространство]

    %FI

    : IBS0 TEKADR HSIZE+ MEMORY &0FF TEKADR++ ;

    : IBS1 IB DATACH &0FF TEKADR++ ;

    [: IBS2 IB JOURCH &0FF TEKADR++ ;]

    : OBS0 &0FF TEKADR HSIZE+ ! MEMORY TEKADR++ ;

    : OBS1 &0FF OB DATACH TEKADR++ ; [Запись байта]

    [: OBS2 &0FF OB JOURCH TEKADR++ ;] [Запись байта]

    :: : GOTO NCHAN NBASECH < BR+ BSGOTO VGOTO ;

    : VGOTO TEKADR - @GOTO ;

    [Переход по смещению]

    :: : @GOTO C BRS @GOTO- D @GOTO+ ;

    : @GOTO+ DO @GOTO1+ ;

    : @GOTO- NEG DO @GOTO1- ;

    : @GOTO1+

    EON OUTDATA OUTDATA#

    TEKADR TEKADR0 BUSYLEN + =

    IF+ NEXTBLK TEKADR 1+ !TEKADR ;

    : @GOTO1-

    EON OUTDATA OUTDATA#

    TEKADR TEKADR0 =

    IF+ PREDBLK TEKADR 1- !TEKADR ;

    : NEXTBLK CHGCTX IF+ SCTX NEXTADDR NOEXIST? !SYNCADDR RELCTX

    TEKADR !TEKADR0 ;

    : NOEXIST? [ADDR] C -1 = IF+ OUTDATA [ADDR] ;

    [Pred, Next, BusyLen, Len]

    :: : LCTX' [UPCH] PUSH TEKADR ILS ILS ILS ILS POP

    NCHAN E2 !NCHAN !LOWCH !LEN !BUSYLEN !NEXTADDR !PREDADDR !SYNCADDR

    0 !CHGCTX ;

    [Грузить параметры канала]

    :: : LCTX [newch] LCTX' 0 !TEKADR 0 !TEKADR0 ;

    : RELCTX TEKADR0 TEKADR NCHAN SYNCADDR TOLOW GOTO LCTX !TEKADR !TEKADR0

    ;

    : PREDBLK CHGCTX IF+ SCTX PREDADDR NOEXIST? !SYNCADDR RELCTX

    TEKADR BUSYLEN - !TEKADR0 ;

    : IBSC [CHAN] S( NCHAN ) !NCHAN IBS ;

    : ILSC S( NCHAN ) !NCHAN ILS ;

    : OBSC [N CHAN] S( NCHAN ) !NCHAN OBS ;

    : IOBSCC [SRC DST] C2 IBSC C2 OBSC ;

    : DO_IOBSCC [SRC_CH DST_CH N] S( NCHAN )

    C3 !NCHAN 0 GOTO DO IOBSCC [SRC DST] ;

    : IWS IBS IBS SWB &0 ;

    : ILS IWS IWS SETHI ; [SWW &0]

    : OWS C OBS SWB OBS ;

    : OLS C OWS SWW OWS ;

    [Перейти к конечному блоку]

    : GOTOENDBK NEXTADDR -1 = EX+ BUSYLEN TEKADR0 +

    NEXTADDR !SYNCADDR RELCTX C !TEKADR0 !TEKADR ;

    : GOBOTTOM RP GOTOENDBK BUSYLEN TEKADR0 + GOTO ;

    : LENVMEM GOBOTTOM TEKADR [LEN] ; [длина виртуальной памяти]

    : LASTADDR SYNCADDR LEN + HSIZE+ ;

    : OBS-0 NCHAN BR 0 OBS00 1 OBS01 [2 OBS02] ELSE OBS0N ;

    : OBS00 0 OBS0 ; : OBS01 0 OBS1 ; [: OBS02 0 OBS2 ;] : OBS0N 0 OBS ;

    [Спецификация: Размер увеличивается на N байт. Если это невозможно,

    возникает исключительная ситуация NOMEMORY.

    После работы мы стоим в том же канале в начале выделенного пространства.

    ]

    : UPSIZE [N] GOBOTTOM TEKADR E2 UPSIZE' GOTO [] ;

    : UPSIZE' [N] GOBOTTOM LEN BUSYLEN - CALCOST [HARD SOFT] UPSIZEI

    C BR0 D UPSIZEO ;

    : CALCOST [N FREE] C2C2 ] UPSIZE' ;

    : USON1 S( NCHAN ) TOLOW BUSYLEN = BR+ USON_ADD USON_NEW ;

    [Расширение увеличением длины фрагмента]

    : USON_ADD C2 [N SYNCADDR N] UPSIZE' C BUSYLEN E2 - HSIZE - E2

    [N LEN SYNCADDR] 3 *4 + GOTO OLS [N] [UPSIZEI] ;

    [Расширение созданием нового фрагмента]

    : USON_NEW C2 [N SYNCADDR N] [GOBOTTOM] C HSIZE+ UPSIZE'

    [N SYNCADDR N] C2 -1 0 C4 TEKADR PUSH WRITECTX D 4+ GOTO POP OLS [N]

    ;

    : WRITECTX [PRED NEXT BUSY LEN] C4 OLS C3 OLS C2 OLS C OLS DD DD ;

    FIX VAR UPCONST 10 ! UPCONST [Этому числу байт кратно увеличение]

    [Увеличение размера нижнего уровня]

    [увеличение физического размера этого уровня]

    : SCTX CHGCTX IF0 LEAVE 0 !CHGCTX NCHAN BR 0 NOP 1 SCTX1 [2 SCTX2]

    3 NOP 4 NOP ELSE SCTXN ;

    : SCTXN TEKADR NCHAN LEN BUSYLEN NEXTADDR

    PREDADDR SYNCADDR TOLOW GOTO 4 DO OLS !NCHAN GOTO ;

    : SAVEALL NOP ; [СОХРАНИТЬ ВЕСЬ КАНАЛ НА ПЕРВИЧНОМ УСТРОЙСТВЕ (ИСТОЧНИКЕ)]

    : SCTX1 POS DATACH 8 SPOS DATACH BUSYLEN OL DATACH LEN OL DATACH SPOS

    DATACH ;

    [

    : SCTX2 POS JOURCH 8 SPOS JOURCH BUSYLEN OL JOURCH LEN OL JOURCH SPOS

    JOURCH ;

    ]

    [Новая виртуальная память]

    0 %IF

    : NEWVM [N] TEKADR C2 HSIZE+ UPSIZE GOTO -1 -1 C3 C WRITECTX D ;

    %FI

    : NEWVM [N] C HSIZE+ UPSIZE TEKADR PUSH -1 -1 0 C4 WRITECTX DO OBS-0

    POP [SYNCADR] ;

    : END? NEXTADDR -1 = TEKADR BUSYLEN TEKADR0 + = & ;

    : NEWVM1 [N] C HSIZE+ UPSIZE TEKADR PUSH -1 -1 E3 C WRITECTX WRI_DATA

    POP [SYNCADR] ;

    : LOADCH0 0 !NCHAN 0 !LOWCH 0 !TEKADR 0 !BUSYLEN

    TOTMEMLEN !LEN 0 !TEKADR0 0 !SYNCADDR -1 !NEXTADDR -1 !PREDADDR ;

    [ДЛЯ БАЗОВЫХ КАНАЛОВ LOWCH=NCHAN]

    7.4 Система управления хранением объектов

    PROGRAM $SOMS

    B16

    [СИСТЕМА УПРАВЛЕНИЯ ХРАНЕНИЕМ ОБЪЕКТОВ]

    FIX LONG VAR MAXID

    1 ! MAXID

    : NEWID MAXID !1+ MAXID ;

    : DEFMAXID 6 EL_MAX 1+ ! MAXID ;

    [5 КАНАЛ = ОПЕРАТИВНАЯ ПАМЯТЬ; 6 КАНАЛ = ДИСКОВАЯ ПАМЯТЬ]

    : L_SUHO 0 !NCHAN 0 GOTO 5 LCTX 1 !NCHAN 0 GOTO 6 LCTX ;

    [создание структуры СУХО для ОП]

    [9 -- Размер, занимаемый элементом списка]

    LONG VAR SIZE_EL 8 ! SIZE_EL

    [создать новый объект]

    ACT VAR WRI_DATA

    : M.NEWOBJ [SIZE OID] 0 E2 8 5 X.NEWOBJ [] ;

    : D.NEWOBJ [SIZE OID] 1 E2 8 6 X.NEWOBJ [] ;

    : X.NEWOBJ [SIZE LOWCH OID SIZE_EL DIR_CHAN] C PUSH S( NCHAN ) !NCHAN

    UPSIZE

    [.. OID] OLS [basechan] !NCHAN NEWVM1 [SYNCADDR] POP !NCHAN OLS []

    ;

    :: : M.VIEW 5 !NCHAN CR ."RAM:" VIEW.OBJ' ;

    :: : D.VIEW 6 !NCHAN CR ."HDD:" VIEW.OBJ' ;

    :: : A.VIEW M.VIEW D.VIEW ;

    : IC.VIEW [A L] SHR SHR E2 GOTO DO IC1.V ;

    : IC1.V TEKADR CR .D #> TOB SP SP ILS .D ;

    : VIEW.OBJ' 0 GOTO ILS D [Пропустили длину элемента]

    CR ." OID ADDRESS" RP SHOWPAROBJ ;

    : SHOWPAROBJ END? EX+ ILS C BR0 SPO1 SPO2 ;

    : SPO1 D ILS D ;

    : SPO2 CR .D SP ILS .D SP ;

    : M.DEL [OID] 5 X.DEL ; : D.DEL [OID] 6 X.DEL ;

    : A.DEL [OID] C M.DEL D.DEL ;

    ACT VAR EL_AVAR

    :: : X.DEL [OID NCHAN] EL_FIND [OID 1/0] IF+ EL_DEL D ;

    [найти элемент в списке по ID и встать на след. за OID слово]

    : EL_DEL -4 @GOTO 0 OLS ;

    :: : EL_FIND [OID NCHAN] '' EL_COMPAR ! EL_AVAR EL_PEREBOR ;

    : EL_PEREBOR !NCHAN 0 GOTO ILS D RP EL_FIND0 [OID 1/0] ;

    : EL_FIND0 END? 0 E2 EX+ D ILS C BR0 D EL_AVAR ILS D ;

    : EL_COMPAR [OUR_OID TEK_OID] C2 = C EX+ D ;

    :: : EL_MAX [DIR-NCHAN] 0 E2 '' MAX ! EL_AVAR EL_PEREBOR D [OID] ;

    :: : DB.NEW !1 MAXID WOPEN DATACH

    -1 OL DATACH -1 OL DATACH 14 OL DATACH 14 OL DATACH

    -1 OL DATACH -1 OL DATACH 4 OL DATACH 4 OL DATACH

    8 OL DATACH CLOSE DATACH

    [ WOPEN JOURCH

    -1 OL JOURCH -1 OL JOURCH 14 OL JOURCH 14 OL JOURCH

    -1 OL JOURCH -1 OL JOURCH 4 OL JOURCH 4 OL JOURCH

    8 OL JOURCH CLOSE JOURCH ]

    DB.OPEN ;

    : DB.CLOSE CLOSE DATACH [CLOSE JOURCH] ;

    : DB.OPEN -1 !!! CHDATA

    [DATA]

    OPEN DATACH 1 !NCHAN 0 !TEKADR 0 !TEKADR0 1 !LOWCH

    IL DATACH !PREDADDR IL DATACH !NEXTADDR 0 !SYNCADDR

    IL DATACH !BUSYLEN IL DATACH !LEN 6 LCTX

    [RAM]

    0 !NCHAN 0 !LOWCH 0 !TEKADR 0 !BUSYLEN

    TOTMEMLEN !LEN 0 !TEKADR0 0 !SYNCADDR -1 !NEXTADDR -1 !PREDADDR

    '' WRI_8OLS ! WRI_DATA [длина элемента каталога]

    4 [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

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

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

    атрибут «премия»

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

    аргументом True

    Примечание 1: В операция селекции и проекции имеется некоторое отличие

    от операций реляционной алгебры. Например, операция проекции, выбирающая

    сумму, возвращает множество сумм. На самом деле множество сумм содержит не

    суммы, а идентификаторы атомарных объектов, хранящих суммы. Поэтому

    множество может содержать несколько одинаковых сумм и не теряется связь

    данных с оригинальным объектом-хранителем (счетом).

    Примечание 2: Оба изменения происходят в пределах одной транзакции,

    поскольку эти действия являются экземплярами одного множества. Оба порядка

    действий: «сначала умножить, потом – пометить» и «Сначала пометить, потом –

    умножить» равноправны, поскольку действия хранятся в множестве. Если

    порядок важен, т.е. второе воздействие использует результат первого, то

    необходимо использовать не множество, а последовательность.

    Операции над сложными структурами транзитивно распространяются на

    операции над компонентами по алгоритмам, описанным выше в разделе

    «Уточнение методов решения задачи». Таким образом, нет нужды во многих

    случаях писать циклы, обработку вложенных структур. Использование

    итераторов позволяет создавать собственный алгоритм выбора элементов для

    обработки циклов.

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

    В прошлые годы много внимания уделялось вопросу трудоемкости

    разработки программного обеспечения. Возросшая сложность программ и объемы

    используемых данных не позволяют начать разрабатывать новый продукт «с

    нуля». Теперь вперед выходят технологии, позволяющие создавать легко

    сопровождаемые программы.

    Но реляционные базы данных, скорее всего, по-прежнему останутся в

    качестве недорогих средств разработки приложений и, во многих случаях,

    естественных средств представления предметной области, подобно радио и

    кино, которых не вытеснило телевидение.

    10. Литература

    [1] О.И.Авен Я.А.Коган “Управление вычислительным процессом” М.

    Энергия 1978

    [2] А.М.Андреев Д.В.Березкин, Ю.А.Кантонистов «Среда и хранилище:

    ООБД»

    Мир ПК №4 1998 (стр 74-81)

    [3] М. Аткинсон, Ф. Бансилон и др. «Манифест систем объектно-

    ориентированных баз данных», СУБД № 4 1995

    [4] В.Бобров "Объектно-ориентированные базы данных, мультимедийные

    типы данных и их обработка" Read.Me №4, 1996

    [5] Н.П.Брусенцов, В.Б.Захаров и др. «Развиваемый адаптивный язык РАЯ

    диалоговой системы программирования ДССП» Москва МГУ 1987

    [6] Бурцев А.А "Параллельное программирование. Учебное пособие по

    курсу "Операционные системы" - Обнинск : ИАТЭ, 1994 - 90 с.

    [7] Бурцев А.А. «Сопрограммный механизм в ДССП как основа для

    построения мониторов параллельных процессов»

    [8] Г.Буч «Объектно-ориентированное проектирование (с примерами

    применения)» М.Конкорд 1992

    [9] К.Дж.Дейт «Введение в системы баз данных» 1998 Киев Диалектика

    [10] Мутушев Д.М. Филиппов В.И. "Объектно-ориентированные базы данных"

    Программирование. - М., 1995 №6 стр. 59-76

    [11] В.Ремеев «FoxPro. Версия 2.5 для MS-DOS. Описание команд и

    функций» М. «Мистраль» 1994

    [12]СУБД № 2 1995 «Системы баз данных третьего поколения: Манифест»

    [13]СУБД № 1 1996 «Стандарт систем управления объектными базами данных

    ODMG-93: краткий обзор и оценка состояния» Л.А.Калиниченко

    [14]СУБД № 1 1996 «ТРЕТИЙ МАНИФЕСТ» Х.Дарвин, К.Дэйт

    [15]СУБД № 5-6 1996 “Введение в СУБД часть 9” стр. 136-153 С.Д.

    Кузнецов

    [16]Data & Knowledge Engineeging №15 (1995) стр 169-183 “Selection of

    object surrogates to support clustering” Jukka Teuhola

    [17] Data & Knowledge Engineering. Amsterdam 1996 Том 18 №1 стр.29-54

    "Unifying data, behaviours, and messages in object-oriented databases"

    Sylvia L. Osborn, Li Yu

    [18] IEEE Transactions On Knowledge And Data Engineering Том 7 №2

    Апрель 1995 стр. 274-292 «Security Constraint Processing in a Multilevel

    Secure Distributed Database Management System» B.Thuraisingham, W.Ford

    [19] Journal of systems and software - N.Y., 1996 Том 35 №3 стр. 169-

    183

    Shah P. Wong J. "Concurency control in a object-oriented data base

    system"

    Документы в Internet (http://www.citforum.ru):

    [20] В. Индриков, АО ВЕСТЬ “Объектно-ориентированный подход и

    современные мониторы транзакций”

    [21] Л.Калиниченко “Архитектуры и технологии разработки

    интероперабельных систем”, Институт проблем информатики РАН

    [22] С.Д. Кузнецов "Основы современных баз данных"

    [23] С. Кузнецов “Безопасность и целостность, или Худший враг себе -

    это ты сам”

    Страницы: 1, 2, 3, 4, 5


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.