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



Pdf көрінісі
бет3/26
Дата20.12.2019
өлшемі6,26 Mb.
#53875
1   2   3   4   5   6   7   8   9   ...   26
Байланысты:
Бағдарламалау тілдеріне кіріспе (1)


 
Semantic analysis and intermediate 
code  generation  -  Семантикалық  талдау  және  аралық  кодты  шығару; 
Symbol table – Рәміздік үстел; Compiler – Компилятор; Errror handler - 

27
Қате өңдегіші; Intermediate code - Аралық коды; Low-level translation - 
Төмен деңгейдегі аударма; Object code - Нысан коды; Linker – байланы-
стырушы; Other object codes - Өзге нысан кодтары; Loader – Жүктеуші; 
Shared system library - Ортақ жүйелік кітапхана; CPU executable – Орын-
далатын CPU.
Орындалатын процессор
 1.11-сурет. Компьютерде орындау үшін жоғарғы деңгей бағдарламала-
рын аудару.
Лексикалық сараптаушы кейінге сақталған сөздердіяғни тілдің, иден-
тификатордың, айнымалылардың және сандардың бөлігі болып табыла-
тын сөздерді тексеріп, синтаксистік сараптаманы жеңілдету мақсатында 
оларды маркерлер деп аталатын ішкі түсінікке айналдырады. Лексика-
лық сараптаманың соңы – бұл маркерленген ағын және ол синтаксистік 
сараптаманың  бастауы  болып  табылады.  Синтаксистік  сараптаушы 
бағдарламалық  сөйлемнің  құрылымын  бағдарламалау  тіліне  сәйкес 
тексереді. Код генерациясы барысында ішкі өңдеуді жеңілдету мақса-
тында оның соңы ағаш (деректер құрылымы) түрінде беріледі.  Семан-
тикалық  сараптаушы  генерацияға  ұшыраған  сөйлемдердің  мағыналы 
болуын  және  код  генераторы  дерекетер  құрылымын  сәйкес  төменгі 
деңгей нұсқауларының  аралық код жүйесіне желілендіруін тексереді. 
Оңтайландыру  деңгейі  кодтың  артық  үзінділерін  жойып,  орындалып 
отырған кодтың тиімділігін арттыру үшін процессор тіркелімдерін қол-
дануды жетілдіреді. Белгілер кестесі ақпаратты бұған дейінгі сатылар-
дан қалған ақпаратты сақтау үшін қолданылады. Бұл ақпарат келесі са-
тыларда қажет болуы мүмкін. Белгілер кестесі қамтитын ақпаратқа ай-
нымалылардың атаулары мен олардың орналасуы, үдерістердің тіркелу 
деңгейі, жергілікті емес айнымалылар, үдеріс қай жерде атау алды және 
тағы басқа туралы мәліметтер кіреді. 
Екі  сатылы  компиляцияға  қосымша  құрастырушы  көптеген  объек-
тілі файлдарды (компиляцияға ұшыраған код) бір үлкен орындалатын 
кодқа  байланыстырады.  Байланыстыру  бағдарламашы  арқылы  құра-
стыру  командасында  анықталған  тәртіп  бойынша  жүзеге  асырылып, 
үдерістердің шақырушы үлгілеріне тәуелсіз болып табылады. Бағдар-
ламаның компиляцияланған коды орындалатын кодта тек бір рет жүзеге 
асырылады және ішкі бағдарламаны шақыру жиілілігіне тәуелді емес. 
Байланыстырудан кейін үдерістердің өзара орналасуы туралы ақпарат 
бекітіледі.  Жүктеуші  байланыстырушы  кодты  жүктейді.  Бұл  код  сег-
ментте,  яғни  пайдаланушылық  үдеріске  арналған  жад  аясында  орын-
далады. Жүктеуші ОЕҚ физикалық адресіне (оперативті есте сақтаушы 

28
құрылғы) логикалық адресті алмастырады. Жүктелген, орындалу үстін-
дегі  файл  процесс  деп  аталады  және  операциялық  жүйенің  бағдарла-
малық  қамтамасыз  етуі  мен  аппараттық  әдістердің  қисындастырылуы 
арқылы орындалады. Бұл әдістермен сіздер операциялық жүйелер кур-
сында  танысасыздар.  Динамикалық  құрастыру  кітапханалары  –  бұл 
түрлі  бағдарламалық  қосымшалар  арқылы  қайта-қайта  қолданылатын 
жалпы жүйелік кітапханалар. Динамикалық құрастыру кітапханасының 
механизмдерімен сіздер операциялық жүйелер курсында танысасыздар. 
1.5 Бағдарламалау тілдерінің сәйкестілігі
Бағдарламалау тілдерінің сәйкестілігі – бұл бір тілдегі код үзіндісінің 
бағдарламалаудың басқа тілдеріндегі код үзінділерімен өзара әрекетке 
түсу қабілеті.Бағдарламалаудың қазіргі заманға сай тілдері  (1) күрделі 
тапсырманы  орындау  барысында  пән  салалырын  алмастыруды  қол-
дау  үшін  тілдің  сәйкестілігін;  (2)  түрлі  тілдерге  тән  абстракцияларды 
қолдануды;  (3)  төменгі  деңгей  тілдерінің  кітапханаларымен  әрекетте-
су арқылы тиімділікті арттыруды және (4) бағдарламалық қамтамасыз 
етудің жетілдірілген кітапханаларының кодтарын қайта қолдануды ба-
рынша  арттыруды,  бағдарламалық  қамтамасыз  етуді  қайта  қолдануды 
жақсартуды қамтамасыз етеді.
Сәйкестілікті  қамтамасыз  ету  мақсатында  ақпаратпен  алмасу  үшін, 
басқа тілдерде жазылған компиляцияға ұшыраған модульды қосу мүм-
кін болып, мета деректер, яғни басқа тілдерде код арқылы қолданысқа 
түсе алатын экспортталушы деректер типтері мен модуль жайлы жеке 
жарияланған мәліметтер қамтылуы тиіс. Бұдан басқа ақпаратпен алмасу 
өз жеке абстракцияларына хост тілінде қайта түрлендірілуі тиіс.  
Хост тілі мен түйіндес тілдердің арасында тілдің жалпы спецификация-
сы мен деректердің жалпы типтерінің жалпы спецификациясын қамта-
масыз ету беталысы байқалады. 
Жалпы тілдік спецификациялар (1) тілдер арасындағы келісілген тип-
терді  анықтау  және  қолдану  мен  (2)  корреспонденция  типі  туралы 
ақпаратты түрлі тілдерде шығару және сақтауды қамтиды. Кейбір ком-
паниялар, айталық Microsoft компаниясы, әрекеттесуге қажетті жалпы 
белгілер мен ережелерді қамтамасыз ету мақсатында NET жобасында 
қолданатын тілдің жалпы спецификациясын жетілдірген болатын. 
1.6 Бағдарламалық қамтамасыз етуді жетілдіру циклі 
Енді біз сіздердің назарларыңызды бағдарламалау тілдері мен бағдарла-
малық қамтамасыз етуді жетілдіру арасындағы байланысқа аударамыз. 
Бағдарламалау  тілдері  кейбір  нақты  уақыттағы  үдерістерді  автомат-

29
тандыру мақсатында ірі бағдарламалық қамтамасыз етуді әзірлеу үшін 
қолданылады.  Бағдарламалық қамтамасыз ету кодтардың жүздеген тар-
мақтарынан тұруы мүмкін. Ірі бағдарламалық қамтамасыз етудің сәтті 
дамуы бағдарламашылардың, жүйелік сарапшылардың және ретке кел-
тірушілердің көмегін қажет етеді. 
Бағдарламалық қамтамасыз етудің даму циклі бірнеше сатыдан тұрады: 
талаптар  сараптамасы,  жүйелік  сараптама  және  жобалау,  жетіл-
діру,  енгізу,  бастапқы  тексеру,  сынақтар,  іске  қосу  және  эфолюция.
Жаңа сатыға көшпес бұрын, алдағы үдерістерді айқындау үшін, әрбір 
орындалған  сатыдан  кейін  кері  байланыс  орнатылады.  Іске  қосудың 
соңында жүйенің мүмкіндіктері тұтынушыға түсінікті болып, олардың 
қажеттіліктері одан әрі дамиды. Жаңа қажеттіліктерді қанағаттандыру 
үшін жүйелік анализ және жобалау салаларында нақтылау жұмыстарын 
жүргізу қажет. Инкремент эволюциясы өткен сараптамалар мен жіберіл-
ген  жобалық  қателіктер  негізінде  дамиды,  сондай-ақ  бағдарламалық 
қамтамасыз етуді 
Талаптар  сараптамасы  сатысында  жүйелік  сарапшы  тұтынушының 
толық  емес  және  әдетте  әлсіз  анықталған  ақпаратты  автоматтандыру 
жайлы сұранысын, сондай-ақ басқа түрлі сұраныстарды тыңдайды. Ав-
томаттандыру көлемі мен жоба мақсаттары бекітілген болып табылады. 
Жүйелік сараптама сатысында жүйелік сарапшылар тобы автоматтан-
дырылатын жүйе мен оның көлемін зерттейді, содан кейін процесс үшін 
ақпараттық ағындар үлгісін әзірлейді. Жетілдіру сатысында алдыңғы 
қатарлы  бағдарламашылар  мен  жобалаушылардың  көмегімен  ақпарат 
ағыныннң үлгісі түрлі өзара байланысқан модульдерге жіктеледі. Бұл 
модульдердің тәуелсіз функционалды мүмкіндіктері бар, сондықтан бір 
модульдің  эволюциясы  басқа  модульдерге  айтарлықтай  әсер  етпейді. 
Түрлі модульдерден ақпаратты енгізу-шығару құрылғылары бекітіледі. 
Жобалаушылар  модульдерді  даму  потенциалымен  жобалайды,  себебі 
тұтынушылардың  қажеттіліктері  әрдайым  өсіп  отырады.  Тұтынушы-
лар қажеттіліктерінің эволюциясын болжамдау және елестету күрделі 
үдеріс болып табылады және тәжірибелі сарапшылар мен жүйені әзір-
леушілерді қажет етеді.  
Даму сатысында модульдер мен олардың байланыстары (модельдерді 
қосу-шығару)  әзірленіп  болған  соң  алдыңғы  қатарлы  бағдарламашы-
лар техникалық қиындықтар мен конструкция шектеулерін есепке ала 
отырып, әрбір модуль үшін деректер абстракцияларын, интерфейстерін 
және алгоритмдерді әзірлейді. Егер автоматтандыру біреуден артық пән 
саласын қамтыса, бұл жағдайда модульдер функционалдық сәйкестілік-
ті қолданатын бірнеше бағдарламалау тілдерін қолдана отырып әзірле-

30
неді. 
Жүзеге  асыру  сатысында  негізгі  жоғарғы  деңгейдегі  алгоритмдерді 
әзірлеуден кейін бағдарламалық код толық жетілген болып есептеледі. 
Бұл  бөлік  бағдарламашылар  тобы  арқылы  дайындалған  және  бұның 
алдындағы  сатыларда  әзірленген  деректер  ағымы  интерфейсіне  түр-
лендіріліп, сондай-ақ түрлі бағдарламалау модульдері арасында интер-
фейстің  бағдарламалық  модуліне  таралады.  Қателіктер  санын  азайту 
мақсатында  бағдарламашылар арқылы басқа модульдердің  жергілікті  
ерекшеліктерін қолдануды болдырмау үшін ақпараттың жасырын түрде 
сақталуы мақсатында түрлі іс-шаралар қолдануда. 
Кодты әзірлеу бағдарламалық қамтамасыз етуді жүзеге асыру үдерісінің 
тек үштен бір бөлігі болып табылады. Негізгі күш салулар тексеру, те-
стілеу және іске қосу сатыларында байқалады. Бағдарламашылар бағдар-
ламалық қамтамаыз етудің болашақ қажеттіліктері мен даму циклдеріне 
аса назар  аударып, бағдарламалық қамтамасыз ету саласының дамуын 
жеңілдетуді  қамтамасыз  етулері  тиіс.  Басқа  жағдайда  тіпті  кішігірім 
бағдарламалық немесе жобалық қателіктер бағдарламалық қамтамасыз 
етуді  жарамсыз  етіп,  күнделікті  негізгі  функциялардың  орындалуына 
кедергі келтіреді. Осындай қателіктердің бірі Y2K мәселесі болып табы-
лады. Бұл қателікті түзету миллиардтаған доллар көлеміндегі қаражат-
ты қажет етті.  Бағдарламалық қамтамасыз ету аса жедел компьютелік 
сәулеттер және жақсартылған аппарттық қамтамасыз ету секілді төмен-
гі деңгей технологияларының дамуына үлес қосуы тиіс. 
Тексерудің бастапқысатысында бағдарламашылар бағдарламаны тұты-
нушылар ұсынған іріктелген деректер бойынша тексереді. Бұл саты сәт-
ті  аяқталғаннан  кейін  әзірленген  бағдарламалық  қамтамасыз  ету  аль-
фа-нұсқа мәртебесіне ие болып, ретке келтірушілерге тұтынушының ал-
дағы зерттеулеріне жіберіледі. Ретке келтірушілер өзгерістерді енгізіп, 
үлгіні түзету және бағдарламаға өзгертулерді егізу үшін тұтынушылар-
мен кері байланыспен алмасады. Зерттеулер мен тексерулер барысында 
жаңа, түзетілген бета-нұсқа деп аталатын нұқса  қандай да бір қателікті 
анықтау мақсатында, тұтынушының іс жүзіндегі мәліметтерін қолдана 
отырып,  реттеуші  арқылы  барлық  бағыттарда  тексеріледі.  Бұл  үдеріс 
соңғы қателері жоқ нұсқа қосылмайынша жалғаса береді.   
Іске қосу сатысында нақтыланған нұсқа көпшілік арасында пайдалануға 
беріледі  (немесе  тұтынушы  арқылы  қолдануға),  сондай-ақ  зерттеулер 
мен  кері  байланысты  жинастыру  жұмыстары  басталады.  Тұтынушы 
бағдарламалық қамтамасыз етудің мүмкіншіліктерін көріп, бағдарлама-
лық қамтамасыз ету жұмыс орнында жалпы жүйемен біріктірілгеннен 
кейін  жақсартуларды  ұсынады.  Ұсынылған  өзгерістер  бағдарламалық 

31
қамтамасыз  ету  патчтері,  яғни  бағдарламалық  қамтамасыз  етудің 
кішігірім  бөлімдері  арқылы  немесе  жұмыс  орындарында  шағын  қа-
теліктер мен қауіпсіздік мәселелерін шешу үшін, бірден бағдарламалық 
қамтамасыз етуге енгізіледі. 
Белгілі бір уақыт аралығында бағдарламалық қамтамасыз етудің күшті 
және әлсіз жақтары анықталып, тұтынушы бағдарламалық қамтамасыз 
етуге енгізілетін жаңа қажеттіліктерді анықтайды, сондай-ақ бағдарла-
малық қамтасамыз ету эволюциясының жаңа итерациялық циклі баста-
лады. Бұл мерзімнің барысында аппараттық технологиялар да өзгеріске 
ұшырай алады, ал бағдарламалық қамтамасыз ету әртүрлі сәулеттерге 
тасымалдана алтындай етіліп, сүйемелденуі тиіс. Бағдарламалық қамта-
масыз етуді жетілдіру циклінің сызбасы 1.12-суретте бейнеленген. 
Industry  data  flow  information  -  Өнеркәсіп  деректер  қозғалысы  туралы 
ақпарат; System analysis - Жүйелік талдау; Model and forms to capture data 
flow - Деректер ағынын ұстау қалу үшін моделі және түрлері; Module 
development with input and output information flow and module functions 
- кіріс және шығыс ақпарат ағының модулін дамыту және модуль функ-
циялары; Modules – Модульдер; Algorithm development - Алгоритм да-
мыту; High-level solution - Жоғары деңгейдегі шешім; Code development
- Код дамыту; Code – Код; Alpha testing and refinement - Альфа тестілеу
және нақтылау; Refined code – Сараптылған код; Beta testing - Бета те-
стілеу; Developed code - Дамыған код; Need evolution - Эволюция қажет;
Module refinement - Модульды нақтылау.
1.12-сурет Бағдарламалық қамтамасыз етуді әзірлеудің циклі.

32
«(Жетілдіру  үстіндегі  жобаның)  сарқырама  үлгісі»  және  «спираль-
ді  үлгі»  тәрізді  бағдарламалық  қамтамасыз  етуді  әзірлеуге  арналған 
бағдарламалық циклдің көптеген үлгілері бар. Бұл үлгілер жоғарыдағы 
талқылауларға толықтай енгізілген жоқ. Алайда бұл үлгілерді салысты-
ру мен оларды егжей-тегжейлі зерттеу бағдарламалық инженерия кур-
сының щеңберінде қарастырылады. 
Бағдарламалық қамтамасыз ету уақыт өте келе дамиды және жаңа тех-
нологиялар  ескі  технологияларды  ығыстырғанша  әрі  қарай  дамуын 
жалғастырады. Бұл жағдайда бағдарламалық қамтамасыз ету үздік авт-
маттандырылу үшін әзірленуі тиіс. Өнеркәсіптік автоматтандыру сала-
сында төрт негізгі өзгеріс орын алған: 
(1) жоғарғы деңгейлі, объектіге бағытталған бағдарламалау тілдерінің
дамуы;  (2)жақсы  визуализация  үшін  визуалды  және  мультимедиялық
технологиялардың  дамуы;    (3)  тілдердің  жоғарғы  деңгейлі  деректер
қорларының дамуы және тасымалдауды жеңілдету мен Ғаламтор ресур-
стары арқылы бірігіп пайдалануға арналған XML секілді веб-тілдердің
дамуы.
Бағдарламалық  қамтамасыз  етуді  әзірлеу  топтық  жұмысты,  бағдарла-
малық  қамтамасыз  етуге  қызмет  көрсетуді,  ықшамдылық  пен  үздіксіз
эволюцияны  қажет  ететіні  анық.  Үлкен  топты  қажет  ететін  кез  кел-
ген бағдарлама ұзақ мерзім арасында бағдарламалық қамтамасыз ету-
ді стандарттауды, модульділікті, тұтынушы үшін қолайлылықты және
түсінікті болуды қажет етеді.
1.7 Дұрыс бағдарламалау тілінің критерийлері  
Дұрыс  бағдарламалау  тілінің  критерийлері  доменнің  қажеттіліктерін; 
бағдарламалық қамтамасыз етуді жетілдіруді, қызмет көрсету мен эфо-
люцияны,  өзара  әрекеттесу  мен  орындалу  тиімділігін  басшылыққа 
алады.  Критерийлердің  кейбіреулері:  (1)  абстракция,  (2)  модульділік, 
(3) ортогоналдық,  (4)  ерекшеліктерді  өңдеу,  (5)  тұтынушыға  қолай-
лы болу, (6) дискреттік, (7) түсінудің және техникалық қызмет көр-
сетудің ыңғайлылығы.  Бұның алдында біз абстракциялар, модульдік,
мобильдік және түсіну ыңғайлылығы жайлы талқылаған болатынбыз.
Ортогоналдық  бағдарламалау  тілдеріндегі  конструкциялар  бір  біріне
тәуелсіз болып, шамадан артық болмауы тиіс дегенді білдіреді. Ерек-
шеліктерді  өңдеу  мүмкіндігі  -  бұл  бағдарлама  жаңылыстарын  болды-
рмау  мақсатында  қателікті  түзету  үшін  тұтынушылық  үдерісті  бастау
арқылы қателіктердің пайда болу талаптарын бекіту мүмкіндігі. Атом-
дық электр станциясын бақылау, сондай-ақ ұшақ немес ғарыш кемесін
басқару  тәрізді  ірі  әрі  сыни  бағдарламаларда  бұл  маңызды  критерий

33
болып табылады. Дискреттік тілдің бағдарламаны түсінікті әрі оқуға 
ыңғайлы ететін конструкциялар мен мүмкіндіктерді сүйемелдеуге тиіс 
екенін  білдіреді.  Мысалы,  айнымалылардың  атаулары  бағдарламашы-
ларға  ыңғайлы  етіліп  ықшамдалуы  қажет.  Түсіну  ыңғайлылығы  мен 
жалпы  қарапайымдылық  бағдарламалық  қамтамасыз  етуді  жетілдіру-
мен, эволюциямен, техникалық қызмет көрсетумен және тілде бар аб-
стракциялар санымен тығыз байланысты. 
Сала басшылары қызықты сұрақ қойды: менің саламды автоматтандыру 
үшін қай тіл лайықты? Бұл сұрақ стандарттаудың базалық қажеттілігі-
нен туындайды, осылайша компаниялар белгілі бір уақыт аралығында 
бғдарламалық қамтамасыз етуді сүйемелдеу үшін аз ресурстарды жұм-
сайды. Өкінішке орай ешқандай ғажайып амал жоқ; барлық пән салала-
рын өңдей алатын тіл болмайды. Әрбір саланың өзіне тән түрлі талап-
тары бар. 
Мысалы, жүйелік бағдарламалау тілі құрастыру тілдеріне ұқсас болып, 
жад модульдері мен қосу/шығу құрылғыларына тиімді қол жетімділікті 
қамтамасыз етуге қажетті нұқсауларды қамтуы тиіс; жоғарғы деңгейдегі 
шамадан  тыс  абстракцияларды  қосу  тиімділіктің  кепілі  болып  санал-
майды. 
Ғылыми есептеулер тілі көшірмесіз екі үлкен матрица болуы тиіс, се-
бебі көшірмелеу үлкен көлемдегі жад кеңістігін жұмсап, ірі матрицалар-
ды бір кеңістіктен екінші кеңістікке көшіру барысында қосымша есеп-
теу  шығындарының  пайда  болуына  себепші  болуы  мүмкін.  Шынайы 
уақыттағы тіл шынайы уақытта болып жатқан оқиғаны жоғалтып алмас 
үшін  тиімді  болуы  тиіс.  Ынтымақты  тіл  түрлі  жариялауларды  болды-
рмауға  үлесін  қосады,  алайда  бұл  жағдайда  ол  жадты  оңтайландыру, 
тиімді орындаудың болмауы тәрізді қиындықтарға тап болып, кей кез-
дері бағдарламалар орындалу үстінде жаңылыс берулері мүмкін. 
Лайықты тілдерге қойылатын осы талаптардың көбі бір-біріне қайшы 
келеді.  Біз  бірқатар  жоғарғы  деңгей  абстракциялары  бар  дұрыс  тілді 
жетілдіргіміз  келсе,  аударма  үдерісі  аудармашыларды  қолданылатын 
жалпыланған  механизмдер  әсерінен  көп  артық  нұсқауларды  түрлен-
діреді.Дәл осылайша егер біз тілді құрастыру тілдеріне ұқсас етіп жетіл-
дірсек, бұл жағдайда портативтілік, сондай-ақ бағдарламалық қамтама-
сыз етуге қызмет көрсетуге зиян тиеді, себебі түрлі сәулеттерде түрлі 
тілдер  қарастырылады.    Біз  16  разрядтық  нұсқаулардан  32  разрядтық 
нұсқауларға көштік, ал соңғы кездері 64 разрядты нұсқаулар қолданыла-
ды. Егер бағдарлама нұсқаулармен құрастыру деңгейінде тығыз байла-
нысты болса, бұл жағдайда порт сәулетін әрдайым өзгерту қиынға соғуы 
мүмкін. Технологиялар жедел өзгеріп келеді, ал бұл кідіріссіз және ең 

34
төмен  көлемдегі  инвестициялары  бар  бағдарламалық  шешімдерді  қа-
жет  етеді.  Осылайша,  портативтілікті,  түрленуді  және  бағдарламалық 
қамтамасыз етуді сақта мақсатында жаңа тілдер төмен тілдік конструк-
циялардан  бөлінуі  тиіс.  Олай  болмаған  жағдайда  біз  бағдарламалық 
қамтамасыз етуді жаңа сәулеттерге көшірудің өзіне миллиондаған және 
миллиардтаған қаражат жұмсаймыз. 
1.8 Парадигмалар мен бағдарламалау тілдерінің тарихы 
Бағдарламалау  парадигмасы  –бұл  бағдарламалау  стилі.  Бағдарлама-
лау саласы дамыған сайын тұтынушылар мен компьютерлік ғалымдар 
бағдарламалаудың алдағы стильдерінде артықшылықтар мен кемшілік-
терді анықтап, бағдарламалаудың жаңа стильдерін жетілдіре бастады. 
I-қосымшада көрсетілгендей қазіргі заманға сай тілдер екі немесе одан
да көп парадигмаларды қамтиды.
Біз бағдарламаларды бағдарламалау парадигмаларының бір немесе бір-
неше комбинацияларына жіктей аламыз:
(1) императивті  бағдарламалау,  (2)  декларативті  бағдарламалау,  (3)
объектіге  бағытталған  бағдарламалау,  (4)  параллель  және  үлестіруші
бағдарламалау, (5) визуалды бағдарламалау, (6) веб-бағдарламалау, (7)
оқиғаға бағытталған бағдарламалау, (8) мультимедиялық бағдарламалау,
(9) мультиагенттік бағдарламалау және (10) синхронды бағдарламалау.
Осымен тізім аяқталмайды. Алайда бұл кітаптың көлемі бағдарламала-
удың негізгі парадигмаларын сүйемелдейтін бағдарламалау тілдерінің
сыныптарын оқытумен шектеледі.
1.
1.8.1 Императивті бағдарламалау .парадигмасы
Императивті  бағдарламалаудың  негізі  фон-нейман  сәулетіне  негізде-
летін  пайымдау  немесе  иелену  болып  табылады.  Бағдарламашы  ком-
пьютерге не істеу керектігін айту үшін, логиканы өзі аударады.  Импе-
ративті бағдарламалардағы айнымалы компьютер жадындағы ұяшықта
сақталады, ал жад ұяшығы иелену операторлары арқылы бірнеше рет
өзгертілуі  мүмкін.  Иелену  операторының  іс-әрекеті  барысында  жаңа
мән жад ұяшығына жазылып, ескі мән жойылады.  Иелену операторы-
ның артықшылығы жадты қайта қолдану болып табылады, себебі бір
жад ұяшығы бірнеше мәнді сақтай алады.
Алайда бір жад ұяшығына бірнеше мәнді жазудың бірқатар кемшілік-
тері бар:
1. Жад  ұяшығы  қайта  жазылған  жағдайда  ескі  мән  жойылып  кетеді,
сондықтан ескі мәнді болашақта қолдану мүмкін емес. Жасанды зият

35
арқылы бағдарламалау барысында шешім іздеудің ауқымды кеңістігінде 
ізделеді, қайтару-артқа қайту, іздеу бөлігін тоқтату және іздеудің басқа 
жолдарын қабылдау мүмкін болмайды. 
2. Басқа үдеріске немесе функцияға жататын жад көлемі нақты уақыт-
тағы үдеріс арқылы жазылса, ескі мән жойылады. Егер шақырылып оты-
рған үдеріс немесе үдерістер модификациядан хабарсыз болып немесе
ескі мәнді қажет еткен жағдайда жаңарту жад ұяшықтарын зақымдай-
ды. Бұның нәтижесінде қате шешімдер шығарылады. Бұл мәселе жана-
ма әсер деп аталады және 4.8-тарауда тереңірек қарастырылады.
3. Иелену операторы мен логиканың кезектесуі бағдарламаны түсінуде
қиындықтар  тудырады,  себебі  бақылау  жекелеген  бағдарламашының
ойлау стилі үшін аса субъективті болып табылады және ұзақ мерзімді
келешекте бағдарламалауға қызмет көрсету саласында қиындықтарды
тудырады.
Императивті  бағдарламалау  парадигмасы  1950  жылдардың  соңында 
және 1960 жылдардың басында FORTRAN әр түрлі нұсқаларында және 
1960 жылдардың басында ALGOL секілді блок түрінде құрастырылған 
тілдерді жетілдіруде    алғашқы жетілдірілген бағдарлама болды.  Төмен-
дегі  төрт  алғашқы  тілдер  императивті  бағдарламалау  парадигмалары 
арасында кең таралған тілдер болған еді: FORTRAN (Фортран), ALGOL 
(Алгол), COBOL (Кобол), C (Си), ALGOL (Алгол) тілінің ұрпағы. 
Фортранның  алғашқы  нұсқалары  ғылыми  есептеулерді  жүргізуде  кең 
қолданыс тапты, бұл ауысу операторларын қолдануды либералды етті, 
сондай-ақ  оларда  сілтемелер  болған  жоқ.  Алгол  тілінде  бағдарлама 
WHILE DO және DO WHILE циклдары тәрізді басқару конструкцияла-
рын сүйемелдейтін блок құрылымы ретінде қарастырылды. Бұл бағдар-
ламаны түсіну үдерісін одан әрі жеңілдетті.  Алгол тілі «байланыс тізімі» 
және «ағаштар» секілді рекурсивті үдерістерді ұйымдастыру үшін қол-
данылған сілтемелер мен «құрылымдарды» қамтыды. Бұған қоса Алгол 
қазіргі заманғы бағдарламалаудың императивті тілдерінің негізін қала-
ушы болып саналады: Алгол арқылы жазылған деркетер абстракцияла-
ры мен басқару абстракцияларының көп бөлігі қазіргі тілдерде әлі де 
қолданысқа ие. 
Си  тілі  бастапқы  кезде  Bell  Labs  компаниясының  қызметкері  арқылы 
UNIX  операциялық жүйесін жүзеге асыру мақсатында әзірленген, жал-
пы мақсаттағы тіл болған еді. Бұл Алгол 68 тілінің қосалқы жиынтығы 
болды және ол UNIX жүйесі мен оның вариацияларының арқасында та-
нымал болды. SDL  (Алгол 68 жетілуін қолдаған Burroughs компаниясы 
арқылы әзірленген) және BLISS 32 (Digital Equipment Corporation әзір-

36
леген) тәрізді басқа да заманға сай тілдер болды, алайда олар өндіріс пен 
ғылым аясында кең қолданыс тапқан  Unix  жүйесінің ресми нұсқала-
рынан артта қалды. Бұл санаттағы басқа есте қалар тілдерге ADA (Ада), 
Pascal (Паскаль), Модула тілдері, соның ішінде Модула-3 пен Оберон 
кірді. Бұл тілдер  жоғарғы деңгейдегі блокты құрылымданған бағдар-
ламалау арқылы сүйемелденеді. Модула тілдерінің тобы модуль ұғымы 
мен функциялар импорты және экспорты тұжырымдамасын қолдайды. 
Барлық аталған тілдер Алгол 68 тілінен бастау алады. Алайда Си тілінен 
басқа барлық аталып өкен тілдер коммерциялық даңққа ие болмай,  тек 
академиялық мақсатта қолданылған болатын. 
Кобол  –  бұл  бизнес  ұсыныстарды  әзірлеуге  арналған  тіл.  Ол  тұты-
нушыға ыңғайлы болуға, есептерді жасауға және қаржылық деректерді 
өңдеуге бағытталған. Фортран, Алгол және Кобол тілдерінде құрылым-
дық бағдарламалау үшін конструкцияларды қосу мақсатында IBM (Ай-
Би-Эм) PL-I тілін жетілдіруге тырысты. PL-I бағдарламалаудың бірнеше 
домендерінде қолданыла алатын тіл ретінде жобаланған болатын. Алай-
да  өзінің  ауыр  құрылымының  әсерінен  өл  бұл  жарыста  жеңіліске  тап 
болды.
Ада,  Фортран  және  Кобол  тәрізді  коптеген  бағдарламалаудың  импе-
ративті  тілдері  тексерілген  конструкцияларды  қосудың  арқасында  да-
муды  жалғастырды.  Фортран  және  Кобол  тілдерінің  жаңа  нұсқалары 
блокты  құрылымдық  бағдарламалау,  рекурсивті  бағдарламалау,  тізім-
дер негізінде енгізу (стектер), тармақтық деректерді өңдеу, сілтемелер, 
құрылымдар және объектіге бағытталған бағдарламалау секілді бірқа-
тар функцияларды қамтиды. Уақыт өте келе бағдарламашылар қазіргі 
заманғы тілдердің артықшылықтары мен кемшіліктерін анықтап, пай-
далы  конструкцияларды  енгізді.  Тіл  дамыған  сайын  оның  ескі  нұсқа-
лармен сәйкестілігін сақтау мақсатында сақ болу қажет, ал эволюцияға 
ұшыраған бағдарламалар тілдің ескі нұсқаларын қолдану арқылы және 
жаңа нұсқаларға арналған компляторларды қолдана отырып жазылған 
бағдарламаларды қолдана алады. 

Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   26




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

    Басты бет