if<мағына 1>raise<ерекше жағдай 1>;
if< мағына 2>raise<ерекше жағдай 2>;
…
if<выражениеM>raise<ерекше жағдай M>;
ерекше жағдайларды өңдеуші
{ when<ерекше жағдай 1>:<блок1>
when<ерекше жағдай 2>: <block2>
200
…
when<ерекше жағдай N>: <блокN>;}
[finally<блокF>]
Ерекше жағдайлардың өңдеушісі бірнеше әрекеттерді орындай алады,
нақтырақ: (1) басқа қосалқы бағдарламада басқаруды беру; (2) ресур-
старды босату; (3) қате жағдайдың көзін түзету және әрекетті қайта-
лау үшін басқаруды беру; (4) командаға ерекше жағдайларды өңдеуші-
ден кейін басқарудың қайтып келуі, бағдарламалаушы құрылғыға қате
жағдай туралы хабарлағаннан кейін; (5) ерекше жағдайларды өңдеуші-
ге жүгіну және жоғары деңгейдегі туындатушы қосалқы бағдарламаға
қайтып оралу; (6) қатені туындататын, мәліметтерді жіберу; (7) туында-
тушы қосалқы бағдарламаға қайтып оралу.
Бірдей операторды орындаушы бағдарламалардың әртүрлі бөліктері,
оператормен байланысты әртүрлі ерекше жағдайларды өңдеуші болуы
мүмкін Әр түрлі операторларда ерекше жағдайларды жалпы өңдеуші
болуы мүмкін.
Жағдайларды өңдеу алғаш рет PL I қолданылды. ADA, Java, C++ және
Ruby тәрізді көптеген қазіргі замаңғы тілдерге ерекше жағдайларды
қатты өңдеу кіреді.
Мысал 4.18
4.12 суреттегі бағдарламада қатесіз болжамды синтаксисті пайдалану-
мен ерекше жағдайларды өңдеу көрсетілген. Бағдарлама “myfile” фай-
лын ашады, “mystream” сәйкес мәліметтер ағымы, несие картасымен
жұмыс істейтін компания үшін қарыз сомасын анықтау үшін есептеледі.
Бағдарлама, егер де файл табылмаса, қондырылған “file-not-found” ерек-
ше жағдайын береді. Егер де шоттағы қалдық нөлден көп болса, пайда-
ланушылық ерекше жағдай “incorrect_debt” болады. Ерекше жағдай-
лардың бірінші өңдеушісі “Account-filemissing” операторын шығарады,
және шақырушы қосалқы бағдарламаға кері оралады. Ерекше жағдай-
лардың екінші өңдеушісі операторды шағарады, ағымды жабады және
қайта оралады.
subprogram illustrate _ exceptions
integer i;
real deposit, account;
file myfile;
streammystream;
exceptionincorrect _ debt; % пайдаланушымен анықталған, ерекше
жағдай
open _file (myfile, mystream, read);
201
exception-handler {when file-not-found: write (‘Account file missing’);
return }
read (mystream, account);
if(account> 0) raiseincorrect _ debt; % пайдаланушымен анықталған
ерекше жағдайды беру
exception-handler {% пайдаланушымен анықталған ерекше жағдайды
өңдеу
when incorrect _ debt: write ('Incorrect debt'); close (mystream); return;}
close (mystream); return
СУРЕТ 4.12 Ерекше жағдайларды өңдеу мысалы.
4.7 Анықталмаған есептеулер
Анықталмаған есептеулер бағдарламаны орындау кезінде бағдарлама-
ны басқарудың ағымын қамтамассыз етеді. Анықталмаған есептеулер
үшін жалғыз шарт ол соңғы күйінде тапсырманың дұрыс шешімін бе-
руде болып табылады Егер бағдарламаның орындалуы сызбаның әр-
бір түйіні есептуіш жай-күі болатын бағандарды айналып өту мәселесі
ретінде қарастырылатын болса, онда программа анықталмаған бола-
ды, егер де біз бастапқы жай-күйінен соңғысына дейін кем дегенде бір
бағыт таба алатын болған жағдайда. Егер соңғы жай-күйі есептеу опера-
торларының орындау тәртібін тәуелді болмаған жағдайда есептеу бөлі-
гі анықталмаған болып табылады. Анықталмаған есептеуді ұстанатын
бағдарламалаудың бірнеше негізгі қасиеттерін ерекшелеуге болады:
1. Арифметикалық өрнектер және логикалық өрнектері операторлары-
ның коммутативтілігі анықталмаған өрнек есептеулерін төменгі деңгей-
де есептеуге ықпалын тигізеді. Анықтамаға сәйкес "Коммутативтілік"
есептеу ретін тәуелді емес. Кейбір операторлар қолдайтын "коммута-
тивтілік" - бұл қосу, көбейту, логикалық ЖӘНЕ, логикалық НЕМЕСЕ
болып табылады. Мысалы егер біз аралық деңгейдегі командалар жиы-
ныны көмегімен 4 + 5 + 3 + 9 өрнегін есептейтін болсақ, сонда оны бір
мезгілде екі санның қосуының бірнеше нұсқасы түрінде көрсетуге бо-
лады. Түпкі нәтиже қосындысы бірдей болады, өйткені қосынды өзінің
сипаты бойынша ассоциативті және коммутативті болып келеді. Осыған
ұқсас, егер біз логикалық (exp1 exp2 exp3) өрнегін есептейтін болсақ,
онда біз нәтижесі өрнек қандай тәртіппен есептегенімізге қарамастан
шешімі бірдей болады, себебі "логикалық және" және "логикалық неме-
се" - бұл ассоциативті және коммутативті операторлары.
2. Егер уS блогы жадын у S ⨄ (у S ⨄ σ2S) түріндегі үндеспеген бірлестік-
тер жиындарына бөлуге болса, онда C1 ; C2 жиындарының бірізділігі
орындалады, бұл жерде C1 σ1 – де орындалады және C2 σ2S – кезінде
202
орындалады, ал σΙ C1 және C2 кезінде ардайым тұрақты болады. Со-
нымен қатар σ1 σ2S – ге тәуелді емес, оларға деген әсер олардың ара-
сына әсерін тигізбейді. C1 командасынан кейін σ S σ’ S-тің жаңа болк
жадында көрініс табады, ал C2 командасынан кейін σ2S σ’2S –тің жаңа
болк жадында көрініс табады. Осылайша, жалпы C1; C2 командалар
тәртібінің ықпалы σ’S = σ S ⨄ (у’ S ⨄ у’2S) жаңа блок жадын кұрайды.
3. Егер біз командалар тәртібін өзгертетін болсақ, онда олар у’S = уΙ ⨄
(у’2 ⨄ у’ S) секілді түпкі шешімін береді. Мысалға, егер біз Х және Y
псевдоним болмайтын иемденуі x = 4; Y = 5 болатын екі команда алсақ,
онда олар әртүрлі екі жады уяшықтарын өзгертіп, кез келген тәртіппен
орындалуы мүмкін.
4. Егер (then Else If) шартты оператор секілді командалық таңдауды ал-
сақ, және оны барлық шартты операторлары байланыстан босатылатын
формада және командалар ағымынан құралған күйде жазсақ, және есеп-
теу үшін тең дәрежеде мүмкіндікте деп қарастырсақ, онда командалар-
дың орындалу ретінің өзгерісі соңғы нәтижеге әсер етпейді.
5. Дейкстрдің атақты қоғалған бағдарламалар туралы мақаласында кел-
тірілген мысалды талқылайық:
if (x >= y) smaller = y;
elseif (y >= x) smaller = x;
Жоғарғы коды екі мәннен аз болып табылады және 4.1 кестесінде көр-
сетілгендей семантикалық тең екі кодқа алмастырылуы мүмкін.
Оператор анақталмаған болып табылады, өйткені операторды есеп-
теп, бірдей түпкілікті нәтижже алудың екі әдісі бар. Егер x > y болған
жағдайда бағдарлама келісідей болып есептілінеді: егер бірінші болып
тексерілсе логикалық y >= x орындалмайды, және оператор бірінші бо-
лып есептелінеді. Жалпы жағдайда анықталмаған шартты команданы
келесі абстракттті синтаксис арқылы жазуға болады:
if { <шартты-өрнек1>—→ <команда1>|
< шартты - өрнек 2>—→ <команда2>|
|
< шартты - өрнек n>—→ <командаn>}
Жоғарыда жазылған абстрактілі құрылым басқару командаларының
жиілігіне тәуелді емес, демек (<шартты-өрнекi> → <командаi>) (1 ≤ i
≤N) түріндегі шартты команда бірдей мүмкін дегенді білдіреді. Әрбір
шартты оператор басқасымен ‘|’символымен белгіленетін логикалық
НЕМЕСЕ арқылы байланысады. ‘→’ симболы команданың бір бөлігін
логикалық өрнекті сәтті есептеп болғаннан кейін есептеу керек дегенді
білдіреді. Нәтиже алу үшін кем дегенде логмкалық өрнектің <логика-
лық-өрнекi> (1 ≤ i ≤ N) біреуі орындалуы керек. Егер барлық логикалық
203
өрнектер есептелмесе, онда қате шығады. Мүмкін болатын нәтижені алу
үшін жасалатын алғашқы логикалық өрнек сәтті өткеннен кейін басқа
шарттары тексерілмейді.
Кесте 4.1 Семантикалық баламалы бағдарламалар
if(X> = Y) then smaller = Y|
if(Y> = X) then smaller = X
if (Y > = X) then smaller = X |
if (X > = Y) then smaller = Y
4.7.1 Қорғалған командалар
Дейкстра анықталмаған бағдарламалаудың моделін ұсынды, онда ең
логикалық өрнек әлсіз қажетті шарт болып саналды, және ол шартты
орператорға есептелуін жіберу үшін шындық болуы керек. Есептелу
бағдарламасы шартты операторлардың біреуіне өткен кезде басқа шарт-
ты операторлар тексерілмеді, дегенмен басқа шартты өрнекткер де сәтті
орындалуы мүмкін еді. Дейкстра бұл шартты өрнектерді қорғаныш
деп атады, ал шартты операторларды- қорғалған командалар деп атады.
Қорғалған команда екі құрамдастан тұрады: қорғау және командалар.
Қорғау - бұл жады блогын өзгертпейтін логикалық өрнектер. Команда-
лар тағайындау операторларын қамтиды, және шартымен үшін алғы-
шарттарды өзгертеді..Команданың кейінгі шартқа арналған алғышарт
иемденуді операторлары бар және өзгертеді.
Қорғалған командалар мынадай қасиеттерге ие:
1. Бұл қорғалған командаға көшу үшін ең әлсіз шарт.
2. Қорғау қажетті, бірақ шарт жеткіліксіз жеткіліксіз. Қорғалған коман-
далар кез келген ретпен тексерле алады.
3. Егер қорғаныс сәтті жүзеге асырылса, онда тиісті команда орында-
лып, басқа қорғаулар тоқтатылады.
4. Тек қана бір қорғау командасы орындалғандықтан, және қорғау қа-
жет болғандықтан, бірақ жеткіліксіз шартты болғандықтан, онда қорғау
команданы орындау бөлігінде шешімін алмай-ақ қорағау сәтті орын-
дала береді. Алайда, басқа да қорғалған қорғау табысты орындау жа-
риялан аннан кейін команданың тексерілмейді. Осылайша, қоғанысы
бар бағдарлама орынсыз болып табылады: шешім таба алмауы мүмкін,
бірақ бүл шешімі бар болуы мүмкін.
Q кейінгі шарты мен S оператор берілсін делік, wp(S, Q) = P белгіленуі
P- анықталмаған оператор үшін ең әлсіз алғышарт болып, ал Q –кейінгі
шарт болып табылады. Екінші жағынан P алғышарты мен S операторы
берілген, Q-ең қатаң кейінгі шарт болып табылады. Ең әлсіз алғышарт-
тардың бірнеше қасиеттерін бөледі, мысалға, егер wp(S, Q) = P1 және
wp(S, R) = P2, бұл жағдайда wp(S, Q ^ R) = P1 ^ P2. Осыған ұқсаса wp(S,
204
Q ˅ R) P1 ˅ P2-ке тең, барлық кейінгі шарттар үшін wp(skip,Q) = Q; ал
wp(abort, Q) = fail, бұл abort (үзіліс)деген мәнге тең түпкі нәтижені алу
үшін алғашқы шарт (fail) болып орындалмауы керек деген мағынаны
білдіреді.
S1; S2 операторларының жүйелігі берілген, және де соңғы шарт Q,
оператордың кейінгі шарты S1 бұл S2 кейінгі операторының ең әлсіз
алғышырты болып табылады. Осылайша wp(S1; S2, Q) = wp(S1, wp(S2,
Q)) теңдеуін жазға болады.
Қорғалған командаларда құрылымдардың екі түрі бар: қорғалған коман-
далар таңдауы және қорғалған команданың итерациясы. Қорғалған ко-
манданың таңдауы келесідей түрге ие болады:
if
{ <қорғау1>—→ <команда1> |
< қорғау 2>—→ <команда2>|
…
< қорғау N>—→ <командаN>}
‘→’ символы қорғанышты сәйкес командадан әр қорғалған командада
бөледі, ал ‘|’ символы қорғалған командаларды бөледі.
Жоғарыда ұсынылған құрылымы қорғауды кез келген тәртіпте тексе-
реді. Егер қорғау ойдағыдай бекітілген болса, онда тиісті команда орын-
далады, ал қалған қорғалған бағдарламалары тексерілмейді.
Қорғау сәтті орындалмаған болса, онда басқа қорғау барлық қорғау тек-
серіліп бітпейінше немесе қорғаулардың біреуі сәтті тексерілмейінше
тексеріледі.
Қорғалған команданың итерациялық жобасы келесі түрде болады:
айналым
{ <қорғау1>—→ <команда1> |
< қорғау 2>—→ <команда2> |
< қорғау N>—→ <командаN>}
Интерактивті құрылым бағытталуды тексергеннен кейін барлық қорғау
қате болғанға дейін сақьайды. Егер қорғаудың біреуң тесеруден сәтті
өтсе тиісті команда орындалып, келесі итерациалдық айналым бастала-
ды. Егер басқару итерациалық жобадан шыгып кетсе онда барлық қорға-
улар тексерістен өткен жоқ , бұл кейінгі шарттың Q тең P ^ ¬ қорғау1
^ ¬ қорғау2 ^ … ^ ¬ қорғауN дегенді білдіреді. Де Морган теоремасын
пайдалана отырып, түпкілікті шартты P ^ ¬ (защита1 ˅ защита2 ˅ …˅
защитаN) ретінде жазу болады. Итерациалық жоба (защита1 ˅ guard2
˅ … ˅ защитаN) логикалық шартын алғышартқа қосады.
205
Мысал 4.19
Анықталмаған программаға арналған Дейкстра іргелі жұмыстарынан
алынған келесі мы біз анақталмаған итерацияны көреміз. Біз a0, a1, a2,
және a3 төрт сандардың жүйелігін құрғымыз келеді делік. Бұл мәселені
шешу үшін, біз анықталмаған итерацияны пайдала аламыз
айналым
{ a0 >a1 → ауыстыру(a0, a1) |
a1 >a2 → ауыстыру(a1, a2) |
a2 >a3 → ауыстыру(a2, a3)}
Бастапқы жағдайлары үшін P, итерация циклін орындағаннан кейін,
соңғы шар мынған тең болады P ^ not (a0 > a1) ^ not (a1 > a2) ^ not (a2
> a3), оны былайша кері жазуға болады P ^ (a0 ≤ a1) ^ (a1 ≤ a2) ^ (a2 ≤
a3).Кейінгі шарттар мен алғышартты салыстыра отырып итерациялық
айналым келесі әрекетті орындайды (a0 ≤ a1) ^ (a1 ≤ a2) ^ (a2 ≤ a3), ол
жоғарылау бойынша сұрыптауға балама болып табылады a0 ≤ ≤ a1 a2 ≤
a3 .
4.7.2 Бағдарламаны біртіндеп құру
Болжамды соңы жағдай мен аксиоматикалық семантика алдыңғы опе-
раторды есептеуге қажет ең әлсіз алғышартты табуға қолданылуы мүм-
кін және біртіндеп анықьалмаған бағдарламаны құру үшін процесс кері
ретпен қайталануы мүмкін.
Ақырғы жағдай мен бастапқы жай-күйі ескере отырып айырмашылық
анықталады. Егер айырмашылық конъюнктивті нысан B1 ^B2 ^ ... ^Bn
ретінде елестетуге болса онда сіз төмендегідей итерациялық жасақтама-
ны пайдалана аласыз: қорғау алдыңғы бөлімде сипатталған әлсіз алғы-
шарттарды пайдалану ескере отырып де Morgan заңнамасына сәйкес
айқындалады. Де Морган заңын сәйкес not (B1 ^ B2 ^ … ^ Bn) қорға-
у1-ді not (B1) күйінде; қорғау2 – ні not (B2) күйінде т.с.с көрсетеді. Сол
сияқты, егер дизъюнктивты нысанда B1 ˅ B2 ˅ … ˅ Bn, айырмашылық
бар болса қорғалған команданың таңдауды қорғау1 wp(command1, B1)
болатындай ал қорғау2 wp(command2, B2) болатындай етіп қолдануға
206
болады. Сол себептен әрбір әлсіз алғышарт wp(commandi, Bi) бастапқы
P шартына енгізіледі.
Мысал 4.20
үлгісі 4.2 істі қарастырайық, және анақталмаған бағдарламасын құру
мақсатында қарама-қарсы бағытта деп ойлайнайық. Жиілікті сұрып-
тау үшін соңғы жағдайы мына түрде болады a0 ≤ ≤ a1 a2 ≤ a3 , және
конъюнктивті түрінде (A0 ≤ a1) ^ (a1 ≤ a2) ^ (a2 ≤ A3) болып жазы-
лады. Конъюнктивті түріне қарап, біз, анықталмаған итерациялық ди-
зайнын пайдалану керектігін білеміз. Қорғаныс1 not (a0 ≤ a1) болады,
бұл қорғаныс1-ді a0> a1 ретінде ұсынылуы мүмкін екенін білдіреді. Сол
сияқты, сіз басқа қорғаныстарды a1 > a2 және a2 > a3 алуға болады.
4.8 Мәлімет тәрізді бағдарламалар
Бағдарламалау тілдерінде, жалпы, деректер командадан бөлінген және
деректер - бұл түрлендірілетін нәрсе ал команда өзгергериейді,. Алай-
да, көптеген жағдайларда, мысалы, жасанды интеллект жағдайда, де-
ректер бойынша операцияларды орындауға болатын, бағдарламаны ай-
ырбастайтын деректер объект ретінде бағдарламасын құру қажеттілігі
туындайды.
Бағдарлама деректер түрінде дамиды, содан кейін бағдарламаға айна-
лады, онда бағдарлама бірінші деңгейдегі объектісі ретінде қаралатын
болады. Бірінші деңгейдегі нысан идентификаторымен параметр ретін-
де өтпеген немесе есептеу нәтижесінде қайтарылған байланысты өңдеу
кезінде құрылуы мүмкін.
Бағдарлама деректер түрінде дамыған, содан кейін бағдарламаның түр-
лендіріледі болса алғашқы нысан urovnya.Obekt Бірінші деңгей иден-
тификаторы параметр ретінде өтпеген немесе есептеу нәтижесінде
қайтарылған байланысты өңдеу кезінде құрылуы мүмкін, өйткені, онда
бағдарлама қарастырылады.
Сол сияқты, көптеген жағдайларда, бағдарламаға басқа бағдарламаны
дерек ретінде талдап немесе өңдеу керек болады . Мысалы, редактор
басқа да бағдарламаны деректер ретінде қарастыруы тиіс.
Тілді өзінің абстарктілі саласындағы атқарылуы туралы өздерінің қо-
рытындыларын жасайтын етіп жазуға болады. Барлық осы мысалдар
бағдарлама деректер ретінде қарастырылғандағы жағдайлар. Кейбір де-
ректер құрылымдардың көмегімен деректер ретінде бағдарламаны ұсы-
ну процесі реификация деп аталады.
207
4.8.1 Бірінші деңгейдегі нысан ретіндегі функциялар
ML, Haskell, Lisp, Prolog сияқты декларативтік тілдер бағдарламаны
Бірінші деңгейдегі нысандар ретінде қарастырады. Мысалы, көптеген
функцианалдық бағдарламалау тілдерінде функция атауын және тиісті
істі деректер түрінде алатын және деректерді белсенді функциясының
түрлендіреді функционалдық режимі бар. Lisp бағдарламалау тілінде
(apply ‘first ‘(Arvind Programs)) функциясы екі деректер дәлел қабыл-
дайды- имя функции first функция аты және ‘(Arvind Programs) тізімі
, және деректерді ‘(Arvind Programs)) функциясына алмастырады. Lisp
тілдерді отбасында деректер элементтері функциясы шатастырмас үшін
қосымша тырнақша бар екенін ескеріңіз. Осы сипаттамадағы синтаксис
Lisp және Scheme тілдерінде пайдаланылады, және басқа да функцио-
налдық программалау тілдердегі синтаксистен ерекшеленеді.
4.8.2 Метабағдарламалау және рефлексивтілік
Метабағдарламалар – басқа бағдарламаларды да өздерінің деректер
секілді іске қосып және талдайтын бағдарламалар. Егер тіл өз бағдар-
ламалық қамтамасыз ету үшін мета-бағдарламаларды жаза алса онда ол
рефлексивті тілі деп аталады. Бірінші деңгейдегі объектілер тарапынан
қолдау декларативтік тілдері, сондай-ақ, мета-бағдарламаларды қолдай-
ды. Жарнама табылған болса, онда мета-бағдарламалар ортаны жаңар-
тылады және бұл команда жолына сай келсе, онда ол бағдарламаға ай-
налады және орындалады. Мета-бағдарламалар мысалына оны орындау
барысында бағдарламаның әрекетін талдау, абстарктілі саласындағы
басқа да бағдарламалар туралы қорытындылар жасайтын абстрактілі
аудармашылар болып табылады. Абстрактілі саласының мысалы - бел-
гілі құндылықтарды олардың тиісті түрлеріне түрлендіретін аймақ түрі.
Мета-бағдарламалардың тағы бір мысалы тілі бағдарламасын орындау
механизмін жазу болып табылады. Метабағдарламалар, сондай-ақ басқа
да бағдарламаларды жасау үшін пайдаланылады. Метабағдарламалар
кодын құру уақыты мен құнын төмендететін, бағдарламасы бағдарла-
малаушыга оңай толтыру үлгілерін жасау үшін пайдаланылады. Мета-
бағдарламалар Ruby, Scala, Lisp және Prolog сияқты тілдерінде қолда-
нылады.
4.9 Бағдарламалық қамтамассыз етуді қайталама қолдану
Бағдарламалық қамтамасыз ету мөлшері күрделі автоматтандыру мін-
деттеріне байланысты өседі, ол императивті болады, ол дегеніміз қай-
талануын болдырмау бағдарламалық қамтамасыз етуді әзірлеу уақы-
тын қысқартуға және бағдарламалық қамтамасыз қателерді азайту
208
мақсатында, жаңа бағдарламалық қамтамасыз етуді әзірлеу, алдыңғы
бағдарламалық қамтамасыз қайта пайдалану дегенді білдіреді. Әртүр-
лі парадигмалардың көмегімен тиімді нақты тапсырмаларымен кодта-
уға болады. Кешенді бағдарламалық қамтамасыз етуді әзірлеу бірне-
ше бағдарламалау парадигмасын пайдаланып дамыған интеграциялық
бағдарламаларды қажет етеді.
Әртүрлі тілдер түрлі бағдарламалау парадигмасын (I қосымша) пайда-
ланады. Әр түрлі бағдарламалау парадигмалары деректер және бақылау
қолдауымен жүзеге асыру абстракцияларымен ерекшеленеді. Mысалы,
императивтік тілдер деректер жиынның жүзеге асыру үшін дәстүрлі бір-
неше индекстелген жиымдарды немесе векторларын пайдаланылады.
Декларативтік тілдер шартты өзгеріссіз деректер жиыны элементтерін
жүзеге асыру үшін пайдаланылады. Парадигмалар тіпті қолдайтын олар
деректер мен бақылау абстракциянда да әртүрлі болып келеді. Кей-
бір деректер жинау және абстракция басқару кешенді бағдарламалық
қамтамасыз етуді дамытуға қажетті міндеттерді аудандарында әр түрлі
сыныбы үшін неғұрлым қолайлы болып табылады. Бірнеше парадигма-
лардың интеграциялары өзара алмасуды талап етеді - басқа тілдерде бар
өзара іс-қимылдар және басқа да тілдерде құрылған кітапхананы өңдей-
тін қабілеті.
Қазіргі заманғы бағдарламалық қамтамасыз ету екі тәсілдер пайда-
ланады: пайдалануға дайын сыртқы кітапханаларды пайдалану және
басқа тілде әзірленген бағдарламалық қамтамасыз етуі бар өзара іс-қи-
мыл. Кітапхана - жұртшылыққа және дамыған бағдарламалық қамта-
масыз етуге жіберілетін функционалдық жиынтық. Кітапхананы «им-
порт»<кітапхана-аты> функциясын пайдаланып импорттауға болады.
4.9.1 Тағы да өзара әрекетте мүмкінділік туралы
Тілдің өзіндік қабілеті басқа тілде жазылған бағдарламаны шақыруға,
басқа тілдердегі функцияны бағдарламалауға сондай-ақ өндірістік қыз-
метінің тиімділігін жақсартуға мүмкіндік береді.
Тілдердің өзара іс-қимылының негізгі проблемасы шақырылатын және
шақыратын бағдарламлардың бірігуі болып табылады. Бұл міселені
шешудің екі тәсілі бар: (1) ортақ тіліне аударылған барлық тілге ортақ
аралық тілді дамыту, немесе(2) екі функционалды үйлесімді тілдерді
арқылы интерфейс деректер пішімі айырбастау дамыту.Осы әдістердің
екеуі де қолданылды.
Аралық бағдарламалық қамтамасыз етуді ортақ тіл үлгі жүйесі мен ме-
тадеректерді көрсете отырып, функционалдық үйлесімділіктің қамта-
масыз етеді. Әдеттегі жүйесі әрбір өзара әрекеттесу интерфейсін пай-
209
далану үшін, стандартты түріне ауыстырылды. Метадеректер дәстүрлі
стандартты тілінде интерфейстің түрі, сондай-ақ басқа да тілдерде қой-
масына ақпарат түріне аудару жұмысатқару үшін бірыңғай тетігін қамта-
масыз етеді және жазбалардың жалпы түрі туралы ақпаратты шығарып
алуды қамтамасыз етеді.. Метадеректер құрастырылған бағдарлама
туралы ақпаратты қамтитын кестелер мен деректер құрылымдарын
қамтиды.Кесте кластар, өрістер мен олардыі түрлері туралы, экспорт-
талатын түрлер жайында, сонымен қатар бейтарап тілдік интерфейстегі
басқа метадеректер кестелерге сілтемелер жайнда мағұлматты қамтиды.
Соның салдарынан белгілі бір интерфейс тілінің және теңшелетін код
өзара іс-қимылды анықтау қажеттідігі жоғалады.
Жалпы үлгiдегi, және басқа жүйенің бір түріне аудару үшін метадерек-
тер арқылы көрсеткен қолдауы қарамастан, түрлі абстрактілі деректер
түрлі тілдерге қолдау көрсетеді, және жүзеге асыру процесін функция-
ны толық пайдалану арқылы осындай деректерді жүзеге асыру ретінде
басқа абстрактілі деректерінен ажырату қиын.
Көптеген бағдарламалық тілдер үшін ортақтілдік тәсіл .NET Framework
платформасында жүзеге асырылды, жіне ол Майкрософт секілді ком-
паниялардың С#, С++ және Visual Basic тілдерінде қолданылады. NET
Framework платформасы ортақтілдің инфраструктураның ерекшелік-
терін (ОИЕ) сипаттайды, бұл жерде ортақтілдің ерекшелітері мен ереже-
лері сипатталады. XML интернет-течнологиялар мен деректер базасын-
да құрылған тілдер үшін стандартты ортақтілдік интерфейске арналды.
Достарыңызбен бөлісу: |