Корисник:Ognjenzivanovic/превод1

Процедурално програмирање је парадигма програмирања, заснована на императивном програмирању,[1] која укључује имплементирање понашања рачунарског програма као процедура (поснатих као функције, потпрограми) које позивају једна другу. Резултујући програм је низ корака који формирају хијерархију позива на његове саставне процедуре.

Први већи процедурални програмски језици су се појавили 1957–1964, и то су били Fortran, ALGOL, COBOL, PL/I i BASIC.Pascal и C су настали 1970–1972.

Рачунарски процесори обезбеђују хардверску подршку за процедурално програмирање кроз регистар стека и упутства за позивање процедура и враћање из њих. Могућа је хардверска подршка за друге типове програмирања, попут Лисп машина или Јава процесора, али ниједан покушај није био комерцијално успешан.

Развојне праксе

уреди

Одређене праксе развоја софтвера се често користе са процедуралним програмирањем како би се побољшао квалитет и смањили трошкови развоја и одржавања.

Модуларност и област видљивости

уреди

Модуларност се односи на организовање процедура програма у засебне модуле—од којих сваки има специфичну и разумљиву сврху.

Минимизирање области видљивости променљивих и процедура може побољшати квалитет софтвера смањењем когнитивног оптерећења процедура и модула.

Програм којем недостаје модуларност или има широку област видљивости обично има процедуре које троше многе променљиве које користе и друге процедуре. Резултујући код је релативно тешко разумети и одржавати.

Дељење

уреди

Пошто процедура може да специфицира добро дефинисан интерфејс и да буде самостална, она подржава поновну употребу кода—посебно преко софтверске библиотеке.

Поређење са другим програмским парадигмама

уреди

Императивно програмирање

уреди

Процедурално програмирање је изведено из императивног програмирања, јер подразумева директну команду извршења.

Процедурално је подкласа императивног пошто процедурално укључује концепте блока и области видљивости, док императивно описује општији концепт који не захтева такве карактеристике. Процедурални језици генерално користе резервисане речи које дефинишу блокове, као што су if, while, и for за имплементацију контроле тока, док неструктурирани императивни језици (тј. асемблерски језик) користе гото наредбе и табеле гранања у ту сврху.

Објектно оријентисано програмирање

уреди

Такође класификовано као императивно, објектно оријентисано програмирање (ООП) укључује поделу имплементације програма на објекте који излажу понашање (методе) и податке (чланове) преко добро дефинисаног интерфејса. Насупрот томе, процедурално програмирање се односи на поделу имплементације програма на променљиве, структуре података и потпрограме. Важна разлика је у томе што, док процедурално укључује процедуре за рад на структурама података, ООП спаја то двоје заједно. Објекат је структура података и понашање повезано са том структуром података.[2]

Неки ООП језици подржавају концепт класе који омогућава креирање објекта на основу дефиниције.

Номенклатура варира између ове две, иако имају сличну семантику:

Процедурално Објектно оријентисано
Процедура Метода
Запис Објекат
Модул Класа
Позив процедуре Порука

Функционално програмирање

уреди

Принципи модуларности и поновне употребе кода у функционалним језицима су у основи исти као у процедуралним језицима, пошто оба потичу из структурираног програмирања. на пример:

  • Процедуре одговарају функцијама. Оба дозвољавају поновну употребу истог кода у различитим деловима програма и на различитим тачкама његовог извршавања.
  • По истом принципу, позиви процедура одговарају апликацији функције.
  • Функције и њихови модули одвојени су једни од других на исти начин, коришћењем аргумената функције, повратних вредности и опсега променљивих.

Главна разлика између стилова је у томе што функционални програмски језици уклањају или барем не наглашавају императивне елементе процедуралног програмирања. Скуп функција функционалних језика је стога дизајниран да подржи писање програма што је више могуће у смислу чистих функција:

  • Док процедурални језици моделују извршавање програма као низ императивних команди које могу имплицитно да измене дељено стање, функционални програмски језици моделују извршавање као процену сложених израза који зависе само један од другог у смислу аргумената и повратних вредности. Из тог разлога, функционални програми могу имати слободан редослед извршавања кода, а језици могу понудити мало контроле над редоследом којим се извршавају различити делови програма; на пример, аргументи за позивање процедуре у Шеми се вреднују произвољним редоследом.
  • Функционални програмски језици подржавају (и у великој мери користе) првокласне функције, анонимне функције и затварања, иако су ови концепти такође укључени у процедуралне језике најмање од Алгола 68.
  • Функционални програмски језици имају тенденцију да се ослањају на оптимизацију репне рекурзије и функције вишег реда уместо на императивне конструкције петље.

Многи функционални језици су, међутим, у ствари нечисто функционални и нуде императивне/процедуралне конструкције које омогућавају програмеру да пише програме у процедуралним стиловима, или у комбинацији оба стила. Уобичајено је да се улазни/излазни код у функционалним језицима пише процедуралним стилом.

Постоји неколико езотеричних функционалних језика (као што је Унламбда) који избегавају правила структурираног програмирања да би били тешки за програмирање (и стога изазовни). Ови језици су изузетак од заједничке основе између процедуралних и функционалних језика.

Логичко програмирање

уреди

У логичком програмирању, програм је скуп премиса, а израчунавање се врши покушајем доказивања теорема кандидата. Са ове тачке гледишта, логички програми су декларативни, фокусирајући се на то шта је проблем, а не на то како га решити.

Међутим, техника резоновања уназад, имплементирана СЛД резолуцијом, која се користи за решавање проблема у логичким програмским језицима као што је Пролог, третира програме као процедуре редукције циља. Дакле, клаузуле облика:

H :- B1, …, Bn.

имају двојако тумачење, и као процедуре

да прикажу/реше H, прикажу/реше B1 и … и Bn

и као логичке импликације:

B1 и … и Bn имплицира H.

Вешт логички програмер користи процедурално тумачење за писање програма који су ефикасни и ефикасни, и користи декларативно тумачење како би осигурао да су програми исправни.

Референце

уреди
  1. „Programming Paradigms“. 
  2. Stevenson, Joseph (August 2013). „Procedural programming vs object-oriented programming“. neonbrand.com.