Працэдурнае праграмаванне

Працэдурнае праграмаванне - гэта парадыгма праграмавання, якая паходзіць ад структураванага праграмавання і заснаваная на канцэпцыі выкліку працэдуры . Працэдуры, таксама вядомыя як падпраграмы ці функцыі, проста ўтрымліваюць шэраг вылічальных этапаў, якія трэба выканаць. Любая працэдура можа быць выклікана ў любы момант падчас выканання праграмы, як непасрэдна, так і з іншых працэдур. Першыя істотныя працэдурныя мовы праграмавання ўпершыню з'явіліся каля 1960 года, уключаючы Fortran, ALGOL, COBOL і BASIC.[1] Pascal і C з'явіліся бліжэй да 1970-х.

Камп'ютарныя працэсары забяспечваюць апаратную падтрымку працэдурнага праграмавання праз рэгістр стэку і інструкцыі для выкліку працэдур і вяртання з іх. Апаратная падтрымка для іншых тыпаў праграмавання магчымая, але ніводная спроба іх рэалізацыі не была камерцыйна паспяховай (напрыклад, машыны Lisp або працэсары Java ).

Працэдуры і модульнасць

[правіць | правіць зыходнік]

Модульнасць звычайна пажаданая, асабліва ў вялікіх, складаных праграмах. Зыходныя даныя звычайна пазначаюцца сінтаксічна ў выглядзе аргументаў, а вынікі перадаюцца ў выглядзе вяртаемых значэнняў .

Абмежаванне зоны бачнасці - яшчэ адна методыка, якая дапамагае захоўваць працэдуры модульнымі. Яно не дае працэдуры атрымліваць доступ да пераменных іншых працэдур (і наадварот), у тым ліку папярэдніх выкананняў самой працэдуры, без наўмыснага дазволу.

Менш модульныя працэдуры, якія часта выкарыстоўваюцца ў невялікіх альбо хутка напісаных праграмах, звычайна ўзаемадзейнічаюць з вялікай колькасцю пераменных у асяроддзі выканання, якія іншыя працэдуры таксама могуць змяняць.

З-за магчымасці вызначэння простага інтэрфейсу, аўтаномнасці і паўторнага выкарыстання, працэдуры - зручны сродак для стварэння фрагментаў кода, напісаных рознымі людзьмі або рознымі групамі, у тым ліку праз бібліятэкі праграмавання .

Параўнанне з іншымі парадыгмамі праграмавання

[правіць | правіць зыходнік]

Імператыўнае праграмаванне

[правіць | правіць зыходнік]

Мовы працэдурнага праграмавання таксама з'яўляюцца імператыўнымі мовамі, таму што яны яўна спасылаюцца на стан асяроддзя выканання. Гэта можа быць што заўгодна: ад пераменных (якія могуць адпавядаць рэгістрам працэсараў) да чагосьці накшталт становішча "чарапахі" на мове праграмавання Logo .

Часта тэрміны "працэдурнае праграмаванне" і "імператыўнае праграмаванне" выкарыстоўваюцца ў якасці сінонімаў. Аднак працэдурнае праграмаванне ў значнай ступені абапіраецца на блокі і зону бачнасці, у той час як імператыўнае праграмаванне ў цэлым можа як мець, так і не мець такіх функцый. Такім чынам, працэдурныя мовы звычайна выкарыстоўваюць зарэзерваваныя словы, якія ўтвараюць блокі, напрыклад, if, while і for, каб ажыццявіць кіраванне шляхам выканання, у той час як неструктураваныя імператыўныя мовы выкарыстоўваюць goto-аператары і табліцы пераходу з той жа мэтай.

Аб'ектна-арыентаванае праграмаванне

[правіць | правіць зыходнік]

Асноўная ідэя працэдурнага праграмавання заключаецца ў разбіцці праграмы на набор пераменных, структур даных і падпраграм, у той час як у аб'ектна-арыентаваным праграмаванні праграма разбіваецца на аб'екты, якія даюць доступ да сваіх паводзін (метадаў) і даных (членаў альбо атрыбутаў) з выкарыстаннем інтэрфейсаў. Самае галоўнае адрозненне заключаецца ў тым, што ў той час, як працэдурнае праграмаванне выкарыстоўвае працэдуры для выканання дзеянняў са структурамі даных, аб'ектна-арыентаванае праграмаванне звязвае іх у адно, таму "аб'ект", які з'яўляецца экземплярам класа, выкарыстоўвае "сваю ўласную" структуру даных. [2]

Найменні адрозніваюцца паміж гэтымі двума парадыгмамі, хоць і маюць падобную семантыку:

Працэдурная Аб'ектна-арыентаваная
працэдура метад
запіс аб'ект
модуль клас
выклік працэдуры паведамленне

Функцыянальнае праграмаванне

[правіць | правіць зыходнік]

Прынцыпы модульнасці і паўторнага выкарыстання кода ў функцыянальных мовах, што ўжываюцца на практыцы, у аснове такія ж, як і ў працэдурных мовах, бо з'яўляюцца адгалінаваннем структураванага праграмавання. Так, напрыклад:

  • Працэдуры адпавядаюць функцыям. І першыя, і другія дазваляюць паўторна выкарыстоўваць адзін і той жа код у розных частках праграм і ў розных пунктах іх выканання.
  • Паводле таго ж падыходу, выклікі працэдур адпавядаюць ужыванню функцый
  • Функцыі і іх выклікі модульна аддзяляюцца адно ад аднаго гэткім жа чынам, пры дапамозе аргументаў функцый, вяртаемага значэння і зоны бачнасці пераменных.

Асноўная розніца паміж стылямі заключаецца ў тым, што функцыянальныя мовы праграмавання выдаляюць ці, прынамсі, прыглушваюць імператыўныя элементы працэдурнага праграмавання. Такім чынам, набор уласцівасцяў функцыянальных моў прызначаны для максімальнай падтрымкі напісання праграм з пункту гледжання чыстых функцый :

  • У той час, як працэдурныя мовы мадэліруюць выкананне праграмы ў выглядзе паслядоўнасці загадных каманд, якія могуць невідавочна змяняць супольна выкаростоўваемае асяроддзе, функцыянальныя мовы праграмавання мадэліруюць выкананне ў выглядзе вылічэння складаных выразаў, якія залежаць толькі адзін ад аднаго праз аргументы і вяртаемыя значэнні. З гэтай прычыны функцыянальныя праграмы могуць мець вольны парадак выканання кода, а мовы могуць мала забяспечваць кантроль над парадкам выканання розных частак праграмы. (Напрыклад, аргументы для выкліку працэдуры ў Scheme выконваюцца ў адвольным парадку.)
  • Мовы функцыянальнага праграмавання падтрымліваюць (і шырока выкарыстоўваюць) функцыі першага класу, ананімныя функцыі і замкненні, але гэтыя паняцці дадаюцца і ў больш сучасныя працэдурныя мовы
  • Мовы функцыянальнага праграмавання схільныя ўжываць аптымізацыю хваставой рэкурсіі і функцыі больш высокага парадку замест імператыўных цыклавых канструкцый.

Аднак, многія функцыянальныя мовы насамрэч не з'яўляюцца чыстымі і прапануюць імператыўныя / працэдурныя канструкцыі, якія дазваляюць праграмісту пісаць праграмы ў працэдурным стылі альбо ў спалучэнні абодвух стыляў. Нярэдка код уводу / вываду на функцыянальных мовах пішацца ў працэдурным стылі.

Насамрэч існуе некалькі эзатэрычных функцыянальных моў (напрыклад, Unlambda ), якія адмаўляюцца ад структураваных падыходаў дзеля такго, каб быць складанымі ў праграмаванні (і гэтым прывабнымі). Гэтыя мовы з'яўляюцца выключэннем з агульнага пункту судакранання працэдурных і функцыянальных моў.

Лагічнае праграмаванне

[правіць | правіць зыходнік]

У лагічным праграмаванні праграма ўяўляе сабой набор умоў, а вылічэнні праводзяцца шляхам спробы даказаць прапанаваную тэарэму. З гэтага пункту гледжання лагічныя праграмы з'яўляюцца дэкларатыўнымі, яны засяроджваюцца на тым, што ўяўляе сабой праблема, а не на тым, як яе вырашыць.

Аднак методыка зваротнага вываду, якая рэалізуецца SLD-рэзалюцыяй, што выкарыстоўваецца для вырашэння праблем у мовах лагічнага праграмавання, такіх як Prolog, разглядае праграмы як працэдуры резалюцыі мэты. Напрыклад, такое правіла:

H :- B1, …, Bn.

мае падвойную інтэрпрэтацыю, як працэдуры

каб паказаць/вырашыць H, трэба паказаць/вырашыць B1 і … і Bn

і як лагічнай імплікацыі:

B1 і … і Bn азначае H.

Дасведчаныя праграмісты-логікі выкарыстоўваюць працэдурную інтэрпрэтацыю для напісання прадукцыйных і эфектыўных праграм, і дэкларатыўную інтэрпрэтацыю, каб пераканацца ў правільнасці праграм.

Глядзіце таксама

[правіць | правіць зыходнік]
  1. Welcome to IEEE Xplore 2.0: Use of procedural programming languages for controlling production systems. ieeexplore.ieee.org. Праверана 6 красавіка 2008.
  2. Stevenson, Joseph. Procedural programming vs object oriented programming. neonbrand.com. Праверана 19 жніўня 2013.