Stuudiokorter      23.11.2023

Struktuurse programmeerimise paradigma. "Unustatud" programmeerimisparadigmad. Seda paradigmat toetavad keeled

REKURSIIVNE ARVUTAMINE ERINEVATES PROGRAMMEERIMISPARADIGMADES.

G.V. Vanykina, A.V. Jakushin

nime saanud Tula Riiklik Pedagoogikaülikool. L.N. Tolstoi

[e-postiga kaitstud]

1. Kaasaegse programmeerimise paradigmad.

Ajalooliselt hõlmavad esimesed programmeerimise valdkonna tehnoloogilised võtted lahendatava probleemi üldise struktuuri lammutamist sellisteks komponentideks, mis selles kontekstis on elementaarsed. Seejärel töötati selle lähenemisviisi jaoks välja tõsine teoreetiline alus ja mitmed soovitatavad tehnoloogilised tehnikad, mis koos moodustavad kaasaegse programmeerimise. Sõltuvalt “elemendibaasi” valikust saate hankida mitmesuguseid metoodilisi tehnikaid, reegleid, seoseid, sõltuvusi jne. etteantud probleemi lahendamiseks, mis koos moodustavad programmeerimisparadigma.

Tuleb märkida, et sõna "paradigma" tuli programmeerimisse teadusajaloolase Thomas Kuhni 1970. aastal kirjutatud mõjukast raamatust "The Structure of Scientific Revolutions". Kuhn kasutas seda terminit, et kirjeldada teooriate, standardite ja meetodite kogumit, mis koos moodustavad viisi teaduslike teadmiste organiseerimiseks – teisisõnu viisi maailma nägemiseks. Kuhni peamine mõte on see, et revolutsioonid teaduses toimuvad siis, kui vana paradigma vaadatakse üle, tagasi lükatakse ja asendatakse uuega.

Sarnases tähenduses, mudeli või näitena ning üldiselt organiseeriva lähenemisena, kasutatakse seda sõna 1979. aasta Turingi auhinna laureaadi Robert Floydi loengus “Programmeerimisparadigmad”.

Programmeerimise paradigma on programmeerimise teoorias väga kõrgetasemeline põhimõiste ja seetõttu ei saa seda rangelt määratleda. Programmeerimise paradigma all peame silmas sisemiselt järjepidevat programmielementide kogumit, millel on ühised nii loogilised kui ka algoritmilised põhiomadused ning nende elementidega seotud põhimõisted. Samamoodi võib öelda, et programmeerimise paradigma on viis, kuidas arvutada ja kuidas arvutiga tehtav töö peaks olema struktureeritud ja organiseeritud.

Programmeerimisparadigmadel on tarkvaraarendustehnoloogias oluline koht. Nende ümber hakatakse ehitama ja arendama metoodilisi kontseptsioone. Selle rolli määrab asjaolu, et esilekerkivaid uusi ideid programmide loomiseks rakendatakse algselt lihtsates tööriistades, mis toetavad pakutud stiili uurimist ja eksperimentaalset kontrollimist, mis on enamasti programmeerimiskeeled. Peale esmase kogemuse üldistamist saabub arusaam eelistest ja puudustest, mis võimaldab liikuda edasi metoodikate kujundamise juurde, mis tagavad paradigma kasutamise suurte tarkvarasüsteemide arendamisel. Kui väljatöötatud paradigma ei saa olla tööstusliku metoodika aluseks, lükatakse see tagasi või rakendatakse seda piiratud ulatuses. Võime öelda, et programmeerimisparadigmat rakendatakse programmeerimismetoodikate kaudu, mis sõlmitakse lepingute ja kokkulepete kogumina põhiliste keeletööriistade ja nende kombinatsioonide kohta, mis on antud paradigma jaoks vastuvõetavad ja mitte.

Sõltuvalt dekomponeerimismeetodist saab eristada järgmisi peamisi programmeerimisparadigmasid, mis on esitatud tabelis 1.

Tabel 1. Põhilised programmeerimise paradigmad

Paradigma nimi

Lagundamise meetod

Programmeerimiskeelte näited

Imperatiivne

(sünonüümid: direktiiv, protseduuriline)

Alamprogrammid, abstraktsed andmetüübid

Fortran, C, Pascal, Basic

Deklaratiivne

(komponendid: loogiline ja funktsionaalne)

Predikaatarvutuses väljendatud eesmärgid. "Kui-siis" reeglid

Lisp, skeem, Prolog, ML, Haskell

Objektorienteeritud

Klassid ja objektid

Java, C++, Ruby

Piirangute programmeerimine

Invariantsed suhted, piirangute süsteem

keeled CLP(X), SETL, Prolog III

Stsenaarium

Elementaarne töötlemise või kontrolli stsenaarium

Perl, PHP, Python, ASP

Tuleb märkida, et teatud paradigma järgimine mõjutab oluliselt probleemide lahendamise tehnoloogilist lähenemist ja mitmesuguste iseloomulike heuristiliste struktuuride kasutamist programmeerimispraktikas. Üldiselt võib öelda, et ühe paradigma valik ja pikaajaline kasutamine jätab programmeerija (eriti algaja) mõtlemisse teatud jälje ning väljakujunenud “klišeede” nõiaringist võib olla väga raske murda, kui on vaja lahendada mittestandardsed probleemid. Mis tahes taseme kasutaja jaoks määrab teatud paradigma valik, kui see kord tehtud, nii tema suhtumise arvutitehnoloogiatesse kui ka nende kasutamise efektiivsuse.

Praegu on arvutitehnoloogia professionaalsed teadmised ja infokultuuri kõrge tase võimatu ilma selge arusaamata mitte ainult arvuti tööpõhimõtetest, vaid isegi suuremal määral selle potentsiaalsetest võimalustest. See suundumus ei saa jätta mõjutamata arvutiteaduse õppe struktuuri nii ülikoolis kui ka eriti koolis, sest just kooliharidus paneb aluse tulevase spetsialisti edasist arengut määrava ja toetava aluse peale.

Kooliõpilaste algoritmikultuuri kui infokultuuri põhikomponendi arendamise probleem lahendatakse erinevate programmeerimisparadigmade vaatenurgast sõltuvalt paljudest teguritest: informaatika kursuste õpetamise õppekavast, riist- ja tarkvarast, samuti õpetaja isiklikud ja ametialased omadused. Koolinoorte üldharidustaseme raames sektsioonis “Programmeerimine” õpitakse imperatiiv ( Basic, Pascal, C , kooli algoritmiline keel) või objektorienteeritud ( Delphi, C++, Java ) paradigmad. Eeltoodud paradigmade raames rakendatakse reeglina ka gümnasistide loodusainete profiiliõpet. Tuleb aga märkida, et programmeerimise õpetamine konkreetses keeles ei ole koolinoorte algoritmiõppe rakendamisel põhiülesanne. Palju suurem prioriteet on probleemide lahendamise algoritmilise lähenemise koolitus, oskus hinnata väljatöötatud algoritmi tõhusust lahendatava probleemi seisukohast ja selle rakendamise tehnoloogia valik - see tähendab, et me räägime algoritmiliste mudelite väljatöötamise meetoditega tutvumisest, mille rakendamine on võimalik mis tahes paradigma raames.

Erinevate programmeerimisparadigmade väljatöötamine toimus paralleelselt üksteisega. Pikka aega domineeris imperatiivne lähenemine, 70ndatel ja 80ndatel nihkus rõhk mitteklassikaliste paradigmade uurimisele, 90ndaid iseloomustas objektorienteeritud paradigma kiire areng ja selle elementide kasutuselevõtt. teised. Programmeerimiskeelte areng erinevate paradigmade vaatenurgast on toodud joonisel 1

Fortran

Algol, C

Pascal

Modula

Oberon

direktiiv

Põhiline

LISP

ML, skeem

Haskell

Deklaratiivne

Prolog

CProlog

VB, C++, Object Pascal

Java, C#

Objektorienteeritud

Smalltalk

Rubiin

SETL

Programmeerimine piirangutes

Prolog III

CPL (X)

Perl

Python

Stsenaarium

PHP, ASP

Joonis 1. Programmeerimiskeelte ja paradigmade arendamine

Alternatiivse meetodi uurimiseks programmeerimises saame välja pakkuda rekursiivsete sümbolite kasutamise tehnoloogiaprobleeme arvutiteaduse õppimisel, kuna matemaatilise põhimõistena rekursiooni rakendatakse erinevate programmeerimisparadigmade kontekstis väga sarnaselt. Rekursiivsed konstruktsioonid ei ole üldiselt enamiku programmeerimiskeelte jaoks loomulikud ja nende rakendamine nõuab teatud määral abstraktsiooni valitud programmide loomise metoodikast. Samas tuleks tähelepanu pöörata mõnel juhul ka rekursiivsete algoritmide võimalikule ebaefektiivsusele ja olulisele keerukusele, mistõttu on soovitav välja töötada rekursiivsed algoritmid koos hilisema keerukuse hindamisega.

Jälgime erinevate rekursiooni rakendamiseks kasutatavate paradigmade kontseptuaalseid võimalusi.

2. Imperatiivne paradigma.

Imperatiivne programmeerimine – üks loomulikumaid lähenemisi laialt levinud von Neumanni arhitektuuri programmide kirjutamisel. Programm koosneb sel juhul määramisoperaatoritest ja klauslitest, mis juhivad nende täitmise järjekorda. Direktiivprogrammeerimine põhineb arvuti automaatmudelil, mis eraldab oleku ja käitumise abstraktsioonid. Sel juhul käsitletakse programmi oleku muutmise protsessina üksikute käskude täitmise kaudu. Imperatiivsust mõistetakse siin kui viidet kalkulaatorile, et Kuidas probleemi lahendama. Direktiivkeelte rekursioon realiseeritakse spetsiaalsete alamprogrammide loomisega, mis võimaldavad teha rekursiivseid kõnesid ja kasutades spetsiaalset tehnoloogiat rekursiivsete programmide tõlkimiseks masinkoodideks. Direktiivkeeltes on võimalus alternatiiviks iteratsiooni ja rekursiooni vahel, kuid just viimase kasutamine võimaldab ehitada mitte ainult tõhusaid, vaid ka lihtsalt loetavaid algoritme.

3.1. Loogiline programmeerimine ilmus Colmerier’ juhitud prantsuse teadlaste rühma loomuliku keele analüüsi alal tehtud uurimistöö tulemusena. Hiljem avastati, et loogikaprogrammeerimine on sama tõhus ka muude tehisintellekti ülesannete elluviimisel, milleks seda praegu peamiselt kasutatakse. Loogiline programmeerimine osutub mugavaks ka muude keerukate ülesannete realiseerimiseks.

Loogiline programmeerimine põhineb predikaatloogikal. Predikaatloogika on formaalse loogika haru, mis kujunes välja 20. sajandil. Loogikaprogrammeerimises keskendutakse rakenduse probleemi struktuuri kirjeldamisele, mitte arvutile, mida ta peaks tegema. Loogikas programmeerimises esindab programm mingit teooriat (kirjeldatud üsna piiratud keeles) ja väidet, mis vajab tõestamist. Selle väite tõestuseks on programmi täitmine.

Programmi töö loogilises keeles viiakse läbi, otsides pakutud väite tõestust olemasolevast teadmistebaasist, mis on teatud faktide ja reeglite kogum. Rekursiooni selle paradigma keeltes rakendatakse nii tõendite otsimise protsessis kui ka sellise otsingu mehhanismi täpsustamiseks. Väite tõeväärtuse määramine on oma olemuselt rekursiivne ja vastavalt sellele realiseerub rekursioon siin üsna loomulikul viisil.

3.2. Funktsionaalne programmeerimine toetub rekursiivsete funktsioonide teooriale ja Churchi lambda-arvutusele. Rõhk on funktsioonide vahelisel sõltuvusel andmetest. Funktsiooniprogramm koosneb funktsioonide definitsioonide kogumist, mis omakorda esindavad väljakutseid teistele funktsioonidele ja lausetele, mis juhivad kõnede jada. Funktsionaalsetes keeltes rakendatakse rekursiooni loomulikult, kuna see on keele semantika konstrueerimise põhialus. Üldiselt ei sisalda funktsionaalprogramm määramisoperaatorit, ühegi funktsiooni arvutamine ei too kaasa muid kõrvalmõjusid peale selle väärtuse tegeliku arvutamise. Arvutuste hargnemine põhineb tingimuslause argumentide töötlemise mehhanismil ja tsüklilised arvutused realiseeritakse rekursiooni abil.

4. Objektorienteeritud paradigma.

Objektorienteeritud programmeerimine (OOP) on varasemate programmeerimismetoodikate loomulik areng. Objektide dekomponeerimise tulemuseks on objektide kogum, mis seejärel realiseeritakse mingite spetsiaalselt välja töötatud tüüpide (klasside) muutujatena, mis on andmeväljade ja nende väljadega töötavate meetodite kogum. Võib öelda, et OOP – on objektide modelleerimine läbi hierarhiliselt seotud klasside. Samas on objekti ebaolulised detailid meie eest peidus ja kui anname mõnele objektile käsu, siis ta “teab”, kuidas seda teostada. Põhimõisteks OOP-is on vastutuse mõiste või vastutus toimingu sooritamiseks.

Kõik objektid on esinduslikud või koopiaid, klassid. Meetodi, mille objekt vastuseks sõnumile kutsub, määrab klass, kuhu sõnumi saaja kuulub. Kõik sama klassi objektid kasutavad vastuseks samadele sõnumitele samu meetodeid. Klassid on kujutatud hierarhilise puustruktuurina, milles üldisemate tunnustega klassid asuvad puu juurtes ning eriklassid ja lõppkokkuvõttes indiviidid aga harudes. Juba objektide dekompositsioon ise sisaldab rekursiivsete konstruktsioonide elemente, kuna sel viisil saadud objektide hierarhias on enesesarnasuse elemente. Nagu teate, põhineb objektorienteeritud programmeerimine kolmel põhikontseptsioonil: kapseldamine (andmete peitmine klassis või meetodis); pärand; polümorfism. Kapseldamine Seda võib pidada kaitsekestaks nende andmete koodi ümber, millega see kood töötab. Kest määratleb käitumise ja kaitseb koodi suvalise juurdepääsu eest väljastpoolt. Pärand - on protsess, mille käigus üks tüüp pärib teise tüübi omadused. Polümorfism on kontseptsioon, mis võimaldab teil sama meetodi jaoks kasutada erinevaid teostusi, mis valitakse sõltuvalt sellest, mis tüüpi objekti kutsutakse meetodile üle.

Objektorienteeritud paradigmal on kõigi olemasolevate seas eriline positsioon, kuna enamik tänapäevaseid eri stiilide keeli on objektorienteeritud, kuid üldiselt erineb keele objektorienteeritud teostus tavapärasest oluliselt.

Rekursioon selles paradigmas rakendatakse nii objektide lagunemise protsessis kui ka otsesel viisil. Üldiselt on objektorienteeritud programmide arendamine traditsiooniliste omadest mitu suurusjärku keerulisem, kuid objektide rekursiivse hierarhia ülesehitamine pole mitte ainult üsna teostatav, vaid ka kooliõpilaste jaoks elutähtis ülesanne.

5. Programmeerimine piirangutes.

Piirangprogrammeerimine on deklaratiivses programmeerimises üsna uus suund. See ilmus kahekümnenda sajandi 80ndatel sümboolsete arvutussüsteemide, tehisintellekti ja operatsioonide uurimise tulemusena. Piirangute programmeerimise põhiidee on määratleda muutujate kogum ja seada piirangud, millele need peavad vastama, ning süsteem leiab sobivad väärtused.

Piirangprogrammeerimine on tihedalt seotud traditsioonilise loogikaprogrammeerimisega. Enamik piiratud programmeerimissüsteeme on keeletõlk Prolog sisseehitatud mehhanismiga teatud klassi piirangutega rahulolu probleemide lahendamiseks. Sellistes süsteemides programmeerimist nimetatakse CLP-ks (Constraint Logic Programming) ja enamikke keeli või teeke nimetatakse CLP(X), kus X tähistab lahendatavate probleemide klassi.

Näiteks CLP(B) tähendab võimet lahendada võrrandeid Boole'i ​​muutujatega. CLP(Q) on võrrandid ratsionaalarvudes ja CLP(R) on reaalarvudes. Kõige populaarsemad lõplike täisarvude kogumite ülesannete lahendajad on CLP(FD).

Probleemi avaldus on muutujate piiratud hulk X = ( x 1 , ..., x n ), vastavad lõplikud (loendatavad) väärtuste komplektid D X = ( dx 1 , ..., dx n ) ja piiranguid C = ( c 1 ,..., c m ). Piirangute süsteem võib sisaldada võrrandeid, võrratusi, loogilisi funktsioone, aga ka kõiki lubatud formaalseid konstruktsioone, mis ühendavad komplekti muutujaid X . Probleemi lahendus on luua muutujate kogum, mis vastab kõigile piirangutele c i , kus i = 1,..., m.

Semantiliselt erineb piirangute programmeerimine traditsioonilisest loogilisest programmeerimisest eelkõige selle poolest, et programmi täitmist ei peeta väite tõestamiseks, vaid muutujate väärtuste leidmiseks. Sel juhul ei oma tähtsust lahenduse sisemine järjekord üksikute piirangute täitmiseks ja piirangute programmeerimise süsteem püüab reeglina optimeerida väidete tõestamise järjekorda, et minimeerida tõrke korral tagasipööramist. Seega toimub tagurpidi rekursioonskeemi kasutamine. Rekursiivseid konstruktsioone rakendatakse üldiselt samamoodi nagu loogilises programmeerimises.

6. Stsenaariumi paradigma.

Skriptikeeled. Skriptikeeled on viimastel aastatel teinud suuri edusamme. Kümme aastat tagasi määrati neile abivahendi roll, kuid nüüd on skeptilisus nende suhtes asendunud huvi ja tunnustusega.

Skriptikeeltel on üsna pikk arengulugu. Skriptitud programmeerimise kontseptsioon ilmnes keele loomuliku arenguna LISP . Esimesed skriptikeeled sisaldavad operatsioonisüsteemi sisseehitatud käsukeele juhtelemente. Operatsioonisüsteemi keeles olev partiifail on juhtskript, mis täidab etteantud toimingute jada. Võib öelda, et skript "liimib kokku" operatsioonisüsteemi erinevad osad ja suhtleb nendega.

Praegu on skriptikeelte populaarsus seotud arenguga Internet -tehnoloogia. Skriptimiskeeli kasutatakse dünaamiliste, interaktiivsete loomiseks võrk -lehed, mille sisu muudetakse sõltuvalt kasutaja tegevustest ning teiste lehtede ja andmete olekust.

Skriptikeelte eripäraks on programmi moodustamine mõnes väliskeeles skripti täitmise tulemusena. Skriptikeel tugineb vähesel määral lõpptoote nullist loomisele ja suuremal määral operatsioonisüsteemi, graafilise keskkonna, rakenduste teenindusmootori ja muude sarnaste komponentide võimaluste kasutamisele, mille interaktsioon toimub kasutades skriptid.

Stsenaariumi paradigma hõlmab ülesande jagamist eraldi osadeks, millest igaüks lahendatakse spetsiaalse tarkvara abil; stsenaarium toimib "dispetšerina", kes vastutab nende suhtluse korraldamise eest.

Skriptimiskeeled võrk -arendused loodi peamiselt 90ndatel XX sajandil ja sisaldama erinevate programmeerimisparadigmade elemente imperatiivist objektorientatsioonini. Kõige võimsamate ja populaarsemate skriptimissüsteemide hulgas on järgmised: Perl, Python, PHP, ASP . Erinevate skriptikeelte süntaks ja semantika on üsna sarnased. Selle põhjuseks on C- ja C++-keelte oluline mõju programmeerimiskogukonnale. Rekursiooni tugi skriptikeeltes rakendatakse sarnaselt imperatiivsetele ja objektorienteeritud paradigmadele.

Kaasaegne metoodiline ja tehniline kirjandus pakub üsna sageli näiteid rekursiivsete programmide rakendamisest erinevates programmeerimisparadigmades. Rekursioonile pööratud suur tähelepanu on kinnitus tõsiasjale, et rekursiivne metoodika võimaldab keskenduda probleemi lahendamise loogikale, mitte selle rakendamise üksikasjadele. Seega võime järeldada, et rekursioon pole mitte ainult üks alternatiivsetest meetoditest programmeerimisel, vaid ka teatud abstraktse algoritmilise mõtlemise stiil.

Täna saame aru, mis on programmeerimisparadigmad ja igaühe eripärad.

Paradigma määratlus kõlab tavaliselt järgmiselt:

Paradigmad on ideede ja kontseptsioonide põhimõtete kogum, mis määravad arvutiprogrammi kirjutamise stiili.

Samuti tuleb märkida, et paradigmad eksisteerivad mitte ainult programmeerimises, vaid ka filosoofias jne.

Definitsiooni põhjal võime öelda, et programmeerimisparadigma on arvutitarkvara kirjutamise konkreetne põhimõtete kogum.

Programmeerimisparadigmade tüübid

Juhtus nii, et paljud programmeerijad pakkusid välja oma põhimõtted, programmi kirjutamise viisid ja selle tulemusena tekkis suur hulk paradigmasid.

Loetleme neist kõige populaarsemad:

  • Imperatiivne programmeerimine
  • Struktureeritud programmeerimine
  • Deklaratiivne programmeerimine
  • Objektorienteeritud programmeerimine

Tegelikult on palju rohkem paradigmasid, mida me pole loendis loetlenud; käsitleme neist ainult kõige kuulsamaid.

Vaatame lühidalt igaüks neist

Imperatiivne programmeerimine

Kõige esimene paradigma, mis tekkis kohe pärast arvutite tulekut.

inglise keelest hädavajalik- tellida

Iseloomuliku programmeerimise eripärad:

Lähtekoodis kirjutatakse käsk “orders”, mitte klassid, nagu näiteks objektorienteeritud programmeerimise puhul.

Kõik käsud tuleb täita järjestikku, üksteise järel (näiteks ei saa me ühest koodiosast teise hüpata)

Pärast käskude täitmist saab andmeid mällu kirjutada ja mälust lugeda.

Paradigmat esindavad keeled: masin (binaar)koodid, koost, fortran, algol, kobol

Struktureeritud programmeerimine

Selle meetodi pakkus välja Hollandi teadlane

Edsger Dijkstra 1930–2002

Kuid struktureeritud programmeerimise põhikontseptsioon on kontseptsioon plokid ja hierarhiline struktuur ning mis kasutab kolme peamist juhtimisstruktuuri:

  • järeljada
  • hargnemine

Struktureeritud programmeerimisel on ka 7 Dijkstra kirjeldatud põhimõtet:

  1. täielik keeldumine goto operaatori kasutamisest; *
  2. mis tahes programm on üles ehitatud kolmele juhtimisstruktuurile: järjestus, tsükkel ja hargnemine;
  3. põhilisi juhtimisstruktuure saab soovi korral üksteise sisse pesastada;
  4. Korduvad komponendid tuleks kujundada alamprogrammidena;
  5. Iga loogiline struktuur tuleks vormindada järgmiselt plokk;
  6. kõigil struktuuridel peab olema üks sisend ja üks väljund, mitte rohkem;
  7. programmi arendamine peaks toimuma samm-sammult, kasutades “redeli” meetodit (ülevalt alla meetod)

* —
goto on tingimusteta hüppeoperaator, mida kasutati laialdaselt 1970. aastatel

Deklaratiivne programmeerimine

kujutab endast probleemi lahendamise spetsifikatsiooni ning kirjeldab probleemi olemust ja töö eeldatavat tulemust.

See vastandub imperatiivsele programmeerimisele, kuna deklaratiivne programmeerimine kirjeldab Mida teha ja teises Kuidas teha.

Objektorienteeritud programmeerimine (OOP)

on kõige populaarsem ja sagedamini kasutatav paradigma, mille peaaegu kõik programmeerijad aktsepteerivad kogu maailmas. Kogu tööstuslik programmeerimine on üles ehitatud sellele. Põhiidee on kujutada programmi objektidena, mis omakorda kujutavad endast klassi eksemplari ja klassid omakorda moodustavad pärimishierarhia.

OOP põhimõisted

Andmete abstraktsioon— olulise teabe esiletõstmine ja selle eraldamine ebaolulisest.

Kapseldamine- see on atribuut, mis võimaldab teil klassis andmeid ja meetodeid kombineerida

Pärand— atribuut, mis võimaldab luua uue klassi vana baasil (pärida kõik selle omadused)

Polümorfism- ja see omadus võimaldab kasutada sama liidesega objekte

(ALGORITMISEERIMISE JA PROGRAMMEERIMISE ALUSED)
  • Programmeerimise paradigmad ja tehnoloogiad
    Peatüki 1 eesmärgid. Tutvuge mõistetega "programmeerimisparadigma", "programmeerimistehnoloogia". 2. Saage üldine arusaam kaasaegsetest tarkvaraarendustehnoloogiatest. 3. Uurige struktuurprogrammi loomise etappe. 4. Tutvu tarkvaraarenduse elutsükli mudelitega...
  • SE programmeerimise paradigmad
    SWEBOK sisaldab mitmeid programmeerimisparadigmasid Vt: Lavrishcheva E. M. Assembly-type programming paradigms in software engineering // UKRProg-2014. nr 2-3. lk 121-133. . Selle programmeerimise alglaagrid hõlmavad järgmist: protseduuriline programmeerimine(kursus CS1011 “Programmeerimise alused”),...
    (Keeruliste SÜSTEEMIDE PROGRAMMEERIMISE TARKVARAINSENERINGUD JA TEHNOLOOGIAD)
  • PROGRAMMEERIMISPARADIGMAD
    MOODULPROGRAMMEERIMINE. PÕHIMÕISTED Kaasaegse programmeerimise üks võtmeprobleeme on moodulite ja komponentide taaskasutamine (KPI). Need võivad olla programmid, alamprogrammid, algoritmid, spetsifikatsioonid jne, mis sobivad kasutamiseks uue keerukama tarkvara väljatöötamisel....
    (TARKVARAINSENER. PARADIGMAD, TEHNOLOOGIAD JA KOHTUJUHTURIISTAD)
  • Protseduuriparadigma
    Protseduuriparadigma oli kronoloogiliselt esimene ja valitses pikka aega. Praegu annab see järk-järgult teed objektorienteeritud paradigmale, kuigi hõivab endiselt umbes poole tarkvaraarenduse turust. Seda rakendatakse kõigil tarkvaraarenduse tasanditel...
    (ALGORITMISEERIMINE JA PROGRAMMEERIMINE)
  • Deklaratiivne ja protseduuriline mälu
    Teine iseseisev, teistest sõltumatu mälu funktsionaalse korraldamise viis on selle jagunemine deklaratiivne Ja protseduuriline. Neil kahel mälu korrastamise meetodil on täiesti arusaadav funktsionaalne alus. Deklaratiivse mälu vorm on loodud vaimse...
    (Psühholoogia ja pedagoogika)
  • Programmeerimisparadigma on ideede ja kontseptsioonide kogum, mis määrab programmide kirjutamise stiili.

    Imperatiivne paradigma kirjeldab arvutusprotsessi käskude kujul, mis muudavad programmi olekut. Käskprogramm on väga sarnane loomulike keelte imperatiivsete käskudega, st see on käskude jada, mida arvuti peab täitma. Põhineb Turing-Posti lõpliku automaati mudelil.

    Esimesed kohustuslikud keeled olid masinkoodid - arvuti emakeel. Nendes keeltes olid juhised äärmiselt lihtsad, mis vähendas arvutite koormust, kuid raskendas suurte programmide kirjutamist. Aastal 1954 ilmus esimene “inimese” programmeerimiskeel - FORTRAN, seejärel ALGOL, COBOL, BASIC, Pascal, C.

    Üks imperatiivse programmeerimise iseloomulikke tunnuseid on muutujate olemasolu "destruktiivse määramise" operatsiooniga. See tähendab, et seal oli muutuja A, selle väärtus oli X. Algoritm käsib järgmises etapis määrata muutujale A väärtuse Y. Väärtus, mis A oli, "unustatakse igaveseks".

    Imperatiivne programmeerimine sobib kõige paremini väikeste alamülesannete realiseerimiseks, kus täitmise kiirus kaasaegsetes arvutites on väga oluline. Lisaks kirjeldatakse välisseadmetega töötamist tavaliselt toimingute järjestikuse täitmisega (“ava kraan, tõmba vett”), mistõttu on sellised ülesanded ideaalsed kandidaadid hädavajalikuks rakendamiseks.

    Programmeerimise aluste õpetamise imperatiivse paradigma raamistiku valik näib olevat väljaspool kahtlust. Sellel on mitu põhjust:

    · imperatiivparadigma on kõige lähedasem inimloomusele ja intuitiivsele algoritmi kontseptsioonile mõtlemise arengu algfaasis (algoritmiseerimise elementidega arendusõpetusest on positiivne kogemus juba põhikoolis);

    · imperatiivse paradigma raames programmeerimine on efektiivne paljude ülesannete klassi jaoks, millest paljud jäävad põhikooli vanemate klasside õpilaste proksimaalse arengu tsooni;

    · imperatiivne paradigma on kõige lähedasem arvuti olemusele, selle toimimise aluspõhimõtetele, kuna hoolimata tänapäevase arvuti keerukusest võib seda riistvara tasemel siiski pidada mingiks automaatiks (protsessor + mälu + ...) lõpliku hulga olekute (sisu) mäluga);

    · eranditult deklaratiivse programmeerimise paradigma raames loodud tarkvaratoodete osakaal on väike; Reeglina kasutatakse probleemide lahendamisel paradigmade kombinatsiooni, millest üks on hädavajalik;

    · suur valik programmeerimissüsteeme iseseisva tarkvara näol ja teistesse süsteemidesse integreeritud alamsüsteemidena, võimaldades imperatiivse paradigma abil tarkvaratooteid arendada;


    · lai valik õppe-, teatme- ja muid trükiseid asjakohaste programmeerimissüsteemide kohta paber- ja elektroonilisel kujul erinevates meediakanalites ja ülemaailmses võrgus.

    Puudus: puhtal kujul võimaldab see lahendada ainult väga lihtsaid probleeme.

    Sündmuspõhine programmeerimine on programmeerimine, milles määratakse programmi reaktsioonid erinevatele sündmustele (kasutaja tegevused). PMS-i võib pidada imperatiivse paradigma "järglaseks". SUP-il on 2 alamklassi:

    1. Paralleelprogrammeerimine kujutab endast programmi sideprotsesside kogumina, mida saab paralleelselt täita. Selliseid programme saab käivitada kas ühel protsessoril (iga protsessi sammude täitmine vaheldumisi) või mitmel.

    Paralleelses protsessisüsteemis töötleb iga üksik protsess sündmusi. Sündmused võivad olla kas üldised kogu süsteemi jaoks või üksikud ühe või mitme protsessi jaoks. Sellistes terminites on üsna mugav kirjeldada näiteks graafilise kasutajaliidese elemente või mis tahes reaalsete protsesside modelleerimist (näiteks liikluse juhtimine) - kuna sündmuse mõiste on selliste ülesannete jaoks loomulik.

    2.Objektorienteeritud programmeerimine on programmeerimistehnoloogia, milles programmi vaadeldakse kui objektide ja nende vastasmõjude kogumit. Iga programmiobjekt on mõne klassi eksemplar; - klassid võivad pärida oma ülemklasside atribuute ja meetodeid, lisades samal ajal oma. Klassihierarhia võimaldab modelleerida lahendatava probleemi olemust mitmel detailsustasemel ja seejärel kasutada klassi, mis vastab konkreetse alamülesande lahendamiseks vajalikule detailsusastmele.

    Oluline on esile tõsta järgmised objektide põhiomadused:

    1.) Kuna üks objekt saab teist mõjutada ainuüksi viimasele sõnumeid saates, ei saa see kuidagi otseselt töötada "vestluskaaslase" enda andmetega ega saa seetõttu rikkuda nende sisemist järjepidevust. Seda omadust (andmete peitmist) nimetatakse tavaliselt kapseldamiseks.

    2.) Kuna objektid suhtlevad ainult sõnumite vahetamise kaudu, ei pruugi vestluspartneri objektid oma vastete sõnumitöötlejate rakendamisest midagi teada. Interaktsioon toimub ainult sõnumite/sündmuste kaudu, mida on domeeniga üsna lihtne siduda. Seda omadust (interaktsiooni kirjeldus ainult domeeni mõistes) nimetatakse abstraktsiooniks.

    3.) Objektid suhtlevad ainult üksteisele sõnumeid saates. Seega, kui mõne objekti interaktsiooni stsenaariumi korral asendate suvalise objekti teisega, mis suudab samu sõnumeid töödelda, on stsenaarium samuti rakendatav. Seda omadust (võimalust asendada objekt teise sarnase klassistruktuuriga objektiga) nimetatakse polümorfismiks.

    Paljud kaasaegsed keeled toetavad OOP-i, kuigi erineval määral: puhtalt objektorienteeritud keeled, nagu Smalltalk ja Ruby, on loodud objektorienteeritud arendusstiili toetamiseks ja isegi jõustamiseks ning ei toeta muid programmeerimisstiile; - valdavalt objektorienteeritud keeled, nagu Java, C++ ja Python, on mõeldud eelkõige OOP-i toetamiseks, kuid võimaldavad kasutada protseduurilise programmeerimise elemente; - Ajalooliselt on protseduurikeeli, näiteks Perl ja Fortran 2002, täiustatud ja lisatud on mõnede OOP-elementide tugi.

    Deklaratiivne programmeerimise paradigma määratleb arvutusprotsessi, kirjeldades arvutuse enda loogikat, mitte programmi juhtimisloogikat.

    Deklaratiivne programmeerimine on imperatiivse programmeerimise vastand; esimene kirjeldab, mida tuleb teha, ja teine ​​kirjeldab täpselt, kuidas seda teha.

    Kõige olulisemad deklaratiivse programmeerimise tüübid on funktsionaalne ja loogiline (või relatsiooniline) programmeerimine.

    1. Funktsionaalne programmeerimine on üks alternatiividest imperatiivsele lähenemisele. See põhineb Churchi lambda arvutusel. Imperatiivses programmeerimises on algoritmid järjestikku sooritatavate toimingute kirjeldused. On olemas mõiste "praegune täitmise samm" (st aeg) ja "praegune olek", mis selle aja jooksul muutub.

    Funktsionaalses programmeerimises puudub aja mõiste. Programmid on avaldised; programmi täitmine seisneb nende avaldiste hindamises.

    Kuna alamavaldiste hindamise järjekord ei oma tähtsust, saab funktsionaalset programmeerimist paralleelsust toetavatel platvormidel loomulikult rakendada.

    Funktsionaalset programmeerimist, nagu ka teisi "mittekohustuslikke" programmeerimismudeleid, kasutatakse tavaliselt selliste probleemide lahendamiseks, mida on järjestikuste operatsioonide mõttes raske sõnastada. Sellesse kategooriasse kuuluvad peaaegu kõik tehisintellektiga seotud ülesanded. Nende hulgas väärivad äramärkimist pildituvastuse, loomulikus keeles kasutajaga suhtlemise, ekspertsüsteemide juurutamise, teoreemide automatiseeritud tõestamise ja sümboolsete arvutuste ülesanded. Need ülesanded on traditsioonilisest rakendusprogrammeerimisest kaugel, seetõttu ei pöörata neile arvutiteaduse õppekavades suurt tähelepanu.

    Loogiline programmeerimine

    Funktsionaalses programmeerimises on programmid avaldised ja nende täitmine seisneb nende väärtuse arvutamises. Loogikas programmeerimises on programm teooria (kirjeldatud üsna piiratud keeles) ja väide, mis vajab tõestamist. Selle väite tõestuseks on programmi täitmine.

    Loogiline programmeerimine ja Prologi keel tekkisid loomuliku keele analüüsi valdkonna uurimistööst. Seejärel avastati, et loogikaprogrammeerimine on sama tõhus ka teiste tehisintellekti ülesannete elluviimisel.

    Loogiline programmeerimine võimaldab loomulikku paralleelset rakendamist.

    Loeng nr Programmeerimisparadigmad. Imperatiivne programmeerimine.

      Programmeerimisparadigma kontseptsioon.

      Programmeerimisparadigmade klassifikatsioon.

      Imperatiivne programmeerimine.

    1. Programmeerimisparadigma kontseptsioon.

    Programmeerimisparadigma on lähenemisviiside, meetodite, strateegiate, ideede ja kontseptsioonide kogum, mis määravad programmide kirjutamise stiili.

    Kaasaegse programmeerimistööstuse programmeerimisparadigma määrab väga sageli programmeerija tööriistakomplekt (programmeerimiskeel ja operatsioonisüsteem).

    Programmeerimisparadigma esindab (ja määratleb), kuidas programmeerija näeb programmi täitmist. Näiteks objektorienteeritud programmeerimisel vaatleb programmeerija programmi kui interakteeruvate objektide kogumit, funktsionaalses programmeerimises aga kujutatakse programmi funktsioonide hinnangute ahelana.

    Teatud isiku pühendumus konkreetsele paradigmale on mõnikord nii tugev, et vaidlused erinevate paradigmade eeliste ja puuduste üle liigitatakse arvutiringkondades nn ususõdadeks.

    Termini ajalugu

    Mõiste "paradigma" võlgneb ilmselt oma kaasaegse tähenduse teadus- ja tehnikavaldkonnas Thomas Kuhnile ja tema raamatule "Teadusrevolutsioonide struktuur" (vt paradigma). Kuhn nimetas paradigmadeks väljakujunenud teaduslike vaadete süsteeme, mille raames uurimistööd tehakse. Kuhni sõnul võib teadusdistsipliini arengu käigus üks paradigma asenduda teisega (nagu näiteks Ptolemaiose geotsentriline taevamehaanika asendus Koperniku heliotsentrilise süsteemiga), samas kui vana paradigma eksisteerib edasi. mõnda aega ja isegi areneda, kuna paljud selle toetajad osutuvad ühel või teisel põhjusel olematuks, ei suuda nad kohaneda tööga erinevas paradigmas.

    Mõistet "programmeerimisparadigma" kasutas esmakordselt Robert Floyd oma Turingi auhinna võitja loengus.

    Floyd märgib, et programmeerimisel võib täheldada Kuhni paradigmadega sarnast nähtust, kuid erinevalt neist ei välista programmeerimisparadigmad üksteist:

    Kui programmeerimiskunsti edenemine tervikuna nõuab paradigmade pidevat leiutamist ja täiustamist, siis üksiku programmeerija kunsti täiustamine eeldab paradigmade repertuaari laiendamist.

    Seega saab Robert Floydi sõnul erinevalt Kuhni kirjeldatud teadusmaailma paradigmadest programmeerimisparadigmasid kombineerida, rikastades programmeerija tööriistu.

    2. Programmeerimisparadigmade klassifikatsioon.

    Rakendusprogrammeerimise juhtiv paradigma, mis põhineb imperatiivsel juhtimisel ja programmide ülesehitamise protseduur-operaatorlikul stiilil, saavutas enam kui viiskümmend aastat tagasi populaarsuse arvutus- ja infoprotsesside korraldamise spetsialistide kõrge professionaalse tegevuse valdkonnas. Viimasel kümnendil on arvutiteaduse geograafia järsult laienenud, laiendades seda massikommunikatsiooni ja vaba aja veetmise sfääri. See muudab infosüsteemide hindamise kriteeriume ja eelistusi teabe töötlemise tööriistade ja meetodite valikul.

    Kõige stabiilsemad on üldised programmeerimise paradigmad, mis tekkisid arvutiprogrammeerimise ajastu alguses – muuhulgas rakendusliku, teoreetilise ja funktsionaalse programmeerimise paradigmad.

    Rakendusprogrammeerimine on probleemile orienteeritud, peegeldades teabe arvutistamist ja arvtöötluse arvutusprotsesse, mida uuriti ammu enne arvutite tulekut. Siin ilmnes kiiresti selge praktiline tulemus. Loomulikult erineb programmeerimine sellistes valdkondades kodeerimisest vähe, selleks piisab reeglina toimingute esitamise operaatori stiilist. Rakendusprogrammeerimise praktikas on tavaks usaldada end tõestanud malle ja protseduuride teeke ning vältida riskantseid eksperimente. Väärtustatakse teaduslike arvutuste täpsust ja stabiilsust. Fortrani keel on rakenduste programmeerimise veteran. Alles viimasel kümnendil on see selles valdkonnas mõnevõrra halvem kui Pascal-C ja superarvutites paralleelsetele programmeerimiskeeltele nagu Sisal. [, , , ]

    Teoreetiline programmeerimine järgib väljaande suunitlust, mille eesmärk on programmeerimise ja arvutiteaduse valdkonna teaduslike katsete tulemuste võrreldavus. Programmeerimine püüab väljendada oma formaalseid mudeleid, näidata nende olulisust ja fundamentaalset olemust. Need mudelid pärisid seotud matemaatiliste mõistete põhijooned ja kehtestasid end arvutiteaduses algoritmilise lähenemisviisina. Konstruktsioonide tõendusmaterjali soov ning nende efektiivsuse, usutavuse, õigsuse, korrektsuse ja muude formaliseeritud seoste hindamine diagrammides ja programmitekstides oli aluseks struktureeritud programmeerimisele [, ] ja muudele meetoditele programmi arendusprotsessi usaldusväärsuse saavutamiseks, näiteks , pädev programmeerimine. Algoli ja Pascali standardsed alamhulgad, mis olid programmeerimise teooria töömaterjaliks, asendati eksperimenteerimiseks mugavamate rakenduskeeltega, nagu ML, Miranda, Scheme ja muud Lispi dialektid. Nüüd on nendega liitunud C ja Java alamhulgad.

    Funktsionaalne programmeerimine kujunes austusavaldusena matemaatilisele orientatsioonile tehisintellekti uurimis- ja arendustegevuses ning uute horisontide arendamisele arvutiteaduses. Abstraktne lähenemine teabe esitamisele, funktsioonide konstrueerimise lakooniline, universaalne stiil, erinevate funktsioonikategooriate täitmiskeskkonna selgus, rekursiivsete konstruktsioonide vabadus, usaldus matemaatiku ja uurija intuitsiooni vastu, enneaegse koormuse vältimine. mälu jaotamise põhimõteteta probleemide lahendamine, definitsioonide ulatuse põhjendamatute piirangute tagasilükkamine - kõike seda seostab John McCarthy Lispi keele ideega. Lispi esimeste juurutuste läbimõeldus ja metoodiline paikapidavus võimaldas kiiresti koguda kogemusi uute probleemide lahendamisel ning valmistada neid ette rakenduslikuks ja teoreetiliseks programmeerimiseks. Praegu on sadu funktsionaalseid programmeerimiskeeli, mis on keskendunud erinevatele ülesannete klassidele ja tehniliste vahendite tüüpidele. [,,,,,,,]

    Põhilised programmeerimisvahendid ja -meetodid on arenenud koos lahendatavate probleemide keerukuse suurenemisega. Toimunud on programmeerimisparadigmade kihistumine olenevalt arvuti infotöötlusprotsesside korralduse tehniliste detailide läbitöötamise sügavusest ja üldistusest. Tekkinud on erinevad programmeerimisstiilid, millest küpsemad on madalatasemeline (masinale orienteeritud), süsteemne, deklaratiiv-loogiline, optimeerimis-transformatsiooniline ja suure jõudlusega/paralleelprogrammeerimine.

    Madala taseme programmeerimist iseloomustab riistvaraline lähenemine arvuti töö korraldamisele, mille eesmärk on juurdepääs mis tahes riistvaralistele võimalustele. Tähelepanu keskmes on riistvara konfiguratsioon, mälu olek, käsklused, juhtelementide ülekanded, sündmuste järjestamine, erandid ja üllatused, seadme reageerimisajad ja vastuse õnnestumine. Assamblee keel on Pascali ja C visuaalse valikuna juba mõnda aega varju jäänud, isegi mikroprogrammeerimises, kuid kasutajaliidese täiustused võivad oma positsiooni tagasi saada. [,,,]

    Süsteemi programmeerimine on arenenud pikka aega teenindus- ja tellimustöö surve all. Sellisele tööle omane tootmisviis tugineb reprodutseeritavate protsesside ja korduvaks kasutamiseks mõeldud stabiilsete programmide eelistamisele. Selliste programmide puhul on põhjendatud kompileerimise töötlemise skeem, omaduste staatiline analüüs, automatiseeritud optimeerimine ja juhtimine. Selles valdkonnas domineerib programmeerimise imperatiiv-protseduuriline stiil, mis on rakenduste programmeerimise operaatoristiili otsene üldistus. See võimaldab mõningast standardimist ja modulaarset programmeerimist, kuid omandab üsna keerukad struktuurid, spetsifikatsioonid, testimismeetodid, programmide integreerimise tööriistad jne. Tõhususe ja usaldusväärsuse ranged nõuded on täidetud professionaalsete tööriistade väljatöötamisega, mis kasutavad keerulist assotsiatiivset semantilist heuristikat ning süntaktiliselt juhitud disaini ja programmide genereerimise meetodeid. Selliste vahendite vaieldamatut potentsiaali praktikas piirab arendamise keerukus – tekib kvalifikatsiooninõue.

    Suure jõudlusega programmeerimine on suunatud maksimaalse võimaliku jõudluse saavutamisele eriti oluliste probleemide lahendamisel. Arvuti jõudluse loomulik reserv on paralleelsed protsessid. Nende korraldus nõuab ajasuhete üksikasjalikku kaalumist ja mittekohustuslikku tegevuste juhtimisstiili. Suure jõudlusega andmetöötlust toetavad superarvutid vajasid spetsiaalseid süsteemide programmeerimistehnikaid. Graafikvõrgu lähenemisviisi paralleelsete arhitektuuride süsteemide ja protsesside esitamiseks on väljendatud spetsiaalsetes paralleelsetes programmeerimiskeeltes ja superkompilaatorites, mis on kohandatud ülesandetasandi protsesside abstraktse hierarhia kaardistamiseks reaalsete seadmete protsessorite spetsiifilisele ruumistruktuurile [,,] .

    Deklaratiivne (loogiline) programmeerimine tekkis funktsionaalse programmeerimise lihtsustamiseks matemaatikute ja keeleteadlaste jaoks, kes lahendavad sümboolseid töötlusülesandeid. Eriti atraktiivne on võimalus kasutada mittedeterminismi kontseptuaalse alusena, mis vabastab meid valemite töötlemise programmeerimisel enneaegsest järjestamisest. Tootmisstiil genereerida protsesse koos tootlusega on piisavalt loomulik lingvistiliseks lähenemiseks formaliseeritud teadmiste selgitamiseks ekspertide poolt ja vähendab infosüsteemide juurutamise lähtebarjääri.

    Tühendas metoodiliselt programmi optimeerimise, makrogenereerimise ja osalise arvutamise tehnikad. Selle valdkonna keskne mõiste on teabe ekvivalentsus. See väljendub programmide ja protsesside teisenduste määratlemises, teisenduste rakendatavuse kriteeriumide otsimises, nende kasutamise strateegia valikus. Segaarvutused, edasilükatud toimingud, laisk programmeerimine, viivitatud protsessid jne. kasutatakse teabetöötluse efektiivsuse tõstmise meetoditena teatud täiendavalt tuvastatud tingimustel. [,]

    Programmeerimisparadigmade edasine areng peegeldab infosüsteemide kasutamisest huvitatud inimeste ringi muutumist. Laiaulatuslike lähenemisviiside väljatöötamine programmeerimisel on loomulik reaktsioon seadmete ja arvutivõrkude jõudlusnäitajate radikaalsele paranemisele. Toimub arvutusvahendite üleminek tehniliste vahendite klassist kodumasinate klassi. Tekkinud on pinnas programmeerimise käsitluste ajakohastamiseks, aga ka võimalus taastada vanu ideid, mis olid arvutite vähese tehnoloogia ja jõudluse tõttu halvasti arenenud. Huvi pakub programmeerimise uurimis-, evolutsiooni-, kognitiivsete ja kohanemisviiside arendamine, mis loovad väljavaate reaalsete inforessursside ja arvutipotentsiaali ratsionaalseks arendamiseks. [,]

    Professionaalse, haridusliku ja amatöörprogrammeerimise õpetliku mängustiiliga uurimiskäsitlus võib anda tõuke leidlikkusele programmeerimistehnoloogia täiustamisel, mis ei suutnud varasemal elemendibaasil toime tulla kriisinähtustega. [,]

    Evolutsiooniline lähenemine programmide viimistlemise mobiilse stiiliga on üsna selgelt nähtav objektorienteeritud programmeerimise kontseptsioonis, mis on järk-järgult arenemas subjekti- ja isegi egokeskseks programmeerimiseks. Definitsioonide taaskasutamine ja objekti omaduste pärimine võib pikendada silutud teabekeskkondade elutsüklit, suurendada nende töökindlust ja kasutusmugavust. Kognitiivne lähenemine avatud süsteemide visuaalse liidese arendamise koostalitlusvõimelise stiiliga ning uute audio-video tööriistade ja mittestandardsete seadmete kasutamine avab võimalusi keeruka teabe tajumise parandamiseks ja selle piisava töötlemise lihtsustamiseks. [,]

    Kohanemisviis koos personaliseeritud infosüsteemide individualiseeritud disaini ergonoomilise stiiliga annab arvutiteadlastele võimaluse kompetentselt programmeerida, korraldada ja toetada reaalajas tehnoloogilisi protsesse, mis on tundlikud inimfaktori ja süsteemisiirde suhtes [,].

    Tänaseks stabiliseeruv ühe arhitektuurse liini, standardliidese, standardse programmeerimistehnoloogia jne domineerimine. on infotehnoloogia uuendamisel tulvil paindlikkuse kaotust. Selles suhtes on eriti haavatavad inimesed, kes on harjunud kõike lõplikult omaks võtma. Programmeerimiskeelte õppimisel välditakse selliseid probleeme, õpetades korraga erinevaid programmeerimiskeeli või esitades eelnevalt aluse, mis määrab grammatilise struktuuri mõistete üldistamiseks, mille varieeruvust on lihtsustatud haridusnäidetes raske hoomata. Just selle aluse annab funktsionaalse programmeerimise õpe, kuna see on suunatud erinevatel tegevusaladel programmeerimise praktikas välja kujunenud paradigmade esitlemisele ja analüüsimisele erinevate spetsialistide kvalifikatsioonitasemetega, mis võivad olla kasulikud kontseptuaalsena. arvutiteaduse uute nähtuste uurimise alus.

    Programmeerimisparadigma on tööriist professionaalse käitumise kujundamiseks. Arvutiteadus on arenenud kõrgelt kvalifitseeritud tehnikaspetsialistide ja teadlaste eliidi professionaalsest programmeerimisest tsiviliseeritud ühiskonna aktiivse osa vabaks ajaveetmiseks. Infosüsteemide valdamine mõistmise kaudu kompetentse tegutsemise ja tehnoloogia vastutustundliku kasutamise eesmärgil on asendunud tagasihoidliku õnnelootusega, teadmistele pretendeerimata intuitiivsete oskustega mõjutada infokeskkonda kaootiliselt. Ühiskasutuse keskuste hooldus, professionaalne teabe terviklikkuse tugi ja andmete ettevalmistamine on peaaegu täielikult astunud personaalarvutite iseteenindusele, võrkude iseseisvale funktsioneerimisele ja heterogeensetele serveritele koos erinevate kommunikatsioonidega.

    Arendatavate programmide, töödeldavate andmete ja ülesannete haldamise kõrvutamine annab teed liideste ideele, mis on mõeldud osalema teabevoogudes, nagu navigeerimine. Endised kvaliteedikriteeriumid: kiirus, mälusääst ja infotöötluse usaldusväärsus jäävad üha enam mängude atraktiivsuse ja maailma teaberessurssidele juurdepääsu laiuse varju. Kinniseid tarkvarasüsteeme, millel on teadaolevad kvaliteedi ja töökindluse garantiid, sunnivad välja avatud infosüsteemid, mille koostis, teabe salvestamise ja töötlemise meetodid on ettearvamatu arenguga.

    Paljud programmeerimispraktika jaoks olulised mõisted, nagu sündmused, erandid ja vead, konstruktsioonide potentsiaal, hierarhia ja ortogonaalsus, ekstrapoleerimine ja programmi kasvupunktid, kvaliteedi mõõtmine jne. ei saavutanud piisavat abstraktsiooni ja formaliseerituse taset. See võimaldab ennustada programmeerimisparadigmade arengut ja valida õppematerjale komponentide programmeerimise tulevikuks (COM/DCOM, Corba, UML jne). Kui traditsiooniliste korduvkasutatavate komponentide valimise vahendite ja meetodite puhul kehtis modulaarsuse kriteerium, mida mõisteti maksimaalse funktsionaalsusega minimaalse haakeseadise optimaalse valikuna, siis kaasaegne elemendibaas võimaldab kasutada lihtsaid toiminguid sooritavaid mitmekontaktilisi seadmeid. [,,,,,]

    Need programmeerimisparadigma uuendamise sümptomid määravad põhimõistete süsteemis, teabe ja arvutiteaduse kontseptsioonis toimuvate muutuste suuna. Java kontseptsioonis võrrelduna C-ga välja kuulutatud suundumust kasutada kompilaatorite asemel interprete (täpsemalt mittetäielikku kompileerimist) ja objektorienteeritud programmeerimise kiusatust üldtunnustatud imperatiiv-protseduurilise programmeerimisstiili taustal. vaadeldakse kui kaudset liikumist funktsionaalse stiili poole. Funktsionaalvalemite modelleerimisvõime on piisav erinevate paradigmade täielikuks esitamiseks, mis võimaldab nende põhjal ekstrapoleerida praktiliste oskuste omandamist infoprotsesside korraldamisel tulevikuks.

    Möödunud (20. sajandi) keskel ei tähendanud mõiste “programmeerimine” seost arvutiga. Näha võis raamatu pealkirja "Arvutiprogrammeerimine". Nüüd tähendab see termin vaikimisi protsesside korraldamist arvutites ja arvutivõrkudes.

    Programmeerimine kui teadus erineb tulemuste hindamise poolest oluliselt matemaatikast ja füüsikast. Füüsikute ja matemaatikute saavutatud tulemuste taset hindavad tavaliselt sarnase või kõrgema kvalifikatsiooniga spetsialistid. Programmeerimise tulemuste hindamisel on oluline roll kasutaja hinnangul, kes ei pretendeeri programmeerimisalaste teadmiste omamisele. Seetõttu täidavad programmeerimisspetsialistid erinevalt tavateadustest osaliselt oma erialaterminite kasutajakontseptsioonideks tõlkimise funktsiooni.

    Programmeerimisel on oma spetsiifiline meetod tulemuste usaldusväärsuse kindlakstegemiseks – see on arvutikatse. Kui matemaatikas taandub usaldusväärsus demonstratiivsetele konstruktsioonidele, mis on arusaadavad ainult spetsialistidele, ja füüsikas - reprodutseeritavale laboratoorsele katsele, mis nõuab spetsiaalset varustust, siis arvutikatse võib olla kättesaadav laiemale avalikkusele.

    Programmeerimise teine ​​omadus tuleneb selle sõltuvusest kiiresti arenevast elektroonikatehnoloogiast. Sel põhjusel on programmeerimisalased teadmised kombinatsioon klassikast ja moest. Spetsiifilised teadmised moekatest uutest toodetest on vananenud, nii et teadmiste ja oskuste kiireks värskendamiseks on vaja klassikalist alust, mille otsene eesmärk pole kasutajatele ja algajatele täiesti ilmne. [,,]

    Programmeerimisel kasutatakse kontseptuaalse alusena matemaatilist aparaati (hulgateooria, arvuteooria, algebra, loogika, algoritmide ja rekursiivsete funktsioonide teooria, graafiteooria jne).

    Programmi kvaliteedikriteeriumid on väga erinevad. Nende olulisus sõltub peamiselt ülesannete klassist ja programmide rakendustingimustest:

    tõhusust

    usaldusväärsus

    jätkusuutlikkus

    automatiseerimine

    ressursside (aeg, mälu, seadmed, teave, inimesed) tõhus kasutamine

    arendamise ja kasutamise lihtsus

    programmi teksti nähtavus

    programmiprotsessi jälgitavus

    diagnostika, mis toimub

    Kriteeriumide järjestus muutub sageli programmi rakendusvaldkonna arenedes, kasutajate kvalifikatsiooni tõustes, seadmete moderniseerimises, infotehnoloogias ja tarkvaratehnikas. Sellest tulenev probleemi lahendamise ruumi pidev areng toob kaasa täiendavad nõuded infosüsteemide programmeerimisstiilile:

    paindlikkus

    muudetavus

    parandatavus

    Programmeerimine kui teadus, kunst ja tehnoloogia uurib ja loovalt arendab programmide loomise ja kasutamise protsessi, määrab programmide koostamise vahendid ja meetodid, mille mitmekesisusega tutvume edasistes loengutes, mis on pühendatud mitme põhilise analüüsile. programmeerimisparadigmad.

    Programmeerimiskeelte klassifitseerimisel ja nende kindlasse programmeerimisparadigmasse kuulumise kindlakstegemisel on ilmseid raskusi. Sellel kursusel iseloomustab programmeerimisparadigmat põhiliste semantiliste süsteemide, nagu andmetöötlus, andmete salvestamine ja andmetöötluse juhtimine, koosmõju. Selle lähenemisviisi abil saab eristada kolme paradigma kategooriat:

    madala taseme programmeerimine;

    programmeerimine kõrgetasemelistes keeltes;

    ülikõrgetasemelistel keeltel põhinevate programmide koostamine.

    Madala taseme programmeerimine tegeleb arhitektuuri ja riistvara dikteeritud andmestruktuuridega. Andmete ja programmide salvestamisel kasutatakse globaalset mälu ja automaatset andmetöötluse juhtimismudelit. [,,,,,,,,]

    Kõrgetasemelistes keeltes programmeerimine on kohandatud andmestruktuuride täpsustamiseks, mis kajastavad lahendatavate probleemide olemust. Kasutatakse andmestruktuuride ja nende töötlemise protseduuride nähtavusalade hierarhiat, mis on allutatud struktuur-loogilisele juhtimismudelile, mis võimaldab programmi silumisprotsessi ühtlustamist. [,,,,,,,]