Crc press баспасы Taylor & Francis баспа тобы


 Бағдарламалардағы абстракция



Pdf көрінісі
бет15/26
Дата20.12.2019
өлшемі6,26 Mb.
#53875
1   ...   11   12   13   14   15   16   17   18   ...   26
Байланысты:
Бағдарламалау тілдеріне кіріспе (1)


4. Бағдарламалардағы абстракция
және ақпаратпен ауысу
Негізгі тұжырымдамалар
Абстрактылы синтаксис (3.2.6-тарау); Есептеулердегі абстрактылы 
ұғымдар  (2.4-тарау);  Грамматика  (3.1-тарау);  Басқарушы  логика 
(1.4.2-тарау);  Деректер  құрылымының  тұжырымдамалары  (2.3-та-
рау);  Дискреттік  құрылымдар  (2.2-тарау);  Графалар  (2.3.6-тарау); 
Бағдарламалау жөніндегі білім; Ағаштар (2.3.5-тарау); Синтаксистік 
диаграммалар (3.3-тарау).
Бағдарлама мақсаты - соңғы шарттың талаптарын қанағаттандыратын 
болжамалы  есептеу  мәніне  қол  жеткізу  үшін  құрылымдалған  дерек-
терді басқару. Бағдарламалау бірнеше деңгейлерде орындалуы мүмкін: 
машиналық кодтағы бағдарламалау, ассемблер тіліндегі бағдарламалау, 
төменгі  деңгейдегі  процедуралық  бағдарламалау,  жоғары  деңгейдегі 
процедуралық бағдарламалау, декларативті бағдарламалау және т.б. Аб-
стракция  саны  мен    анық  басқару  деңгейі  жоғары  деңгейдегі  бағдар-
ламалау тілдері мен төменгі деңгейдегі бағдарламалау тілдерін бөледі. 
Абстракция мақсаттарының бірі – ең аз өзгерістері бар бағдарламалық 
қамтамасыз  етуді  қайта  пайдалануды  қамтамасыз  ету,  яғни  талаптар-
ды  көбейту  немесе  технологиялық  өзгерістер  кезінде  бағдарламалық 
қамтамасыз етудің дамуына арналған шығыстарды азайту.
Алдында сипатталған абстракцияның екі түрі бар: деректер абстракци-
ясы және басқару абстракциясы.Деректер абстракциясы нақты объек-
тілерді олардың атрибуттарының ішкі топтары үшін пайдаланылады, ал 
басқару абстракциясы командалардың жүйелілігін құру үшін пайдала-
нылады, олардың қабылдануы мен пайдалануын жақсартады. Деректер 
элементі атрибуттар жиынымен сипатталады және қордаланған пробле-
маларды шешуге қажетті атрибуттардың тиісті тобының көмегімен аб-
стракциялануы мүмкін.
Деректер элементтері әдетте бағдарламадағы хабарландыру тарауында 
сипатталады,  ал  құрама  басқару  бағдарлама  ішінде  болады.  Алдында 

159
айтып  өткендей,  бағдарламаның  хабарландыру  тарауы  ортаны  өзгер-
теді, ал тағайындау операторларынан құралған бағдарламаны басқару 
тарауы бағдарлама жадының блогын өзгертеді.
Бағдарламалау  тіліне  байланысты,  деректер  мен  басқару  арасындағы 
шектеу нақты немесе бұлдыр болуы мүмкін:
1. Бағдарлама  блогы  деректер  ретінде  қаралуы  мүмкін,  ал  бағдарлама
деректерді орындау уақытында үдемелі режимде құрылуы мүмкін, ары
қарай бағдарлама блогына түрленуі тиіс.
2. Бағдарлама мета бағдарламалардағы деректер ретінде басқа бағдарла-
маны пайдалануы мүмкін.
3. Класс деректер абстракциясы мен басқару абстракциясының бірыңғай
пакетін құруы және осы пакеттегі элементтерді жариялай отырып, басқа
есептеу объектілерінің әрекетін не ашық, не қорғалған, не жабық ретте-
уі мүмкін.
Алдында  айтып  өткендей,  бағдарлама  бір-бірімен  ақпаратпен  алма-
сатын  бірнеше  ішкі  бағдарламалардан  немесе  модульдерден  тұрады.
Әзірлеуші реттеген немесе инкапсуляция көмегімен жасырылған ақпа-
рат,  сондай-ақ  абстракцияның  бөлігі  болып  табылады.  Инкапсуляция
деректерді  жасыруға  арналған  табиғи  шекара  болып  табылады.  Ин-
капсуляцияны ішкі бағдарламалар, объектілер және кластар, модульдер
немесе олардың үйлесімі арқылы жүзеге асырылады.
Кластар деректер абстракциясы, сондай-ақ басқару абстракциясы ретін-
де  инкапсуляция  арқылы  ақпараттың  жасырынуын  қамтамасыз  етеді.
Деректер мен басқарудың осындай көрінісі импорт-экспорт тетігі не-
месе мұралануды пайдалану көмегімен реттелуі мүмкін. Экспорт-им-
порт  тетігі  екі  элементтен  тұрады:  басқа  модульдер  мен  бағдарла-
малар үшін инкапсулданған деректер мен бағдарламалық модульдерді
экспорт тетігінің көмегімен көрінетін етеді және модульден деректер
немесе бағдарламалық модульдерді импорт тетігінің көмегімен алады.
Экспорт  тетігі  жабық  деректерді  ашық  қылады,  ал  импорт  тетігі  экс-
портталған элементті жергілікті ортала көруге мүмкіншілік береді. Им-
порт пен экспорты тікелей бағдарламашылар жариялайды.
Императивті бағдарламалауда деректер абстракциясы мен басқару аб-
стракциясынан  құралған  негізгі  бірлік  бұл  –  ішкі  бағдарлама  немесе
объектілік  бағытталған  бағдарламалау  парадигмасындағы  модуль,  не-
гізгі бірлік  бұл- ішкі класс немесе объект – класс немесе ішкі кластың
қолданыстағы өкілі.
Модульдер  негізіндегі  тілдерде  ішкі  бағдарлама  немесе  деректер  эле-
менті модуль ішіне салынуы мүмкін және деректер элементін немесе
ішкі бағдарламаның элементін қолдану экспорт-импорт тетігін қолда-

160
ну есебінен реттелуі мүмкін.
Осы  тарауда  біз  деректер  және  басқару  абстракциясын,  бағдарлама 
бөліктерінің арасындағы ақпараттың алмасуын, әр түрлі абстракциялық 
бағдарламалық конструкцияларды зерттейміз. Соған қарамастан, импе-
ративті  бағдарламалау  парадигмасынан  ерекшеленетін  бағдарламалау 
парадигмаларымен байланысты нақты мысалдар  парадигмалар қалай 
толығырақ қаралуына байланысты тиісті тарауларда сипатталатын бо-
лады.
4.1 Деректер абстракциясы
Деректер абстракциясындағы ең маңызды ұғымдардың бірі өңделуі қа-
жет ақпаратты сақтау үшін пайдаланылатын абстрактылы деректердің 
элементін  құру  болып  табылады.  Мұнда  ақпарат    бағдарламалық  мо-
дульдің әр түрлі орындарында бірнеше рет пайдаланылуы мүмкін және 
оны жеңіл өзгертуге болады. 
Анықтама нақты немесе жалпы болады, бағдарламаны орын ауысты-
ру тетігін пайдалана отырып, параметрлер немесе белгілерін беру тетігі 
арқылы деректердің нақты абстракциясына орындау уақытында инстан-
циялауға болады.
Деректер элементі «литерал» немесе «есептелмеген константа» сияқты 
бірлік элемент болуы мүмкін, оны ары қарай бөлуге болмайды немесе 
элемент нақты белгіленген операцияларды орындалатын жалпы қасиет-
терінің бірқатарына ие элементтердің бірігуін білдіреді.
Жалпы қасиеттердің жиыны деректердің жалпы типтегі объектілермен 
шатастыруға болмайды. Біріктірілген элементтің әр түрлі элементтері-
не ықтимал қайталанатын жалпы операция жасайтын бірқатар жалпы 
сипат  жалғыз  шектеу  болып  табылады.  Егер  олар  деректердің  бірдей 
типіне ие болса, мысалы, тұтас сандар сияқты, онда жалпы операция 
тұтас сандар операциясына жатады. Бірақ көптеген жағдайларда опера-
циялар құрылыммен байланысты, мұнда деректердің ерекше типін алу 
қажеттіліг туындайды. Бұл айырмашылық 7-тараудағы типтер теория-
сын зерттеген соң түсінікті болады. 
  Деректер  элементінде  көрінетін  аймақ  бар,  есептеулер  осы  аймақта 
жүргізіледі.  Элементтің  көрінуін  көз  жеткізу  үшін  бағдарламалау  тілі 
нақты шекаралары бар бағдарламаның бөліктерін анықтау қажет, онда 
деректер  элементі  көрінетін  болып  табылады.  Егер  біз  бағдарлама-
да  бірдей  атауы  бар  бірнеше  деректер  элементінде  болғымыз  келген 
жағдайда, деректер элементінің көрінетін шекараларын белгілеу қажет. 
Әйтпесе, атауының сәйкес келуіне байланысты қате туындауы мүмкін, 
себебі бірдей атау әр түрлі деректер элементтеріне жатады. Бағдарлама 

161
бөлігінде деректер элементіне қол жеткізуді алу үшін екі тәсіл бар:
(1)
Деректер элементіне атау беру және (2) орналасқан шекараларды
анықтау, мұнда ол жария етілген ұстанымға байланысты көрінуі мүмкін.
Атауды пайдалану бағдарламалық модульдің әр түрлі орындарындағы
деректер элементіне қол жеткізуді оңайлатады және орналасқан жердің
шектері деректер элементінің көрінуі шекараларын анықтайды.
Деректер элементіне бағдарламаның әр түрлі бөліктеріне арналған бір-
неше атауды пайдалана отырып, жүгінуге болады. Деректердің бір эле-
ментіне жататын бірнеше атау бүркеншік атау  деп аталады, ары қарай
толығырақ  сипатталатын  болады.  Біз  деректер  элементін  жариялаған-
да, жалпы құрылымды шаблон қажеттілігі пайда болады, себебі дерек-
тердің  бірнеше  элементтері  деректердің  осындай  шаблонымен  байла-
нысты. Мұндай құрылымдарды деректер абстракциясы деп атайды.
Жақсы анықталған сипатқа ие деректер элементтерінің белгісііз саныме-
ен ішкі бағдарлама жұмыс істеу үшін тұрақты және ауыспалы ұғымын
түсінуіміз  қажет.  Тұрақты  –  компиляция  кезінде  деректер  элементіне
берілуі мүмкін және ары қарай өзгермейтін мәнді сақтағыш. Ауыспалы
жад ұяшығында көрсетіледі, ол бағдарламаны орындау процесінде бір-
неше реті қайта жазылуы мүмкін. Ауыспалы жасырын компилятормен
жасалуы мүмкін немесе бағдарламаны орындау уақытында тілді орын-
дау жүйесі немесе бағдарламашы жасауы мүмкін. Элементтегі ауыспа-
лының көрінуі бағдарламаны орындау уақытында бірнеше рет өзгеруі
мүмкін, мысалы, императивті тағайындау парадигмасында деструктивті
тағайындау  кезінде  немесе  бір  рет  мағына  тағайындалған  соң  тірке-
луі мүмкін. Императивті бағдарламалау парадигмасы бағдарламашыға
қалауы бойынша жад ұяшығы немесе жад блогы ұғымын енгізу көме-
гімен өзгертуге мүмкіншілік береді. Идентификатор→ жад ұяшығы жад
ұяшығының пайда болуына байланысты, ал императивті бағдарламалау
парадигмасында ауыспалы деректер жад ұяшығы → деректер элементі
өзгеретін  болады  және  өзгеретін  объектілер  деп  аталады.  Керісінше,
декларативті  тілдер  бағдарламашыға  идентификаторды  деректер  эле-
ментіне  тек  бір  рет  қана  түрлендіруге  мүмкіндік  береді:  идентифика-
тор→деректер  элементі.  Мағына  берілген  соң  бағдарламашы  жаңа
мағына беру үшін жаңа ауыспалыны құру қажет. тек бір рет қана мағына
берілетін объектілер өзгертілмейтін объектілер деп аталады.
Бағдарламалаудың  заманауи  тілдерінде  деректер  абстракциясының
осындай  кластары  кеңінен  таралған.  Барлық  заманауи  бағдарламалау
тілдері жекеленген элементтер мен бірігулерді қолдайды. Бірігулер құра-
ма типтерді, жиындарды және деректердің кеңейтілген құрылымда-
рын қамтиды. Көптеген парадигмалық бағдарламалау тілдері деклара-

162
тивті, сондай-ақ императивті бағдарламалауды тануды қолдайды және 
өзгеретін және өзгермейтін объектілерді қолдайды.
4.1.1 Деректердің бірлік элементтері
Деректер элементін анықтауға арналған абстракция нақты объектілерді 
түрлендірумен  байланысты  және  олардың  басқа  объектілермен  өзара 
байланысымен  байланысты.  Нақты  объекттің  көптеген  атрибуттары 
бар, ал бұл атрибуттар бөлінуі мүмкін. Мұндай атрибуттар негізгі мате-
матикалық салалардың, мысалы, тұтас сандардың, құбылмалы нүктелі 
сандардың, символдар мен қатарлардың немесе есептеу салаларының, 
мысалы, битер мен байттардың, семафорлардың немесе пайдалану бел-
гілеген есептелетін салалардың көмегімен ұсынылуы мүмкін. Әр түрлі 
заттық салалардың әр типті элементтері бар. Көптеген тілдер қатарлар-
ды индекстелген символдар жүйелігі ретінде өңдейді, ал бірнеше тіл-
дерде, мысалы, Java-ад немесе C#-де “қатар” деректер типінің негізгі 
хабарландыруы аясында қаралады, ол сондай-ақ егер қажет болса, сим-
волдар жүйелігі ретінде өңделуі мүмкін. 
4.1.2 Деректердің құрама элементтері
Құрама объектігің бірден артық атрибуты бар. Құрама элементе әр алаң 
өзі  деректің  құрама  элементі  болуы  мүмкін.  Құрама  объектінің  үлгісі 
үшін  кортеждерді  пайдаланады.  Кортеждер  атаулы  немесе  атауы  жоқ 
болуы  мүмкін.  Көптеген  бағдарламалау  тілдері  атаулы  кортеждерді 
пайдаланады, деректердің құрама элементін үлгілеу үшін жазу немесе 
структты пайдаланады.
Кортеждер  мен  жазулар  немесе  структтар  арасындағы  жалғыз  айыр-
машылық – атауы бар жүйелілік шаблондары. Деректер типі хабарлан-
дыруындағы кортеждердің атаулы шаблондарының басымдығы бағдар-
ламаны  құруда  ыңғайлы  әр  түрлі  ауыспалымен  байланысты  бірнеше 
кортеждерді құру үшін пайдаланылады. Атауды енгізу бірнеше күрделі 
пайдаланушылық  типін  анықтау  үшін  қайта  пайдаланылуы  мүмкін. 
Бағдарламалаудың  әр  түрлі  тілдерінде  пайдаланатын  синтаксистік  қа-
былдауға тәуелсіз құрама объектілердің барлық анықтамалары кортеж 
түрінде  көрсетіледі.  Кортеждің  рекурсивті  анықтамасы  деректердің 
кеңейтілген  элементі  үлгісінде  қолданылады.  Мысалы,  байланысты 
тізім  жұп  түрінде  көрсетіледі  (ақпараттық  алаң,  байланыстыратын 
тізім); ал ағашты үштік ретінде көрсетуге болады (ақпараттық алаң, сол 
жақ ағаш, оң жақ ағаш).

163
4.1-мысал
«  «Сыныпты»  анықтау  құрама  элементтің  мысалы  болып  табылады 
(4.1-сурет).  Сынып бұл – түрдің 6 кортежі (курс нөмірі, курс атауы, 
оқытушы, студенттер, орын, уақыт). Курс нөмірікурс атауы және 
оқытушы атрибуттары  бұл – бірлік элементтер; орын мен уақыт – 
жұптар; ал студенттер атрибуты – бұл деректер элементтерінің жиы-
ны.
«Сынып» анықтамасында көрсетілгендей, деректердің құрама элементі 
деректер элементінің атауынан, атрибуттар санынан және әр түрлі атри-
буттардың  сипаттамасынан  тұрады.  Әр  атрибут  деректер  абстракци-
ясын немесе деректер абстракциясы жиынын немесе бірлік элементті 
қамтитын кортеж болуы мүмкін. Мысалы,  орын – жұп түрінде үлгілен-
ген деректер абстракциясы. Соған балама, студенттер бұл – студент-
тер жиыны.
Студент бұл – пішіннің 4-кортежі (квадруполь) (студенттің_id, студент 
аты, кафедра атауы, ЖОО-дағы жыл). Әр алаң бұл – бірлік элемент. 
Орын  түр  жұбы  (корпус,  кабинет)  түрінде  абстракциялануы  мүмкін. 
Уақыт  түр  жұбы  ретінде  абстракциялануы  мүмкін  (басталу  уақыты, 
ұзақтық).

164
Деректер абстракциясы: сынып
абстракция типі: кортеж 
атрибут өлшемі: 6
атрибуттарды сипаттауды бастау 
1-атрибут: бірлік элемент курс нөмірі
2-атрибут: бірлік элемент курс нөмірі
3-атрибут: бірлік элемент оқытушы
4-атрибут: студент жиын
5-атрибут: кортеж орын
6-атрибут: кортеж уақыт
атрибуттарды сипаттауды аяқтау деректер абстракциясын аяқтау
деректер абстракциясы: студент
абстракция типі: кортеж
атрибут өлшемі: 4
атрибуттарды сипаттауды бастау
1-атрибут:  id-студенттің бірлік элементі
2-атрибут: студент атының бірлік элементі
3-атрибут: кафедра атауының бірлік элементі
4-атрибут: ЖОО-дағы бірлік элемент
атрибуттарды сипаттауды аяқтау деректер абстракциясын аяқтау
деректер абстракциясы: орын 
абстракция типі: кортеж 
атрибуттарды сипаттауды бастау
1-атрибут: бірлік элемент корпус
2-атрибут: бірлік элемент кабинет

165
атрибуттарды сипаттауды аяқтау
деректер абстракциясын аяқтау
деректер абстракциясы: орын 
абстракция типі: кортеж 
атрибуттарды сипаттауды бастау
1-атрибут: бірлік элемент басталу уақыты
2-атрибут: бірлік элемент ұзақтық
атрибуттарды сипаттауды аяқтау
деректер абстракциясын аяқтау
4.1-сурет.  "Сынып» деректері элементін абстракциялау.
Кешенді сан, рационалды сан және уақытша интервал түріндегі мате-
матикалық объект абстракцияларында пайдаланылатын екі атрибуттан 
тұратын кортеждің арнайы типтерінің жұбы . мысалы, кешенді сан түр 
жұбын білдіреді (нақты бөлім, жорамал бөлім), ал рационалды сан түр 
жұбын  білдіреді  (алым,  бөлім).  Оқиға  сияқты  абстрактылы  ұғымдар 
жұп ретінде үлгіленуі мүмкін (оқиға атауы, оқиғаның басталуы), мұнда 
оқиғаның басталуы бұл – түр жұбы (уақыт, орын). Көптеген бағдарла-
малау тілдері, мысалы,
 ADA, кіріктірілген типтер ретінде кешенді және рационалды типтерді 
қабылдайды. Полиномдардың үштік жиыны бар, мұнда әр үштіктің түрі 
бар (коэффициент, ауыспалының атауы, деңгей).
4.1.3 Деректер элементтерінің жиыны
Деректер  элементтерінің  жиыны  бұл  –  құрама  объектіден  айыр-
машылығы  бар  көптеген  элемент.  Құрама  объектіде  әр  атрибут  бұл  – 
бір объекті абстракциясының бөлігі және ол индекстелмейді. Жиында 
немесе жиынтықта әр элементе  бұл – индекстелетін жекелеген элемент. 
Деректер  элементтері  жиынын  үлгілейтін  бірнеше  тәсілдер  бар:  (1) 
жүйелілік— реттелген жиынтық немесе (2) түрдің жиынтық жұбы (кілт, 
элемент), мұнда кілт– бұл деректер элементіне қатысты жеке идентифи-
катор.
Реттелген жиынтықта әр деректер элементі белгілі бір қалыпқа жатқы-
зылады және индекстелетін жүйелелік түрінде, мысалы, массив түрінде 
немесе вектор түрінде ұсынылуы мүмкін.
Жүйелілік массивтерді, байланысты тізімдер мен векторларды пайдала-
ну есебінен іске асырылады. 
Массивтер  мен  векторлар  индекстеледі.  Байланысты  тізімдер  индек-

166
стелмейді; i элементті алу үшін, алдымен (i− 1) элементтерді өту керек. 
Массивтер  статикалық,  жартылай  динамикалық  және  динамикалық 
болуы  мүмкін.  Жартылай  динамикалық  массив  өлшемі  шақыратын 
ішкі бағдарламаның параметрлерінің түрінде беріледі және шақырулар 
арасындағы аралықта өзгеруі мүмкін. Динамикалық массив жадта ор-
наласады, мысалы, ағаш ретінде деректердің рекурсивті құрылымында 
іске асырылады және кеңейтілген құрылым болып табылады. Мысалы, 
динамикалық массив өрнегі тәсілдерінің біріне шаршы ағашы жатады. 
Шаршы ағашында төрт бұтақ бар.
 Егер жиынтық өлшемі 1-ден 4 аралығында болса, онда бір деңгейдегі 
ағаш қажет болады. Егер жиынтық өлшемі 4+ 1 және 42 болса, онда екі 
деңгейлі ағаш қажет болады, ал егер өлшем 42 + 1 және 43 аралығында 
болса, онда үш деңгейлі ағаш қажет. Деректердің барлық элементтері 
парақтық торапта сақталады. Осындай ұсынымның басымдығы мынада: 
жиынтықты кеңейту үшін ағаштағы деректер элементінің дәл қалыбын 
индекс мәніне қарай отырып, кез-келген сәтте есептеуге болады және 
бұл мән  ағаш теңестірілген жай-күйге жеткенде, логарифмдік уақытта 
орын ауыстыруы мүмкін.
Жұп жиынын (кілт, деректер элементі) декларативті тілдерді ассоциа-
тивтіі тізімдер деп атайды және функционалдық бағдарламалау мен 
объектілік-бағытталған бағдарламалауды біріктіретін заманауи мульти-
бағдарламадағы тілде  Scala –дағы map де аталады. Кілт деректер эле-
ментін  кілтті  сақтауға  кеткен  қосымша  жад  есебінен  анық  емес  жеке 
реттеуден  тәуелсіз  қылады;  деректер  элементтері  әр  түрлі  тәртіпте 
кез-келген  жиынтық  ұяшықта  орналасуы  мүмкін.  Деректер  элементін 
алу үшін хэштегтеу немесе бинарлық іздеу сияқты іздеу тетігі қажет бо-
луы мүмкін, олар қажетті кілтті табады және тиісті деректер элементін 
алады.
Деректер  элементтерінің  кез-келген  динамикалық  жиыны  екі  негізгі 
сипатты қамтуы мүмкін: (1) индекс немесе кілт мәні бойынша дерек-
тер элементтеріне тиімді іздеу және (2) кіру-шығару тетігі, сондай-ақ 
бағдарламалық генерация арқылы келіп түсетін деректердің жаңа эле-
менттерін  орналастыруға  арналған  бағдарламаны  орындау  уақытында 
деректер  абстракциясының  жиыны  өлшемінің  қосымша  кеңеюі.  Де-
ректер  элементтерін  тиімді  іздеуге  арналған  екі  негізгі  схема  бар:  (1) 
хэш-функция индекс мәнін табу үшін тұрақты уақыттағы кілтті орна-
ластырады, ал содан кейін индекс тиісті массивтен деректерді алу үшін 
пайдаланылады және (2) іздеу ағашын логарифмдік уақытта пайдалану. 
Сатылы көрініске, ішінде екілік немесе үштік ағаш түріне байланысты 

167
кілт іздеудің тиісті алгоритмінің көмегімен алынады.
4.1.4 Кеңейтілетін деректер элементтері
Кеңейтуді  құру  үшін  рекурсивті  анықтамалар  мен  кортеждер  пайда-
ланылады.  Деректердің белгіленген жиынтығы екі алаңнан: деректер 
элементі  және  бағдарламаны  орындау  уақытындағы  деректер  жиын-
тығының шектеусіз кеңейтілуіне арналған сілтемелік алаңнан тұратын 
кортеж ұғымын түсіну есебінен абстракцияланады.
Жиынтық  хэш  кестеден  немесе  ағаштан  тұрады.  Хэш  кестеде  кілттің 
немесе мәндердің реттелу қажеттілігінің жоқтығына байланысты жиын-
тықты сатылы іске асыру іздеудің тиімді логарифмдік уақыты үшін рет-
телуі мүмкін.
Жүйелілік  рекурсивті  <жүйелілік>  ::=  (<деректер  элементі><жүй-
елілік>)|нөл ретінде анықталады. Осындай ұсынылғанда деректер эле-
менттері сызықтық кеңейтіледі және кез-келген кеңею санында жинақ 
нөл негізгі сценариі арқылы тоқтатылады. Деректер жиынының өлшемі 
шектеулі  болып  табылады  және  бағдарламаны  орындау  уақытында 
кеңейтілуі мүмкін. Байланысты тізімдер, массивтер мен векторлар ке-
зектілікті құру үшін пайдаланылады.
1. Кортеждерді пайдаланатын рекурсивті абстракцияның басқа мысалы-
ның түрі - Реттік хабарландыруларда D1 ортаны σE –ден  σ’E-ге дейін 
жаңартады,  ал D2  өзінің анықтамасында D1 хабарландырумен байла-
нысты ауыспалы жиынтығын алу үшін жаңа σ’E ортасын пайдаланады. 
Мысалы,  Lisp  функционалдық  бағдарламалау  тілінде    (let*  ((X  4)(Y(
X  4))))  хабарландыру  Х  ауыспалысының  4  –мәнмен  байланыстыруға 
және  ауыспалысының 8-мәнге байланыстыруға сәйкес келеді, себебі 
бірінші хабарландыру Y жарияланғанда орта бөлігі болып табылады, ол 
ортадан X байланысуды алып, мәніне 4-ті қосады, нәтижесінде мән 8 
болады. Х 4-ке тіркелгеннен кейін  орта σ’E= σE⊎ {X→ 4}, ал екінші 
хабарландырудан кейін орта σE⊎ {X→ 4} ⊎ {Y→ 8} болады.
2. Параллельді хабарландыруларда D1 де,  D2 де байланысуды
алдыңғы σEортасынан алады, ал D2 4.2.-мысалында көрсетілгендей, D1 
әрекеті-не байланысты өзгермейді.
4.2-мысал
Lisp бағдарламалау тілінен мысалды талдап көрейік.
(defunmy_square(b) % функцияны анықтау

168
(let((b (b 5)) (c (+b 6)))% параллельді хабарландыру 
((* bb) (* cc)) % b2 + c2 есептеу)  % let хабарландырудың көріну ай-
мағын жабу) 
% хабарландыру функциясының көріну аймағын жабу
Let  конструкциясы  b  және  c  жергілікті  ауыспалылары  үшін  жергілік-
ті  ортаны  құрады.  my_square(4)  функциясын  шақыру  b    мағынасын 
(b) + 5 = 9 мағынасы ретінде есептейді, ал c мағынасы b + 6 = 4 + 6 = 10
ретінде есептейді.
b  мағынасы  жергілікті  ортада  9-ға  өзгереді,  екінші  инициализацияда
параллельді тағайындау семантикасының let конструкциясымен шақы-
рылған алдыңғы b = 4 мәні алынады. Соңғы жауап: 92 + 102 = 181.
Процедураны немесе функцияны шақырған кезде ортада өзгеріс бола-
ды, себебі шақыру процедурасына арналған жергілікті байланыстардың
көпшілігі жасырын, яғни шақырылатын ішкі бағдарламалардың көріну
аймағында  көрінбейді.  Ішкі  бағдарламала  шақырған  жаңа  ортада  ға-
ламдық ауыспалы, жергілікті емес ауыспалы, импортталған ауыспалы
байланыстары ғана және формалды параметр байланыстары ғана сақта-
лады.

Достарыңызбен бөлісу:
1   ...   11   12   13   14   15   16   17   18   ...   26




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет