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


def entityId(Object);   puts



Pdf көрінісі
бет21/26
Дата20.12.2019
өлшемі6,26 Mb.
#53875
1   ...   18   19   20   21   22   23   24   25   26
Байланысты:
Бағдарламалау тілдеріне кіріспе (1)
corel-draw-zhayly-zhalpy-tusinik, corel-draw-zhayly-zhalpy-tusinik, Jobs and professions

def entityId(Object);
  puts(“passed parameter: #{Object.object_id}\n”);
end
  y = 4.5;
puts(“actual address: #{y.object_id}\n”);
entityId(y)
entity-элемент,  put-қою,  passed  parameter-өткен  параметр,  actual 
address-негізгі мекенжай, object-объект
Жоғарыдағы код екі жағдайда бірдей шешуге мүмкіндік береді: y.объ-
ект_идентификаторы  ID  y  параметрін  беру  және  Объект.объект_
идентификатор идентификатор мекенжай нысанның мекен-жайы фор-
мальды параметр объектісі бойынша атап береді. 
Emerald тіл бағдарламалауы (Изумруд) үйінді нысандарына айнымалы-
ларды  Emerald  көрсеткіштерін  сақтайды,  өйткені  объект  сілтеме  бой-
ынша  шақырылып,  сондай-ақ  объектінің  мәніне  алмасу  үшін  шақыру 
параметрін  қолдайды.  Emerald  таратушы  есептеуін  қолдайды,  және 
қашықтағы  процессор  нысан  сілтемесін  жібере  отырып  баяулата-
ды.  Осылайша,  Emerald  сондай-ақ  қашықтан  процессорлар  шақырған 

222
тәртіппен  өңделген  болуы  мүмкін  объектілердің  жергілікті  көшірме-
лерін жасауға жылжыту арқылы келуге және шағымдануға шақыруды 
пайдаланады.
Scala  анықтамалық  объектілерін  беру  үшін  мәніне  функционалдық 
бағдарламалау және қоңырау үшін кешенді білдіру беру үшін аты бой-
ынша  шақыруды  қолдайды.  Функциялар  бірінші  класты  объектілері 
болып  табылады  және  параметрлерін  ретінде  берілуі  мүмкін.  Бағдар-
ламаларды  функционалдық  стиль,  және  объектілі-бағдарланған  стилі 
пайдаланып дамытуға болады.
Haskell трансмиссиялық параметрлерін кезінде кешенді өрнектердің өң-
деу үшін есімімен шақыруды орнына қажетінше қоңырау пайдаланады. 
Қажетті қоңырау артықшылығы күрделі өрнектер тек бір рет бағалана-
ды және кэштелген және келесі жолы кэштелген мәнінің көрінісін пай-
даланады.
ADA, C++, Clojure, Стандартты Lisp, Fortran 90 және Python, Ruby және 
F # параметр әдеткі мәндеріне рұқсат етілген. Бұл тиісті нақты параме-
трі нақты кіші қоңырау емес болса, формальды параметр кіші органға 
әдепкі мәнді өтеді дегенді білдіреді.
4.11 Қысқаша қорытындылар
Бұл тарауда біз абстракцияның түрлі бағдарламаларын талқыладық. Аб-
стракцияның  бағдарламалары  деректер,  мета  бағдарламалар,  ақпарат 
алмасу тетіктерін және тілдер арасында өзара іс-қимыл, сондай дерек-
тер абстракция, абстракция басқару, деректер жинау және инкапсуляция 
бақылау бағдарламасын қамтиды.
Деректер абстракция жеке элементі, бірнеше атрибуттары бар құрама 
нысандар, деректер объектілердің жиынтығы, ақпарат кеңейтілетін ор-
натылған уақытты, әлемдік ауқымдағы және тұрақты объектілері ақпа-
раттық объектілер мен өтпелі объектілерін желісін іске асыратын ны-
сандар болып табылады. Жекеленген ақпараттық объектілер бүтін сан, 
өзгермелі (немесе нақты), түртіндінің жолының немесе есеп жиынтығы 
элементі ретінде осы базалық түрі жарнама арқылы моделденеді. 
Компазициялық атрибут аталған кортеж сияқты әртүрлі типтер мен аб-
страгцияланатын әртүрлі өрістер тұрады. Бағдарламалау тілдері ретте-
луіне және жолаққа жақсы қол жеткізу үшін атындағы өрісі бар аталған 
кортеждерді  пайдаланады.  Ақпараттық  объектілердің  жинағы  жиын-
тық, реттелген жиынтық, мултикөптік, мултикөптік орнату немесе мул-
тикөптік (негізгі, мән) жұп ретінде абстрактілеге болады. Негізгі (басты, 
мән) жұптарының жиынтығы әр деректер нысаны үшін бірегей болып 
табылады. Осы барлық жинақтар бағдарламасын бірге орындау кезін-

223
де қол жеткізу және жаңарту жеңілдету үшін атауларымен байланысты 
болады.  Түрлі  деректер  құрылымын  ақпараттық  объектілердің  жиын-
тығын іске асыру үшін пайдаланылуы мүмкін. Ол байланысты тізімдер, 
индекстелген  жиымдарды,  векторлары  және  хэш  кестелерді  пайдала-
нып жүзеге асырылуы мүмкін. Кеңейтілген байланысты индекстелген, 
және кеңейтілетін - - ағаштар мен хэш үстелдер тізімдерін, векторларды 
пайдалана отырып жүзеге асыруға болады.
Бақылау  абстракциялары  Итератор,  Рекурсия  және  рәсімдерді  қоса 
алғанда, бірнеше тағайындау, командалар тізбегінен, командалық бло-
гында,  шартты  есептілігін,  итерациялық  жобалау,  оның  ішінде  тағай-
ындау операторлар сияқты функциялар мен процедуралар индекстелген 
айнымалылар болып табылады. 
Блоктар кем анықталатын құрылымдар хабарландырулар және коман-
далар сериясы болып табылады, және жарнама облысы блок шектелген  
болады. Блоктар деректер мен код көрінуін бақылауға табиғи шекара-
сы қамтамасыз етеді. Ат қойғанда көріну реттеу блоктар мен модуль-
дер ішінде аттас идентификатор икемділігін қамтамасыз ету үшін, сон-
дай-ақ жанжалдарды болдырмау үшін маңызды болып табылады.
Модульдер ендірілген кіші және деректер абстракцияның табиғи шека-
расын қамтамасыз ететін абстракцияның басқа деңгейін білдіреді. Блок 
және  модуль  арасындағы  айырмашылық  ол  блоктар  кіші  рәсімдерді 
қамтиды және модульдер бірнеше рәсімдерді қамтиды. Модульдері бо-
лашақта жеке-жеке пайдалану үшін құрастырылған және мұрағаттауға 
болады.    Басқа  модульдерді  кіші  және  деректер  абстракция  экспорт-
тық-импорттық  механизмі  көмегімен  пайдалануға  болады.  Модулдегі 
объект басқа модульдерге экспортталғаннан кейін ғана көрінеді, және 
модулде  тек  анық  импорт  декларациялау  объектісінен  кейін  пайдала-
нуға  болады.  Сынып  деректер  жинау  және  деректер  абстракцияның 
үшін  жұмыс  тәртібін  қамтитын  пассивті  үлгісі  болып  табылады;  ны-
сандар - белсенді ингредиенттер бар сынып, жағдайлары, және жұмыс 
уақыты мәртебесіне ие.
Рәсімдер арасындағы ақпарат алмасу (1) жаһандық айнымалы, (2) бір-
неше  айнымалылар,  (3)  объектілі-бағытталған  тілдерінде  айнымалы-
лар, (4) төмен деңгейлі іске асыру және FORTRAN бұрын іске асыруға 
жадындағы жалпы ауданы, және(5) параметр беруді пайдалана отырып 
туындауы  мүмкін  құрылымдық  бөлімшенің  бар  тілдерінде  параметрі. 
Тасымалдаушы  айнымалы  мән  болғандықтан,  айнымалылар  R-мәні 
шығарып алуға болады, барлық атрибуттары беріліс параметрлерін пай-
далануға  болады.  Жалпы  үш  атрибут  бар:  атауы,  жады  ұяшығы  және 
R-мәні.  Нәтижесінде  біз  параметр  өту  тетіктерін  бес  негізгі  түрлерін 

224
талқылаймыз:  аты  бойынша  шақыру,  сілтеме  бойынша  шақыру,  мәні 
бойынша шақыру, мәннің нәтижесі бойынша шақыру және нәтиже бой-
ынша шақыру. 
Мәні бойынша шақыру  нақты параметр және көшірмелерін жергілікті 
айнымалы ретінде ресми параметр мен процестер формальды параме-
трді бағалайды. Байланыс біржақты тәртіппен жүреді, және шақырушы-
ның  ескі  есептелген  нәтижелер  қайтып  берілмейді.  Сілтеме  бойынша 
шақыруда  формальды  параметр  нақты  параметрдің  жад  мекенжайын 
тасымалдайды.  Композициялық  ақпарат  объектілері  немесе  ақпарат-
тық деректер жиынтықтары жағдайында деректер құрылымын базалық 
адресі ресми параметрге беріледі. 
Деректер  құрылымы  абоненттік  ортада  болып  табылады  және  оған 
қатынасу базалық мекен-жайы + жеке элемент (немесе күрделі объек-
тілерді жағдайда астыртын) арқылы жүзеге асырылады. Нысан бағдар-
ланған тілдер объектілерін сақтау үшін үйіндісін пайдаланады. Үйіндіде 
сақталған күрделі объектілер және динамикалық объектілерге сілтеме, 
сілтеме деңгейінде беріледі. Мәні бойынша шақыруды пайдалана оты-
рып,  нысан сілтемені көшіруге болады. тек оқу және алмасу үшін қоңы-
рау сілтеме қоңырау: Біз сондай-ақ қысқаша сілтеме бойынша шақыру 
екі параметрлерін талқыладық:оқу үшін сілтеме бойынша шақыру және 
айырбастау бойынша шақыру.
Сілтеме  бойынша  шақырудың  ресми  параметрін  сақталған  сілтеме-
лерді пайдаланып оқға болады, бірақ олар жаңартылмаған болады. Ол 
кез келген кездейсоқ деструктивті жаңғырту бағдарламасына дұрыс мі-
нез-құлық әкелуі мүмкін нақты параметрлерін болдырмау үшін маңы-
зды  болып  табылады.  Айырбастау  бойынша  шақыру  бірінші  сілтеме 
бойынша  шақыруды  көрсетеді,  ал  содан  кейін  басқа  шақырулар  кіші 
сілтемелері  алмасып  мәнге  шақыруды  пайдаланып,  қоңырау  тізбегін-
де рәсім қоңырау орындалады. Біз басқа идентификатор дисплей жады 
болуы  мүмкін  жұмыс  циклі  индекстелген  айнымалы,  есептеу  атынан 
үндеу  жүгіру  уақытындағы    күтпеген  мінез-құлық  мәселелері  талқы-
ланды. Қажеттілік бойынша шақыру аты бойынша шақырудың бір түрі 
болвһып саналады және онда өрнек бір рет есептеліп, ал сол есепке крек 
келесі кіріспенің мәні кэштеледі. Кейінгі қосалқы өрнектерді бағалау-
дың орнына, кэштелген мән тиімділігін арттыру үшін пайдаланылады.
Біз  бірақ  қызмет  белгі  бағдарламалар  салыстырғанда  неғұрлым  ұзақ 
кезеңімен,  шақырушының  бағдарламасы  бойынша  қолжетімді  және 
өзгертілетін,  сақталуын  өзгертетін  жанама  әсері  талқыландық.  Жа-
нама  әсер  нәтижесі  модификация  әсері  тіпті  кіші  аяқталғаннан  кейін 
бөлінбеген  болып  табылады.  Егер  әсер  арнайыланбаған  болса,  онда 

225
коммутативті  өрнектерді  счияқты  негізгі  бағдарламалау  принциптері 
мінез-құлық бағдарламасын орындау кезінде өзгеруі мүмкін. Тиімділігі 
қолдану ұштастыра отырып, тізбекті актілерінде сондай-ақ бағдарлама-
лардың ретсіз мінез-тудыруы мүмкін.
Бірінші деңгейдегі нысандар іске қосу уақытында деректер түрінде са-
лынған, содан кейін бағдарламаның айналдыруға болады. Метабағдар-
лама  басқа  бағдарламаны  бағдарламаның  мінез-түсіндіру  қасиеттерін 
алу  абтрактілі  доменінді  деректер  ретінде  немесе  бағдарлама  ретінде 
қабылдайды.
Ерекшелік өңдейтін бағдарламалар неғұрлым сенімді етеді және таста-
удың біртіндеп босату мүмкіндік береді. Реакция интерфейс деректер 
түрі мен абстракцияның деректер шақыру өңделген мен бағдарламалар-
ды деп атауға болады. Бұл анықтау тілдері нақты интерфейсінің көме-
гімен  немесе  екі  түрлі  программалау  тілдері  арасындағы  айырбастау 
мәліметтерін анықтайтын ортақ тіл сипаттамасы және метадеректерді 
пайдалана отырып жасауға болады.
Соңында, АDA, C, C ++, C #, Java, Modula-3, Ruby және Scala сияқты 
тілдердің әр түрлі деректер абстракцияның және менеджментіндегі кей-
бір мысалдарды қарадық
Нақты  паргадигмаларға  арнадған  нақты  парадигмалары  бар  тілдердің 
басқа  мысалдар  мына  тарауларда  беріледі:  функционалдық  бағдарла-
малау  парадигмасын  9-тарау  Lisp,  Scheme,  и  Haskell  мысалдары;  ло-
гикалық  бағдарламалау  парадигмасын  10-тарау  Prolog-та  бағдарлама-
лау және ақпарат алмасу тетігін мысалдар; C # объектілі-бағдарланған 
мүмкіндіктерін  көрсететін  Толық  мысалдар,  C  #  ,,  Java,  Ruby,  Scala 
және Modula-3, объектілі-бағытталған программалаудың парадигмасын 
11-тарау; 14-тарауында  Python, Perl және Lua сияқты сценарийлер про-
граммалау тілдерінің мысалдары.
4.12 Баға
4.12.1 Концепциялар және Анықтамалар
Нақты параметр; бірлігі; тегістеу; бекіту; хабарландыру тақтасы; блок; 
көшірмесін жасауға шақыру; қозғалыстағы міндет; аты бойынша шақы-
ру;  қажеттілігі  бойынша  шақыру;  сілтеме  бойынша  шақыру;  нәтиже 
бойынша шақыру; алмасу бойынша шақыру; мәні  бойынша шақыру; 
мән нәтижесі бойынша шақыру; кіріс бойынша шақыру; тарату тізбегі; 
класс; ақпараттық объектілердің жиынтығы; ортақ тіл ; таралған түрі; 
композициялық ақпарат нысан; шартты өтініш; абстракция басқару; де-
ректер абстракция; жарнама; деструктивті жаңарту; ерекшелікті өңдеу; 
кеңейтілетін ақпарат нысан; бірінші класс объектісі; формальды пара-

226
метр; жаһандық айнымалы; қорғау; сақталған команда; өзгермейтін ны-
сан; импорттық-экспорттық; ақпарат алмасу; ақпараттық жасыру; мұра-
лық жер; Итерация; итератор; карта; метадеректер; метапрограммалау; 
модуль; бірнеше мақсаты; айнымалы объект; мутаторы; өзара рекурсия; 
атындағы теру; анықталмаған бағдарламалау; жергілікті емес айныма-
лы; нысан; нысан сыныбы.
4.12.2 Тапсырманы шешу
1. жоғары  жылдамдықты  бағдарламасы  Modula-3,  C  ++  және  Java
бағдарламалау тілдерінде жазу, және программалау тілдері пайдаланы-
латын түрлі абстракция салыстырыңыз.
2. Сұрыптауды орындайтын «moya_sort» деп аталатын біріктіру модулін
Modula-3, және ADA 2012 бағдарламасында жазып содан кейін ретпен 
деректер  элементтерін  оқи  және  жаза  үшін  бағдарламаның  негізінде 
оны пайдалану
3. Қонақ  үй  екі  өлшемді  массив  hotel[5,  120]  ретінде  абстрагталады,
онда  бірінші  өлшеу  қабаттарды  көрсетеді,  ал  екінші  өлшеу  нөмірлері 
шегінде болды. Әрбір объект b байт деректер алады. Теңдеуі есептеу 
үшін hotel[i, j], ығысу беріңіз, және оны алу үшін жылжу үшін орна-
ласқан бөлме нөмірі 18, 4-ші қабатында орналасқан деп алыңыз. Мыса-
лы, нөмірлеу 1, 0 басталады. 
4. Класс оқушылары деп аталатын 30 композициялық деректер объек-
тілерін массив ретінде модельдеу. Әрбір құрылтай деректер нысан кор-
теж  түрінде  (аты,  жасы,  факультеті,  жыл)  ретінде  модельдеу.  атауы  4 
байт жасы бүтін ретінде модельдеу 32 кейіпкерлердің белгіленген өл-
шемді жолы ретінде модельдеу деп есептейік, факультеті 4 байт бүтін 
ретінде модельдеу, және 4 байт жылына бүтін ретінде модельдеу. Хабар-
ландырдағы түрлі салалар ауыстыруын [I] .name деп есептеңіз.
5. Тілі параметр өту төрт түрін қолдайды деп есептейік: мәні бойынша
шақыру, сілтеме бойынша шақыру, нәтиже мәні бойынша шақыру, ніти-
же бойынша шақыру.  Келесі бағдарлама үшін жолдар мәлімдеме көр-
сететін сондай-ақ әр түрлі бағандар айнымалылар және ресми параме-
трлерін көрсететін екі өлшемді матрица түрінде әрбір мәлімдемесінен 
кейін жолды көрсету қажет. & сілтеме өткізетін нақты параметр деп, ал 
# нәтиженің мәні боәйынша шақыруды білдіретін нақты параметр деп, 
ал $ нәтиже бойынша шақыру арқылы параметрлерді жіберуді пайдала-
натын нақты параметр деп есептейік. 
Program main (  )
integer i, j, k, a[6];

227
i = 0; j = 0; k = 2; a[0] = 1
for (i = 1; i =< 5; i++) a[i] = a[i-1] * 2;
messy(a[3], &a[4], &j, &j, #a[3], $a[4]);
}
void messy( integer a, *b, *c, *d, e, f)
f = 2;
a = *b + *c + e;
*b = *d + f;
*c = a + *b;
*d = *c - *d;
e = *b + *c + e;
f = e + a;
}
6. Көпіршікті сұрыптауды ADA, Modula-3, C #, Java-да жазыңыз және
төрт бағдарламада пайдаланыланылған жинау және трансмиссия пара-
метрлерін салыстырыңыз.
4.12.3 Толық жауап
7. Кеңейтілетін деректер абстракция қалай жүзеге асырылуда? Талқы-
лау.
8. Көп кітапхананы дамуындағы экспорты мен импорты артықшылығы
неде? Түсіндіріңіз.
9. Класс тұжырымдамасы және модульдер тұжырымдамасы арасындағы
айырмашылық неде? Айқын түсініктеме беріңіз.
10. Айты бойынша шақырудың қандай проблемаларыбар? Қарапайым
мысалдарды пайдаланып түсіндіріңіз.
11. Қажеттілік  бойынша  шақыру  денегіміз  не?  Оның  аты  бойынша
шақырумен  салыстырғанда  тиімділігін  қандай  ?  Қарапайым  түсінікті 
мысалдарды пайдаланып түсіндіріңіз.
12. Алмасу бойынша шақыру дегенім не? Оның  мәні бойынша шақыру-
мен  ұқсастығы қандай? қарапайым схемасын пайдалана отырып, түсін-
діріңіз.
13. Сілтеме бойынша шақыру мен мәні бойынша шақыру арасында қан-
дай айырмашылық бар? механизмі және тиімділігі тұрғысынан түсін-
діріңіз.
14. Модулдер  мен  экспорттық-импорттық  механизмдердің  жергілік-
ті  емес  айнымалылар  қолдайтын  розетка  процедураларынан  ар-
тықшылықтары қандай? Түсіндіріңіз.
15. Қандай жағдайда нәтиже мәні бойынша шақыру сілтеме бойынша
шақыруға қарағанда қолайлы болып табылады?

228
16. Таратылады  есептеу  үшін  параметрлерді  жіберіге  арналған  меха-
низмдерді түсіндіріңіз және салыстыру.
17. Әр түрлі программалау тілдері арасындағы өзара әрекеттесті қамта-
масыз ететін механизмдер қандай? Түсіндіріңіз.
18. Ерекшеліктерді өңдеу механизмдер бар? Түсіндіріңіз.
19. Экспорттық-импорттық  механизмін  жергілікті  емес  айнымалылар
және мұрагерлікпен салыстырыңыз.
20. Модульдер,  сыныптар  мен  объектілер  арасында  қандай  айыр-
машылық бар? Түсіндіріңіз.
Қосымша әдебиет
Абельсон, Гарольд, Сассман, Джеральд Дж. және Сассман, Джули. 
Компьютерлік бағдарламалардың құрылымы және интерпретациясы, 
2-е басылым. MIT Пресс. 1996.
Американдық ұлттық стандарттар институты. Ada бағдарламалау тілі. 
CSAISO/IEC 8652:201z. 2012. Онлайн қол жетімді http://www.adaic.org/
ada-resources/standards/ada05/
Биррелл,  Эндрю  Д.  и  Нельсон,  Брюс  Дж.  «Қашықтан  шақыру  проце-
дураларын жүзеге асыру.» Компьютерлік жүйелер ACM операциялар
2(1). 1984. 39-59.
Блэк,  Эндрю,  Хатчинсон,  Норман  С.,  Джул,  Эрик  и  Леви,  Генри  М. 
«Emerald  бағдарламалау  тілін  құрастыру».  Бағдарламалау  тілдері  та-
рихы  бойынша  материалдар  HOPLIII ACMSIGPLAN  Үшінші  Конфе-
ренциясы бойынша жұмыс. 2007. 11-1-11-51.
Колинбьерн, Хью. Ruby тілі туралы кітабы. NoStarch Пресс. 2011.  
Дейкстра,  Эдсгер  У.  Бағдарламалауды  дисциплиналау.  Прентис  Холл. 
1976.
Хоар, Чарльз А. Р. «Компьютерлік бағдарламалаудың аксиомалық негіз-
дері». ACM-ға мәдімет жіберу, 12(10). 1969. 576-583.
Гудак,  Пол,  Хьюз,  Джон  и  Джонс,  Саймон  Р.  «Haskell  тарихы:  Клас-
старға күш жімсама». Тілдер бағдарламалау ACMSIGPLAN әңгімелері 
үшінші конференциясының жұмысы. 2007. 12-1-21-55.
Кеннеди, Кен, Колбэл, Чарльз и Зима, Ханс. «Өнімділігі жоғары Fortran 
тілі  жетістіктері  мен  жеңілістері:  Тарихи  нысан  сабағы.»  Тарих ACM 
SIGPLAN бағдарламалау тілдері бойынша үшінші конференциясының 
жұмысы. 2007. 7-1-7-22.
Кляйн,  Питер.  «Module-3  Бағдарламалық  қамтамасыз  етуді  әзірлеу». 
Техникалық есеп 94-16. Информатика III, Аахен технология универси-
тетінің департаменті. 1994.
Лисков, Барбара и Гуттаг, Джон. Бағдарламаны әзірлеу абстракциясы 

229
және спецификациясы.MITПресс. 1986.
Лисков,  Барбара  и  Гуттаг,  Джон.  Java  Бағдарлама  дамыту:  абстрак-
цияның, нақтылау, нысан-бағытталған жобалау.Эддисон-Уэсли. 2000.
Одерски,  Мартин,  Спун,  Лекс  и  Веннерс,  Билл.  Scala  бағдарламалау: 
толық нұсқаулық, 2-е басылым. Artima Инкорпорейшн. 2011.
Страуструп, Бьерн. «Нақты әлемдегі және әлем үшін тіл эволюциясы: 
С++ "1991-2006". ACM SIGPLAN бағдарламалау тілдері тарихы үшінші 
конференциясының жұмысы. 2007. 4-1-4-59.
Ватт,  Дэвид  А.  Бағдарламалау  тілдері  ұғымдар  мен  парадигмалары
Прентис Холл, 1990.
Вирт,Николас.«Module-2 және Oberon». ACM SIGPLAN бағдарламалау 
тілдері тарихы үшінші конференциясының жұмысы.2007.3-1-3-10.

230
5. Императивті тілдердегі үлгілерді
үлестіру
Негізгі  концепциялар
Абстракция және ақпарат алмасу (4-тарау); есептеу аннотациялық 
ұғымдар (2.4 бөлім); деректер құрылымы тұжырымдамасы(2.3 бөлім); 
Бағдарламалар мен бөліктері (1.4 бөлім); Рекурция (бөлім 2.2.4); Фон 
Нейман машинасы (2.1 бөлім).
Осы тарауда және келесі тарауларда біз төмен деңгейлі абстрактілі ма-
шинаның  көмегімен  бағдарламаларды  іске  асыруды  оқимыз.  дерексіз 
машина аралық деңгейде жоғары деңгейлі бағдарламалау конструкци-
ялық  арқылы  жандандыру  туралы  абстрактілі  түсініктеме  береді.  Аб-
страктілі моделді іске асыру көмегімен біз төмен деңгейлі абстракция-
ның динамикалық мінез түсінеміз және талдаймыз, Ол үшін (1) басқара 
алады жақсы және барынша тиімді бағдарламалар жазу және (2) компи-
лятор үшін генератор кодын дамыту керек.
Төмен  деңгейлі  түрлендірілетін  коды  жад  бөлу  схемалары  төрт  түрін 
пайдалана отырып жүзеге асырылуы мүмкін: (1) статикалық тарату ;( 2) 
буманың бөлу негізінде; (3) үйілген бөлу негізінде; және оңтайлы сақтау 
үшін алғашқы үш табыстарды біріктіретін (4) гибридті тарату сұлбасы. 
Бұл тарауда біз стек негізделген бөлу және гибридті бөлу статикалық 
бөлу қарастырамыз. Біз (1) стеке жергілікті динамикалық айнымалылар 
таратады деп гибридті бөлу (2) үйіндінің рекурсивті және динамикалық 
деректер құрылымдар таратады, сондай-ақ (3) тиімді Жад тікелей қол 
статикалық айнымалы статикалық таратуды пайдалануға бағытталған.
Статикалық бөлу схемалары компиляция кезінде бірінші кезекте қажет-
ті жад бөледі сондай-ақ іске қосу уақытында жадтың өсуін қолдамайды. 
Осы схема артықшылығы әрбір деректер элементі бірегей жадындағы 
салыстырылған  және  жад  қол  жеткізу  арқылы  тікелей  кіруге  болады. 
Алайда оның кемшіліктер де бар. Статикалық бөлу қолдау көрсетпейді 
(1) рекурсивті процедуралар, өйткені жад орындау кезінде рекурсивті 
рәсімін тудыруы мүмкін-өздерін белгісіз саны есеге өсуін қажет етеді (2) 

231
рекурсивті деректер құрылымы сияқты байланысты тізімдер, ағаштар 
мен  векторлар  ретінде  кеңейтілетін  рекурсивті  деректер  құрылымын 
уақыт белгіленбеген мерзімге ұзартылады және орындау кезінде жадын 
көбейту керек болуы мүмкін; және (3) орындау кезінде объектілердің 
динамикалық  құру,  өйткені  ол  уақыт  орындау  бойынша  динамикалық 
объектілер мен естеліктер салыстыру қажет етуі мүмкін.
Орындау кезінде жады артуы статикалық бөлу арқылы қолдамайды, өй-
ткені барлық үш шектеулер пайда болады. Әрбір объект бірегей жады 
ұяшығында  салыстырылған,  себебі  статикалық  бөлу,  сондай-ақ,  ысы-
рапқорлық жады болып табылады, және тарату қызметі қазіргі уақыт-
та  таратылады  нысанның  өткеннен  кейін  жад  ұяшықтарының  қайта 
бөлуге мүмкіндік бермейді.. Сондықтан, статикалық бөлу схемасы (1) 
бағдарламалардың құрылымдық блогы қолдайтын бірнеше қоңыраулар 
бойынша функциялары мен рәсімдерін кіші бағдарламасы шеңберінде, 
өйткені ол қайта пайдалану жад қолдайдтындықтан (2) білім берудегі 
объектілі-бағдарлы  программалау  жасайтын  динамикалық  объектілер; 
(3)  орындау  кезінде  ұзартылуы  мүмкін  рекурсивті  деректер  құрылы-
мын; және (4) орындау кезінде жад өсуін талап ететін рекурсивті сияқты 
ретінде тілдік функциялард үшін қолайлы емес. 
Стек  негізделген  тарату  жергілікті  десте  және  бақылау  стек  деп 
аталатын  стек  пайдаланады.  Стек  пайдаланудың  көптеген  ар-
тықшылықтары бар. Бөлу негізінде стек рекурсивті рәсім қолдайды, 
өйткені стек рәсімдерді шақырта отырып өсуді, және кезінде компиля-
ция тіркелмейді. Стек мөлшері операциялық жүйесі арқылы ғана шек-
теледі.  Стек  өсуі  мүмкін  болғандықтан  стек  басқармасының  шақы-
ру  кезінде  кіші  бағдарламаны  орындау  кезінде,  өйткені  жергілікті 
қоймаға шақырылатын процедураға беріледі. Шақырыған программа 
аяқталғаннан кейін бағдарлама деп аталатын жергілікті сақтау орны 
шығады,  және  де  ол  орынды  босатады,  және  келесі  шақырылатын 
бағдарламаға  үшін  қайтадан  орындалады.  Стек  негізделген  бөлдің 
негізгі  кемшілігі  оларды  құрылған  ескі  өмір  арқылы  жүріп,  тізімдер, 
ағаштар, векторлардың немесе қарқынды құрылған объектілер сияқты 
қарқынды кеңейтілетін деректер құрылымды қолдаудың жоқтығы бо-
лып табылады. 
Үйіндінің бөлу негізінде үйінді деп аталатын ортақ жад аймағын пай-
даланады,  оны онымен  қызмет  мерзімі бірдей барлық бағдарламалар 
көріп, бұл кеңейтілетін деректер құрылымдардың, оның ішінде және 
қарқынды объектілерін құрады, деректер құрылымдардың барлық түр-
лерін орналастыруға болады.
Үйме бойынша бөлу үймеге сақталған процессордың тізілімдердің не-

232
месе деректер құрылымында бірінші деректер ұяшыққа арналған стек 
бақылау тапсырмаларын меңзермен негізделген, содан кейін сол логи-
калық деректер құрылымын басқа деректер ұяшығын айналып дерек-
тер  жасушаларының  арасындағы  ішкі  көрсеткіштерді  пайдаланады. 
Әрбір көрсеткіші жад мекенжайы болып табылғандықтан рекурсивтық 
құрылымдар  айналымы  жадқа  арналған  көптеген  өтініштерді  талап 
етеді.  Орындау  кезінде  операциялық  жүйе  үйме  кеңістігі  автоматты 
түрде ұзартылуы мүмкін немесе бағдарламалау нұсқаулары бағдарлама-
сымен енгізілуі мүмкін. Таратылатын деректер құрылымын жойғаннан 
кейін, жад босатылады және қайта циклы үшін деп белгіленеді. Бөлінген 
жады кеңістік толығымен толтырылады кейін, содан кейін екі нұсқасы 
бар: (1) операциялық жүйесі арқылы жады кеңістігі арттыру, немесе (2) 
қайта бөлу үшін босаған орынды пайдалану. Бірінші тәсіл операциялық 
жүйенің қол жетімді жадқа байланысты. Екінші тәсіл еске қайта кәдеге 
жарату өндіреді және қоқыс жинау деп аталады.
Барлық  үш  модельдердің  өзіндік  артықшылықтары  мен  кемшіліктері 
бар. Статикалық іске асырудың негізгі артықшылығы айнымалы орна-
ласқан жадқа қатынау бірыңғай жады қосылысты қолдана отырып алуға 
болады. Стек негізделген бөлу негізгі артықшылықтары (1) рекурсивті 
өңдеу  процедураларын  мүмкіндігін  және  (2)  кіші  аяқталғаннан  кейін 
еске қалпына келтіру есебінен жадты қайта пайдалану болып табыла-
ды.  Үйме  негізінде  бөлудің  негізгі  артықшылықтары  1)  кеңейтілетін 
деректер  объектілерін  тарату  және  серпінді  объектілер  құру  және  2) 
қарқынды мерзімі аяқталғанда және кеңейтілетін құрылымдық дерек-
терді  немесе  динамикалық  нысандарды  бөлінген  кезде  жадты  қайта 
қолдану болып табылады. Қазіргі заманғы программалау тілдері барлық 
үш тәсілдерді пайдаланатын гибридті дистрибуциялау моделін пайда-
ланады. Гибридті тарату моделі, статикалық айнымалы және жаһандық 
айнымалылар үшін статикалық тарату, бағдарлама блогындағы динами-
калық жергілікті айнымалылар үшін стек негізіндегі бөлуді, және рекур-
сивті деректер құрылымы және серпінді жасалған нысандар үшін үйінді 
негізіндегі  бөлуді пайдаланады. Бұл тарауда біз басқару абстракцияның 
төмен деңгейлі код өтуін, дестесін негізделген статикалық бөлу схемасы 
және бөлу схемасын талқылаймыз. Біз сондай-ақ әр түрлі параметрге 
өту тетіктерін өңдеу қатарын басқару тәртібін талқылаймыз. Келесі та-
рауда біз үймені пайдаланып динамикалық жады басқару талқылаймыз.

Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   26




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

    Басты бет