Бағдарламалау тілдеріне шолу
Кезкелген адам жаңа бір бағдарламалау тілімен кездескенде қоятын
бірінші сұрағы: «Бұл тіл не істей алады?» – жауабы өте қарапайым, барлық
бағдарламалау тілдері есептеулер жасай алады.
Егер олардың бәрі тек есептеулер жасаса, онда жаңа бағдарламалау
тілдері пайда болуына не себеп? Анықтама берейік: Бағдарлама–бұл
есептеулерді анықтайтын таңбалар тізбегі.
Бағдарламалау тілдері – бұл бағдарламаны қандай таңбалар тізбегі
құрайды және бағдарлама қандай есептеуді сипаттайтынын анықтайтын
ережелер жиыны. Бұл анықтамада «компьютер» - деген сөз еске алынбайды.
Бағдарламалар және тілдер формальды математикалық объектілер түрінде
берілуі мүмкін.
Компьютер – «екілік » машина болғандықтан, ЭЕМ-де бағдарламаны
сақтау техникалық қарапайым, бірақ практикалық ыңғайсыз, әр команда
«екілік» цифр (биттер) түрінде жазылуы қажет, оларды механикалық
немесе электрлік түрде түсінуге болады. Ең бірінші бағдарламалық
құралдардың бірі ретінде символикалық ассемблер болды. Ассемблер,
ассемблер тілінде жазылған (мұнда, әр команда символдық түрде
ұсынылған) бағдарламаны алады да, оның символдарын компьютерде
орындауға жарайтындай етіп, «екілік» көрсетімге трансляциялайды. Мысалы:
Load R3 54 командасы үшінші регистрге 54-ші ұяшықтағы деректерді
жүктеу деген мағынада. Бұл биттердің эквиваленттік тізбегін оқудан
әжептәуір оңай.
Бағдарламалау
тілдері – бұл
абстракциялау
механизмі.
Ол
бағдарламалаушыға есептеулерді абстрактілі сипаттауға және сол кезеңде
бағдарламаға осы сипаттамаларды компьютер орындауға қажетті
детальданған формаға айналдыруға мүмкіндік береді. Неліктен екі әр
түрлі сыныптардағы есептер үшін жүздеген бағдарламалау тілдері
болатындығы осыдан түсінікті: екі әр түрлі сыныптардағы есептер үшін
абстракциялық әр түрлі деңгейлер қажет және әр бағдарламалаушының
бұл абстракциялар туралы өз көрсетілімі болады. Абстракция
концепциясынан келесі ереже шығады: абстракция деңгейі неғұрлым
жоғары болса, соғұрлым көп детальдар жоғалады.
Тілдер жіктемесі
Б.Т
Процедуралық
Процедуралық емес
Төменгі
Жоғары
объективті
декларативті
деңгейдегі
деңгейдегі
Сурет 1 – тілдер классификациясы
Процедуралық тілдер
Fortran. Ассемблерлік тіл деңгейінен асып шыққан бірінші
бағдарламалау тілі Fortran болды. Ол 1950ж. IBM фирмасының мамандары
және Джон Бекустың басқаруымен ғылыми есептеулерді абстракциялық
сипаттауға арналды. Бағдарламалаушылардың көпшілігі fortranға қарсы
болды, олар компьютермен генерацияланған бағдарламалық код ассемблер
арқылы қолмен жазылған кодтан жақсы болуы мүмкін емес деп
түсінді. Компьютерде басында ғылыми есептер шығарылғандықтан, fortran
ғылым мен техникада стандартты тілге айналды, ол 1966ж., 1970ж.,
1990ж. қазіргі дәуірдегі бағдарламалық құралдарға сәйкес
модернизацияланды.
Cobol және PL / 1. Cоbol тілі 1950ж коммерциялық деректерді өңдеу
үшін құрастырылды. Ол АҚШ қорғаныс министрлігі өкілдерінен сақтау
компаниясы түріндегі коммерциялық ұйымдар және компьютер
жасаушыларынан тұратын комитетпен құрылды. Коммерциялық деректерді
өңдегенде деректердің үлкен санды күрделі жазбалары үшін қарапайым
есептеулер жасау қажет, ал деректерді құрылымдау мүмкіндігі бойынша
Cobоl fortran және С түріндегі алгоритмдік тілдерден бірталай жоғары. IBM
фирмасы соңынан Fortran, Cobоl тілдерінің барлық қасиеттерін иемденген,
әмбебап PL/ 1 тілін жасады. РL/1 IBM -нің көп компьютерлерінде fortran мен
Cobоl -ді алмастырды.
Algol және оның ұрпақтары
Ертеректегі бағдарламалау тілдерінен Algol тілдерді құруға бірінші көп
әсер етті. Алдымен жалпы және ғылыми қосымшалар үшін халықаралық
топпен құрастырылған ол Fortran сияқты кең тарамады.
Algol-дың бірінші нұсқасы 1958ж басылды. Algol 60 нұсқасы
компютерлік зерттеулерде кең қолданылды және әсіресе, Еуропадағы
көптеген машиналарда өткізілді, ал келесі нұсқасы онша әйгілі болған жоқ.
Algol тілінен екі тіл тарады: нақты уақыт жүйесі үшін АҚШ-тың әуе
соғыс күштері қолданған Jobial немесе модельдеудің алдыңғы тілдерінің бірі
Sіmula.
Ең әйгілі ұрпағы Pascal. Pascal-ді 1960 жыл соңында Никлаус Вирт
құрастырған. Құрастыру мақсаты типтерді жариялау идеясын көрсету және
олардың сәйкестігін бақылау үшін қолдануға болатын тілді жасау. Н.Вирт
модульде кез-келген практикалық тілдердің қажетті бөліктері болатынын
бірдей түсініп, Modula тілін құрастырды.
С
тілін 1970 жылы Bell Laboratories қызметкері Денис Риччи
операциялық жүйе Unix-ті өткізу тілі ретінде жасады. Операциялық жүйе
ассемблерде жазылды, өйткені жоғарғы деңгейдегі тілдер тиімсіз деп
есептелді.
С тілі ассемблерге тән бағдарламалау детальдарынан абстракцияланады,
ол ассемблерлік төмен деңгейдегі бағдарламалаудың барлық иілімділігін
(бит деңгейіндегі көрсеткіштерді) сақтай отыра құрылымды басқару
операторларын және деректер (сілемдер мен жазулар) құрылымдарын
ұсынады.
С тілі ассемблер тіліне жақындау жобаланды. Бұл оған төтенше
иілімділікті жасайды. Бірақ бұл иілімділік жасырын қателері бар программа
құру жеңілдігін шарттандырады, өйткені, тіл конструкциясы Pascal
жасайтындай компилятормен тексерілмейді.
С тілі 1989ж стандарттардың Американдық Ұлттық институтымен
(АNSI) стандартталды.
С++. 1980ж Bell laborotories-дегі Бьярн Строуструп С тілін С++ тілінің
негізі ретінде қолданды. Оған Simula тілі ұсынған объектіге бағытталған
программалауды қолдауды қосты. С тілінің көптеген қателері С++ тілінде
түзетілді. 1994ж С++ тілі стандартталды.
Adа тілі 1997ж АҚШ-тың қорғаныс министірлігі әр түрлі соғыс
жүйелеріне құрылған бағдарламаларды қолдайтын операциялық жүйелерді
үйрену бағасын арзандату мақсатында бағдарламалау тілдерін бірегейлеуді
шешуге тырысты. Нақты бар тілдерді бағаланғаннан кейін Pascal тілі
негізінде жаңа тілді құруға, конкурс жариялауға шешімге келді. Нәтижесінде
Adа тілі құрылды. Тілдің стандарты 1983ж қабылданды.
Adа 95 осы тілдің бірінші стандарты қабылданғаннан кейін 12 жыл өткен
соң, жаңа стандартпен шықты. Adа 95 деп аталған жаңа нұсқа объектіге –
бағытталған бағдарламалауды қолдады.
Деректерге бағытталған тілдер
Бағдарламалау дәуірінде соңғы жылдары олардың дамуына өте әсер
еткен бірнеше тілдер құрылды және өтімді болды. Олардың ортақ бір қасиеті
болды: әр тіл өзіне қажет деректер құрылымынан және оған арналған кең
көлемді командалар жиынтығынан тұрды. Бұл тілдер Fortrаn типіндегі
тілдерде жасау қиын бағдарламаларды құруға мүмкіндік берді.
LISP тіліндегі деректердің негізгі құрылымы - байланысқан тізімдер.
Алдымен бұл тіл есептеу теориясын зерттеу үшін құрылды және жасанды
интеллект бойынша көп жұмыстар LISP тілінде жасалды. Бұл тілдің
маңыздылығы сондай, тіпті компьютердің өзі LISP бағдарламаның
орындалуын тиімдеу үшін сәйкестендіріліп құрылды. Қазіргі кезде объектіге
бағытталған бағдарламаларды қолдайтын Lisp-CLOS тілінің диалектісі
әйгілі.
APL – матрицалық формуланың дамуы болып есептеледі. Ондағы
деректердің негізгі құрылымы векторлар мен матрицалар және ондай
құрылымдарда жасалатын массивтер циклсіз тікелей орындалды. Бұл тілдегі
бағдарламалар, қалыптасқан тілдегі ұқсас бағдарламалармен салыстырғанда
өте қысқа. Матрицалық сиымдылардың көп жинағы тілге ауысқандықтан
оны пайдалану және дамыту, қымбат аппараттық құралдарсыз қиынға түсті.
Snobol, Icon. Алғашқы тілдер тек сандармен жұмыс істеді. Табиғи
тілдерді өңдеу аймағында Snobol (және оның туындысы Icon )өте ыңғайлы.
Өйткені олардың негізгі құрылымы – жолдар болды. Snobol тілінің негізгі
операциясы – үлгіні жолмен салыстыру және жанама нәтижесі, жолды ішкі
жолдарға бөлшектеу. Icon тіліндегі негізгі операция - өрнектерді есептеу, бұл
өрнектер жолдармен жасалатын күрделі операцияларды қамтыды. Бұл тіл
жолдардың күрделі өңделуін орындайтын бағдарламалар үшін ыңғайлы.
SETL - дегі деректердің негізгі құрылымы - көпшелер. Көпшелер - өзінің
көмегімен басқа құрылымдар анықталатын жалпы матрицалық құрылым
болғандықтан, мұндай бағдарламалар логикалық бағдарламаларға ұқсас,
оларда матрицалық сипаттаулар тікелей орындалуы мүмкін.
Процедуралық емес тілдер
Қарастырылған тілдердің бәріне ортақ бір ерекшелік: олардағы негізгі
оператор – бұл меншіктеу операторы, ол компьютерді деректерді бір
орыннан екінші орынға ауыстыруға мәжбүр етеді. Шындығында бұл
компьютер көмегімен шешілетін проблемалар деңгейімен салыстырғанда
абстракцияның төменгі деңгейінде.
Қазіргі бағдарламалық пакеттер, шындығында, абстракцияның жоғары
деңгейіндегі тілдер. Қосымшалар генераторлары сізге экран жүйелілігін және
деректер қоры құрылымын сипаттауға мүмүкіндік береді және осы
сипаттамалар бойынша, сіздің есепті шығаратын командаларды автоматты
түрде генерациялайды. Дәл осылай ЭК, үстелдік баспа жүйелері, моделдеу
пакеттері және басқа жүйелер абстрактілі бағдарламалаудың көлемді
құралдарына ие.
Бағдарламалау тілдерінің негізгі констукциялары
Синтаксис. Кәдімгі тілдердегідей, бағдарламалау тілдері элементтерінің
синтаксисі бар. Бағдарламалау тілдері элементтерінің синтаксисі - бұл
тілдегі қандай символдар тізбегі мүмкін өрнектер болып есептелетінін
анықтайтын ережелер жиыны. Синтаксис формальды шартты белгілер
көмегімен беріледі. Синтаксистің кең таралған формальды шартты белгісі
– бұл Бекус Наураның кеңейтілген формасы (БНКФ). БНКФ-де біз ең
жоғарғы деңгейдегі обьектіден (бағдарламалардан) бастауымыз керек, және
обьектілерді декомпозициялау ережелерін қолдана отырып, белгілі бір
символ деңгейіне жеткенге дейін. Мысалы:
Айнымалыны- жариялау::= тип-спецификаторы идентификатор
{, идентификатор};
Бұл былай оқылады: Айнымалыны жариялау тип спецификаторын
көрсетеді, одан соң идентификатор (айнымалының аты) ұсынылады және
бір-бірінен үтірмен ажыратылған міндетті емес идентификаторлар тізбегі,
соңында нүктелі үтір қойылады.
Семантика - бұл бағдарламалау тілдері сөйлемдерінің (бағдарламаның)
мағынасы, бағдарламалау тілінің семантикасын құрастыру қосымша
үстемділік - бағдарламаның дұрыстығын дәлелдеу мүмкіндігін береді.
Бағдарламаның орындалуын, қалай оператор кірістегі бекітілімдерді
қанағаттандыратын күйді шығыстағы бекітілімдерді қанағаттандыратын
күйге айналдыратынын сипаттайтын аксиомалар көмегімен
қалыптастыруға болады.
Деректер. Бағдарламалау тілдерімен алғашқы танысқанда көңіліңіз
оператор мен командаларға бөлінеді. Операторларды үйреніп, оларды
қолдана бастаған кезде, деректерге көңіл аударасыз. Қазіргі тілдерде
операторлар белгілі бір обьект үшін қолданылатын деректерді
манипуляциялау құралдары деп есептеледі. Бағдарламалаудың орталық
концепциясы:
Тип - бұл шамалардың көпшесі және оларға жасалатын көптеген
операциялар. Типті анықтау тілге байланысты. Деректерді талдау үшін
кейбір анықтамалар қажет.
Шама. Қарапайым анықталмаған түсінік.
Литерал. Бағдарламада таңбалар тізбегі түрінде берілген нақты мән.
Мысалы: 154, FALSE, «бағдарламалау».
Көрсеткіш (представление). Компьютер ішінде нақты биттер жолымен
көрсетілген мән. Мысалы: символдық мән ' х ' 01 11 10 00 сегіз бит
жолымен көрсетілуі мүмкін.
Айнымалы. Нақты типтегі мән көрсетілімінен тұратын жад ұяшығына
немесе ұяшықтарына берілген ат. Мәні бағдарлама жұмысы үрдісінде
өзгере алады.
Тұрақты. Нақты типтегі мән көрсетілімінен тұратын ұяшық немесе
ұяшықтар аты. Программа орындалу барысында мәні өзгермейді.
Обьект- бұл айнымалы немесе тұрақты.
Меншіктеу операторы. Әдеттегі бағдарламалау тілдерінде нақты
жұмыс істейтін бір ғана оператор бар. Ол- меншіктеу операторы. Басқа
операторлар (шарт операторы, процедураларды шақыру) тек меншіктеу
операторының орындалу тізбегін басқару үшін қолданылады. Меншіктеу
операторы әртүрлі үш есептерді орындайды:
Оператордың оң жағындағы өрнек мәнін есептеу.
Оператордың сол жағындағы өрнекті есептеу; өрнек жад ұяшығының
адресін анықтау керек.
1 қадамда есептелген мәнді 2 қадамда алынған адрестен бастап , жад
ұяшықтарына көшіру.
Тип сәйкестіктерін бақылау. Тип сәйкестіктерін бақылау - бұл өрнек
типі меншіктеу кезінде адрестелген айнымалы түрімен сәйкестігін
тексеру. Бұған процедураны шақырғанда фактілік параметрді
формалдыққа меншіктеу де кіреді. Тип сәйкестіктерін бақылауға келесі
лайықты мүмкіндіктер бар:
Ештеңе істемеу; меншіктеу мағыналы болуына тек бағдарламалаушы
жауапты;
Сол жағы талап ететін типке өрнек мәнін айқындамай түрлендіру.
Қатаң түрде тип сәйкестіктерін бақылау: егер тип айырмашылығы
болса, меншіктеуден бастартамыз.
Басқару операторлары. Меншіктеу операторлары әдетте қандай
тізбекте жазылды, сол тізбекпен орындалады. Басқару операторлары
орындалу ретін өзгерту үшін қолданылады. Құрылымды бағдарламалау -
бұл оқуға және түсінуге жеңіл, жақсы құрылымдағы бағдарламаларды
қаматамасыздандыратын, басқару операторларын қолдануды мүмкіндейтін
бағдарламалау стилі.
Басқару операторларының екі класы бар:
1.
таңдау операторы, бір немесе бірнеше альтернативті
тізбектердегі орындауларды таңдайды; шарт операторы (if) және
ауыстырып қосқыштар (переключатели) (Case switch);
2.
цикл операторы, операторлар тізбегінің орындалуы қайталанады:
for, repeat және while.
Ішкі бағдарламалар. Ішкі бағдарламалар – бұл бағдарламаның әр
жерінде шақыруға болатын деректері және орындалатын операторлары
жарияланған бағдарлама сегменті. Ішкі бағдарламаларды процедура,
функция, ішкі бағдарлама немесе әдістер деп те атайды. Ішкі
бағдарламаны шақырғанда оған параметр деп аталатын мәндер тізбегі
беріледі. Параметрлер, ішкі бағдарламалар орындалуының әртүрлі
варианттарын өткізу үшін, оған деректерді беру және есептеу нәтижесін
алу үшін қолданылады.
Ішкі бағдарламаларды қолдау құралдарының пайда болуы
бағдарламалық қамсыздануды бірнеше бағдарламалаушыларға параллельді
жасауға мүмкіндік берді.
Модульдер. Қазіргі бағдарламалау тілдері деректер мен ішкі
бағдарламаларды үлкенірек объектілерге инкапсуляциялау үшін, модуль
деп аталатын тағы бір құрылымдау әдісін ұсынады.
Бағдарламалау ортасы
Тіл –бұл таңбалар тізбегінен құрылатын бағдарламаны жазуға қажет
ережелер жиыны.
Бағдарламалау ортасы- бұл таңбаларды орындалатын есептеулерге
түрлендіруге қажет саймандар жинағы.
Редактор- бұл бағдарламалау тілінде жазылған бағдарламадан құрылған
таңбалық файл болатын алғашқы файлды құру және өзгерту үшін қажет
саймандық құрал.
Компилятор- алғашқы файлдағы таңбаларды нақты компьютер үшін
машиналық кодтағы командалардан құрылған объектілік модульге
аударады.
Кітапханашы - кітапхана деп аталатын объектілік файлдар
жиынтығын қолдайды.
Құрастырушы (компоновщик) немесе байланыс редакторы -
бағдарлама компоненттерінің объектілік файлдарын жинақтайды, және
орындалатын файлды құрастыра отырып, бір компьютерден екіншіге
сыртқы сілтемелерді рұхсаттайды.
Жүктеуші - бағдарлама орындалар алдында дискіден орындалатын
файлды жадқа көшіреді де, компьютерді инициализациялайды.
Өңдеуші(Отладчик) – бұл саймандық құрал, ол бағдарламалаушыға жеке
операторлар деңгейінде қателерді диагностикалау үшін бағдарлама
орындалуын басқаруға мүмкіндік береді.
Тестілеу құралдары бағдарламаны тестілеу үрдісінде тестілеу нәтижесін
құруды және орындауды автоматтандырады.
Конфигурациялау құралдары бағдарлама жасауды және файлдың
бастапқы деңгейіне дейінгі өзгерістерді қадағалауды автоматтандырады.
Интерпретатор бастапқы файлды объектілікке аударатын компиляторға
қарағанда, ол бағдарламаның бастапқы кодын тікелей орындайды.
Бағдарламалау ортасын жекеленген саймандар құралдарынан құрастыруға
болады.
Бұдан
басқа
көптеген
жабдықтаушылар
интегралданған
бағдарламалау орталарын сатады.
Процедуралық бағдарламалау. Тілдерде ішкі бағдарламалармен жұмыс
істеуді мүмкіндейтін құралдардың пайда болуы нәтижесінде көптеген
есептегіш және қызметші ішкі бағдарламалардың үлкен кітапханалары пайда
болды. Оларды қажет уақытта негізгі бас бағдарламадан шақыруға болады.
Сол кездегі бағдарлама бас бағдарламадан, глобальды деректер
аймағынан және барлық деректерді немесе олардың бөліктерін өңдей алатын
ішкі бағдарламалар жиынынан тұрды. Мұндай архитектураның әлсіз жері,
ішкі бағдарламалар саны өскен сайын кейбір ішкі бағдарламалардағы
глобальды деректер бөліктерінің бұрмалану ықтималдылығы өсіп отырды.
Осындай қателерді азайту үшін ішкі бағдарламаларда локальды
деректерді орналастыру ұсынылды. Ішкі бағдарламаларды қолдау
құралдарының пайда болуы бірнеше бағдаламалаушыларға паральлельді
түрде БҚАМ құрастыруға мүмкіндік берді.
Бағдарламаны жобалауға арналған әр түрлі амалдар мен тәсілдер бар.
Қазіргі кездегі амал абстракцияны қолданып декомпозициялауға негізделген.
Архитектурасын жобалау әдістері екі топқа бөлінеді: өңдеуге бағытталған
және деректерге бағытталған. Өңдеуге бағытталған әдістер келесі идеялардан
тұрады: модульдік бағдарламалаудан, функционалдық декомпозициядан,
деректер ағымын қолдана отырып жобалаудан, жобаны құрылымдық талдау
технологиясынан. Деректер құрылысын қолдануға бағытталған жобалау
әдісін, Джексон әдістемесіне, Уорнер әдістемесіне, иерархиялық диаграмма
әдістемесіне, жобалаудың объектіге-бағытталған әдістемесіне бөледі.
Модельдерді құру барысында екі принціпті қолданады: дедуктивті
(жалпыдан жекеге) және индуктивті (жекеден жалпыға). Есептегіш емес
алгоритмге сұрыптау және іздеу жатады. Сызықтық іздеу процедурасы
сілемнің барлық элементтерін қарапайым тізбектеп қарап шығудан және
оларды эталонмен салыстырудан тұрады. Тең бөліп іздеу реттелген
деректерге қолданылады. Келесі сұрыптаулар аса кеңінен қолданылады:
қосу, таңдау және алмастыру көмегімен. Екілік қосу әдісі. Қосумен
жақсартылған сұрыптау. Ағаш көмегімен сұрыптаудың жақсартылған әдісі.
«Шейкерлі» сұрыптау. Қабыршақ әдісі. Файлдарды сұрыптау.
Құрылымдық
бағдарламалау
негізінде
күрделі
жүйелерді
декомпозициялау (бөлшектерге бөлу ) әдісі, яғни соңынан орындалу
мақсатында бөлек кішігірім (40-50- операторлардан тұратын) ішкі
бағдарламаларға бөлу жатыр.
Құрылымдық әдіс есептерді қарапайым құрылымдағы ішкі есептер
иерархиясы түрінде ұсынуды талап етті. Сонымен жобалау "жоғарыдан –
төмен" жасалды және ішкі бағдарламалар интерфейсін қамти отыра, жалпы
идеяны орындауды тұспалдады. Бірмезгілде алгоритмдер конструкцияларына
шектеулер және алгоритмдерді арнайы жобалау әдісі – қадаммен детальдау
енгізілді. Тілдер PL/1, ALGOL-68, Pascal, C.
Ішкі бағдарламалар. Ішкі бағдарламалар – бұл бағдарламаның әр
жерінде шақыруға болатын деректері және орындалатын операторлары
жарияланған бағдарлама сегменті. Ішкі бағдарламаларды процедура,
функция, ішкі бағдарлама немесе әдістер деп те атайды. Ішкі
бағдарламаны шақырғанда оған параметр деп аталатын мәндер тізбегі
беріледі. Параметрлер, ішкі бағдарламалар орындалуының әртүрлі
варианттарын өткізу үшін, оған деректерді беру және есептеу нәтижесін
алу үшін қолданылады.
Ішкі бағдарламаларды қолдау құралдарының пайда болуы
бағдарламалық қамсыздануды бірнеше бағдарламалаушыларға параллельді
жасауға мүмкіндік берді.
Достарыңызбен бөлісу: |