Mga halimbawa ng paradigma ng programming. Konsepto ng programming paradigm

Lecture No. Programming Paradigms. Imperative programming.

    Ang konsepto ng isang programming paradigm.

    Pag-uuri ng mga paradigma ng programming.

    Imperative programming.

  1. Ang konsepto ng isang programming paradigm.

Ang isang programming paradigm ay isang hanay ng mga diskarte, pamamaraan, estratehiya, ideya at konsepto na tumutukoy sa istilo ng pagsulat ng mga programa.

Ang paradigma ng programming sa modernong industriya ng programming ay madalas na tinutukoy ng toolkit ng programmer (programming language at operating system).

Ang isang programming paradigm ay kumakatawan (at tumutukoy) kung paano tinitingnan ng isang programmer ang pagpapatupad ng isang programa. Halimbawa, sa object-oriented programming, tinitingnan ng programmer ang programa bilang isang set ng mga bagay na nakikipag-ugnayan, samantalang sa functional programming, ang programa ay kinakatawan bilang isang chain ng mga pagsusuri ng function.

Ang pangako ng isang partikular na tao sa isang partikular na paradigm ay kung minsan ay napakalakas na ang mga debate tungkol sa mga pakinabang at disadvantages ng iba't ibang mga paradigm ay inuri sa mga bilog ng computer bilang tinatawag na "relihiyoso" na mga digmaan.

Kasaysayan ng termino

Ang terminong "paradigma" ay maliwanag na may utang sa modernong kahulugan nito sa larangang siyentipiko at teknikal kay Thomas Kuhn at sa kanyang aklat na "The Structure of mga rebolusyong siyentipiko"(tingnan ang paradigma). Tinawag ni Kuhn ang mga paradigma na itinatag na mga sistema ng pang-agham na pananaw kung saan isinasagawa ang pananaliksik. Ayon kay Kuhn, sa proseso ng pagbuo ng isang siyentipikong disiplina, ang isang paradigm ay maaaring mapalitan ng isa pa (tulad ng, halimbawa, ang geocentric celestial mechanics ni Ptolemy ay pinalitan ng heliocentric system ng Copernicus), habang ang lumang paradigm ay patuloy na umiiral. para sa ilang oras at kahit na umunlad dahil sa ang katunayan na ang marami sa mga tagasuporta nito ay lumalabas na para sa isang kadahilanan o iba pa, hindi nila magawang umangkop upang gumana sa ibang paradigm.

Ang terminong "paradigm ng programming" ay unang ginamit ni Robert Floyd sa kanyang panalo sa Turing Award.

Sinabi ni Floyd na sa pagprograma ay maaaring maobserbahan ng isang tao ang isang kababalaghan na katulad ng mga paradigma ni Kuhn, ngunit, hindi katulad nila, ang mga paradigma ng programming ay hindi eksklusibo sa isa't isa:

Kung ang pag-unlad ng sining ng programming sa kabuuan ay nangangailangan ng patuloy na pag-imbento at pagpapabuti ng mga paradigms, kung gayon ang pagpapabuti ng sining ng isang indibidwal na programmer ay nangangailangan na palawakin niya ang kanyang repertoire ng paradigms.

Kaya, ayon kay Robert Floyd, hindi katulad ng mga paradigma sa siyentipikong mundo Tulad ng inilarawan ni Kuhn, ang programming paradigms ay maaaring pagsamahin, na nagpapayaman sa toolkit ng programmer.

2. Pag-uuri ng mga paradigma sa programming.

Ang nangungunang paradigm ng inilapat na programming batay sa kinakailangang kontrol at estilo ng pamamaraan-operator ng pagbuo ng programa ay nakakuha ng katanyagan higit sa limampung taon na ang nakalilipas sa larangan ng mataas na propesyonal na aktibidad ng mga espesyalista sa organisasyon ng mga proseso ng computing at impormasyon. Ang huling dekada ay mabilis na pinalawak ang heograpiya ng agham ng kompyuter, na pinalawak ito sa saklaw ng komunikasyong masa at paglilibang. Binabago nito ang pamantayan sa pagsusuri mga sistema ng impormasyon at mga kagustuhan sa pagpili ng mga paraan at pamamaraan ng pagproseso ng impormasyon.

Ang mga pangkalahatang paradigma ng programming na lumitaw sa pinakadulo simula ng panahon ng computer programming - ang mga paradigm ng inilapat, teoretikal at functional na programming, bukod sa iba pa - ay ang pinaka-matatag.

Ang inilapat na programming ay napapailalim sa isang oryentasyon ng problema, na sumasalamin sa computerization ng impormasyon at computational na proseso ng numerical processing, na pinag-aralan nang matagal bago ang pagdating ng mga computer. Dito na mabilis na lumitaw ang isang malinaw na praktikal na resulta. Naturally, sa mga nasabing lugar, ang programming ay kaunti lamang ang pagkakaiba sa coding; para dito, bilang panuntunan, ang istilo ng operator ng kumakatawan sa mga aksyon ay sapat. Sa pagsasagawa ng inilapat na programming, kaugalian na magtiwala sa mga napatunayang template at library ng mga pamamaraan at maiwasan ang mga mapanganib na eksperimento. Ang katumpakan at katatagan ng mga pang-agham na kalkulasyon ay pinahahalagahan. Ang wikang Fortran ay isang beterano ng application programming. Sa huling dekada lamang ito ay naging medyo mababa sa lugar na ito sa Pascal-C, at sa mga supercomputer sa parallel programming language tulad ng Sisal. [, , , ]

Ang teoretikal na programming ay sumusunod sa isang oryentasyon ng publikasyon na naglalayong maihambing ang mga resulta ng mga siyentipikong eksperimento sa larangan ng programming at computer science. Sinusubukan ng programming na ipahayag ang mga pormal na modelo nito, upang ipakita ang kanilang kahalagahan at pangunahing katangian. Ang mga modelong ito ay minana ang mga pangunahing tampok ng mga kaugnay na konsepto ng matematika at itinatag ang kanilang mga sarili bilang isang algorithmic na diskarte sa computer science. Ang pagnanais para sa katibayan ng mga konstruksyon at pagtatasa ng kanilang pagiging epektibo, katumpakan, kawastuhan, kawastuhan at iba pang pormal na relasyon sa mga diagram at mga teksto ng programa ay nagsilbing batayan para sa structured programming [, ] at iba pang mga pamamaraan para sa pagkamit ng pagiging maaasahan ng proseso ng pagbuo ng programa, halimbawa. , karampatang programming. Ang mga karaniwang subset ng Algol at Pascal, na nagsilbi bilang gumaganang materyal para sa teorya ng programming, ay pinalitan ng mas maginhawang applicative na mga wika para sa eksperimento, tulad ng ML, Miranda, Scheme at iba pang Lisp dialects. Ngayon sila ay pinagsama ng mga subset ng C at Java.

Ang functional programming ay nabuo bilang isang pagkilala sa matematikal na oryentasyon sa pananaliksik at pagpapaunlad ng artificial intelligence at ang pagbuo ng mga bagong abot-tanaw sa computer science. Isang abstract na diskarte sa pagtatanghal ng impormasyon, isang laconic, unibersal na istilo ng pagbuo ng mga function, kalinawan ng kapaligiran ng pagpapatupad para sa iba't ibang kategorya function, kalayaan ng recursive constructions, tiwala sa intuwisyon ng mathematician at researcher, pag-iwas sa pasanin ng maagang paglutas ng mga problema sa paglalaan ng memorya, pagtanggi sa hindi makatwirang mga paghihigpit sa saklaw ng mga kahulugan - lahat ng ito ay nauugnay ni John McCarthy sa ideya ng Lisp na wika. Ang pagiging maalalahanin at metodolohikal na bisa ng mga unang pagpapatupad ng Lisp ay naging posible upang mabilis na makaipon ng karanasan sa paglutas ng mga bagong problema at ihanda ang mga ito para sa inilapat at teoretikal na programming. Sa kasalukuyan, mayroong daan-daang mga functional programming language na nakatuon sa iba't ibang klase ng mga gawain at uri ng mga teknikal na paraan. [,,,,,,]

Ang mga pangunahing tool at pamamaraan ng programming ay umunlad habang ang pagiging kumplikado ng mga problemang nilulutas ay tumaas. Nagkaroon ng stratification ng programming paradigms depende sa lalim at pangkalahatan ng elaborasyon ng mga teknikal na detalye ng organisasyon ng mga proseso ng pagproseso ng impormasyon sa computer. Lumitaw ang iba't ibang mga istilo ng programming, ang pinaka-mature na kung saan ay mababa ang antas (naka-orient sa makina), system, declarative-logical, optimization-transformational, at high-performance/parallel programming.

Ang mababang antas ng programming ay nailalarawan sa pamamagitan ng isang hardware na diskarte sa pag-aayos ng pagpapatakbo ng isang computer, na naglalayong ma-access ang anumang mga kakayahan sa hardware. Ang focus ay sa pagsasaayos ng hardware, katayuan ng memorya, mga utos, paglilipat ng kontrol, pagkakasunud-sunod ng mga kaganapan, mga pagbubukod at sorpresa, mga oras ng pagtugon ng device at tagumpay ng pagtugon. Ang wika ng pagpupulong ay na-overshadow nang ilang panahon bilang visual na medium na pinili ng Pascal at C, kahit na sa microprogramming, ngunit ang mga pagpapabuti ng user interface ay maaaring mabawi ang posisyon nito. [,,,]

System Programming sa mahabang panahon binuo sa ilalim ng presyon ng serbisyo at pasadyang trabaho. Ang diskarte sa pagmamanupaktura na likas sa naturang gawain ay umaasa sa isang kagustuhan para sa mga prosesong maaaring kopyahin at mga matatag na programa na idinisenyo para sa paulit-ulit na paggamit. Para sa mga naturang programa, ang isang pamamaraan ng pagpoproseso ng compilation, static na pagsusuri ng mga katangian, awtomatikong pag-optimize at kontrol ay nabibigyang-katwiran. Ang lugar na ito ay pinangungunahan ng imperative-procedural na istilo ng programming, na isang direktang generalization ng operator ng estilo ng application programming. Pinapayagan nito ang ilang standardisasyon at modular programming, ngunit nakakakuha ito ng medyo kumplikadong mga istraktura, mga pagtutukoy, mga pamamaraan ng pagsubok, mga tool sa pagsasama ng programa, atbp. Ang mahigpit na mga kinakailangan para sa kahusayan at pagiging maaasahan ay natutugunan ng pagbuo ng mga propesyonal na tool na gumagamit ng kumplikadong associative semantic heuristics kasama ang mga pamamaraan ng syntactically-driven na disenyo at pagbuo ng programa. Ang hindi maikakaila na potensyal ng naturang mga tool sa pagsasanay ay limitado sa pagiging kumplikado ng pag-unlad - isang kinakailangan sa kwalipikasyon ang lumitaw.

Ang mataas na pagganap ng programming ay naglalayong makamit ang sukdulan posibleng katangian kapag nilulutas ang mga partikular na mahahalagang problema. Ang natural na reserba ng pagganap ng computer ay mga parallel na proseso. Ang kanilang organisasyon ay nangangailangan ng detalyadong pagsasaalang-alang ng mga ugnayan sa oras at isang hindi kinakailangang istilo ng pamamahala ng mga aksyon. Ang mga supercomputer na sumusuporta sa high-performance computing ay nangangailangan ng mga espesyal na system programming techniques. Ang diskarte sa graph-network sa kumakatawan sa mga system at proseso para sa mga parallel na arkitektura ay ipinahayag sa mga dalubhasang parallel programming language at supercompiler na inangkop upang imapa ang abstract hierarchy ng mga proseso sa antas ng gawain sa partikular na spatial na istraktura ng mga processor ng totoong kagamitan [,,] .

Ang deklaratibo (lohikal) na programming ay lumitaw bilang isang pagpapasimple ng functional programming para sa mga mathematician at linguist, mga solver ng problema simbolikong pagproseso. Ang partikular na kaakit-akit ay ang posibilidad ng paggamit ng nondeterminism bilang isang konseptong batayan, na nagpapalaya sa atin mula sa maagang pag-order kapag nagprograma ng pagproseso ng mga formula. Ang istilo ng produksyon ng pagbuo ng mga proseso na may mga pagbabalik ay sapat na natural para sa isang linguistic na diskarte sa paglilinaw ng pormal na kaalaman ng mga eksperto, at binabawasan ang panimulang hadlang sa pagpapatupad ng mga sistema ng impormasyon.

Metodolohikal na pinagsama ng transformational programming ang mga diskarte ng program optimization, macrogeneration at partial computation. Ang isang pangunahing konsepto sa lugar na ito ay pagkakapareho ng impormasyon. Ito ay nagpapakita ng sarili sa pagtukoy ng mga pagbabagong-anyo ng mga programa at proseso, sa paghahanap ng mga pamantayan para sa applicability ng mga pagbabagong-anyo, sa pagpili ng isang diskarte para sa kanilang paggamit. Mga pinaghalong kalkulasyon, ipinagpaliban na mga aksyon, tamad na programming, naantala na mga proseso, atbp. ay ginagamit bilang mga pamamaraan para sa pagtaas ng kahusayan ng pagproseso ng impormasyon sa ilalim ng ilang partikular na natukoy na mga kondisyon. [,]

Ang karagdagang pag-unlad ng mga paradigma ng programming ay sumasalamin sa isang pagbabago sa bilog ng mga taong interesado sa paggamit ng mga sistema ng impormasyon. Ang pagbuo ng malawak na mga diskarte sa programming ay isang natural na tugon sa mga radikal na pagpapabuti sa pagganap ng hardware at mga network ng kompyuter. Mayroong paglipat ng mga tool sa pag-compute mula sa klase ng mga teknikal na tool patungo sa klase ng mga gamit sa bahay. Ang lupa ay lumitaw para sa pag-update ng mga diskarte sa programming, pati na rin ang posibilidad ng rehabilitasyon ng mga lumang ideya na hindi maganda ang pagkakabuo dahil sa mababang teknolohiya at pagganap ng mga computer. Interesado na bumuo ng pananaliksik, ebolusyonaryo, nagbibigay-malay at pag-aangkop na mga diskarte sa programming, na lumilikha ng pag-asa ng makatuwirang pag-unlad ng tunay na mapagkukunan ng impormasyon at potensyal ng computer. [,]

Ang diskarte sa pananaliksik na may istilong pang-edukasyon na laro ng propesyonal, pang-edukasyon at amateur na programming ay maaaring magbigay ng lakas sa katalinuhan sa pagpapabuti ng teknolohiya ng programming na hindi makayanan ang mga phenomena ng krisis sa nakaraang elementong base. [,]

Ang ebolusyonaryong diskarte na may mobile na istilo ng pagpino ng mga programa ay medyo malinaw na nakikita sa konsepto ng object-oriented na programming, na unti-unting umuunlad sa subject-oriented at kahit na ego-oriented na programming. Ang muling paggamit ng mga kahulugan at pagmamana ng mga katangian ng bagay ay maaaring pahabain ikot ng buhay na-debug na mga kapaligiran ng impormasyon, dagdagan ang pagiging maaasahan ng kanilang operasyon at kadalian ng paggamit. Ang isang cognitive na diskarte na may interoperable na istilo ng visual-interface na pag-unlad ng mga bukas na system at ang paggamit ng mga bagong audio-video tool at non-standard na mga device ay nagbubukas ng mga paraan upang mapahusay ang pang-unawa ng kumplikadong impormasyon at pasimplehin ang sapat na pagproseso nito. [,]

Ang isang diskarte sa pagbagay na may isang ergonomic na istilo ng indibidwal na disenyo ng mga personalized na sistema ng impormasyon ay nagbibigay ng pagkakataon sa mga computer scientist na mahusay na mag-program, mag-organisa at suportahan ang mga prosesong teknolohikal na real-time na sensitibo sa kadahilanan ng tao at paglipat ng system [,].

Ang pangingibabaw ng isang linya ng arkitektura, karaniwang interface, karaniwang teknolohiya ng programming, atbp., na nagpapatatag ngayon. ay puno ng pagkawala ng liksi kapag nag-a-update ng mga teknolohiya ng impormasyon. Ang mga tao na nakasanayan na matatag na i-assimilate ang lahat minsan at para sa lahat ay lalong mahina sa bagay na ito. Kapag nag-aaral ng mga programming language, ang mga naturang problema ay maiiwasan sa pamamagitan ng pagtuturo ng iba't ibang mga programming language nang sabay-sabay o sa pamamagitan ng pre-presenting ng batayan, na nagtatakda ng grammatical structure para sa pag-generalize ng mga konsepto na ang pagkakaiba-iba ay mahirap maunawaan sa pinasimple na mga halimbawang pang-edukasyon. Ito ang tiyak na batayan na ibinibigay ng pag-aaral ng functional programming dahil ito ay naglalayong ipakita at suriin ang mga paradigm na nabuo sa pagsasanay ng programming sa iba't ibang larangan ng aktibidad na may iba't ibang antas ng mga kwalipikasyon ng espesyalista, na maaaring maging kapaki-pakinabang bilang isang konseptwal. batayan para sa pag-aaral ng mga bagong phenomena sa computer science.

Ang programming paradigm ay isang tool para sa paghubog ng propesyonal na pag-uugali. Ang agham ng kompyuter ay napunta mula sa propesyonal na programming ng isang mataas na kwalipikadong pili ng mga teknikal na espesyalista at siyentipiko tungo sa libreng libangan ng isang aktibong bahagi ng isang sibilisadong lipunan. Ang pag-master ng mga sistema ng impormasyon sa pamamagitan ng pag-unawa para sa layunin ng karampatang pagkilos at responsableng paggamit ng teknolohiya ay pinalitan ng mga intuitive na kasanayan ng magulong impluwensya sa kapaligiran ng impormasyon na may katamtamang pag-asa ng swerte, nang walang pag-angkin sa kaalaman. Ang pagpapanatili ng mga shared use center, propesyonal na suporta para sa integridad ng impormasyon at paghahanda ng data ay halos ganap na nagbigay daan sa self-service ng mga personal na computer, independiyenteng paggana ng mga network at heterogenous na mga server na may pakikipag-ugnayan ng iba't ibang mga komunikasyon.

Ang pagkakatugma ng mga programang binuo, pinoproseso ang data, at pamamahala ng gawain ay nagbibigay daan sa ideya ng mga interface na idinisenyo upang lumahok sa mga daloy ng impormasyon tulad ng pag-navigate. Ang dating pamantayan sa kalidad: bilis, pagtitipid ng memorya at pagiging maaasahan ng pagproseso ng impormasyon ay lalong natatabunan ng apela sa paglalaro at lawak ng pag-access sa mga mapagkukunan ng impormasyon sa mundo. Ang mga saradong sistema ng software na may kilalang mga garantiya ng kalidad at pagiging maaasahan ay pinipilit na palabasin ng mga bukas na sistema ng impormasyon na may hindi inaasahang pag-unlad ng komposisyon, mga paraan ng pag-iimbak at pagproseso ng impormasyon.

Maraming mahahalagang konsepto para sa pagsasanay sa programming, tulad ng mga kaganapan, mga pagbubukod at mga error, potensyal, hierarchy at orthogonality ng mga konstruksyon, extrapolation at mga punto ng paglago ng programa, pagsukat ng kalidad, atbp. hindi umabot sa sapat na antas ng abstraction at formalization. Nagbibigay-daan ito sa amin na mahulaan ang pagbuo ng mga paradigma ng programming at pumili materyal na pang-edukasyon para sa hinaharap ng component programming (COM/DCOM, Corba, UML, atbp.). Kung ang mga tradisyonal na paraan at pamamaraan para sa pagpili ng mga magagamit na bahagi ay napapailalim sa criterion ng modularity, na nauunawaan bilang pinakamainam na pagpili ng minimal na pagkabit na may pinakamataas na pag-andar, kung gayon ang modernong base ng elemento ay nagbibigay-daan sa pagpapatakbo ng mga multi-contact node na gumaganap. mga simpleng operasyon. [,,,,,]

Ang mga sintomas na ito ng pag-update ng paradigma ng programming ay tumutukoy sa direksyon ng mga pagbabagong nagaganap sa sistema ng mga pangunahing konsepto, sa konsepto ng impormasyon at computer science. Ang kalakaran ng paggamit ng mga interpreter (mas tiyak, hindi kumpletong compilation) sa halip na mga compiler, na inihayag sa konsepto ng Java kumpara sa C, at ang tukso ng object-oriented programming laban sa backdrop ng pangkalahatang tinatanggap na imperative-procedural na istilo ng programming ay maaaring nakikita bilang isang implicit na paggalaw patungo sa isang functional na istilo. Ang kapangyarihan ng pagmomodelo ng mga functional na formula ay sapat para sa isang buong representasyon ng iba't ibang paradigms, na nagbibigay-daan, sa kanilang batayan, upang i-extrapolate ang pagkuha ng mga praktikal na kasanayan sa pag-aayos ng mga proseso ng impormasyon para sa hinaharap.

Sa kalagitnaan ng huling (ika-20) siglo, ang terminong "programming" ay hindi nagpapahiwatig ng koneksyon sa isang computer. Maaaring makita ng isa ang pamagat ng aklat na "Computer Programming". Ngayon, bilang default, ang terminong ito ay nangangahulugan ng organisasyon ng mga proseso sa mga computer at computer network.

Malaki ang pagkakaiba ng programming bilang isang agham mula sa matematika at pisika sa mga tuntunin ng pagsusuri ng mga resulta. Ang antas ng mga resulta na nakuha ng mga physicist at mathematician ay karaniwang tinatasa ng mga espesyalista na may katulad o mas mataas na mga kwalipikasyon. Sa pagtatasa ng mga resulta ng programming, ang pagtatasa ng gumagamit, na hindi nagpapanggap na may kaalaman sa programming, ay gumaganap ng isang mahalagang papel. Samakatuwid, hindi tulad ng mga nakasanayang agham, ang mga espesyalista sa programming ay bahagyang gumaganap ng tungkulin ng pagsasalin ng kanilang mga propesyonal na termino sa mga konsepto ng gumagamit.

Ang programming ay may sariling tiyak na paraan ng pagtatatag ng pagiging maaasahan ng mga resulta - ito ay isang eksperimento sa computer. Kung ang pagiging maaasahan sa matematika ay bumaba sa mga demonstrative constructions na naiintindihan lamang ng mga espesyalista, at sa physics - sa isang reproducible na eksperimento sa laboratoryo na nangangailangan ng mga espesyal na kagamitan, kung gayon ang isang eksperimento sa computer ay maaaring makuha sa pangkalahatang publiko.

Ang isa pang tampok ng programming ay nagmumula sa pag-asa nito sa mabilis na pagbuo ng elektronikong teknolohiya. Para sa kadahilanang ito, ang kaalaman sa programming ay isang kumbinasyon ng mga klasiko at fashion. Ang partikular na kaalaman sa mga naka-istilong bagong produkto ay nagiging luma na, kaya para mabilis na ma-update ang kaalaman at kasanayan kailangan mo ng isang klasikal na pundasyon, ang direktang layunin nito ay hindi lubos na halata sa mga user at baguhan. [,,]

Gumagamit ang programming ng mathematical apparatus bilang isang konseptwal na batayan (set theory, number theory, algebra, logic, theory of algorithms at recursive functions, graph theory, atbp.)

Ang mga pamantayan sa kalidad ng programa ay lubhang magkakaibang. Ang kanilang kahalagahan ay mahalagang nakasalalay sa klase ng mga gawain at mga kondisyon ng aplikasyon ng mga programa:

pagiging epektibo

pagiging maaasahan

Pagpapanatili

automation

mahusay na paggamit ng mga mapagkukunan (oras, memorya, kagamitan, impormasyon, tao)

kadalian ng pag-unlad at paggamit

visibility ng teksto ng programa

pagmamasid ng proseso ng programa

diagnostic ng kung ano ang nangyayari

Ang pagkakasunud-sunod ng mga pamantayan ay madalas na sumasailalim sa mga pagbabago habang ang larangan ng aplikasyon ng programa ay umuunlad, tumataas ang mga kwalipikasyon ng gumagamit, modernisasyon ng kagamitan, teknolohiya ng impormasyon at software engineering. Ang nagresultang patuloy na pag-unlad ng espasyo kung saan nalutas ang problema ay nagpapakilala ng mga karagdagang kinakailangan para sa istilo ng programming ng mga sistema ng impormasyon:

kakayahang umangkop

kakayahang baguhin

pagpapabuti

Ang programming bilang isang agham, sining at teknolohiya ay nagsasaliksik at malikhaing nagpapaunlad ng proseso ng paglikha at paggamit ng mga programa, tinutukoy ang mga paraan at pamamaraan ng pagbuo ng mga programa, ang pagkakaiba-iba kung saan magiging pamilyar tayo sa karagdagang mga lektura na nakatuon sa pagsusuri ng isang bilang ng mga pangunahing paradigms sa programming.

May mga halatang kahirapan sa pag-uuri ng mga programming language at pagtukoy kung nabibilang sila sa isang tiyak na paradigm ng programming. Sa kursong ito, ang programming paradigm ay nailalarawan sa pamamagitan ng interaksyon ng mga pangunahing semantic system, tulad ng pagpoproseso ng data, pag-iimbak ng data, at kontrol sa pagproseso ng data. Sa pamamaraang ito, tatlong kategorya ng mga paradigma ang maaaring makilala:

mababang antas ng programming;

programming sa mataas na antas ng mga wika;

paghahanda ng mga programa batay sa mga ultra-high-level na wika.

Ang mababang antas ng programming ay tumatalakay sa mga istruktura ng data na idinidikta ng arkitektura at hardware. Kapag nag-iimbak ng data at mga programa, ginagamit ang pandaigdigang memorya at isang awtomatikong modelo ng kontrol sa pagproseso ng data. [,,,,,,,,]

Ang programming sa mga high-level na wika ay iniangkop sa pagtukoy ng mga istruktura ng data na sumasalamin sa likas na katangian ng mga problemang nilulutas. Ginagamit ang isang hierarchy ng visibility area ng mga istruktura ng data at mga pamamaraan para sa pagproseso ng mga ito, na isinailalim sa isang structural-logical control model na nagbibigay-daan para sa convergence ng proseso ng pag-debug ng program. [,,,,,,]

Ngayon ay mauunawaan natin kung ano ang mga paradigm ng programming at ang mga natatanging tampok ng bawat isa sa kanila.

Ang kahulugan ng isang paradigm ay karaniwang ganito ang tunog:

Ang mga paradigma ay isang hanay ng mga prinsipyo ng mga ideya at konsepto na tumutukoy sa istilo ng pagsulat ng isang computer program.

Dapat ding tandaan na ang mga paradigms ay umiiral hindi lamang sa programming, kundi pati na rin sa pilosopiya, atbp.

Batay sa kahulugan, maaari nating sabihin na ang isang programming paradigm ay isang tiyak na hanay ng mga prinsipyo para sa pagsulat ng software ng computer.

Mga uri ng paradigms ng programming

Nagkataon lang na maraming programmer ang nagmungkahi ng kanilang mga prinsipyo, mga paraan ng pagsulat ng isang programa, at bilang isang resulta ay lumitaw malaking bilang ng paradigms.

Inililista namin ang pinakasikat sa kanila:

  • Imperative programming
  • Nakabalangkas na programming
  • Deklarasyon na programming
  • Object-oriented na programming

Sa katunayan, marami pang mga paradigma na hindi namin nakalista sa listahan; sinasaklaw lang namin ang pinakasikat sa kanila.

Tingnan natin sandali ang bawat isa sa kanila

Imperative programming

Ang pinakaunang paradigm na nabuo kaagad pagkatapos ng pagdating ng mga computer.

mula sa Ingles kailangan- utos

Mga natatanging tampok ng imperative programming:

Sa source code, ang command na "mga order" ay nakasulat, hindi mga klase, tulad ng kaso, halimbawa, sa object-oriented programming.

Ang lahat ng mga tagubilin ay dapat na isagawa nang sunud-sunod, nang paisa-isa (halimbawa, hindi tayo maaaring tumalon mula sa isang seksyon ng code patungo sa isa pa)

Pagkatapos maisagawa ang mga tagubilin, ang data ay maaaring isulat sa memorya at basahin mula sa memorya.

Kinatawan ng mga wika ng paradigm: machine (binary) code, Assembly, fortran, algol, cobol

Nakabalangkas na programming

Ang pamamaraang ito ay iminungkahi ng isang Dutch scientist

Edsger Dijkstra 1930 - 2002

Ngunit ang pangunahing konsepto sa structured programming ay ang konsepto mga bloke at hierarchical na istraktura at gumagamit ng tatlong pangunahing istruktura ng kontrol:

  • kasunod
  • sumasanga

Ang structured programming ay mayroon ding 7 prinsipyo na inilarawan ni Dijkstra:

  1. kumpletong pagtanggi na gamitin ang goto operator; *
  2. anumang programa ay binuo sa tatlong mga istruktura ng kontrol: sequence, cycle at branching;
  3. ang mga pangunahing istruktura ng kontrol ay maaaring mailagay sa loob ng isa't isa ayon sa ninanais;
  4. Ang mga umuulit na bahagi ay dapat na idinisenyo bilang mga subroutine;
  5. Ang bawat lohikal na istraktura ay dapat na naka-format bilang harangan;
  6. lahat ng mga istraktura ay dapat magkaroon ng isang input at isang output, at wala na;
  7. Ang pagbuo ng programa ay dapat magpatuloy nang hakbang-hakbang gamit ang isang "hagdan" na pamamaraan (itaas hanggang ibabang paraan)

* —
Ang goto ay isang unconditional jump operator na malawakang ginagamit noong 1970s

Deklarasyon na programming

kumakatawan sa isang detalye para sa paglutas ng isang problema, at naglalarawan kung ano ang problema at ang inaasahang resulta mula sa trabaho.

Kabaligtaran ito sa imperative programming dahil naglalarawan ang declarative programming Ano gawin, at sa isa pa Paano gawin.

Object-oriented programming (OOP)

ay ang pinakasikat at karaniwang ginagamit na paradigm na tinatanggap sa buong mundo ng halos lahat ng programmer. Ang lahat ng pang-industriyang programming ay binuo dito. Ang pangunahing ideya ay upang kumatawan sa isang programa bilang mga bagay, na kung saan ay kumakatawan sa isang halimbawa ng isang klase, at ang mga klase, sa turn, ay bumubuo ng isang inheritance hierarchy.

Pangunahing konsepto ng OOP

abstraction ng data— pag-highlight ng makabuluhang impormasyon at paghihiwalay nito sa hindi gaanong mahalagang impormasyon.

Encapsulation- ito ay isang pag-aari na nagbibigay-daan sa iyong pagsamahin ang data at mga pamamaraan sa isang klase

Mana- isang ari-arian na nagpapahintulot sa iyo na lumikha bagong klase batay sa luma (manahin ang lahat ng pag-aari nito)

Polymorphism- at pinapayagan ka ng property na ito na gumamit ng mga bagay na may parehong interface

RECURSIVE COMPUTING SA IBA'T IBANG PROGRAMMING PARADIGMS.

G.V. Vanykina, A.V. Yakushin

Tula State Pedagogical University na pinangalanan. L. N. Tolstoy

[email protected]

1. Paradigms ng modernong programming.

Sa kasaysayan, ang mga unang teknolohikal na pamamaraan sa larangan ng programming ay kinabibilangan ng agnas ng pangkalahatang istraktura ng problemang nilulutas sa mga naturang bahagi, na sa kontekstong ito ay elementarya. Kasunod nito, isang seryosong teoretikal na batayan at isang bilang ng mga inirerekomendang teknolohikal na pamamaraan ay binuo para sa pamamaraang ito, na magkakasamang bumubuo ng modernong programming. Depende sa pagpili ng "base ng elemento", maaari kang makakuha ng iba't ibang hanay ng mga pamamaraan ng pamamaraan, panuntunan, relasyon, dependency, atbp. upang malutas ang isang naibigay na problema, na magkakasamang bumubuo ng isang paradigma ng programming.

Dapat pansinin na ang salitang "paradigm" ay dumating sa programming mula sa maimpluwensyang aklat na "The Structure of Scientific Revolutions," na isinulat ng istoryador ng agham na si Thomas Kuhn noong 1970. Ginamit ni Kuhn ang termino upang ilarawan ang isang hanay ng mga teorya, pamantayan, at pamamaraan na magkasamang bumubuo ng isang paraan ng pag-oorganisa ng kaalamang siyentipiko—sa madaling salita, isang paraan ng pagtingin sa mundo. Ang pangunahing punto ni Kuhn ay ang mga rebolusyon sa agham ay nangyayari kapag ang isang lumang paradigm ay binago, tinanggihan, at pinalitan ng bago.

Sa katulad na kahulugan, bilang isang modelo o halimbawa, at sa pangkalahatan bilang isang diskarte sa pag-aayos, ang salita ay ginagamit sa panayam na "Programming Paradigms" ni Robert Floyd, nagwagi ng 1979 Turing Award.

Ang programming paradigm ay isang napakataas na antas ng pangunahing konsepto sa teorya ng programming at samakatuwid ay hindi maaaring mahigpit na tukuyin. Sa pamamagitan ng isang paradigm sa programming, ang ibig naming sabihin ay isang panloob na pare-parehong hanay ng mga elemento ng programa na may mga karaniwang pangunahing tampok, parehong lohikal at algorithmic, at ang mga pangunahing konsepto na nauugnay sa mga elementong ito. Katulad nito, ang isang paradigm sa programming ay masasabing isang paraan ng pag-konsepto kung paano isasagawa ang mga kalkulasyon at kung paano dapat i-istruktura at organisado ang gawaing ginagawa ng isang kompyuter.

Ang mga paradigma ng programming ay sumasakop sa isang mahalagang lugar sa teknolohiya ng pag-unlad software. Nasa paligid nila na ang mga metodolohikal na konsepto ay nagsisimulang mabuo at mabuo. Ang papel na ito ay tinutukoy ng katotohanan na ang mga umuusbong na bagong ideya para sa paglikha ng mga programa ay unang ipinatupad sa mga simpleng tool na sumusuporta sa pananaliksik at eksperimental na pag-verify ng iminungkahing istilo, na kadalasang mga programming language. Matapos i-generalize ang paunang karanasan, darating ang isang pag-unawa sa mga pakinabang at disadvantages, na nagpapahintulot sa amin na magpatuloy sa pagbuo ng mga pamamaraan na nagsisiguro sa paggamit ng paradigm sa pagbuo ng malalaking software system. Kung ang nabuong paradigma ay hindi kayang magsilbi bilang batayan ng isang pang-industriyang pamamaraan, ito ay tinatanggihan o inilalapat sa isang limitadong sukat. Masasabi nating ang programming paradigm ay ipinatupad sa pamamagitan ng programming methodologies, na kung saan ay natapos sa isang hanay ng mga kasunduan at kasunduan sa mga pangunahing tool sa wika at ang kanilang mga kumbinasyon na katanggap-tanggap at hindi katanggap-tanggap para sa isang ibinigay na paradigm.

Depende sa paraan ng agnas, ang mga sumusunod na pangunahing paradigm ng programming ay maaaring makilala, na ipinakita sa Talahanayan 1.

Talahanayan 1. Basic programming paradigms

Paradigm pangalan

Paraan ng agnas

Halimbawa ng mga programming language

Imperative

(kasingkahulugan: direktiba, pamamaraan)

Mga subroutine, abstract na uri ng data

Fortran, C, Pascal, Basic

Deklarasyon

(mga bahagi: lohikal at functional)

Mga layunin na ipinahayag sa mga tuntunin ng calculus ng panaguri. "Kung-kung gayon" ang mga tuntunin

Lisp, Scheme, Prolog, ML, Haskell

Object-oriented

Mga klase at bagay

Java, C++, Ruby

Programming sa Constraints

Walang pagbabago na relasyon, sistema ng mga paghihigpit

mga wika CLP(X), SETL, Prolog III

Sitwasyon

Pangunahing pagpoproseso o senaryo ng kontrol

Perl, PHP, Python, ASP

Dapat pansinin na ang pagsunod sa isang tiyak na paradigma ay makabuluhang nakakaimpluwensya sa teknolohikal na diskarte sa paglutas ng mga problema at ang paggamit ng iba't ibang uri ng mga katangian ng heuristic na istruktura sa pagsasanay sa programming. Sa pangkalahatan, masasabi natin na ang pagpili at paggamit ng isang paradigm sa mahabang panahon ay nag-iiwan ng tiyak na imprint sa pag-iisip ng isang programmer (lalo na ang isang baguhan) at maaaring napakahirap na sirain ang mabisyo na bilog ng itinatag na "cliches" kapag ito ay kinakailangan upang malutas ang hindi karaniwang mga problema. Para sa isang gumagamit ng anumang antas, sa sandaling ginawa, ang pagpili ng isang tiyak na paradigm ay mahalagang tumutukoy sa kanyang saloobin sa mga teknolohiya ng computer at ang pagiging epektibo ng kanilang paggamit.

Kasalukuyang bihasa sa teknolohiya ng kompyuter, mataas na lebel Ang kultura ng impormasyon ay imposible nang walang malinaw na pag-unawa hindi lamang sa mga prinsipyo ng pagpapatakbo ng computer, ngunit maging sa sa mas malaking lawak, potensyal nito. Ang kalakaran na ito ay hindi maaaring makaimpluwensya sa istruktura ng pag-aaral ng computer science kapwa sa isang unibersidad at, sa partikular, sa paaralan, dahil ito ang edukasyon sa paaralan na naglalatag ng pangunahing batayan na tumutukoy at sumusuporta karagdagang pag-unlad espesyalista sa hinaharap.

Ang problema ng pagbuo ng algorithmic na kultura ng mga mag-aaral bilang isang pangunahing sangkap ng kultura ng impormasyon ay nalutas mula sa punto ng view ng iba't ibang mga paradigma ng programming depende sa isang bilang ng mga kadahilanan: ang kurikulum para sa pagtuturo ng mga kurso sa computer science, hardware at software, pati na rin ang personal at propesyonal na mga katangian ng guro. Ang seksyong "Programming" sa loob ng balangkas ng pangkalahatang antas ng edukasyon ng mga mag-aaral ay nagsasangkot ng pag-aaral ng mga pangunahing kaalaman ng imperative ( Basic, Pascal, C , school algorithmic language) o object-oriented ( Delphi, C++, Java ) mga paradigma. Pagsasanay sa profile para sa mga mag-aaral sa high school sa natural na agham direksyong siyentipiko ay ipinatupad, bilang panuntunan, sa loob din ng balangkas ng mga paradigma sa itaas. Gayunpaman, dapat tandaan na ang pagtuturo ng programming sa isang partikular na wika ay hindi ang pangunahing gawain sa pagpapatupad ng algorithmic na pagsasanay para sa mga mag-aaral. Higit pa direksyon ng prayoridad pagsasanay sa isang algorithmic na diskarte sa paglutas ng problema, ang kakayahang suriin ang pagiging epektibo ng isang binuo algorithm mula sa punto ng view ng problema na nalutas, at ang pagpili ng teknolohiya para sa pagpapatupad nito - iyon ay, pinag-uusapan natin ang tungkol sa pamilyar sa mga pamamaraan para sa pagbuo ng mga algorithmic na modelo, ang pagpapatupad nito ay posible sa loob ng balangkas ng anumang paradigm.

Ang pagbuo ng iba't ibang mga paradigma sa programming ay naganap nang magkatulad sa bawat isa. Sa mahabang panahon, nangingibabaw ang imperative approach; noong 70s at 80s, lumipat ang diin sa pag-aaral ng mga di-classical na paradigm; ang 90s ay minarkahan ng mabilis na pag-unlad ng object-oriented na paradigm at ang pagpapakilala ng mga elemento nito sa iba pa. Ang pag-unlad ng mga programming language mula sa punto ng view ng iba't ibang mga paradigms ay ipinakita sa Fig. 1

Fortran

Algol,C

Pascal

Modula

Oberon

Direktiba

Basic

LISP

ML, Scheme

Haskell

Deklarasyon

Prolog

CProlog

VB, C++, Object Pascal

Java, C#

Object-oriented

Maikling pag-uusap

Ruby

SETL

Programming sa Constraints

Prolog III

CPL (X)

Perl

sawa

Sitwasyon

PHP, ASP

Fig1. Pag-unlad ng mga programming language at paradigms

Upang mapag-aralan ang isang alternatibong pamamaraan sa programming, maaari naming imungkahi ang teknolohiya ng paggamit ng mga recursive na simbolomga problema kapag nag-aaral ng agham ng computer, dahil ang recursion, bilang isang pangunahing konsepto ng matematika, ay ipinatupad nang halos kapareho sa konteksto ng iba't ibang paradigm sa programming. Ang mga recursive constructions, sa pangkalahatan, ay hindi natural para sa karamihan ng mga programming language at ang kanilang pagpapatupad ay nangangailangan ng isang tiyak na antas ng abstraction mula sa napiling pamamaraan para sa paglikha ng mga programa. Kasabay nito, dapat bigyang pansin ang posibleng kawalan ng kakayahan at makabuluhang pagiging kumplikado ng mga recursive algorithm sa sa ibang Pagkakataon, samakatuwid, ipinapayong bumuo ng mga recursive algorithm na may kasunod na pagtatasa ng kanilang pagiging kumplikado.

Tuntunin natin ang mga konseptong kakayahan ng iba't ibang paradigm na ginamit upang ipatupad ang recursion.

2. Imperative paradigm.

Imperative programming – isa sa mga pinaka-natural na diskarte sa pagsulat ng mga programa para sa laganap na arkitektura ng von Neumann. Ang programa sa kasong ito ay binubuo ng mga operator ng pagtatalaga at mga sugnay na kumokontrol sa pagkakasunud-sunod ng kanilang pagpapatupad. Ang directive programming ay batay sa isang automaton na modelo ng isang computer na naghihiwalay sa mga abstraction ng estado at pag-uugali. Sa kasong ito, ang programa ay itinuturing na isang proseso ng pagbabago ng estado sa pamamagitan ng pagpapatupad ng mga indibidwal na utos. Ang imperativeness dito ay nauunawaan bilang isang indikasyon sa calculator na Paano lutasin ang isang problema. Ang recursion sa mga direktiba na wika ay ipinapatupad sa pamamagitan ng paglikha ng isang espesyal na uri ng mga subroutine na nagbibigay-daan sa paggawa ng mga recursive na tawag at paggamit ng isang espesyal na teknolohiya para sa pagsasalin ng mga recursive program sa mga machine code. Sa mga direktiba na wika, may posibilidad ng isang alternatibo sa pagitan ng pag-ulit at pag-recursion, ngunit ito ay ang paggamit ng huli na nagbibigay-daan sa iyo upang bumuo ng hindi lamang mahusay, ngunit din madaling basahin ang mga algorithm.

3.1. Logic programming lumitaw bilang resulta ng pananaliksik ng isang pangkat ng mga siyentipikong Pranses na pinamumunuan ni Colmerier sa larangan ng pagsusuri ng natural na wika. Kasunod na natuklasan na ang logic programming ay kasing epektibo sa pagpapatupad ng iba pang mga gawaing artificial intelligence, kung saan ito ay kasalukuyang pangunahing ginagamit. Ang logic programming ay lumalabas din na maginhawa para sa pagpapatupad ng iba pang kumplikadong mga gawain.

Ang logic programming ay batay sa predicate logic. Ang lohika ng panaguri ay isang sangay ng pormal na lohika na binuo noong ika-20 siglo. Sa logic programming, ang focus ay sa paglalarawan ng istraktura ng isang problema sa aplikasyon, sa halip na sa pagtuturo sa computer kung ano ang dapat nitong gawin. Sa logic programming, ang isang programa ay kumakatawan sa ilang teorya (na inilarawan sa isang medyo limitadong wika) at isang pahayag na kailangang patunayan. Ang patunay ng pahayag na ito ay binubuo ng pagpapatupad ng programa.

Ang gawain ng isang programa sa isang lohikal na wika ay isinasagawa sa pamamagitan ng paghahanap ng patunay ng iminungkahing pahayag sa umiiral na base ng kaalaman, na isang hanay ng ilang mga katotohanan at panuntunan. Ang recursion sa mga wika ng paradigm na ito ay ipinatupad kapwa sa proseso ng paghahanap ng ebidensya at upang tukuyin ang mekanismo para sa naturang paghahanap. Ang pagtatatag ng halaga ng katotohanan ng isang pahayag ay likas na recursive, at naaayon, ipinapatupad dito ang recursion sa medyo natural na paraan.

3.2. Functional na programming umaasa sa teorya ng recursive function at lambda calculus ng Simbahan. Ang diin ay sa dependency sa pagitan ng mga function sa data. Ang isang function program ay binubuo ng isang koleksyon ng mga kahulugan ng function, na kung saan ay kumakatawan sa mga tawag sa iba pang mga function at mga pahayag na kumokontrol sa pagkakasunud-sunod ng mga tawag. Sa mga functional na wika, natural na ipinapatupad ang recursion, dahil ito ang pangunahing batayan para sa pagbuo ng mga semantika ng wika. Sa pangkalahatan, ang isang functional program ay hindi naglalaman ng isang assignment operator; ang pagkalkula ng anumang function ay hindi humahantong sa anumang mga side effect maliban sa aktwal na pagkalkula ng halaga nito. Ang pagsasanga ng mga kalkulasyon ay batay sa mekanismo para sa pagproseso ng mga argumento ng isang kondisyong pangungusap, at ang mga cyclic na kalkulasyon ay ipinatupad gamit ang recursion.

4. Paradigma na nakatuon sa bagay.

Object-oriented na programming (OOP) ay isang natural na ebolusyon ng mga naunang pamamaraan ng programming. Ang resulta ng pagkabulok ng bagay ay isang hanay ng mga bagay, na pagkatapos ay ipinatupad bilang mga variable ng ilang mga espesyal na binuo na uri (mga klase), na isang hanay ng mga field ng data at mga pamamaraan na gumagana sa mga field na ito. Masasabi na OOP – ay ang pagmomodelo ng mga bagay sa pamamagitan ng hierarchically related classes. Kasabay nito, ang mga hindi gaanong mahalagang detalye ng bagay ay nakatago mula sa amin, at kung magbibigay kami ng isang utos sa ilang bagay, kung gayon ito ay "alam" kung paano ito isakatuparan. Ang isang pangunahing konsepto sa OOP ay ang konsepto ng responsibilidad o responsibilidad para sa pagsasagawa ng isang aksyon.

Ang lahat ng mga bagay ay mga kinatawan, o mga kopya, mga klase. Ang paraan na hinihimok ng isang bagay bilang tugon sa isang mensahe ay tinutukoy ng klase kung saan kabilang ang tatanggap ng mensahe. Ang lahat ng mga bagay ng parehong klase ay gumagamit ng parehong mga pamamaraan bilang tugon sa parehong mga mensahe. Ang mga klase ay kinakatawan bilang isang hierarchical na istraktura ng puno, kung saan ang mga klase ay may higit pa pangkalahatang katangian ay matatagpuan sa ugat ng puno, at mga espesyal na klase at, sa huli, ang mga indibidwal ay matatagpuan sa mga sanga. Ang mismong object decomposition ay naglalaman ng mga elemento ng recursive constructions, dahil ang hierarchy ng mga bagay na nakuha sa ganitong paraan ay may mga elemento ng pagkakatulad sa sarili. Tulad ng alam mo, ang object-oriented programming ay batay sa tatlong pangunahing konsepto: encapsulation (pagtatago ng data sa isang klase o pamamaraan); mana; polymorphism. Encapsulation ay maaaring isipin bilang isang proteksiyon na shell sa paligid ng code ng data kung saan gumagana ang code na ito. Tinutukoy ng shell ang pag-uugali at pinoprotektahan ang code mula sa di-makatwirang pag-access mula sa labas. Mana - ay ang proseso kung saan ang isang uri ay namamana ng mga katangian ng isa pang uri. Polymorphism ay isang konsepto na nagpapahintulot sa iyo na magkaroon ng iba't ibang mga pagpapatupad para sa parehong paraan, na pipiliin depende sa uri ng bagay na ipinasa sa pamamaraan kapag tinawag.

Sinasakop ang object-oriented paradigm espesyal na posisyon sa lahat ng mga umiiral, dahil ang karamihan modernong mga wika iba't ibang istilo ay object-oriented, ngunit sa pangkalahatan ang object-oriented na implementasyon ng wika ay malaki ang pagkakaiba sa pamantayan.

Ang recursion sa paradigm na ito ay ipinatupad kapwa sa proseso ng pagkabulok ng bagay at sa isang direktang paraan. Sa pangkalahatan, ang pagbuo ng mga object-oriented na programa ay ilang mga order ng magnitude na mas mahirap kaysa sa mga tradisyonal, ngunit ang pagbuo ng isang recursive hierarchy ng mga bagay ay hindi lamang lubos na magagawa, ngunit isang mahalagang gawain para sa mga mag-aaral.

5. Programming sa mga hadlang.

Ang constraint programming ay isang medyo bagong direksyon sa declarative programming. Lumitaw ito noong dekada 80 ng ikadalawampu siglo bilang resulta ng pagbuo ng mga symbolic computing system, artificial intelligence at operations research. Ang pangunahing ideya ng constraint programming ay upang tukuyin ang isang hanay ng mga variable at itakda ang mga hadlang na dapat nilang matugunan, at ang sistema ay nakahanap ng mga naaangkop na halaga.

Ang pagpipigil sa programming ay malapit na nauugnay sa tradisyonal logic programming. Karamihan sa mga limitadong sistema ng programming ay isang interpreter ng wika Prolog na may built-in na mekanismo para sa paglutas ng isang partikular na klase ng mga problema sa kasiyahan sa pagpilit. Ang pagprograma sa naturang mga sistema ay tinatawag na Constraint Logic Programming (CLP), at karamihan sa mga wika o mga aklatan ay tinatawag na CLP(X), kung saan ipinapahiwatig ng X ang klase ng mga problemang nilulutas.

Halimbawa, ang ibig sabihin ng CLP(B) ay ang kakayahang lutasin ang mga equation na may mga variable na Boolean. Ang CLP(Q) ay mga equation sa mga rational na numero, at ang CLP(R) ay nasa totoong mga numero. Ang pinakasikat na solver para sa mga problema sa may hangganan na hanay ng mga integer ay CLP(FD).

Ang pahayag ng problema ay isang may hangganan na hanay ng mga variable X = ( x 1 , ..., x n ), katumbas na may hangganan (mabilang) na mga hanay ng mga halaga D X = ( dx 1 , ..., dx n ), at isang hanay ng mga paghihigpit C = ( c 1 ,..., c m ). Ang isang sistema ng mga hadlang ay maaaring magsama ng mga equation, hindi pagkakapantay-pantay, lohikal na pag-andar, pati na rin ang anumang tinatanggap na pormal na mga konstruksyon na nagkokonekta sa mga variable mula sa set X . Ang solusyon sa problema ay ang pagbuo ng isang hanay ng mga variable na nakakatugon sa lahat ng mga hadlang c i , kung saan i = 1,.., m.

Semantically, ang constraint programming ay naiiba sa tradisyunal na logic programming lalo na sa pagpapatupad ng program na iyon ay itinuturing na hindi bilang pagpapatunay ng isang pahayag, ngunit bilang paghahanap ng mga halaga ng mga variable. Sa kasong ito, ang panloob na pagkakasunud-sunod ng solusyon para sa pagpapatupad ng mga indibidwal na hadlang ay hindi mahalaga, at ang sistema ng pagpipigil sa programming, bilang panuntunan, ay naglalayong i-optimize ang pagkakasunud-sunod ng patunay ng mga pahayag upang mabawasan ang rollback sa kaso ng pagkabigo. Kaya, ang paggamit ng isang pabalik na recursion scheme ay nagaganap. Ang mga recursive constructions ay karaniwang ipinapatupad sa parehong paraan tulad ng sa logic programming.

6. Paradigm ng senaryo.

Mga wika sa script. Mga wika sa script, o mga wika sa script, para sa mga nakaraang taon gumawa ng isang malaking hakbang pasulong. Sampung taon na ang nakalilipas ay itinalaga sa kanila ang papel ng mga pantulong na paraan, ngunit ngayon ang pag-aalinlangan sa kanila ay napalitan ng interes at pagkilala.

Ang mga wika ng script ay may medyo mahabang kasaysayan ng pag-unlad. Ang konsepto ng scripted programming ay dumating bilang likas na pag-unlad wika LISP . Kasama sa mga unang wika ng scripting ang built-in na command shell na mga kontrol para sa operating system. Command file sa wika operating system, ay isang control script na nagsasagawa ng isang naibigay na pagkakasunod-sunod ng mga aksyon. Masasabi nating ang script ay "nagsasama-sama" sa iba't ibang bahagi ng operating system at nakikipag-ugnayan sa kanila.

Sa kasalukuyan, ang katanyagan ng mga wika ng script ay nauugnay sa pag-unlad Internet -teknolohiya. Ginagamit ang mga wika sa script upang lumikha ng dynamic, interactive web -pages, ang nilalaman nito ay binago depende sa mga aksyon ng user at ang estado ng iba pang mga page at data.

Ang isang natatanging tampok ng mga wika ng script ay ang pagbuo ng isang programa sa ilang panlabas na wika bilang isang resulta ng pagpapatupad ng script. Ang isang scripting language ay umaasa sa maliit na lawak sa paglikha ng panghuling produkto mula sa simula at, sa mas malaking lawak, sa paggamit ng mga kakayahan ng operating system, graphical na kapaligiran, application service engine at iba pang katulad na mga bahagi, ang pakikipag-ugnayan nito ay isinasagawa gamit ang mga script.

Ang scenario paradigm ay nagsasangkot ng paghahati ng isang gawain sa magkakahiwalay na mga bahagi, na ang bawat isa ay nireresolba ng espesyal na software; ang senaryo ay gumaganap bilang isang "dispatcher" na responsable para sa pag-aayos ng kanilang pakikipag-ugnayan.

Mga wika sa script para sa web -Ang mga pag-unlad ay pangunahing nilikha noong dekada 90 XX siglo at isama ang mga elemento ng iba't ibang paradigm ng programming mula sa imperative hanggang object-oriented. Kabilang sa pinakamakapangyarihan at tanyag na scripting system ay ang mga sumusunod: Perl, Python, PHP, ASP . Ang syntax at semantics ng iba't ibang mga scripting language ay medyo magkatulad. Ito ay dahil sa makabuluhang impluwensya ng mga wikang C at C++ sa komunidad ng programming. Ang suporta para sa recursion sa mga scripting language ay ipinapatupad nang katulad ng mga paradigma na kailangan at nakatuon sa object.

Ang modernong metodolohikal at teknikal na panitikan ay madalas na nagbibigay ng mga halimbawa ng pagpapatupad ng mga recursive na programa sa iba't ibang paradigm ng programming. Ang malaking pansin na binabayaran sa recursion ay isang kumpirmasyon ng katotohanan na ang recursive methodology ay nagpapahintulot sa iyo na tumuon sa mismong lohika ng paglutas ng isang problema, at hindi sa mga detalye ng pagpapatupad nito. Kaya, maaari nating tapusin na ang recursion ay hindi lamang isa sa alternatibong pamamaraan sa programming, ngunit din ng isang tiyak na istilo ng abstract algorithmic na pag-iisip.

(BASIC OF ALGORITHMIZATION AND PROGRAMMING)
  • Programming paradigms at teknolohiya
    Mga Layunin ng Kabanata 1. Pag-aralan ang mga konsepto ng "paradigma ng programming", "teknolohiya ng programming". 2. Kunin Pangkalahatang ideya O makabagong teknolohiya paglikha ng software. 3. Pag-aralan ang mga yugto ng paglikha ng isang structural program. 4. Kilalanin ang mga modelo ng life cycle ng pagbuo ng software...
  • SE programming paradigms
    Kasama sa SWEBOK ang isang bilang ng mga paradigm ng programming Tingnan ang: Lavrishcheva E. M. Assembly-type na programming paradigms sa software engineering // UKRProg-2014. No. 2-3. pp. 121-133. . Sa kanyang mga kurso sa pagsasanay Kasama sa programming ang mga sumusunod: procedural programming(kurso CS1011 “Mga pangunahing kaalaman sa programming”),...
    (SOFTWARE ENGINEERING AT TECHNOLOGIES PARA SA PROGRAMMING COMPLEX SYSTEMS)
  • PROGRAMMING PARADIGMS
    MODULAR PROGRAMMING. BATAYANG KONSEPTO Ang isa sa mga pangunahing problema ng modernong programming ay ang muling paggamit ng mga module at mga bahagi (KPI). Maaaring ang mga ito ay mga programa, subroutine, algorithm, mga detalye, atbp., na angkop para sa paggamit sa pagbuo ng bago, mas kumplikadong software....
    (SOFTWARE ENGINEERING. PARADIGMS, TECHNOLOGIES AT CASE TOOLS)
  • Paradigma ng pamamaraan
    Ang procedural paradigm ay kronolohikal na una at nanaig sa mahabang panahon. Sa kasalukuyan, ito ay unti-unting nagbibigay daan sa object-oriented paradigm, bagama't sinasakop pa rin nito ang halos kalahati ng merkado ng software development. Ito ay inilapat sa lahat ng antas ng software development...
    (ALGORITHMIZATION AT PROGRAMMING)
  • Deklarasyon at pamamaraang memorya
    Sa isa pang malayang paraan, independyente sa iba functional na organisasyon memorya ang paghahati nito sa paturol At pamamaraan. Ang dalawang paraan ng pag-oorganisa ng memorya ay may ganap na nauunawaan na batayan ng pagganap. Ang isang anyo ng declarative memory ay idinisenyo upang suportahan ang mental...
    (Psychology at pedagogy)
  • Ang mga pangkalahatang paradigma ng programming na lumitaw sa pinakadulo simula ng panahon ng computer programming, kabilang ang mga paradigm ng inilapat, teoretikal at functional na programming, ay ang pinaka-matatag.

    Ang inilapat na programming ay napapailalim sa isang oryentasyon ng problema, na sumasalamin sa computerization ng impormasyon at computational na proseso ng numerical processing, na pinag-aralan nang matagal bago ang pagdating ng mga computer. Dito na mabilis na lumitaw ang isang malinaw na praktikal na resulta. Naturally, sa mga nasabing lugar, ang programming ay hindi gaanong naiiba sa coding; para dito, bilang isang patakaran, ang istilo ng operator ng kumakatawan sa mga aksyon ay sapat. Sa pagsasagawa ng inilapat na programming, kaugalian na magtiwala sa mga napatunayang template at library ng mga pamamaraan at maiwasan ang mga mapanganib na eksperimento. Ang katumpakan at katatagan ng mga pang-agham na kalkulasyon ay pinahahalagahan. Ang wikang Fortran, isang beterano ng application programming, ay unti-unting nagsimulang magbigay ng medyo sa lugar na ito sa Pascal, C, at sa mga supercomputer sa parallel programming language tulad ng Sisal.

    Ang teoretikal na programming ay sumusunod sa isang oryentasyon ng publikasyon na naglalayong maihambing ang mga resulta ng mga siyentipikong eksperimento sa larangan ng programming at computer science. Sinusubukan ng programming na ipahayag ang mga pormal na modelo nito, upang ipakita ang kanilang kahalagahan at pangunahing katangian. Ang mga modelong ito ay minana ang mga pangunahing tampok ng mga kaugnay na konsepto ng matematika at itinatag ang kanilang mga sarili bilang isang algorithmic na diskarte sa computer science. Ang pagnanais para sa ebidensya ng mga konstruksyon at pagtatasa ng kanilang pagiging epektibo, pagiging totoo, kawastuhan, kawastuhan at iba pang pormal na relasyon sa mga diagram at teksto ng mga programa ay nagsilbing batayan para sa nakabalangkas na programming at iba pang mga pamamaraan para sa pagkamit ng pagiging maaasahan ng proseso ng pagbuo ng programa, halimbawa, karampatang programming. Ang mga karaniwang subset ng Algol at Pascal, na nagsilbing gumaganang materyal para sa teorya ng programming, ay pinalitan ng mas maginhawang mga applicative na wika para sa eksperimento, tulad ng ML, Miranda, Scheme, Haskell at iba pa. Ngayon sila ay sinalihan ng mga inobasyon sa C at Java.

    Ang functional programming ay nabuo bilang isang pagkilala sa matematikal na oryentasyon sa pananaliksik at pagpapaunlad ng artificial intelligence at ang pagbuo ng mga bagong abot-tanaw sa computer science. Isang abstract na diskarte sa pagtatanghal ng impormasyon, isang laconic, unibersal na istilo ng pagbuo ng mga function, kalinawan ng kapaligiran ng pagpapatupad para sa iba't ibang kategorya ng mga pag-andar, kalayaan ng recursive constructions, tiwala sa intuwisyon ng mathematician at researcher, pag-iwas sa pasanin ng maaga. paglutas ng walang prinsipyong mga problema ng paglalaan ng memorya, pagtanggi sa hindi makatwirang mga paghihigpit sa saklaw ng mga kahulugan - - lahat ng ito ay iniugnay ni John McCarthy sa ideya ng wikang Lisp. Ang pagiging maalalahanin at metodolohikal na bisa ng mga unang pagpapatupad ng Lisp ay naging posible upang mabilis na makaipon ng karanasan sa paglutas ng mga bagong problema at ihanda ang mga ito para sa inilapat at teoretikal na programming. Sa kasalukuyan, mayroong daan-daang mga functional programming language na nakatuon sa iba't ibang klase ng mga gawain at uri ng mga teknikal na paraan.

    Ang mga pangunahing paradigma ng programming ay umunlad habang ang pagiging kumplikado ng mga problemang niresolba ay tumaas. Nagkaroon ng stratification ng mga tool at pamamaraan ng programming depende sa lalim at pangkalahatan ng elaborasyon ng mga teknikal na detalye ng organisasyon ng mga proseso ng pagproseso ng impormasyon sa computer. Lumitaw ang iba't ibang istilo ng programming, ang pinaka-mature nito ay machine-oriented, system, logical, transformational, at high-performance parallel programming.

    Ang programming na nakatuon sa makina ay nailalarawan sa pamamagitan ng isang diskarte sa hardware sa pag-aayos ng pagpapatakbo ng isang computer, na naglalayong ma-access ang anumang mga kakayahan sa hardware. Ang focus ay sa configuration ng hardware, katayuan ng memorya, mga command, mga paglilipat ng kontrol, pagkakasunud-sunod ng mga kaganapan, mga pagbubukod at mga sorpresa, oras ng pagtugon ng device at tagumpay sa pagtugon. Ang wika ng pagpupulong ay na-overshadow nang ilang panahon bilang visual na medium na pinili ng Pascal at C, kahit na sa microprogramming, ngunit ang mga pagpapabuti ng user interface ay maaaring mabawi ang posisyon nito.

    Matagal nang umuunlad ang system programming sa ilalim ng presyon ng serbisyo at pasadyang gawain. Ang diskarte sa pagmamanupaktura na likas sa naturang gawain ay umaasa sa isang kagustuhan para sa mga prosesong maaaring kopyahin at mga matatag na programa na idinisenyo para sa paulit-ulit na paggamit. Para sa mga naturang programa, ang isang pamamaraan ng pagpoproseso ng compilation, static na pagsusuri ng mga katangian, awtomatikong pag-optimize at kontrol ay nabibigyang-katwiran. Ang lugar na ito ay pinangungunahan ng imperative-procedural style ng programming, na isang direktang generalization ng operator style ng inilapat na programming. Pinapayagan nito ang ilang standardisasyon at modular programming, ngunit nakakakuha ito ng medyo kumplikadong mga istraktura, mga pagtutukoy, mga pamamaraan ng pagsubok, mga tool sa pagsasama ng programa, atbp. Ang mahigpit na mga kinakailangan para sa kahusayan at pagiging maaasahan ay natutugunan ng pagbuo ng mga propesyonal na tool na gumagamit ng kumplikadong associative semantic heuristics kasama ang mga pamamaraan ng syntactically-driven na disenyo at pagbuo ng programa. Ang hindi maikakaila na potensyal ng naturang mga tool sa pagsasanay ay limitado sa pagiging kumplikado ng pag-unlad - isang kinakailangan sa kwalipikasyon ang lumitaw.

    Ang high-performance programming ay naglalayong makamit ang pinakamataas na posibleng pagganap kapag nilutas ang mga partikular na mahahalagang problema. Ang natural na reserba ng pagganap ng computer ay mga parallel na proseso. Ang kanilang organisasyon ay nangangailangan ng detalyadong pagsasaalang-alang ng mga ugnayan sa oras at isang hindi kinakailangang istilo ng pamamahala ng mga aksyon. Ang mga supercomputer na sumusuporta sa high-performance computing ay nangangailangan ng mga espesyal na system programming techniques. Ang diskarte sa graph-network sa kumakatawan sa mga system at proseso para sa mga parallel na arkitektura ay ipinahayag sa mga espesyal na parallel programming language at supercompilers, na inangkop upang imapa ang abstract hierarchy ng mga proseso sa antas ng gawain sa partikular na spatial na istraktura ng mga processor ng totoong kagamitan.

    Ang logic programming ay lumitaw bilang isang pagpapasimple ng functional programming para sa mga mathematician at linguist na lumulutas ng mga simbolikong problema sa pagproseso. Ang partikular na kaakit-akit ay ang posibilidad ng paggamit ng nondeterminism bilang isang konseptong batayan, na nagpapalaya sa atin mula sa maagang pag-order kapag nagprograma ng pagproseso ng mga formula. Ang estilo ng produksyon ng pagbuo ng mga proseso na may mga pagbabalik ay sapat na natural para sa isang linguistic na diskarte sa paglilinaw ng pormal na kaalaman ng mga eksperto at binabawasan ang panimulang hadlang.

    Metodolohikal na pinagsama ng transformational programming ang mga diskarte ng program optimization, macrogeneration at partial computation. Ang sentral na konsepto sa lugar na ito ay pagkakapareho ng impormasyon. Ito ay nagpapakita ng sarili sa pagtukoy ng mga pagbabagong-anyo ng mga programa at proseso, sa paghahanap ng mga pamantayan para sa applicability ng mga pagbabagong-anyo, sa pagpili ng isang diskarte para sa kanilang paggamit. Mga pinaghalong kalkulasyon, ipinagpaliban na mga aksyon, tamad na programming, naantala na mga proseso, atbp. ay ginagamit bilang mga pamamaraan para sa pagtaas ng kahusayan ng pagproseso ng impormasyon sa ilalim ng ilang partikular na natukoy na mga kondisyon.

    Ang malawak na mga diskarte sa programming ay isang natural na tugon sa mga radikal na pagpapabuti sa pagganap ng hardware at mga network ng computer. Mayroong paglipat ng mga tool sa pag-compute mula sa klase ng mga teknikal na tool patungo sa klase ng mga gamit sa bahay. Ang lupa ay lumitaw para sa pag-update ng mga diskarte sa programming, pati na rin ang posibilidad ng rehabilitasyon ng mga lumang ideya na hindi maganda ang pagkakabuo dahil sa mababang teknolohiya at pagganap ng mga computer. Interesado na bumuo ng pananaliksik, ebolusyonaryo, nagbibigay-malay at pag-aangkop na mga diskarte sa programming na lumilikha ng pag-asa ng makatuwirang pag-unlad ng tunay na mapagkukunan ng impormasyon at potensyal ng computer.

    Ang isang diskarte sa pananaliksik na may istilong pang-edukasyon na laro ng propesyonal, pang-edukasyon at amateur na programming ay maaaring magbigay ng lakas sa paghahanap ng katalinuhan sa pagpapabuti ng teknolohiya ng programming na hindi makayanan ang mga phenomena ng krisis sa nakaraang elementong base. Ang ebolusyonaryong diskarte na may istilong pang-mobile ng mga programa sa pagpino ay malinaw na nakikita sa konsepto ng object-oriented na programming, na unti-unting nabubuo sa subject-oriented na programming. Ang muling paggamit ng mga kahulugan at pagmamana ng mga katangian ng bagay ay maaaring pahabain ang ikot ng buhay ng mga na-debug na kapaligiran ng impormasyon, dagdagan ang pagiging maaasahan ng kanilang operasyon at kadalian ng paggamit.

    Ang isang cognitive na diskarte na may interoperable na istilo ng visual-interface na pag-unlad ng mga bukas na system at ang paggamit ng mga bagong audio-video tool at non-standard na mga device ay nagbubukas ng mga paraan upang mapahusay ang pang-unawa ng kumplikadong impormasyon at pasimplehin ang sapat na pagproseso nito.

    Ang isang adaptive na diskarte na may ergonomic na istilo ng indibidwal na disenyo ng mga personalized na sistema ng impormasyon ay nagbibigay ng pagkakataon sa mga computer scientist na mahusay na magprograma, mag-organisa at suportahan teknolohikal na proseso real time, sensitive sa human factor. Ang direksyon ng pag-unlad ng paradigm ng programming ay sumasalamin sa isang pagbabago sa bilog ng mga taong interesado sa pagbuo at aplikasyon ng mga sistema ng impormasyon. Maraming mahahalagang konsepto para sa pagsasanay sa programming, tulad ng mga kaganapan, mga pagbubukod at mga error, potensyal, hierarchy at orthogonality ng mga konstruksyon, extrapolation at mga punto ng paglago ng programa, pagsukat ng kalidad, atbp. hindi umabot sapat na antas abstraction at pormalisasyon. Nagbibigay-daan ito sa amin na mahulaan ang pagbuo ng mga paradigma ng programming at pumili ng materyal na pang-edukasyon para sa hinaharap ng component programming. Kung ang mga tradisyonal na paraan at pamamaraan para sa pagpili ng mga magagamit na bahagi ay napapailalim sa criterion ng modularity, na nauunawaan bilang pinakamainam na pagpipilian ng minimal na pagkabit na may pinakamataas na pag-andar, kung gayon ang modernong elemento ng base ay nagbibigay-daan sa pagpapatakbo ng mga multi-contact unit na nagsasagawa ng mga simpleng operasyon. Ngunit maaari nating makilala ang lahat ng mga uri at paradigma ng programming gamit ang kahit Wikipedia. Sa kasalukuyan ay napaka malawak na saklaw pagbuo ng programming sa iba't ibang direksyon.

    Ibahagi