տուն պարարտանյութեր Ծրագրավորման պարադիգմների օրինակներ. «Մոռացված» ծրագրավորման պարադիգմներ. Կառուցվածքային ծրագրավորման պարադիգմի հիմունքները

Ծրագրավորման պարադիգմների օրինակներ. «Մոռացված» ծրագրավորման պարադիգմներ. Կառուցվածքային ծրագրավորման պարադիգմի հիմունքները

Ծրագրավորման ընդհանուր պարադիգմները, որոնք ձևավորվել են համակարգչային ծրագրավորման դարաշրջանի հենց սկզբում, ներառյալ կիրառական, տեսական և ֆունկցիոնալ ծրագրավորման պարադիգմները, ամենակայունն են:

Կիրառական ծրագրավորումը ենթակա է խնդրահարույց կողմնորոշման, որն արտացոլում է տեղեկատվության համակարգչայինացումը և թվային մշակման հաշվողական գործընթացները, որոնք ուսումնասիրվել են համակարգիչների հայտնվելուց շատ առաջ: Այստեղ էր, որ արագորեն ի հայտ եկավ գործնական հստակ արդյունք։ Բնականաբար, նման ոլորտներում ծրագրավորումը շատ չի տարբերվում կոդավորումից, որպես կանոն, դրա համար բավարար է գործողությունները ներկայացնելու օպերատորի ոճը։ Կիրառական ծրագրավորման պրակտիկայում ընդունված է վստահել ապացուցված ձևանմուշներին և ընթացակարգերի գրադարաններին՝ ռիսկային փորձերից խուսափելու համար: Գնահատվում է գիտական ​​հաշվարկների ճշգրտությունն ու կայունությունը։ Fortran լեզուն՝ կիրառական ծրագրավորման վետերան, աստիճանաբար սկսեց այս ոլորտում որոշակիորեն զիջել Pascal-ին, C-ին, իսկ սուպերհամակարգիչների վրա՝ զուգահեռ ծրագրավորման լեզուներին, ինչպիսին է Sisal-ը:

Տեսական ծրագրավորումը հավատարիմ է հրապարակման ուղղվածությանը, որն ուղղված է ծրագրավորման և համակարգչային գիտության բնագավառում գիտափորձերի արդյունքների համադրելիությանը: Ծրագրավորումը փորձում է արտահայտել իր ֆորմալ մոդելները, ցույց տալ դրանց նշանակությունն ու հիմնարարությունը։ Այս մոդելները ժառանգեցին հարակից մաթեմատիկական հասկացությունների հիմնական հատկանիշները և հաստատվեցին որպես համակարգչային գիտության ալգորիթմական մոտեցում: Փաստաթղթերի վրա հիմնված կոնստրուկցիաների ցանկությունը և դրանց արդյունավետության, հավաստիության, ճշտության, կոռեկտության և ծրագրերի սխեմաների և տեքստերի այլ պաշտոնական հարաբերությունների գնահատումը հիմք է ծառայել կառուցվածքային ծրագրավորման և ծրագրային ապահովման մշակման գործընթացի հուսալիությանը հասնելու այլ մեթոդների համար, օրինակ՝ գրագետ ծրագրավորում։ Algol-ի և Pascal-ի ստանդարտ ենթաբազմությունները, որոնք ծառայել են որպես աշխատանքային նյութ ծրագրավորման տեսության համար, փոխարինվել են կիրառական լեզուներով, որոնք ավելի հարմար են փորձերի համար, ինչպիսիք են ML, Miranda, Scheme, Haskell և այլն: Այժմ նրանց միացել են նորարարությունները C-ում և Java-ում:

Ֆունկցիոնալ ծրագրավորումը ձևավորվել է որպես հարգանքի տուրք արհեստական ​​ինտելեկտի ուսումնասիրության և զարգացման մաթեմատիկական կողմնորոշմանը և համակարգչային գիտության նոր հորիզոնների զարգացմանը: Տեղեկատվության ներկայացման վերացական մոտեցում, գործառույթների կառուցման հակիրճ, ունիվերսալ ոճ, գործառույթների տարբեր կատեգորիաների կատարման միջավայրի հստակություն, ռեկուրսիվ կառուցվածքների ազատություն, վստահություն մաթեմատիկոսի և հետազոտողի ինտուիցիայի նկատմամբ, խուսափելով ժամանակից շուտ բեռից։ Հիշողության տեղաբաշխման անսկզբունքային խնդիրների լուծում, սահմանումների շրջանակի անհիմն սահմանափակումների մերժում - այս ամենը Ջոն Մաքքարթին կապում է Lisp լեզվի գաղափարին: Lisp-ի առաջին իրագործումների խոհունությունն ու մեթոդական կայունությունը թույլ տվեցին արագ փորձ ձեռք բերել նոր խնդիրներ լուծելու և դրանք պատրաստել կիրառական և տեսական ծրագրավորման համար: Ներկայումս կան հարյուրավոր ֆունկցիոնալ ծրագրավորման լեզուներ, որոնք կենտրոնացած են տարբեր դասերի առաջադրանքների և տեխնիկական միջոցների տեսակների վրա:

Ծրագրավորման հիմնական պարադիգմները մշակվել են, քանի որ լուծվող առաջադրանքների բարդությունը մեծացել է: Տեղի ունեցավ ծրագրավորման միջոցների և մեթոդների շերտավորում՝ կախված համակարգչային տեղեկատվության մշակման գործընթացների կազմակերպման տեխնիկական մանրամասների ուսումնասիրության խորությունից և ընդհանրությունից։ Ի հայտ են եկել ծրագրավորման տարբեր ոճեր, որոնցից առավել հասուն են մեքենայական, համակարգերը, տրամաբանական, տրանսֆորմացիոն և բարձր արդյունավետության զուգահեռ ծրագրավորումը։

Մեքենա-ուղղված ծրագրավորումը բնութագրվում է համակարգչի կազմակերպման ապարատային մոտեցմամբ, որն ուղղված է ցանկացած ապարատային հնարավորությունների հասանելիությանը: Ուշադրության կենտրոնում է ապարատային կազմաձևումը, հիշողության վիճակը, հրամանները, կառավարման փոխանցումները, իրադարձությունների հաջորդականությունը, բացառությունները և անակնկալները, սարքի արձագանքման ժամանակը և պատասխանի հաջողությունը: Assembler-ը որոշ ժամանակ առաջ դասակարգվում էր Pascal-ի և C-ի կողմից որպես ընտրության տեսողական միջոց, նույնիսկ միկրոծրագրավորման ոլորտում, սակայն օգտատիրոջ միջերեսի բարելավումները կարող են վերականգնել նրա դիրքը:

Համակարգի ծրագրավորումը վաղուց զարգացել է ծառայության և մաքսային աշխատանքի ճնշման ներքո: Նման աշխատատեղերին բնորոշ արտադրական մոտեցումը հիմնված է վերարտադրվող գործընթացների և կայուն ծրագրերի նախապատվության վրա, որոնք նախատեսված են կրկնակի օգտագործման համար: Նման ծրագրերի համար հիմնավորված են կոմպիլյացիայի մշակման սխեման, հատկությունների ստատիկ վերլուծություն, ավտոմատացված օպտիմալացում և կառավարում: Այս ոլորտում գերակշռում է ծրագրավորման հրամայական-ընթացակարգային ոճը, որը կիրառական ծրագրավորման օպերատորի ոճի ուղղակի ընդհանրացումն է։ Այն թույլ է տալիս որոշակի ստանդարտացում և մոդուլային ծրագրավորում, բայց այն գերաճած է բավականին բարդ կառուցվածքներով, բնութագրերով, փորձարկման մեթոդներով, ծրագրերի ինտեգրման գործիքներով և այլն: Արդյունավետության և հուսալիության պահանջների կոշտությունը բավարարվում է մասնագիտական ​​գործիքների մշակմամբ, որոնք օգտագործում են բարդ ասոցիատիվ իմաստային էվրիստիկա, ինչպես նաև սինթակտիկորեն վերահսկվող նախագծման և ծրագրերի ստեղծման մեթոդներ: Նման գործիքների անվիճելի ներուժը գործնականում սահմանափակված է զարգացման բարդությամբ. առաջանում է որակավորման պահանջ:

Բարձր արդյունավետությամբ ծրագրավորումն ուղղված է կարևորագույն խնդիրների լուծմանը առավելագույն արդյունավետության հասնելուն: Համակարգչի աշխատանքի բնական պաշարը զուգահեռ գործընթացներն են: Նրանց կազմակերպումը պահանջում է ժամանակային հարաբերությունների մանրամասն դիտարկում և գործողությունների կառավարման ոչ պարտադիր ոճ: Սուպերհամակարգիչները, որոնք աջակցում էին բարձր կատարողական հաշվարկներին, պահանջում էին հատուկ համակարգային ծրագրավորման տեխնիկա: Զուգահեռ ճարտարապետների համար համակարգերի և գործընթացների ներկայացման գրաֆիկական ցանցային մոտեցումը արտահայտվել է մասնագիտացված զուգահեռ ծրագրավորման լեզուներով և գերկոմպիլյատորներով, որոնք հարմարեցված են առաջադրանքի մակարդակի գործընթացների վերացական հիերարխիան քարտեզագրելու իրական ապարատային պրոցեսորների հատուկ տարածական կառուցվածքին:

Տրամաբանական ծրագրավորումը առաջացել է որպես ֆունկցիոնալ ծրագրավորման պարզեցում մաթեմատիկոսների և լեզվաբանների համար, որոնք լուծում են խորհրդանշական մշակման խնդիրներ։ Հատկապես գրավիչ է ոչ դետերմինիզմը որպես հայեցակարգային հիմք օգտագործելու հնարավորությունը, որն ազատում է բանաձևերի մշակումը ծրագրավորելու ժամանակից շուտ պատվիրելուց։ Եկամուտներով պրոցեսների առաջացման արտադրական ոճը բավականաչափ բնականություն ունի մասնագետների կողմից ֆորմալացված գիտելիքները հստակեցնելու լեզվական մոտեցման համար և նվազեցնում է մեկնարկային արգելքը:

Տրանսֆորմացիոն ծրագրավորումը մեթոդաբանորեն համակցում էր ծրագրերի օպտիմալացման, մակրոգեներացիայի և մասնակի հաշվարկման տեխնիկան։ Այս ոլորտում կենտրոնական հայեցակարգը տեղեկատվության համարժեքությունն է: Այն դրսևորվում է ծրագրերի և գործընթացների փոխակերպումների սահմանման, փոխակերպումների կիրառելիության չափանիշների որոնման, դրանց օգտագործման ռազմավարության ընտրության մեջ։ Խառը գնահատում, հետաձգված գործողություններ, ծույլ ծրագրավորում, հետաձգված գործընթացներ և այլն: օգտագործվում են որպես լրացուցիչ որոշ պայմաններում տեղեկատվության մշակման արդյունավետությունը բարելավելու մեթոդներ:

Ծրագրավորման լայնածավալ մոտեցումները բնական պատասխան են ապարատային և համակարգչային ցանցերի կատարողականի արմատական ​​բարելավմանը: Կատարվում է հաշվողական սարքավորումների անցում տեխնիկական գործիքների դասից կենցաղային տեխնիկայի դասի։ Հիմք կար ծրագրավորման մոտեցումների թարմացման, ինչպես նաև հին գաղափարների վերականգնման հնարավորության համար, որոնք թույլ էին զարգացել համակարգիչների ցածր արտադրունակության և արդյունավետության պատճառով: Հետաքրքիր է ծրագրավորման հետազոտական, էվոլյուցիոն, ճանաչողական և հարմարվողական մոտեցումների ձևավորումը, իրական տեղեկատվական ռեսուրսների և համակարգչային ներուժի ռացիոնալ զարգացման հեռանկարի ստեղծումը:

Պրոֆեսիոնալ, կրթական և սիրողական ծրագրավորման կրթական-խաղային ոճով հետախուզական մոտեցումը կարող է խթանել որոնման հնարամտությունը բարելավելու ծրագրավորման տեխնոլոգիան, որը չի հաղթահարել ճգնաժամային երևույթները նախորդ տարրերի բազայի վրա: Ծրագրի մշակման շարժական ոճով էվոլյուցիոն մոտեցումը բավականին հստակ տեսանելի է օբյեկտի վրա հիմնված ծրագրավորման հայեցակարգում, որն աստիճանաբար վերաճում է առարկայական ծրագրավորման: Սահմանումների կրկնակի օգտագործումը և օբյեկտների հատկությունների ժառանգումը կարող է երկարացնել վրիպազերծված տեղեկատվական միջավայրերի կյանքի ցիկլը, բարելավել դրանց հուսալիությունը և օգտագործման հեշտությունը:

Բաց համակարգերի վիզուալ-ինտերֆեյսի մշակման փոխգործունակ ոճով ճանաչողական մոտեցումը և նոր աուդիո-վիդեո գործիքների և ոչ ստանդարտ սարքերի օգտագործումը ուղիներ է բացում բարդ տեղեկատվության ընկալումը բարձրացնելու և դրա համարժեք մշակումը պարզեցնելու համար:

Անհատականացված տեղեկատվական համակարգերի անհատական ​​նախագծման էրգոնոմիկ ոճով հարմարվողական մոտեցումը համակարգչային գիտնականներին հնարավորություն է տալիս գրագետ ծրագրավորել, կազմակերպել և իրական ժամանակում ապահովել մարդկային գործոնի նկատմամբ զգայուն տեխնոլոգիական գործընթացներ: Ծրագրավորման պարադիգմայի զարգացման ուղղությունը արտացոլում է տեղեկատվական համակարգերի մշակմամբ և կիրառմամբ հետաքրքրված մարդկանց շրջանակի փոփոխությունը։ Շատ հասկացություններ, որոնք կարևոր են ծրագրավորման պրակտիկայի համար, ինչպիսիք են իրադարձությունները, բացառությունները և սխալները, կոնստրուկցիաների պոտենցիալը, հիերարխիան և ուղղանկյունությունը, էքստրապոլացիան և ծրագրի աճի կետերը, որակի չափումը և այլն: չեն հասել վերացականության և ֆորմալացման բավարար մակարդակի։ Սա թույլ է տալիս կանխատեսել ծրագրավորման պարադիգմների զարգացումը և ընտրել ուսումնական նյութ բաղադրիչի ծրագրավորման տեսանկյունից: Եթե ​​բազմակի օգտագործման բաղադրիչները մեկուսացնելու ավանդական միջոցներն ու մեթոդները ենթարկվում էին մոդուլյարության չափանիշին, որը հասկացվում է որպես նվազագույն ինտերֆեյսի օպտիմալ ընտրություն առավելագույն ֆունկցիոնալությամբ, ապա ժամանակակից տարրերի բազան թույլ է տալիս գործարկել պարզ գործողություններ կատարող բազմակի կոնտակտային հանգույցներ: Բայց այս բոլոր տեսակներին ու ծրագրավորման պարադիգմներին մենք կարող ենք ծանոթանալ նույնիսկ Վիքիպեդիայի միջոցով։ Ներկայումս ծրագրավորման մշակման շատ լայն շրջանակ կա տարբեր ուղղություններով։

Այսօր մենք կհասկանանք, թե ինչ են ծրագրավորման պարադիգմները և դրանցից յուրաքանչյուրի տարբերակիչ առանձնահատկությունները:

Պարադիգմայի սահմանումը սովորաբար հնչում է այսպես.

Պարադիգմները սկզբունքների, գաղափարների և հասկացությունների մի շարք են, որոնք սահմանում են համակարգչային ծրագիր գրելու ոճը:

Հարկ է նշել նաև, որ պարադիգմներ կան ոչ միայն ծրագրավորման, այլ նաև փիլիսոփայության մեջ և այլն։

Ելնելով սահմանումից՝ կարող ենք ասել, որ ծրագրավորման պարադիգմը համակարգչային ծրագիր գրելու սկզբունքների որոշակի փաթեթ է։

Ծրագրավորման պարադիգմների տեսակները

Այնպես ստացվեց, որ շատ ծրագրավորողներ առաջարկեցին իրենց սկզբունքները, ծրագիր գրելու եղանակները, և արդյունքում առաջացան մեծ թվով պարադիգմներ։

Մենք թվարկում ենք դրանցից ամենահայտնիները.

  • Իմպերատիվ ծրագրավորում
  • Կառուցվածքային ծրագրավորում
  • Դեկլարատիվ ծրագրավորում
  • Օբյեկտ ուղղված ծրագրավորում

Փաստորեն, կան շատ այլ պարադիգմներ, որոնք մենք այստեղ չենք թվարկել, մենք միայն լուսաբանում ենք դրանցից ամենահայտնին:

Եկեք համառոտ նայենք դրանցից յուրաքանչյուրին:

Իմպերատիվ ծրագրավորում

Հենց առաջին պարադիգմը, որը ձևավորվել է համակարգիչների հայտնվելուց անմիջապես հետո։

անգլերենից հրամայական- պատվեր

Իմպերատիվ ծրագրավորման տարբերակիչ առանձնահատկությունները.

սկզբնաղբյուրում գրված են հրամանի «պատվերները», և ոչ դասերը, ինչպես, ի տարբերություն, օրինակ, օբյեկտի վրա հիմնված ծրագրավորման:

Բոլոր հրահանգները պետք է կատարվեն հաջորդաբար, մեկը մյուսի հետևից (օրինակ, մենք չենք կարող անցնել կոդի մի հատվածից մյուսը)

Հրահանգները կատարելուց հետո տվյալները կարող են գրվել հիշողության մեջ և կարդալ հիշողությունից:

Պարադիգմայի լեզուների ներկայացուցիչներ՝ մեքենա (երկուական) կոդեր, ասամբլեր, ֆորթրան, ալգոլ, կոբոլ

Կառուցվածքային ծրագրավորում

առաջարկել է այս մեթոդը հոլանդացի գիտնականի կողմից

Edsger Dijkstra 1930 - 2002 թթ

Բայց կառուցվածքային ծրագրավորման հիմնական հայեցակարգը հայեցակարգն է բլոկներև հիերարխիկ կառուցվածքը և որն օգտագործում է երեք հիմնական հսկիչ կառուցվածք.

  • հաջորդականություն
  • ճյուղավորվող

Կառուցվածքային ծրագրավորումը ունի նաև 7 ​​սկզբունքներ, որոնք նկարագրված են Դեյկստրայի կողմից.

  1. goto հայտարարությունն օգտագործելու լիակատար ձախողում; *
  2. ցանկացած ծրագիր հիմնված է երեք կառավարման կառույցների հաջորդականության, ցիկլի և ճյուղավորման վրա.
  3. հիմնական կառավարման կառույցները կարող են բույն դրվել միմյանց մեջ, ինչպես ցանկանում եք.
  4. Կրկնվող բաղադրիչներ, ձևաչափեր որպես ենթածրագրեր;
  5. յուրաքանչյուր տրամաբանական կառուցվածք պետք է ձևակերպվի այսպես արգելափակում;
  6. բոլոր կառույցները պետք է ունենան մեկ մուտք և մեկ ելք, և ոչ ավելին.
  7. ծրագրի մշակումը պետք է ընթանա քայլ առ քայլ «սանդուղք» (վերևից վար մեթոդ)

* —
goto-ն անվերապահ թռիչք օպերատոր է, որը լայնորեն կիրառվել է 1970-ականներին

Դեկլարատիվ ծրագրավորում

խնդրի լուծման հստակեցում է և նկարագրում է, թե որն է խնդիրը և աշխատանքից ակնկալվող արդյունքը:

Ի տարբերություն հրամայական ծրագրավորման, քանի որ դեկլարատիվ ծրագրավորումը նկարագրում է ինչանել, և մեկ այլ ինչպեսանել.

Օբյեկտ ուղղված ծրագրավորում (OOP)

Սա ամենատարածված և հաճախ օգտագործվող պարադիգմն է, որն ընդունվել է ամբողջ աշխարհում գրեթե բոլոր ծրագրավորողների կողմից: Ամբողջ արդյունաբերական ծրագրավորումը կառուցված է դրա վրա: Հիմնական գաղափարը ծրագիրն օբյեկտների տեսքով ներկայացնելն է, որն իր հերթին ներկայացնում է դասի օրինակ, իսկ դասերն իրենց հերթին կազմում են ժառանգական հիերարխիա։

OOP-ի հիմնական հասկացությունները

Տվյալների վերացում- կարևոր տեղեկատվությունը կարևորելը և այն աննշանից առանձնացնելը.

Էկապսուլյացիա- սա հատկություն է, որը թույլ է տալիս միավորել տվյալները, մեթոդները դասում

Ժառանգություն- հատկություն, որը թույլ է տալիս ստեղծել նոր դաս՝ հիմնվելով հինի վրա (ժառանգել նրա բոլոր հատկությունները)

Պոլիմորֆիզմ- և այս հատկությունը թույլ է տալիս օգտագործել նույն ինտերֆեյս ունեցող օբյեկտները

Եվ թվում էր, թե OOP ոճով դիզայնի և ծրագրավորման անհրաժեշտությունը ոչ ոքի կողմից չէր վիճարկվում։ Բայց, այնուամենայնիվ, ժամանակի ընթացքում թյուրիմացության մեջ ընկա։ Սա կլինի զուտ պատմական տեսական հոդված։ Իհարկե, նույնիսկ չփորձելով լուսաբանել թեմայի ողջ լայնությունը։ Բայց սա, այսպես ասած, ուղերձ է երիտասարդ ծրագրավորողին, ով կարդում է վերևը և չի կարող ընտրել, թե որ սկզբունքներն ու կանոնները պետք է հետևի, ինչն է առաջնային և երկրորդական:

Այս թեմայի վերնագիրը հիմա շատերի համար կարող է շատ հակասական թվալ (և ավելի շուտ միտումնավոր սադրիչ, բայց բիզնեսի համար :)): Բայց այնուամենայնիվ, մենք այստեղ կփորձենք հիմնավորել սա և հասկանալ, թե ինչ հատկություններ պետք է ունենա ծրագրավորման պարադիգմը, որպեսզի իրավունք ունենա պարադիգմա կոչվելու։

Ես միայն հարցնում եմ, թե արդյոք այն կարդում եք անկյունագծով - մեկնաբանեք զուսպ։

Ի՞նչ է մեզ ասում Ֆլոյդը պարադիգմների մասին:

«Ծրագրավորման պարադիգմ» տերմինը հորինել է Ռոբերտ Ֆլոյդը («R. W. Floyd». «Communications of the ACM», 22(8):455-460, 1979. քսան տարի (1966-1985), M.: MIR, 1993 թ. ) 1979-ի իր դասախոսության մեջ նա ասում է հետևյալը.

Ծրագրավորման պարադիգմայի ծանոթ օրինակ է կառուցվածքային ծրագրավորումը, որը, թվում է, գերիշխող պարադիգմն է ծրագրավորման մեթոդաբանության մեջ: Այն բաժանված է երկու փուլի. Առաջին փուլում՝ վերևից ներքև նախագծում, խնդիրը բաժանվում է փոքր թվով ավելի պարզ ենթախնդիրների: Այս աստիճանական հիերարխիկ տարրալուծումը շարունակվում է այնքան ժամանակ, քանի դեռ կան հստակ ենթախնդիրներ, որոնք բավական պարզ են ուղղակիորեն լուծելու համար: Կառուցվածքային ծրագրավորման պարադիգմի երկրորդ փուլը ենթադրում է աշխատանք դեպի վեր՝ կոնկրետ առարկաներից և գործառույթներից մինչև ավելի վերացական առարկաներ և գործառույթներ, որոնք օգտագործվում են վերևից ներքև դիզայնով արտադրված մոդուլներում: Բայց կառուցվածքային ծրագրավորման պարադիգմը համընդհանուր չէ: Նույնիսկ նրա ամենաեռանդուն պաշտպանները կխոստովանեն, որ միայն դա բավարար չէ բոլոր դժվար խնդիրները հեշտացնելու համար: Ավելի մասնագիտացված տիպի այլ բարձր մակարդակի պարադիգմները շարունակում են կարևոր մնալ: (Սա ճշգրիտ թարգմանություն չէ, այլ հեղինակային ժողովածու՝ հիմնված Ռ. Ֆլոյդի դասախոսության վրա, բայց հնարավորինս հավատարիմ մնալով նրա խոսքերին: Ձևակերպումը փոխվել և դասավորվել է միայն Ռ. Ֆլոյդի հիմնական գաղափարն ընդգծելու և նրա ներկայացումը հասկանալու համար):

Նա շարունակում է նշել դինամիկ ծրագրավորումը և տրամաբանական ծրագրավորումը՝ դրանք նաև անվանելով պարադիգմներ։ Բայց դրանց յուրահատկությունն այն է, որ դրանք մշակվել են մասնագիտացված առարկայական ոլորտից, գտնվել են հաջողված ալգորիթմներ և կառուցվել են համապատասխան ծրագրային համակարգեր։ Նա շարունակում է ասել, որ ծրագրավորման լեզուները պետք է աջակցեն ծրագրավորման պարադիգմներին։ Եվ միևնույն ժամանակ ցույց է տալիս, որ կառուցվածքային ծրագրավորման պարադիգմը ավելի բարձր մակարդակի պարադիգմ է.

Աբստրակցիայի ավելի բարձր մակարդակի ««անգամ»» պարադիգմը, քան ««կառուցվածքային ծրագրավորումը»» պարադիգմը լեզուների հիերարխիայի կառուցումն է, որտեղ ամենաբարձր մակարդակի լեզվով ծրագրերը գործում են վերացական օբյեկտների վրա և թարգմանում։ դրանք հաջորդ ցածր մակարդակի լեզվով նախատեսված ծրագրերի մեջ:

Բարձրագույն մակարդակի պարադիգմների առանձնահատկությունները

Ինչպես տեսնում ենք, Ռ. Ֆլոյդը նաև պարադիգմները առանձնացրել է ավելի բարձր մակարդակի և ավելի մասնագիտացվածի: Պարադիգմների ո՞ր հատկանիշներն են թույլ տալիս ասել, որ դրանք ավելի բարձր մակարդակի են: Իհարկե, սա դրանց կիրառման հնարավորությունն է տարբեր առարկայական առաջադրանքներում: Բայց ի՞նչն է պարադիգմները կիրառելի առարկայական տարբեր խնդիրների համար: Հարցն այստեղ, իհարկե, օբյեկտիվ խնդրի առանձնահատկությունների մեջ չէ, որը կարելի է լուծել այս կամ այն ​​մոտեցմամբ։ Բոլոր պարադիգմները, որոնք առաջարկում են այս կամ այն ​​մասնագիտացված ձևով ստեղծել ալգորիթմներ, ամենևին էլ պարադիգմներ չեն, դրանք պարզապես հատուկ մոտեցում են ավելի բարձր մակարդակի պարադիգմում:

Եվ կա միայն երկու բարձր մակարդակի պարադիգմ՝ կառուցվածքային ծրագրավորում և նույնիսկ ավելի բարձր մակարդակի, օբյեկտի վրա հիմնված ծրագրավորում: Ընդ որում, այս երկու պարադիգմները բարձր մակարդակում հակասում են միմյանց, իսկ ցածր մակարդակում՝ ալգորիթմների կառուցման մակարդակում, համընկնում են։ Եվ արդեն մոտեցումները (ցածր մակարդակի պարադիգմները), ինչպիսիք են տրամաբանական, դինամիկ, ֆունկցիոնալը, կարող են լավ օգտագործվել կառուցվածքային ծրագրավորման պարադիգմի շրջանակներում, և օգտագործվում են որոշ մասնագիտացումներ, որոնք ի հայտ են եկել՝ ասպեկտ, գործակալ-կողմնորոշված, իրադարձության վրա հիմնված: օբյեկտ-կողմնորոշված ​​ծրագրավորման պարադիգմի շրջանակներում։ Այսպիսով, սա չի նշանակում, որ ծրագրավորողները պետք է իմանան միայն մեկ կամ երկու բարձր մակարդակի պարադիգմ, այլ այլ մոտեցումների իմացությունը օգտակար կլինի ավելի մասնագիտացված, ցածր մակարդակի խնդիր լուծելիս: Բայց միևնույն ժամանակ, երբ դուք պետք է նախագծեք ծրագրակազմ, դուք պետք է սկսեք ավելի բարձր մակարդակի պարադիգմներից և ըստ անհրաժեշտության անցնեք ավելի ցածր մակարդակի: Բայց եթե խնդիր կա ընտրելու, թե որ սկզբունքներին պետք է նախապատվություն տալ, ապա ավելի ցածր մակարդակի պարադիգմների սկզբունքները երբեք չպետք է գերակա լինեն ավելի բարձր մակարդակի պարադիգմների սկզբունքներից: Այսպիսով, օրինակ, կառուցվածքային ծրագրավորման սկզբունքներին չպետք է հետևել ի վնաս օբյեկտի վրա հիմնված ծրագրավորման սկզբունքների, իսկ ֆունկցիոնալ կամ տրամաբանական ծրագրավորման սկզբունքները չպետք է խախտեն կառուցվածքային ծրագրավորման սկզբունքները։ Միակ բացառությունը ալգորիթմների արագությունն է, որը կոմպիլյատորների կողմից կոդի օպտիմալացման խնդիրն է։ Բայց քանի որ միշտ չէ, որ հնարավոր է կառուցել կատարյալ կոմպիլյատորներ, և ավելի բարձր մակարդակի պարադիգմների մեկնաբանությունն, իհարկե, ավելի բարդ է, քան ցածր մակարդակի, երբեմն պետք է գնալ բարձր մակարդակի պարադիգմների սկզբունքները չպահպանելուն։ .

Բայց վերադառնանք մեր հարցին. ի՞նչն է պարադիգմերը կիրառելի տարբեր առարկայական խնդիրների համար: Բայց դրան պատասխանելու համար պետք է պատմական շեղում կատարել։

Կառուցվածքային ծրագրավորման պարադիգմի հիմունքները

Մենք գիտենք, որ կառուցվածքային ծրագրավորման մասին գաղափարներն առաջացել են 1965 թվականին Է. Դեյկստրայի զեկույցից հետո, որտեղ նա հիմնավորել է GOTO օպերատորի մերժումը։ Հենց այս օպերատորը ծրագրերը վերածեց չկառուցվածի (Spaghetti կոդը), և Dijkstra-ն ապացուցեց, որ հնարավոր է ծրագրեր գրել առանց այս օպերատորի օգտագործման, ինչի արդյունքում ծրագրերը դառնում են կառուցվածքային։

Բայց տեսությունը մի բան է, իսկ պրակտիկան՝ մեկ այլ բան։ Այս առումով հետաքրքիր է դիտարկել, թե ինչպիսին էր իրավիճակը մինչև 1975 թ. Սա հստակ երևում է Է. Յոդանի գրքում (): Կարևոր է հաշվի առնել դա, քանի որ այժմ, ավելի քան 30 տարի անց, այն ժամանակ արդեն լավ հայտնի սկզբունքները այժմ նորից հայտնաբերվում և բարձրացվում են նոր աստիճանի: Բայց միևնույն ժամանակ կորում է պատմական համատեքստը, և այդ սկզբունքների կարևորության հիերարխիան՝ որն է առաջնային և երկրորդական։ Ամորֆների այս իրավիճակը շատ լավ բնութագրում է ծրագրավորման ներկա վիճակը։

Բայց ի՞նչ եղավ հետո։ Ինչպես նկարագրում է Յոդանը, ամեն ինչ սկսվում է «Ի՞նչ է նշանակում լավ ծրագիր գրել» հարցին պատասխանելուց: Ահա առաջին չափանիշը, որին պետք է պատասխանի բարձր մակարդակի ծրագրավորման պարադիգմը: Եթե ​​այն ուղղակիորեն չի պատասխանում այս հարցին, բայց ասում է ձեզ, թե ինչպես կարող եք ստանալ ձեր ծրագրի որոշ հետաքրքիր բնութագրեր, ապա դուք գործ ունեք ծրագրավորման ժամանակ ցածր մակարդակի պարադիգմային մոտեցման հետ:

Ծրագրավորման արշալույսին նման մոտեցում կար ծրագրավորողներին ծրագրեր գրելու արագությամբ գնահատելու հարցում։ Սա նշանակո՞ւմ է, որ լավ հաղորդումներ է գրում։ Արդյո՞ք նա վայելում է ղեկավարության հատուկ տրամադրվածությունն ու հարգանքը: Եթե ​​վերջին հարցի պատասխանը դրական է, ապա ծրագրավորման կատարելագործման բոլոր հարցերն ավելի շատ ակադեմիական հետաքրքրություն են ներկայացնում: Բայց ղեկավարությունը կարող է նաև նկատել, որ որոշ գերծրագրավորողներ կարող են շատ արագ ծրագրեր պատրաստել կամ գրել շատ արդյունավետ ծրագրեր, բայց այդ ծրագրերը երբեմն մնում են չֆորմատավորված, անհնար է հասկանալ, պահպանել կամ փոփոխել: Իսկ վերջինս նույնպես շատ ժամանակ է խլում։

Հատկանշական է ծրագրավորողների միջև բավականին բնորոշ վեճ.
* Ծրագրավորող A. «Իմ ծրագիրը տասն անգամ ավելի արագ է, քան ձերը, և այն խլում է երեք անգամ ավելի քիչ հիշողություն»:
* Ծրագրավորող B. «Այո, բայց ձեր ծրագիրը չի աշխատում, բայց իմն է աշխատում»:

Բայց ծրագրերն անընդհատ բարդանում են, և այդ պատճառով մեզ բավարար չէ, որ ծրագիրը միայն աշխատի։ Ծրագրի և անձամբ ծրագրավորողի ճիշտ աշխատանքը ստուգելու համար անհրաժեշտ են որոշակի մեթոդներ: Ընդ որում, սա ոչ թե ծրագրի փորձարկում է, այլ ծրագրի ներքին կազմակերպման իմաստով ծրագրի ճիշտությունը ստուգելու համակարգված ընթացակարգի իրականացում։ Այսինքն՝ նույնիսկ այն ժամանակ, ժամանակակից տերմիններով, խոսում էին կոդի վերանայման մասին (Code review)։

Բացի այդ, արդեն այն ժամանակ խոսվում էր ծրագրի ճկունության մասին՝ դրա փոփոխման, ընդլայնման և փոփոխման պարզության մասին։ Դա անելու համար դուք պետք է անընդհատ պատասխանեք որոշակի տեսակի հարցերին: «Ի՞նչ է տեղի ունենում, եթե մենք ցանկանում ենք ընդլայնել այս աղյուսակը», «Ի՞նչ կլինի, եթե մի օր մենք ցանկանանք սահմանել նոր փոփոխության ծրագիր», «Ի՞նչ կլինի, եթե մենք պետք է փոխենք այս և այն ելքային տվյալների ձևաչափը», «Ի՞նչ կլինի: տեղի է ունենում, եթե ինչ-որ մեկը որոշի այլ կերպ մուտքագրել տվյալներ ծրագրի մեջ»:

Խոսվեց նաև ինտերֆեյսի բնութագրերի կարևորության մասին, այսինքն. յուրաքանչյուր մոդուլի կողմից իրականացվելիք մուտքերի, գործառույթների և ելքերի հստակեցման պաշտոնական մոտեցում:

Բացի այդ, կենտրոնական ուշադրություն է դարձվել մոդուլի չափին և անփոփոխությանը: Ավելին, ինչ վերաբերում է մոդուլի անփոփոխությանը, այն դիտարկվել է ոչ թե ամբողջությամբ, այլ առանձին գործոնների բաշխմամբ.
1. Ծրագրի տրամաբանական կառուցվածքը, այսինքն. ալգորիթմ. Եթե ​​ամբողջ ծրագիրը կախված է ինչ-որ հատուկ մոտեցումից, քանի՞ մոդուլ պետք է փոխվի, երբ ալգորիթմը փոխվի:
2. Մոդուլի փաստարկները կամ պարամետրերը: Նրանք. ինտերֆեյսի բնութագրերի փոփոխություն:
3. Ներքին աղյուսակի փոփոխականներ և հաստատուններ: Շատ մոդուլներ կախված են ընդհանուր աղյուսակներից, եթե նման աղյուսակների կառուցվածքը փոխվի, ապա մենք կարող ենք ակնկալել, որ մոդուլները նույնպես կփոխվեն:
4. Տվյալների բազայի կառուցվածքը և ձևաչափը: Ավելի մեծ չափով այս կախվածությունը նման է վերը նշված ընդհանուր փոփոխականներից և աղյուսակներից կախվածությանը, այն տարբերությամբ, որ գործնական տեսանկյունից ավելի հարմար է տվյալների բազան ծրագրից անկախ համարել։
5. Մոդուլային ծրագրի կառավարման կառուցվածքը. Ոմանք գրում են մոդուլ՝ իսկապես չմտածելով, թե ինչպես է այն օգտագործվելու: Բայց եթե պահանջները փոխվել են. Մոդուլի տրամաբանական կառուցվածքի ո՞ր հատվածը պետք է փոխենք:

Այս և շատ այլ ասպեկտներ (որոնք մենք այստեղ չենք դիտարկել) ընդհանուր առմամբ ձևակերպում են կառուցվածքային ծրագրավորման գաղափարը: Այս ասպեկտների մասին հոգալն այն է, ինչը կառուցվածքային ծրագրավորումը դարձնում է բարձր մակարդակի պարադիգմ:

Օբյեկտ-կողմնորոշված ​​ծրագրավորման պարադիգմի հիմունքները

Ինչպես տեսանք, լավ ծրագրեր կազմակերպելու բոլոր սկզբունքները ընդգրկված են կառուցվածքային ծրագրավորման մեջ: Լավ ծրագրակազմ գրելու մեկ այլ կամ մինչ այժմ անհայտ սկզբունքների մի խումբ կարող է փոխել պարադիգմը: Ոչ Դա ուղղակի կընդլայներ կառուցվածքային ծրագրեր գրելու ուղիներն ու գաղափարախոսությունը, այսինքն. կառուցվածքային ծրագրավորման պարադիգմ.

Բայց եթե բարձր մակարդակի պարադիգմները նախագծված են պատասխանելու այն հարցին, թե ինչպես գրել լավ ծրագիր, և նոր տեխնիկական տեխնիկայի ի հայտ գալը կամ նոր գործոնների դիտարկումը թույլ չի տալիս դուրս գալ կառուցվածքային ծրագրավորման սահմաններից (քանի որ այն կմնա կառուցվածքային, անկախ տեխնիկայի և գործոնների քանակից), ապա ինչն այնուհետև թույլ կտա դուրս գալ այս պարադիգմայի սահմաններից: Իսկապես, ինչպես հայտնի է ընդհանրապես գիտությունից, պարադիգմներն այդքան արագ չեն փոխվում։ Գիտական ​​հեղափոխություններ հազվադեպ են լինում, երբ նախկին պարադիգմը, արդեն գործնականում, առկա տեսական հայացքներից ուղղակի չի կարող բացատրել տեղի ունեցող երեւույթները։ Նմանատիպ իրավիճակ ունենք պարադիգմը կառուցվածքայինից օբյեկտի վրա հիմնվածի փոխելու ժամանակ։

Արդեն ընդունված է, որ օբյեկտ-կողմնորոշված ​​պարադիգմի առաջացման պատճառը ավելի ու ավելի բարդ ծրագրեր գրելու անհրաժեշտությունն էր, մինչդեռ կառուցվածքային ծրագրավորման պարադիգմը որոշակի սահման ունի, որից հետո ծրագիր մշակելը դառնում է անտանելի դժվար: Ահա, օրինակ, Գ.Շիլդտը գրում է.

Ծրագրավորման զարգացման յուրաքանչյուր փուլում մեթոդներն ու գործիքները կարծես թե «զսպում են» ծրագրերի աճող բարդությունը: Եվ յուրաքանչյուր նման փուլում նոր մոտեցումը կլանում էր նախորդներից ամենալավը՝ նշելով ծրագրավորման առաջընթացը։ Նույնը կարելի է ասել OOP-ի մասին։ Մինչ OOP-ը, շատ նախագծեր հասնում էին (և երբեմն գերազանցում էին) այն սահմանը, որից այն կողմ ծրագրավորման կառուցվածքային մոտեցումն այլևս չէր գործում: Ուստի ծրագրերի բարդացման հետ կապված դժվարությունները հաղթահարելու համար անհրաժեշտություն առաջացավ OOP: ()

Հասկանալու համար, թե ինչու հենց օբյեկտի վրա հիմնված ծրագրավորումն էր, որը հնարավորություն տվեց գրել ավելի բարդ ծրագրեր և գործնականում վերացնել բարդության սահմանի առաջացման խնդիրը, եկեք դիմենք OOP-ի հիմնադիրներից մեկին՝ Grady Booch-ին (): Նա սկսում է OOP-ի իր բացատրությունը նրանով, թե ինչ է նշանակում բարդություն և ինչ համակարգեր կարելի է համարել բարդ: Այսինքն՝ նպատակաուղղված մոտենում է բարդ ծրագրեր գրելու հարցին։ Այնուհետև նա անցնում է բարդության և այս բարդությունը հասկանալու մարդկային կարողության փոխհարաբերության հարցին.

Կա ևս մեկ հիմնական խնդիր՝ մարդկային հնարավորությունների ֆիզիկական սահմանափակումները բարդ համակարգերի հետ աշխատելիս։ Երբ մենք սկսում ենք վերլուծել բարդ ծրագրային համակարգը, կան բազմաթիվ բաղադրիչ մասեր, որոնք փոխազդում են միմյանց հետ տարբեր ձևերով, և ոչ համակարգի մասերն իրենք, ոչ էլ դրանց փոխազդեցության ձևերը որևէ նմանություն չեն ցույց տալիս: Սա անկազմակերպ բարդության օրինակ է։ Երբ մենք սկսում ենք համակարգ կազմակերպել դրա նախագծման գործընթացում, անհրաժեշտ է միանգամից շատ բաների մասին մտածել։ Ցավոք, մեկ մարդ չի կարող միաժամանակ հետևել այս ամենին։ Միլլերի նման հոգեբանների փորձերը ցույց են տալիս, որ տեղեկատվության կառուցվածքային միավորների առավելագույն քանակը, որին կարող է հետևել մարդու ուղեղը, մոտավորապես յոթ գումարած կամ մինուս երկու է: Այսպիսով, մենք կանգնած ենք լուրջ երկընտրանքի առաջ. ««Ծրագրային համակարգերի բարդությունը մեծանում է, բայց մեր ուղեղի կարողությունը հաղթահարելու այս բարդությունը սահմանափակ է: Ինչպե՞ս կարող ենք դուրս գալ այս դժվարությունից»:

Այնուհետև նա խոսում է տարրալուծման մասին.

Տարրալուծում. ալգորիթմակա՞ն, թե՞ օբյեկտակենտրոն: Բարդ համակարգի ո՞ր տարրալուծումն է ավելի ճիշտ՝ ալգորիթմո՞վ, թե՞ առարկաներով: Այս հարցին կա մի որսորդություն, և դրա ճիշտ պատասխանն այն է, որ երկու կողմերն էլ կարևոր են: Ալգորիթմական տարանջատումը կենտրոնանում է տեղի ունեցող իրադարձությունների հերթականության վրա, մինչդեռ օբյեկտների տարանջատումը շեշտում է գործակալները, որոնք կամ օբյեկտներ են կամ գործողության սուբյեկտներ: Այնուամենայնիվ, մենք չենք կարող կառուցել բարդ համակարգ միաժամանակ երկու եղանակով: Մենք պետք է սկսենք համակարգը բաժանելով կամ ալգորիթմներով կամ առարկաներով, իսկ հետո, օգտագործելով ստացված կառուցվածքը, փորձենք խնդիրը դիտարկել այլ տեսանկյունից։ Փորձը ցույց է տալիս, որ ավելի օգտակար է սկսել օբյեկտների քայքայումից: Այս սկիզբը կօգնի մեզ ավելի լավ զբաղվել ծրագրային համակարգերի բարդության կազմակերպմամբ:

Այսպիսով, նա նաև կողմ է օբյեկտի վրա հիմնված սկզբունքներին, քան կառուցվածքային սկզբունքներին, բայց ընդգծում է երկուսի կարևորությունը: Այլ կերպ ասած, կառուցվածքային սկզբունքները պետք է ենթարկվեն օբյեկտի վրա հիմնված սկզբունքներին, որպեսզի մարդկային ուղեղը կարողանա հաղթահարել առաջացող խնդիրների բարդությունը: Նա շարունակում է ընդգծել մոդելի կարևորությունը.

Մոդելի կառուցման կարևորությունը. Մոդելավորումը համատարած է բոլոր ինժեներական առարկաներում, հիմնականում այն ​​պատճառով, որ այն իրականացնում է տարրալուծման, աբստրակցիայի և հիերարխիայի սկզբունքները: Յուրաքանչյուր մոդել նկարագրում է դիտարկվող համակարգի որոշակի հատվածը, և մենք, իր հերթին, կառուցում ենք նոր մոդելներ հների հիման վրա, որոնցում քիչ թե շատ վստահ ենք։ Մոդելները թույլ են տալիս վերահսկել մեր անհաջողությունները: Մենք գնահատում ենք յուրաքանչյուր մոդելի վարքագիծը նորմալ և անսովոր իրավիճակներում, իսկ հետո համապատասխան ճշգրտումներ ենք կատարում, եթե ինչ-որ բան մեզ չի բավարարում։ Առավել օգտակար է ստեղծել մոդելներ, որոնք ուշադրությունը կենտրոնացնում են հենց տիրույթում հայտնաբերված օբյեկտների վրա և ձևավորում են այն, ինչ մենք անվանել ենք օբյեկտի վրա հիմնված տարրալուծում:

Հիմա, եթե ավելի ուշադիր նայեք, կստացվի, որ օբյեկտի վրա հիմնված պարադիգմը ոչ այլ ինչ է, քան ընդհանրապես մոդելավորում, որի ամենակարևոր ասպեկտը առավել հստակ արտահայտել է Ս. Լեմը.

Մոդելավորումը բնության իմիտացիա է՝ հաշվի առնելով նրա մի քանի հատկությունները։ Ինչու՞ միայն մի քանիսը: Մեր անկարողության պատճառով? Ոչ Առաջին հերթին այն պատճառով, որ մենք պետք է պաշտպանվենք տեղեկատվական գերծանրաբեռնվածությունից։ Նման ավելցուկը, սակայն, կարող է նշանակել նաև դրա անմատչելիությունը։ Նկարիչը նկարում է, բայց թեև կարող էինք զրուցել նրա հետ, բայց չգիտենք, թե ինչպես է նա ստեղծում իր աշխատանքները։ Այն մասին, թե ինչ է կատարվում նրա ուղեղում, երբ նկարում է, ինքն էլ չգիտի։ Այս մասին տեղեկությունը նրա գլխում է, սակայն մեզ հասանելի չէ։ Մոդելավորումը պետք է պարզեցվի. մի մեքենա, որը կարող է շատ համեստ պատկեր նկարել, մեզ ավելի շատ բան կպատմի գեղանկարչության նյութական, այսինքն՝ ուղեղային հիմքերի մասին, քան նկարչի նման կատարյալ «մոդելը», որը նրա երկվորյակ եղբայրն է։ Մոդելավորման պրակտիկան ներառում է որոշ փոփոխականների հաշվառում և մյուսների մերժում: Մոդելը և բնօրինակը նույնական կլինեն, եթե դրանցում տեղի ունեցող գործընթացները համընկնեն։ Սա տեղի չի ունենում։ Մոդելի մշակման արդյունքները տարբերվում են իրական զարգացումից։ Երեք գործոն կարող է ազդել այս տարբերության վրա՝ մոդելի պարզեցումը բնօրինակի համեմատ, մոդելի հատկությունները, որոնք խորթ են բնօրինակին և, վերջապես, բուն բնօրինակի անորոշությունը։ («Տեխնոլոգիաների գումարը» աշխատության հատված, Ստանիսլավ Լեմ, 1967)

Այսպիսով, Ս.Լեմը խոսում է աբստրակցիայի մասին՝ որպես մոդելավորման հիմք։ Միևնույն ժամանակ, աբստրակցիան օբյեկտի վրա հիմնված պարադիգմայի հիմնական հատկանիշն է։ Այս մասին G. Butch-ը գրում է.

Խելամիտ դասակարգումը, անկասկած, ցանկացած գիտության մի մասն է: Միխալսկին և Ստեպը նշում են. «Գիտության անբաժանելի խնդիրն է կառուցել դիտարկվող առարկաների կամ իրավիճակների իմաստալից դասակարգում: Նման դասակարգումը մեծապես նպաստում է հիմնական խնդրի ըմբռնմանը և գիտական ​​տեսության հետագա զարգացմանը։ Ինչու՞ է դասակարգումն այդքան դժվար: Մենք դա կապում ենք «կատարյալ» դասակարգման բացակայության հետ, թեև, իհարկե, որոշ դասակարգումներ ավելի լավն են, քան մյուսները: Կումբսը, Ռաֆֆիան և Թրալը պնդում են, որ «աշխարհը առարկայական համակարգերի բաժանելու այնքան եղանակներ կան, որքան գիտնականներ, ովքեր ստանձնում են այդ խնդիրը»: Ցանկացած դասակարգում կախված է թեմայի տեսակետից։ Ֆլոդը և Քարսոնը օրինակ են բերում. «Միացյալ Թագավորությունը... տնտեսագետները կարող են դիտել որպես տնտեսական ինստիտուտ, սոցիոլոգներին՝ որպես հասարակություն, բնապահպաններին՝ որպես բնության մեռնող անկյուն, ամերիկացի զբոսաշրջիկներին՝ որպես տուրիստական ​​գրավչություն, խորհրդային առաջնորդներին՝ որպես ռազմական սպառնալիք, վերջապես։ , մեզնից ամենառոմանտիկները՝ բրիտանացիներս, նման են հայրենիքի կանաչ մարգագետիններին։
"""Գտնել և ընտրել հիմնական աբստրակցիաները.""" Բանալին աբստրակցիան դաս կամ առարկա է, որը տիրույթի բառապաշարի մաս է: ««Առանցքային աբստրակցիաների ամենակարևոր արժեքը կայանում է նրանում, որ դրանք սահմանում են մեր խնդրի սահմանները»»՝ ընդգծել այն, ինչ ներառված է մեր համակարգում և, հետևաբար, մեզ համար կարևոր, և վերացնել ավելորդությունը: Նման աբստրակցիաների ընդգծման խնդիրը հատուկ է խնդրահարույց տարածքին։ Գոլդբերգի խոսքով՝ «օբյեկտների ճիշտ ընտրությունը կախված է հայտի նպատակից և մշակվող տեղեկատվության մանրամասնության աստիճանից»։

Ինչպես նշեցինք, առանցքային աբստրակցիաների սահմանումը ներառում է երկու գործընթաց՝ բացահայտում և գյուտ: Մենք բացահայտում ենք աբստրակցիաներ՝ լսելով տիրույթի փորձագետներին. եթե փորձագետը խոսում է դրա մասին, ապա այս աբստրակցիան սովորաբար իսկապես կարևոր է: Ստեղծելով՝ մենք ստեղծում ենք նոր դասեր և օբյեկտներ, որոնք պարտադիր չէ, որ տիրույթի մաս լինեն, բայց օգտակար են համակարգի նախագծման կամ ներդրման համար: Օրինակ, բանկոմատից օգտվողն ասում է «հաշիվ, հանիր, ավանդ»; այս տերմինները տիրույթի բառապաշարի մի մասն են: Համակարգի նախագծողը օգտագործում է դրանք, բայց ավելացնում է իրը, օրինակ՝ տվյալների բազան, էկրանի կառավարիչը, ցուցակը, հերթը և այլն։ Այս հիմնական աբստրակցիաները այլևս չեն ստեղծվում առարկայական տարածքով, այլ դիզայնով:

Հիմնական աբստրակցիաները ընդգծելու ամենահզոր միջոցը խնդիրն արդեն հայտնի դասերի և օբյեկտների կրճատումն է:

Այսպիսով, օբյեկտ-կողմնորոշված ​​պարադիգմը դառնում է բարձր մակարդակի պարադիգմ և գերակայում է կառուցվածքային ծրագրավորման պարադիգմի սկզբունքներին, քանի որ այն զբաղվում է իրականության մոդելավորմամբ, առարկայական ոլորտների մոդելներ կառուցելով այս ոլորտների մասնագետների լեզվով: Եթե ​​դուք դա անտեսեք՝ հանուն լավ ծրագիր գրելու, որը հեշտ կլինի փոփոխել, ընդլայնել, որը կունենա հստակ միջերեսներ և անկախ մոդուլներ, դուք կվերադառնաք կառուցվածքային ծրագրավորման պարադիգմայի մակարդակին: Ձեր ծրագիրը լավ կլինի բոլորի համար, բայց դա հնարավոր չի լինի հասկանալ, քանի որ այն չի համապատասխանի իրականությանը, այն կբացատրվի միայն ձեզ հայտնի տերմիններով, իսկ թեմայի ոլորտին տիրապետող մասնագետը չի կարողանա. հասկանալ ծրագիրը առանց ձեր օգնության: Ի վերջո, դժվարությունը կնվազի շատ նեղ միջակայքում, թեև լավ ծրագիր եք կազմակերպել։ Բայց դա ծրագիրն է, ոչ թե մոդելը: Մոդելի բացակայությունը կամ դրա միայն մակերեսային ներկայացումը «կպայթեցնի» ձեր լավ ծրագիրը ներսից, և թույլ չի տա հետագայում այն ​​զարգացնել և պահպանել։ Երբ դուք ներկայացնում եք դասեր, որոնց աբստրակցիաները գոյություն չունեն, երբ այդ դասերը զուտ համակարգային են և կապ չունեն առարկայի հետ, երբ դրանք ներկայացվում են միայն այլ դասերի փոխազդեցության հոսքերը պարզեցնելու համար, ձեր ծրագրաշարը դառնում է «մորուքով», և եթե նման տարածքների հետևում չհետևեն ռեֆակտորինգին, մի գեղեցիկ պահի, ձեր ծրագրաշարի զարգացումը կդադարի, և դա անհնարին կդառնա. դու՞):

թարմացնելՄտածեցի՝ թեման սուր է, չեմ մեկնաբանի։ Հոդվածում նշել եմ փաստերը, բայց չեմ ուզում իջնել հոլիվարի մակարդակի։ Եթե ​​սա չօգնեց մտածել, ապա դա նշանակում է, որ այս անգամ ձեր բախտը չի բերել: Իսկապես, կառուցողական կլինի, եթե հակափաստարկներ գրեք առանձին հոդվածում։ Ես պարտավորություն չեմ ստանձնում ոչնչացնել զանգվածային կարծրատիպերը.

Այո, և նաև, որպեսզի պարզ լինի, ես որոշեցի հրապարակել այստեղ քննարկումներից հետո Եկեք ծրագրենք Rosenblatt-ի պերցեպտրոնը: , որտեղ ակնհայտորեն պարզ դարձավ, որ ֆունկցիոնալ ծրագրավորումը, երբ OOP-ում վատ մոդել կառուցելիս, ավելի վատ է աշխատում, քան երբևէ։ Իսկ այն, որ նրանք պարծենում են սուպեր արագությամբ, հորինվածք է, իրականում կարևոր է ճիշտ մոդելը։ Որոշ (համեմատաբար ոչ շատ նման առաջադրանքների համար) ֆունկցիոնալ ծրագրավորումը կարող է հաջողակ լինել, բայց կարիք չկա այն օգտագործել ամենուր, որտեղ այն ոչ մի լավ բան չի բերում: Դե, կամ այդպես, կարո՞ղ եք այնտեղ քննարկված նյութը գրել ՄԻԱՅՆ ֆունկցիոնալ ոճով և այնպես, որ այն ավելի արագ աշխատի, քան OOP իրադարձությունների դեպքում:

Պիտակներ. Ավելացնել պիտակներ

Դասախոսություն № Ծրագրավորման պարադիգմներ. հրամայական ծրագրավորում.

    Ծրագրավորման պարադիգմայի հայեցակարգը.

    Ծրագրավորման պարադիգմների դասակարգում.

    հրամայական ծրագրավորում.

  1. Ծրագրավորման պարադիգմայի հայեցակարգը.

Ծրագրավորման պարադիգմը մոտեցումների, մեթոդների, ռազմավարությունների, գաղափարների և հասկացությունների մի շարք է, որը որոշում է ծրագրեր գրելու ոճը:

Ծրագրավորման պարադիգմը ժամանակակից ծրագրավորման ոլորտում շատ հաճախ սահմանվում է ծրագրավորողի գործիքակազմով (ծրագրավորման լեզու և օպերացիոն համակարգ):

Ծրագրավորման պարադիգմը ներկայացնում է (և սահմանում), թե ինչպես է ծրագրավորողը տեսնում ծրագրի կատարումը: Օրինակ՝ օբյեկտ-կողմնորոշված ​​ծրագրավորման մեջ ծրագրավորողը ծրագիրը դիտարկում է որպես փոխազդող օբյեկտների մի շարք, մինչդեռ ֆունկցիոնալ ծրագրավորման մեջ ծրագիրը ներկայացվում է որպես ֆունկցիաների գնահատման շղթա։

Որոշակի անձի հավատարմությունը մեկ պարադիգմին երբեմն այնքան ուժեղ է, որ տարբեր պարադիգմների առավելությունների և թերությունների մասին վեճերը համակարգչային շրջանակներում դասակարգվում են որպես այսպես կոչված «կրոնական» պատերազմներ:

Տերմինի պատմություն

«Պարադիգմ» տերմինը, ըստ երևույթին, գիտական ​​և տեխնիկական ոլորտում իր ժամանակակից նշանակությունը պարտական ​​է Թոմաս Կունին և նրա «Գիտական ​​հեղափոխությունների կառուցվածքը» գրքին (տես պարադիգմ): Կունը պարադիգմներ անվանեց գիտական ​​համոզմունքների հաստատված համակարգեր, որոնց շրջանակներում իրականացվում է հետազոտություն: Ըստ Կունի՝ գիտական ​​դիսցիպլինի մշակման գործընթացում մի պարադիգմը կարող է փոխարինվել մյուսով (ինչպես, օրինակ, Պտղոմեոսի երկրակենտրոն երկնային մեխանիկան փոխարինվեց Կոպեռնիկոսի հելիոկենտրոն համակարգով), մինչդեռ հին պարադիգմը դեռ շարունակում է գոյություն ունենալ։ որոշ ժամանակ և նույնիսկ զարգանում է այն պատճառով, որ նրա կողմնակիցներից շատերը այս կամ այն ​​պատճառով չեն կարողանում հարմարվել այլ պարադիգմում աշխատելուն:

«Ծրագրավորման պարադիգմ» տերմինն առաջին անգամ օգտագործել է Ռոբերտ Ֆլոյդը Թյուրինգ մրցանակի իր դասախոսության ժամանակ։

Ֆլոյդը նշում է, որ ծրագրավորման մեջ կարելի է դիտարկել Կունի պարադիգմներին նման մի երևույթ, սակայն, ի տարբերություն նրանց, ծրագրավորման պարադիգմները միմյանց բացառող չեն.

Եթե ​​ծրագրավորման արվեստի առաջընթացը որպես ամբողջություն պահանջում է պարադիգմների մշտական ​​գյուտ և կատարելագործում, ապա առանձին ծրագրավորողի արվեստի կատարելագործումը պահանջում է, որ նա ընդլայնի պարադիգմների իր ռեպերտուարը:

Այսպիսով, ըստ Ռոբերտ Ֆլոյդի, ի տարբերություն Կունի նկարագրած գիտական ​​աշխարհի պարադիգմների, ծրագրավորման պարադիգմները կարելի է համատեղել՝ հարստացնելով ծրագրավորողի գործիքակազմը։

2. Ծրագրավորման պարադիգմների դասակարգում.

Կիրառական ծրագրավորման առաջատար պարադիգմը, որը հիմնված է իմպերատիվ կառավարման և ծրագրի կառուցման ընթացակարգային-օպերատորի ոճի վրա, ժողովրդականություն է ձեռք բերել ավելի քան հիսուն տարի առաջ հաշվողական և տեղեկատվական գործընթացների կազմակերպման մասնագետների բարձր մասնագիտական ​​գործունեության ոլորտում: Վերջին տասնամյակը կտրուկ ընդլայնել է ինֆորմատիկայի աշխարհագրությունը՝ ընդլայնելով այն զանգվածային հաղորդակցության և հանգստի ոլորտ։ Սա փոխում է տեղեկատվական համակարգերի գնահատման չափանիշները և տեղեկատվության մշակման միջոցների և մեթոդների ընտրության հարցում նախապատվությունները:

Ծրագրավորման ընդհանուր պարադիգմները, որոնք առաջացել են համակարգչային ծրագրավորման դարաշրջանի հենց սկզբում, ներառյալ կիրառական, տեսական և ֆունկցիոնալ ծրագրավորման պարադիգմները, ամենակայունն են:

Կիրառական ծրագրավորումը ենթակա է խնդրահարույց կողմնորոշման, որն արտացոլում է տեղեկատվության համակարգչայինացումը և թվային մշակման հաշվողական գործընթացները, որոնք ուսումնասիրվել են համակարգիչների հայտնվելուց շատ առաջ: Այստեղ էր, որ արագորեն ի հայտ եկավ գործնական հստակ արդյունք։ Բնականաբար, նման ոլորտներում ծրագրավորումը քիչ է տարբերվում կոդավորումից, դրա համար, որպես կանոն, բավարար է գործողությունները ներկայացնելու օպերատորի ոճը։ Կիրառական ծրագրավորման պրակտիկայում ընդունված է վստահել ապացուցված ձևանմուշներին և ընթացակարգերի գրադարաններին՝ ռիսկային փորձերից խուսափելու համար: Գնահատվում է գիտական ​​հաշվարկների ճշգրտությունն ու կայունությունը։ Fortran լեզուն կիրառական ծրագրավորման վետերան է: Միայն վերջին տասնամյակում այն ​​այս ոլորտում որոշ չափով զիջել է Pascal-C-ին, իսկ սուպերհամակարգիչների վրա՝ զուգահեռ ծրագրավորման լեզուներին, ինչպիսին է Sisal-ը: [, , , ]

Տեսական ծրագրավորումը հավատարիմ է հրապարակման ուղղվածությանը, որն ուղղված է ծրագրավորման և համակարգչային գիտության բնագավառում գիտափորձերի արդյունքների համադրելիությանը: Ծրագրավորումը փորձում է արտահայտել իր ֆորմալ մոդելները, ցույց տալ դրանց նշանակությունն ու հիմնարարությունը։ Այս մոդելները ժառանգեցին հարակից մաթեմատիկական հասկացությունների հիմնական հատկանիշները և հաստատվեցին որպես համակարգչային գիտության ալգորիթմական մոտեցում: Ծրագրերի սխեմաներում և տեքստերում ապացույցների վրա հիմնված կոնստրուկցիաների ցանկությունը և դրանց արդյունավետության, ճշմարտանման, ճշտության, կոռեկտության և այլ պաշտոնական հարաբերությունների գնահատումը հիմք են ծառայել կառուցվածքային ծրագրավորման [, ] և ծրագրային ապահովման հուսալիությանը հասնելու այլ մեթոդների համար։ զարգացման գործընթաց, օրինակ՝ գրագետ ծրագրավորում։ Algol-ի և Pascal-ի ստանդարտ ենթաբազմությունները, որոնք ծառայում էին որպես աշխատանքային նյութ ծրագրավորման տեսության համար, փոխարինվել են կիրառական լեզուներով, որոնք ավելի հարմար են փորձի համար, ինչպիսիք են ML, Miranda, Scheme և այլ Lisp բարբառներ: Այժմ C-ի և Java-ի ենթաբազմությունները միանում են նրանց:

Ֆունկցիոնալ ծրագրավորումը ձևավորվել է որպես հարգանքի տուրք արհեստական ​​ինտելեկտի ուսումնասիրության և զարգացման մաթեմատիկական կողմնորոշմանը և համակարգչային գիտության նոր հորիզոնների զարգացմանը: Տեղեկատվության ներկայացման վերացական մոտեցում, գործառույթների կառուցման հակիրճ, ունիվերսալ ոճ, գործառույթների տարբեր կատեգորիաների կատարման միջավայրի հստակություն, ռեկուրսիվ կառուցվածքների ազատություն, վստահություն մաթեմատիկոսի և հետազոտողի ինտուիցիայի նկատմամբ, խուսափելով ժամանակից շուտ բեռից։ Հիշողության տեղաբաշխման անսկզբունքային խնդիրների լուծում, սահմանումների շրջանակի անհիմն սահմանափակումների մերժում - այս ամենը կապված է Ջոն Մաքքարթիի Lisp լեզվի գաղափարի հետ: Lisp-ի առաջին իրագործումների խոհունությունն ու մեթոդական կայունությունը թույլ տվեցին արագ փորձ ձեռք բերել նոր խնդիրներ լուծելու և դրանք պատրաստել կիրառական և տեսական ծրագրավորման համար: Ներկայումս կան հարյուրավոր ֆունկցիոնալ ծրագրավորման լեզուներ, որոնք կենտրոնացած են տարբեր դասերի առաջադրանքների և տեխնիկական միջոցների տեսակների վրա: [,,,,,,,]

Ծրագրավորման հիմնական միջոցներն ու մեթոդները մշակվել են լուծվող առաջադրանքների բարդության աճին զուգահեռ։ Տեղի ունեցավ ծրագրավորման պարադիգմների շերտավորում՝ կախված համակարգչային տեղեկատվության մշակման գործընթացների կազմակերպման տեխնիկական մանրամասների ուսումնասիրության խորությունից և ընդհանրությունից։ Առաջացել են ծրագրավորման տարբեր ոճեր, որոնցից առավել հասուններն են ցածր մակարդակի (մեքենայի վրա հիմնված), համակարգերը, դեկլարատիվ-տրամաբանական, օպտիմիզացիոն-տրանսֆորմացիոն և բարձր արդյունավետության/զուգահեռ ծրագրավորումը։

Ցածր մակարդակի ծրագրավորումը բնութագրվում է համակարգչի կազմակերպման ապարատային մոտեցմամբ, որն ուղղված է ցանկացած ապարատային հնարավորությունների հասանելիությանը: Ուշադրության կենտրոնում է ապարատային կազմաձևումը, հիշողության վիճակը, հրամանները, կառավարման փոխանցումները, իրադարձությունների հաջորդականությունը, բացառությունները և անակնկալները, սարքի արձագանքման ժամանակը և պատասխանի հաջողությունը: Assembler-ը որոշ ժամանակ առաջ դասակարգվում էր Pascal-ի և C-ի կողմից որպես ընտրության տեսողական միջոց, նույնիսկ միկրոծրագրավորման ոլորտում, սակայն օգտատիրոջ միջերեսի բարելավումները կարող են վերականգնել նրա դիրքը: [,,,]

Համակարգի ծրագրավորումը վաղուց զարգացել է ծառայության և մաքսային աշխատանքի ճնշման ներքո: Նման աշխատատեղերին բնորոշ արտադրական մոտեցումը հիմնված է վերարտադրվող գործընթացների և կայուն ծրագրերի նախապատվության վրա, որոնք նախատեսված են կրկնակի օգտագործման համար: Նման ծրագրերի համար հիմնավորված են կոմպիլյացիայի մշակման սխեման, հատկությունների ստատիկ վերլուծություն, ավտոմատացված օպտիմալացում և կառավարում: Այս ոլորտում գերակշռում է ծրագրավորման հրամայական ընթացակարգային ոճը, որը կիրառական ծրագրավորման օպերատորի ոճի ուղղակի ընդհանրացումն է։ Այն թույլ է տալիս որոշակի ստանդարտացում և մոդուլային ծրագրավորում, բայց այն գերաճած է բավականին բարդ կառուցվածքներով, բնութագրերով, փորձարկման մեթոդներով, ծրագրերի ինտեգրման գործիքներով և այլն: Արդյունավետության և հուսալիության պահանջների կոշտությունը բավարարվում է մասնագիտական ​​գործիքների մշակմամբ, որոնք օգտագործում են բարդ ասոցիատիվ իմաստային էվրիստիկա, ինչպես նաև սինթակտիկորեն վերահսկվող նախագծման և ծրագրերի ստեղծման մեթոդներ: Նման գործիքների անվիճելի ներուժը գործնականում սահմանափակվում է զարգացման բարդությամբ. առաջանում է որակավորման որակավորում:

Բարձր արդյունավետությամբ ծրագրավորումն ուղղված է կարևորագույն խնդիրների լուծմանը առավելագույն արդյունավետության հասնելուն: Համակարգչի աշխատանքի բնական պաշարը զուգահեռ գործընթացներն են: Նրանց կազմակերպումը պահանջում է ժամանակային հարաբերությունների մանրամասն դիտարկում և գործողությունների կառավարման ոչ պարտադիր ոճ: Սուպերհամակարգիչները, որոնք աջակցում էին բարձր կատարողական հաշվարկներին, պահանջում էին հատուկ համակարգային ծրագրավորման տեխնիկա: Զուգահեռ ճարտարապետությունների համար համակարգերի և գործընթացների ներկայացման գրաֆիկական ցանցային մոտեցումը արտահայտվել է մասնագիտացված զուգահեռ ծրագրավորման լեզուներով և գերկոմպիլյատորներով, որոնք հարմարեցված են առաջադրանքի մակարդակի պրոցեսների վերացական հիերարխիան քարտեզագրելու իրական ապարատային պրոցեսորների հատուկ տարածական կառուցվածքին [,, ].

Դեկլարատիվ (տրամաբանական) ծրագրավորումն առաջացել է որպես ֆունկցիոնալ ծրագրավորման պարզեցում մաթեմատիկոսների և լեզվաբանների համար, ովքեր լուծում են խորհրդանշական մշակման խնդիրներ։ Հատկապես գրավիչ է ոչ դետերմինիզմը որպես հայեցակարգային հիմք օգտագործելու հնարավորությունը, որն ազատում է բանաձևերի մշակումը ծրագրավորելու ժամանակից շուտ պատվիրելուց։ Եկամուտներով պրոցեսների ստեղծման արտադրական ոճը բավարար բնականություն ունի մասնագետների կողմից պաշտոնականացված գիտելիքների հստակեցման լեզվական մոտեցման համար և նվազեցնում է տեղեկատվական համակարգերի ներդրման մեկնարկային խոչընդոտը:

Տրանսֆորմացիոն ծրագրավորումը մեթոդաբանորեն համակցում էր ծրագրերի օպտիմալացման, մակրոգեներացիայի և մասնակի հաշվարկման տեխնիկան։ Այս ոլորտում կենտրոնական հայեցակարգը տեղեկատվության համարժեքությունն է: Այն դրսևորվում է ծրագրերի և գործընթացների փոխակերպումների սահմանման, փոխակերպումների կիրառելիության չափանիշների որոնման, դրանց օգտագործման ռազմավարության ընտրության մեջ։ Խառը գնահատում, հետաձգված գործողություններ, ծույլ ծրագրավորում, հետաձգված գործընթացներ և այլն: օգտագործվում են որպես լրացուցիչ որոշ պայմաններում տեղեկատվության մշակման արդյունավետությունը բարելավելու մեթոդներ: [,]

Ծրագրավորման պարադիգմների հետագա զարգացումն արտացոլում է տեղեկատվական համակարգերի կիրառմամբ հետաքրքրված մարդկանց շրջանակի փոփոխությունը: Ծրագրավորման լայնածավալ մոտեցումների ձևավորումը բնական պատասխան է սարքավորումների և համակարգչային ցանցերի կատարողականի արմատական ​​բարելավմանը: Կատարվում է հաշվողական սարքավորումների անցում տեխնիկական գործիքների դասից կենցաղային տեխնիկայի դասի։ Հիմք կար ծրագրավորման մոտեցումների թարմացման, ինչպես նաև հին գաղափարների վերականգնման հնարավորության համար, որոնք թույլ էին զարգացել համակարգիչների ցածր արտադրունակության և արդյունավետության պատճառով: Հետաքրքիր է ծրագրավորման հետազոտական, էվոլյուցիոն, ճանաչողական և հարմարվողական մոտեցումների զարգացումը, իրական տեղեկատվական ռեսուրսների և համակարգչային ներուժի ռացիոնալ զարգացման հեռանկարի ստեղծումը: [,]

Պրոֆեսիոնալ, կրթական և սիրողական ծրագրավորման կրթական-խաղային ոճով հետախուզական մոտեցումը կարող է հնարամտություն հաղորդել ծրագրավորման տեխնոլոգիայի բարելավման գործում, որը չի հաղթահարել ճգնաժամը նախորդ տարրերի բազայի վրա: [,]

Ծրագրի մշակման շարժական ոճով էվոլյուցիոն մոտեցումը միանգամայն հստակ տեսանելի է օբյեկտի վրա հիմնված ծրագրավորման հայեցակարգում, որը աստիճանաբար վերածվում է առարկայական և նույնիսկ էգո-կողմնորոշված ​​ծրագրավորման: Սահմանումների կրկնակի օգտագործումը և օբյեկտների հատկությունների ժառանգումը կարող է երկարացնել վրիպազերծված տեղեկատվական միջավայրերի կյանքի ցիկլը, բարելավել դրանց հուսալիությունը և օգտագործման հեշտությունը: Բաց համակարգերի վիզուալ-ինտերֆեյսի մշակման փոխգործունակ ոճով ճանաչողական մոտեցումը և նոր աուդիո-վիդեո գործիքների և ոչ ստանդարտ սարքերի օգտագործումը ուղիներ է բացում բարդ տեղեկատվության ընկալումը բարձրացնելու և դրա համարժեք մշակումը պարզեցնելու համար: [,]

Անհատականացված տեղեկատվական համակարգերի անհատական ​​նախագծման էրգոնոմիկ ոճով հարմարվողական մոտեցումը համակարգչային գիտնականներին հնարավորություն է տալիս գրագետ ծրագրավորել, կազմակերպել և իրական ժամանակում ապահովել մարդկային գործոնի և համակարգերի փոխանցման նկատմամբ զգայուն տեխնոլոգիական գործընթացներ [,]:

Մեկ ճարտարապետական ​​գծի, ստանդարտ ինտերֆեյսի, տիպիկ ծրագրավորման տեխնոլոգիայի և այլնի գերակայությունը, որն այսօր կայունանում է. հղի է տեղեկատվական տեխնոլոգիաների թարմացման ժամանակ ճարպկության կորստով: Այս առումով հատկապես խոցելի են մարդիկ, ովքեր սովոր են մեկընդմիշտ ամեն ինչ ամուր յուրացնել։ Ծրագրավորման լեզուներ սովորելիս նման խնդիրները շրջանցվում են ծրագրավորման տարբեր լեզուներ միաժամանակ դասավանդելով կամ նախապես ներկայացնելով այն հիմքը, որը սահմանում է քերականական կառուցվածքը ընդհանրացնելու հասկացությունների համար, որոնց փոփոխականությունը դժվար է բռնել պարզեցված ուսուցման օրինակներով: Ֆունկցիոնալ ծրագրավորման ուսումնասիրությունը տալիս է հենց այնպիսի հիմք, որ նպատակաուղղված է ներկայացնելու և վերլուծելու այն պարադիգմները, որոնք մշակվել են գործունեության տարբեր ոլորտներում ծրագրավորման պրակտիկայում՝ մասնագետների տարբեր մակարդակների հետ, ինչը կարող է օգտակար լինել որպես հայեցակարգային հիմք: համակարգչային գիտության նոր երևույթների ուսումնասիրություն.

Ծրագրավորման պարադիգմը մասնագիտական ​​վարքագծի ձևավորման գործիք է։ Ինֆորմատիկան բարձր որակավորում ունեցող տեխնիկական մասնագետների և գիտնականների էլիտայի մասնագիտական ​​ծրագրավորումից անցել է քաղաքակիրթ հասարակության ակտիվ մասի ազատ ժամանակ։ Տեղեկատվական համակարգերի յուրացումը ըմբռնման միջոցով գրագետ գործողությունների և տեխնոլոգիաների պատասխանատու կիրառման նպատակով փոխարինվել է տեղեկատվական միջավայրի վրա քաոսային ազդեցության ինտուիտիվ հմտություններով՝ բախտի համեստ հույսով, առանց գիտելիքի հավակնությունների: Համատեղ կենտրոնների պահպանումը, տեղեկատվության ամբողջականության և տվյալների պատրաստման մասնագիտական ​​աջակցությունը գրեթե ամբողջությամբ նահանջել են անհատական ​​համակարգիչների ինքնասպասարկման, ցանցերի և տարասեռ սերվերների անկախ գործունեությունը տարբեր հաղորդակցությունների փոխազդեցությամբ:

Մշակվող ծրագրերի, մշակվող տվյալների և աշխատանքի վերահսկման միջև հակադրությունը տեղի է տալիս ինտերֆեյսների հասկացությանը, որոնք հարմարեցված են տեղեկատվական հոսքերին մասնակցելու համար, ինչպիսին է նավիգացիան: Նախկին որակի չափանիշները՝ արագությունը, հիշողության խնայողությունը և տեղեկատվության մշակման հուսալիությունը, ավելի ու ավելի են մթագնվում խաղի գրավչությամբ և աշխարհի տեղեկատվական ռեսուրսների հասանելիության լայնությամբ: Որակի և հուսալիության հայտնի երաշխիքներով փակ ծրագրային համակարգերը դուրս են մղվում բաց տեղեկատվական հավաքածուներով՝ կազմի, տեղեկատվության պահպանման և մշակման մեթոդների անկանխատեսելի զարգացմամբ:

Շատ հասկացություններ, որոնք կարևոր են ծրագրավորման պրակտիկայի համար, ինչպիսիք են իրադարձությունները, բացառությունները և սխալները, կոնստրուկցիաների պոտենցիալը, հիերարխիան և ուղղանկյունությունը, էքստրապոլացիան և ծրագրի աճի կետերը, որակի չափումը և այլն: չեն հասել վերացականության և ֆորմալացման բավարար մակարդակի։ Սա թույլ է տալիս կանխատեսել ծրագրավորման պարադիգմների զարգացումը և ընտրել կրթական նյութ բաղադրիչի ծրագրավորման տեսանկյունից (COM / DCOM, Corba, UML և այլն): Եթե ​​բազմակի օգտագործման բաղադրիչները մեկուսացնելու ավանդական միջոցներն ու մեթոդները ենթարկվում էին մոդուլյարության չափանիշին, որը հասկացվում է որպես նվազագույն զուգավորման օպտիմալ ընտրություն առավելագույն ֆունկցիոնալության հետ, ապա ժամանակակից տարրերի բազան թույլ է տալիս գործարկել բազմակի կոնտակտային հավաքույթներ, որոնք կատարում են պարզ գործողություններ: [,,,,,]

Ծրագրավորման պարադիգմի թարմացման այս ախտանիշները որոշում են հիմնական հասկացությունների համակարգում, տեղեկատվության և համակարգչային գիտության հայեցակարգում տեղի ունեցող փոփոխությունների ուղղությունը: Կոմպիլյատորների փոխարեն թարգմանիչների (ավելի ճիշտ՝ թերի կոմպիլյատորների) օգտագործման միտումը, որը հայտարարվել է Java-ի ընդդեմ C-ի հայեցակարգում, և օբյեկտի վրա հիմնված ծրագրավորման հրապուրանքը ընդհանուր ընդունված իմպերատիվ-ընթացակարգային ծրագրավորման ոճի ֆոնի վրա կարելի է դիտարկել որպես անուղղակի շարժում դեպի ֆունկցիոնալ ոճ: Ֆունկցիոնալ բանաձևերի մոդելավորման ուժը բավարար է տարբեր պարադիգմների ամբողջական ներկայացման համար, ինչը թույլ է տալիս դրանց հիման վրա էքստրապոլյացնել ապագայի համար տեղեկատվական գործընթացները կազմակերպելու գործնական հմտությունների ձեռքբերումը:

Անցյալ (20-րդ) դարի կեսերին «ծրագրավորում» տերմինը չէր ենթադրում կապ համակարգչի հետ։ Դուք կարող եք տեսնել գրքի վերնագիրը «Համակարգչային ծրագրավորում»: Այժմ, լռելյայնորեն, այս տերմինը նշանակում է համակարգիչների և համակարգչային ցանցերի գործընթացների կազմակերպում:

Ծրագրավորումը որպես գիտություն էականորեն տարբերվում է մաթեմատիկայից և ֆիզիկայից՝ արդյունքների գնահատման առումով։ Ֆիզիկոսների և մաթեմատիկոսների ստացած արդյունքների մակարդակը սովորաբար գնահատում են նմանատիպ կամ ավելի բարձր որակավորում ունեցող մասնագետները։ Ծրագրավորման արդյունքները գնահատելիս կարևոր դեր է խաղում այն ​​օգտվողի գնահատումը, ով չի հավակնում ունենալ ծրագրավորման գիտելիքներ։ Հետևաբար, ի տարբերություն ավանդական գիտությունների, ծրագրավորման ոլորտի մասնագետները մասամբ կատարում են իրենց մասնագիտական ​​տերմինները օգտագործողի հասկացությունների թարգմանչի գործառույթը։

Ծրագրավորումն ունի արդյունքների հավաստիությունը հաստատելու իր հատուկ մեթոդը՝ դա համակարգչային փորձ է: Եթե ​​մաթեմատիկայի մեջ հուսալիությունը կրճատվում է մինչև ապացույցների վրա հիմնված կառուցվածքներ, որոնք հասկանալի են միայն մասնագետների համար, իսկ ֆիզիկայում՝ վերարտադրվող լաբորատոր փորձի, որը պահանջում է հատուկ սարքավորումներ, ապա համակարգչային փորձը կարող է հասանելի լինել լայն հանրությանը:

Ծրագրավորման մեկ այլ առանձնահատկություն պայմանավորված է արագ զարգացող էլեկտրոնային տեխնոլոգիայից դրա կախվածությամբ: Այդ իսկ պատճառով ծրագրավորման գիտելիքները դասականի և նորաձևության համադրություն են: Նորաձև նորույթների մասին հատուկ գիտելիքները հնանում են, հետևաբար, գիտելիքներն ու հմտությունները արագ թարմացնելու համար անհրաժեշտ է դասական հիմք, որի ուղղակի նպատակն այնքան էլ ակնհայտ չէ օգտագործողների և սկսնակների համար: [,,]

Ծրագրավորումն օգտագործում է մաթեմատիկական ապարատը որպես հայեցակարգային շրջանակ (բազմությունների տեսություն, թվերի տեսություն, հանրահաշիվ, տրամաբանություն, ալգորիթմների և ռեկուրսիվ ֆունկցիաների տեսություն, գրաֆիկների տեսություն և այլն):

Ծրագրի որակի չափանիշները շատ բազմազան են։ Նրանց նշանակությունը էապես կախված է առաջադրանքների դասից և ծրագրերի օգտագործման պայմաններից.

արդյունավետությունը

հուսալիություն

կայունություն

ավտոմատացում

ռեսուրսների արդյունավետ օգտագործում (ժամանակ, հիշողություն, սարքեր, տեղեկատվություն, մարդիկ)

զարգացման և օգտագործման հեշտությունը

ծրագրի տեքստի տեսանելիությունը

ծրագրի ընթացքի դիտարկելիությունը

ախտորոշում, թե ինչ է տեղի ունենում

Չափանիշների դասավորությունը հաճախ փոփոխվում է ծրագրի շրջանակի զարգացման, օգտատերերի հմտությունների աճի, սարքավորումների արդիականացման, տեղեկատվական տեխնոլոգիաների և ծրագրային ապահովման ճարտարագիտության հետ: Տիեզերքի շարունակական զարգացումը, որտեղ խնդիրը լուծվում է, լրացուցիչ պահանջներ է ներկայացնում տեղեկատվական համակարգերի ծրագրավորման ոճին.

ճկունություն

փոփոխելիություն

կատարելագործելիություն

Ծրագրավորումը որպես գիտություն, արվեստ և տեխնոլոգիա ուսումնասիրում և ստեղծագործորեն զարգացնում է ծրագրերի ստեղծման և օգտագործման գործընթացը, որոշում է ծրագրերի կառուցման միջոցներն ու մեթոդները, որոնց բազմազանությանը մենք կծանոթանանք մի շարք հիմնական վերլուծություններին նվիրված հետագա դասախոսություններում: ծրագրավորման պարադիգմներ.

Ակնհայտ դժվարություններ կան ծրագրավորման լեզուները դասակարգելու և որոշելու, թե արդյոք դրանք պատկանում են ծրագրավորման որոշակի պարադիգմին: Այս դասընթացում ծրագրավորման պարադիգմը բնութագրվում է հիմնական իմաստային համակարգերի փոխազդեցությամբ, ինչպիսիք են տվյալների մշակումը, տվյալների պահպանումը և տվյալների մշակման կառավարումը: Այս մոտեցմամբ պարադիգմների երեք կատեգորիա կա.

ցածր մակարդակի ծրագրավորում;

ծրագրավորում բարձր մակարդակի լեզուներով;

գերբարձր մակարդակի լեզուների հիման վրա ծրագրերի պատրաստում.

Ցածր մակարդակի ծրագրավորումը վերաբերում է տվյալների կառուցվածքներին, որոնք թելադրված են ճարտարապետության և սարքավորումների կողմից: Տվյալների և ծրագրերի պահպանման ժամանակ օգտագործվում է գլոբալ հիշողություն և ավտոմատ տվյալների մշակման կառավարման մոդել: [,,,,,,,,,]

Բարձր մակարդակի լեզուներով ծրագրավորումը հարմարեցված է տվյալների կառուցվածքների առաջադրանքին, որոնք արտացոլում են լուծվող խնդիրների բնույթը: Օգտագործվում է տվյալների կառուցվածքների շրջանակների և դրանց մշակման ընթացակարգերի հիերարխիա, որը ենթակա է կառուցվածքային-տրամաբանական կառավարման մոդելին, որը թույլ է տալիս սերտաճել ծրագրի վրիպազերծման գործընթացը: [,,,,,,,]

(ԱԼԳՈՐԻԹՄՆԵՐԻ ԵՎ ԾՐԱԳՐԱՎՈՐՄԱՆ ՀԻՄՈՒՆՔՆԵՐԸ)
  • Ծրագրավորման պարադիգմներ և տեխնոլոգիաներ
    1-ին գլխի նպատակները. Ուսումնասիրել «ծրագրավորման պարադիգմ», «ծրագրավորման տեխնոլոգիա» հասկացությունները։ 2. Ընդհանուր պատկերացում կազմեք ծրագրային ապահովման մշակման ժամանակակից տեխնոլոգիաների մասին: 3. Ուսումնասիրել կառուցվածքային ծրագրի ստեղծման փուլերը. 4. Ծանոթացեք ծրագրային ապահովման մշակման կյանքի ցիկլի մոդելներին ...
  • SE ծրագրավորման պարադիգմներ
    SWEBOK-ը ներառում է մի շարք ծրագրավորման պարադիգմներ Տես՝ Lavrishcheva E. M. Համագումարի տիպի ծրագրավորման պարադիգմներ ծրագրային ապահովման ճարտարագիտության մեջ // UKRProg-2014. Թիվ 2-3. էջ 121-133։ . Նրա ծրագրավորման դասընթացները ներառում են հետևյալը. ընթացակարգային ծրագրավորում(դասընթաց CS1011 «Ծրագրավորման հիմունքներ»),...
    (ՀԱՄԱԼԻՐ ՀԱՄԱԿԱՐԳԵՐԻ ԾՐԱԳՐԱՅԻՆ ՏԵԽՆԻԿԱ ԵՎ ԾՐԱԳՐԱՎՈՐՄԱՆ ՏԵԽՆՈԼՈԳԻԱՆԵՐ)
  • ԾՐԱԳՐԱՎՈՐՄԱՆ ՊԱՐԱԴԻԳՄԵՐ
    ՄՈԴՈՒԼԱՐ ԾՐԱԳՐԱՎՈՐՈՒՄ. ՀԻՄՆԱԿԱՆ ՀԱՍԿԱՑՈՒԹՅՈՒՆՆԵՐԺամանակակից ծրագրավորման առանցքային խնդիրներից է մոդուլների և բաղադրիչների (CPI) վերօգտագործումը։ Դրանք կարող են լինել ծրագրեր, ենթածրագրեր, ալգորիթմներ, առանձնահատկություններ և այլն, որոնք հարմար են նոր, ավելի բարդ PS մշակման համար օգտագործելու համար:
    (ԾՐԱԳՐԱԿԱՆ ՏԵԽՆԻԿԱ. ՊԱՐԱԴԻԳՄԵՐ, ՏԵԽՆՈԼՈԳԻԱՆԵՐ ԵՎ ՏԵՍԱԿԱՆ ԳՈՐԾԻՔՆԵՐ)
  • ընթացակարգային պարադիգմ
    Ընթացակարգային պարադիգմը ժամանակագրական առումով առաջինն էր և գերիշխում էր երկար ժամանակ։ Ներկայումս այն աստիճանաբար իր տեղը զիջում է օբյեկտի վրա հիմնված պարադիգմին, թեև այն դեռ զբաղեցնում է ծրագրային ապահովման մշակման շուկայի մոտ կեսը։ Այն վերաբերում է ծրագրային ապահովման մշակման բոլոր մակարդակներին...
    (ԱԼԳՈՐԻԹՄԱՑՈՒՄ ԵՎ ԾՐԱԳՐԱՎՈՐՈՒՄ)
  • Դեկլարատիվ և ընթացակարգային հիշողություն
    Հիշողության ֆունկցիոնալ կազմակերպման մեկ այլ անկախ միջոց, անկախ մյուսներից, նրա բաժանումն է դեկլարատիվև ընթացակարգային.Հիշողության կազմակերպման այս երկու եղանակները լիովին հասկանալի ֆունկցիոնալ հիմք ունեն։ Դեկլարատիվ հիշողության ձևը նախատեսված է մտածելու համար...
    (Հոգեբանություն և մանկավարժություն)
  • Նոր տեղում

    >

    Ամենահայտնի