Подпишитесь на наши новости
Вернуться к началу с статьи up
 

ПАРАДИ́ГМЫ ПРОГРАММИ́РОВАНИЯ

  • рубрика
  • родственные статьи
  • image description

    В книжной версии

    Том 25. Москва, 2014, стр. 289

  • image description

    Скопировать библиографическую ссылку:




Авторы: М. А. Соловьёв

ПАРАДИ́ГМЫ ПРОГРАММИ́РОВАНИЯ, сис­те­мы ба­зо­вых по­ня­тий, оп­ре­де­ляю­щие спо­соб на­пи­са­ния ком­пь­ю­тер­ных про­грамм. Воз­ник­но­ве­ние П. п. свя­за­но с раз­ви­ти­ем язы­ков про­грам­ми­ро­ва­ния. П. п. за­тра­ги­ва­ют разл. ас­пек­ты язы­ков про­грам­ми­ро­ва­ния: аб­ст­рак­ции, ис­поль­зуе­мые для пред­став­ле­ния дан­ных, под­хо­ды к де­ком­по­зи­ции про­цес­са вы­чис­ле­ний и т. п. Мн. язы­ки про­грам­ми­ро­ва­ния реа­ли­зу­ют од­но­вре­мен­но не­сколь­ко П. п. Вы­де­ля­ют два осн. клас­са П. п. – им­пе­ра­тив­ные и дек­ла­ра­тив­ные, ко­то­рые раз­ли­ча­ют­ся спо­со­бом за­да­ния пра­вил об­ра­бот­ки дан­ных.

Им­пе­ра­тив­ные П. п. пред­став­ля­ют про­грам­му как по­сле­до­ва­тель­ность дей­ст­вий (опе­ра­то­ров), ко­то­рые пре­об­ра­зу­ют со­стоя­ние про­грам­мы. До­пус­ти­мые ви­ды опе­ра­то­ров, а так­же ти­пы об­ра­ба­ты­вае­мых дан­ных оп­ре­де­ля­ют­ся кон­крет­ным язы­ком про­грам­ми­ро­ва­ния. К им­пе­ра­тив­ным па­ра­диг­мам от­но­сит­ся про­це­дур­ная П. п., в ко­то­рой отд. груп­пы час­то по­вто­ряе­мых опе­ра­то­ров вы­де­ля­ют­ся в про­це­ду­ры (на­зы­вае­мые так­же под­про­грам­ма­ми), опи­сы­ваю­щие дей­ст­вия по пе­ре­во­ду од­них дан­ных в дру­гие. В чис­ло опе­ра­то­ров та­ких язы­ков вхо­дит опе­ра­тор об­ра­ще­ния к про­це­ду­ре. К про­це­дур­ным язы­кам про­грам­ми­ро­ва­ния от­но­сят­ся, напр., си, фор­тран, пас­каль.

В дек­ла­ра­тив­ных П. п. опи­сы­ва­ет­ся смысл из­ме­не­ний в со­стоя­нии про­грам­мы, без яв­но­го ука­за­ния кон­крет­ной по­сле­до­ва­тель­но­сти вы­пол­няе­мых дей­ст­вий над со­стоя­ни­ем. В язы­ках, от­но­ся­щих­ся к дек­ла­ра­тив­ным П. п., эта по­сле­до­ва­тель­ность фор­ми­ру­ет­ся ин­тер­пре­та­то­ром или ком­пи­ля­то­ром. Од­на из раз­но­вид­но­стей дек­ла­ра­тив­ных П. п. – функ­цио­наль­ная П. п., ос­но­ван­ная на ма­те­ма­тич. ап­па­ра­те функ­ций выс­ше­го по­ряд­ка, в ка­че­ст­ве ар­гу­мен­тов и ре­зуль­та­тов ко­то­рых мо­гут так­же вы­сту­пать функ­ции. Функ­цио­наль­ная П. п. пред­став­ля­ет­ся в ви­де ком­по­зи­ции та­ких функ­ций. В ча­ст­но­сти, бла­го­да­ря от­сут­ст­вию по­боч­ных эф­фек­тов из двух при­ме­не­ний функ­ции с оди­на­ко­вы­ми ар­гу­мен­та­ми мо­жет по­тре­бо­вать­ся лишь од­но. К функ­цио­наль­ным язы­кам про­грам­ми­ро­ва­ния от­но­сят, напр., Haskell, Lisp, OCaml, Scheme, од­на­ко дан­ные язы­ки со­дер­жат и эле­мен­ты им­пе­ра­тив­ных П. п. К дек­ла­ра­тив­ным П. п. от­но­сит­ся так­же ло­ги­че­ская П. п., ба­зи­рую­щая­ся на ма­те­ма­ти­че­ской ло­ги­ке и свя­зан­ная с ме­то­да­ми ав­то­ма­тич. до­ка­за­тель­ст­ва тео­рем. В дан­ной П. п. про­грам­ма пред­став­ля­ет со­бой на­бор фор­мул ло­ги­ки, опи­сы­ваю­щих взаи­мо­связь ме­ж­ду фак­та­ми и ут­вер­ж­де­ния­ми. Ло­гич. про­грам­ма на вхо­де по­лу­ча­ет за­прос в ви­де фор­му­лы ло­ги­ки, а на вы­хо­де ли­бо осу­ще­ст­в­ля­ет под­ста­нов­ку зна­че­ний сво­бод­ных пе­ре­мен­ных во вход­ной фор­му­ле, при ко­то­рой она об­ра­ща­ет­ся в ис­ти­ну, ли­бо вы­да­ёт от­вет «нет», ес­ли та­кая под­ста­нов­ка не су­ще­ст­ву­ет. В ло­гич. язы­ках про­грам­ми­ро­ва­ния на фор­му­лы, как пра­ви­ло, на­кла­ды­ва­ют­ся оп­ре­де­лён­ные ог­ра­ни­че­ния. Напр., в язы­ке про­лог фор­му­лы пред­став­ля­ют со­бой дизъ­юнк­ты Хор­на – объ­е­ди­нён­ные опе­ра­ци­ей дизъ­юнк­ции пе­ре­мен­ные, из ко­то­рых все, кро­ме од­ной, вхо­дят в фор­му­лу с от­ри­ца­ни­ем (см. Ал­геб­ра ло­ги­ки, Ло­ги­че­ские опе­ра­ции). Един­ст­вен­ная пе­ре­мен­ная без от­ри­ца­ния на­зы­ва­ет­ся по­ло­жи­тель­ным ли­те­ра­лом и со­от­вет­ст­ву­ет ис­тин­но­сти ло­гич. ут­вер­жде­ния в це­лом, в то вре­мя как ос­таль­ные пе­ре­мен­ные опи­сы­ва­ют ус­ло­вия его ис­тин­но­сти. Фак­ты (ак­сио­мы) при этом опи­сы­ва­ют­ся в ви­де од­но­го по­ло­жи­тель­но­го ли­те­ра­ла. Вы­пол­не­ние ло­гич. про­грам­мы сво­дит­ся к по­ис­ку ис­ко­мой под­ста­нов­ки. Для фор­мул ло­ги­ки про­из­воль­но­го ви­да дан­ная за­да­ча яв­ля­ет­ся пе­ре­бор­ной.

П. п. под­раз­де­ля­ют так­же на струк­тур­ные и не­струк­тур­ные. Струк­тур­ные П. п. на­це­ле­ны на со­кра­ще­ние вре­ме­ни раз­ра­бот­ки и уп­ро­ще­ние под­держ­ки про­грамм за счёт ис­поль­зо­ва­ния блоч­ных опе­ра­то­ров и под­про­грамм. От­ли­чит. чер­той струк­тур­ных про­грамм яв­ля­ет­ся от­каз от опе­ра­то­ра пе­ре­хо­да (goto). К струк­тур­ным П. п. от­но­сит­ся, в ча­ст­но­сти, про­це­дур­ная П. п. В не­ст­рук­тур­ных П. п. для каж­до­го ти­па вы­чи­слит. ма­ши­ны дол­жен быть на­пи­сан свой ва­риант внутр. ко­да и ис­поль­зу­ет­ся опе­ра­тор go­to.

Боль­шое рас­про­стра­не­ние име­ет объ­ект­но ори­ен­ти­ро­ван­ное про­грам­ми­ро­ва­ние, от­но­ся­щее­ся к струк­тур­ным П. п. В дан­ной П. п. про­грам­ма раз­би­ва­ет­ся на объ­ек­ты – струк­ту­ры дан­ных, со­стоя­щие из по­лей, опи­сы­ваю­щих со­стоя­ние, и ме­то­дов – под­про­грамм, при­ме­няе­мых к объ­ек­там для из­ме­не­ния или за­про­са их со­стоя­ния. В боль­шей час­ти объ­ект­но ори­ен­ти­ро­ван­ных П. п. для опи­са­ния объ­ек­тов ис­поль­зу­ют­ся клас­сы, объ­ек­ты бо­лее вы­со­ко­го по­ряд­ка, опи­сы­ваю­щие струк­ту­ру и опе­ра­ции, свя­зан­ные с объ­ек­та­ми. В ка­че­ст­ве бо­лее ча­ст­ной П. п. по от­но­ше­нию к объ­ект­но ори­ен­ти­ро­ван­ной вы­де­ля­ют про­то­типно ори­ен­ти­ро­ван­ную П. п. В от­ли­чие от ос­но­ван­ных на клас­сах объ­ект­но ори­ен­ти­ро­ван­ных сис­тем, в про­то­тип­но ори­ен­ти­ро­ван­ных сис­те­мах по­ня­тие клас­сов не ис­поль­зу­ет­ся, а но­вые пе­ре­мен­ные объ­ек­ты соз­да­ют­ся пу­тём ко­пи­ро­ва­ния су­ще­ст­вую­щих про­то­ти­пов. К язы­кам, под­дер­жи­ваю­щим объ­ект­но ори­ен­ти­ро­ван­ную П. п., от­но­сят­ся си++, Common Lisp (так­же со­дер­жит эле­мен­ты функ­цио­наль­ной П. п.), джа­ва, джа­ва-скрипт (про­то­тип­но ори­ен­ти­ро­ван­ная мо­дель), смол­ток.

Лит.: Дал У., Дейк­ст­ра Э., Хо­ор К. Струк­тур­ное про­грам­ми­ро­ва­ние. М., 1975; Филд А., Хар­ри­сон П. Функ­цио­наль­ное про­грам­ми­ро­ва­ние. М., 1993; Флойд Р. Па­ра­диг­мы про­грам­ми­ро­ва­ния // Лек­ции лау­реа­тов пре­мии Тью­рин­га за пер­вые два­дцать лет. 1966–1985. М., 1993; Се­бе­ста Р. Ос­нов­ные кон­цеп­ции язы­ков про­грам­ми­ро­ва­ния. 5-е изд. М., 2001; Грэ­хем И. Объ­ект­но-ори­ен­ти­ро­ван­ные ме­то­ды: Прин­ци­пы и прак­ти­ка. 3-е изд. М., 2004; Объ­ект­но-ори­ен­ти­ро­ван­ный ана­лиз и про­ек­ти­ро­ва­ние с при­ме­ра­ми при­ло­же­ний. 3-е изд. М., 2008.

Вернуться к началу