Кіріспе

Бағдарламалау парадигмасы – компьютерлік бағдарламалау парадигмасы.

Процедуралық бағдарламалау – бұл императивті бағдарламалауға жататын, компьютерлік бағдарламаның әрекетін процедуралар (ә. к. а. функциялар, кіші бағдарламалар) арқылы іске асыруды қамтитын бағдарламалау парадигмасы. Бұл процедуралар бір-бірін шақырады. Нәтижесіндегі бағдарлама – оның құрамдас бөліктеріне шақырулардың иерархиясын құрайтын қадамдар тізбегі. Алғашқы маңызды процедуралық бағдарламалау тілдері шамамен 1957–1964 жылдары пайда болды, олардың ішінде Fortran, ALGOL, COBOL, PL/I және BASIC тілдері бар. Pascal және C тілдері шамамен 1970–1972 жылдары жарық көрді. Компьютерлік процессорлар стек регистрі және процедураларды шақыру және олардан қайту үшін арналған нұсқаулар арқылы процедуралық бағдарламалауға аппараттық қолдау көрсетеді. Бағдарламалаудың басқа түрлеріне, мысалы, Lisp машиналары немесе Java процессорларына аппараттық қолдау көрсету мүмкін болған, бірақ коммерциялық тұрғыдан сәттілікке жетілген жоқ.

Даму практикасы

Кейбір бағдарламалық жасақтаманы әзірлеу тәсілдері сапаны жақсарту және әзірлеу мен күтіп ұстау шығындарын азайту мақсатымен процедуралық бағдарламалауда жиі қолданылады.

Модульділік және ауқымдылық

Модульділік – бағдарламаның процедураларын әрқайсысы нақты және түсінікті мақсаты бар жеке модульдерге ұйымдастыру. Айнмалылар мен процедуралардың қолданыс аймағын шектеу процедуралар мен модульдердің түсіну деңгейін жеңілдету арқылы бағдарламалық қамтамасыз ету сапасын арттырады. Модульділігі жоқ немесе кең қолданыс аймағына ие бағдарламаларда, басқа процедуралар да қолданатын көптеген айнмалыларды пайдаланатын процедуралар кездеседі. Мұндай кодты түсіну және оны қолдау қиынға соғады.

Ортақ пайдалану

Процедура нақты анықталған интерфейсті көрсете алатын және дербес болғандықтан, кодты қайта пайдалануға, әсіресе бағдарламалық кітапхана арқылы, мүмкіндік береді.

Императивті бағдарламалау

Процедуралық бағдарламалау императивті бағдарламалаудың бір түрі болып саналады, себебі ол орындалуға тікелей команда беруді қамтиды. Процедуралық бағдарламалау императивтің кіші класы болып табылады, өйткені процедуралық бағдарламалау блоктар мен ауқымдар ұғымдарын қамтиды, ал императивті бағдарламалау мұндай мүмкіндіктерді қажет етпейтін, көбірек жалпылама ұғымды сипаттайды. Процедуралық тілдер әдетте бақылау ағынын іске асыру үшін, мысалы, if, while және for сияқты резервтелген сөздерді пайдаланады, ал құрылымдық емес императивті тілдер (яғни, тілдік жинақтау тілі) осы мақсатта goto және тармақтау кестелерін қолданады.

Функционалдық бағдарламалау

Функционалдық тілдердегі модульдік принциптер мен кодты қайта пайдалану, процедуралық тілдердегідей, өйткені екеуі де құрылымдық бағдарламалаудан туындайды. Мысалы:
Процедуралар функцияларға сәйкес келеді. Екеуі де бағдарламаның әртүрлі бөліктерінде және оның орындалу кезеңдерінің әртүрлі нүктелерінде бірдей кодты қайта пайдалануға мүмкіндік береді. Сол сияқты, процедура шақырулары функция қолданылуына сәйкес келеді. Функциялар және олардың модульдік бөлінуі бір-бірінен бірдей түрде, функция аргументтерін, қайтару мәндерін және айнымалылардың ауқымын пайдалану арқылы жүзеге асырылады. Стильдер арасындағы басты айырмашылық – функционалдық бағдарламалау тілдері процедуралық бағдарламалаудың императивті элементтерін жояды немесе кемсітеді. Сондықтан функционалдық тілдердің мүмкіндіктері бағдарламаларды мүмкіндігінше таза функциялар тұрғысынан жазуға қолдау көрсетуге бағытталған:
Процедуралық тілдер бағдарламаның орындалуын ортақ күйді өзгерте алатын императивті командалар тізбегі ретінде моделідейді, ал функционалдық бағдарламалау тілдері орындалуын аргументтер мен қайтару мәндеріне ғана тәуелді күрделі өрнектерді бағалау ретінде моделідейді. Осы себепті функционалдық бағдарламаларда код орындалуының еркін тәртібі болуы мүмкін, ал тілдер бағдарламаның әртүрлі бөліктері орындалатын тәртіпке аз бақылау жасай алады; мысалы, Scheme тіліндегі процедура шақыру аргументтері кездейсоқ тәртіппен бағаланады. Функционалдық бағдарламалау тілдері бірінші сыныпты функцияларды, анонимді функцияларды және жабылуларды қолдайды (және кеңінен пайдаланады), бірақ бұл түсініктер кем дегенде Algol 68 тілінен бастап процедуралық тілдерге де енгізілген. Функционалдық бағдарламалау тілдері императивті циклдық конструкциялардың орнына құйрық шақыруларын оңтайландыруға және жоғары ретті функцияларға сүйенуге бейім. Дегенмен, көптеген функционалдық тілдер шын мәнінде толыққанды функционалды емес және бағдарламашыға бағдарламаларды процедуралық стильде немесе екі стильдің комбинациясында жазуға мүмкіндік беретін императивті/процедуралық конструкцияларды ұсынады. Функционалдық тілдердегі кіріс/шығыс кодының процедуралық стильде жазылуы жиі кездеседі. Бағдарламалауды қиын ету үшін (соның салдарынан, күрделі ету үшін) құрылымдық бағдарламалау принциптерін ұстанбайтын бірнеше эзотерикалық функционалдық тілдер (мысалы, Unlambda) бар. Бұл тілдер процедуралық және функционалдық тілдердің ортақ негізінен ерекшеленеді.