Ծրագրավորման_լեզու
Ծրագրավորման լեզուները փոքր և մեծ մասշտաբներով
Ծրագրերը կարող են լուծել տարբեր չափերի խնդիրներ,մի ծրագիր է ստեղծում ժամանակացույցը տվյալ գործառույթի համար, իսկ մյուսը ղեկավարում է խոշոր ձեռնարկության աշխատանքային հոսքը:Ծրագրավորման տարբեր լեզուներ նախատեսված են խնդրի տարբեր սկզբնական մասշտաբի համար և, որ ավելի կարևոր է, տարբեր կերպ են գործ ունենում ծրագրային համակարգերի աճող բարդության հետ:Լեզուի հիմնական որակը, որը որոշում է, թե ինչպես զարգանում է զարգացման բարդությունը, քանի որ համակարգը մեծանում է, աբստրակցիան է, այսինքն ՝ համակարգի բաղադրիչի իմաստը (պահվածքը) առանձնացնելու ունակությունը դրա իրականացման եղանակից:Սկզբնաղբյուրի համար որակական չափիչները, ինչպիսիք են ստուգելիությունը և փոփոխելիությունը, ակնհայտորեն որոշվում են վերօգտագործման գործոնով:Սա կարող է նշանակել միևնույն բաղադրիչի վրա տարբեր գործառույթներ կիրառելը, ինչպես նաև նույն գործառույթը տարբեր բաղադրիչներին կիրառելու ունակությունը:Պարամետրային բազմամորֆային (հատկապես արտանետվող) և դինամիկ տիպի համակարգերը զգալիորեն բարձրացնում են վերօգտագործման գործակիցը.Օրինակ, մի գործառույթ, որը հաշվարկում է զանգվածի երկարությունը, կկիրառվի զանգվածի տիպերի անսահման թվով:Բարձր կարգի լեզուները թույլ են տալիս տարբերակել գործառույթների փոխգործակցության սխեմաները բազմիցս կոչված կոդ բլոկի մեջ, և վերօգտագործումը հասնում է իր բարձրագույն արժեքների ՝ ավելի բարձր մակարդակի լեզու տեղափոխվելիս - անհրաժեշտության դեպքում, հատուկ մշակված այս առաջադրանքի համար - տվյալ դեպքում լեզուն վերաօգտագործվում է ոչ միայն մեկ ֆունկցիա, այլև զարգացումը:Լեզուն կարող է պահպանվել կազմողի բաղադրիչների ինտենսիվ վերաօգտագործմամբ:Լեզուների զարգացման հետ մեկտեղ հայտնվեցին հատուկ (բացառապես ծրագրավորման բնութագրիչ, որը նախկինում չի պահանջվում մաթեմատիկայում) բաղադրիչների և կախվածության կարգեր.մոնադներ, տիպի դասեր, պոլիմորֆային ճյուղեր, ասպեկտներ և այլն, դրանց օգտագործումը թույլ է տալիս ավելի մեծ ֆունկցիոնալություն արտահայտել նույն քանակի կոդով ՝ դրանով իսկ լայնածավալ ծրագրավորումը փոքր մասշտաբով թարգմանելով:Այլ հիմնական հիմնախնդիրները, որոնք կապված են խոշոր համակարգերի բարդության հետ, բխում են հենց ծրագրերից դուրս:Լեզվաբանական իմաստաբանության հատկություններից բացի, վերաօգտագործումը հնարավոր է հասնել համակարգչային համակարգի կամ բարդույթի մոդուլային կառուցվածքի միջոցով:Ավելին, անկախ նրանից, թե որքան ճկուն է լեզուն, աշխատելով հսկայական ծածկագրերով, հատկապես շատ մարդկանց, պահանջում է դրանց տարրալուծումը մոդուլների այս կամ այն ձևով:Մոդուլային կառուցվածքը ենթադրում է ոչ միայն ծրագրի մոնոլիտ աղբյուրի կոդը տրոհել շատ տեքստային ֆայլերի, այլև ավելի մեծ մասշտաբի վերացում, այսինքն ՝ ցանկացած տրամաբանորեն ամբողջական հատվածի համար ինտերֆեյսի սահմանում և թաքցնել դրա իրականացման մանրամասները:Կախված լեզվից կիրառվող շրջանակի կանոններից, լեզուն կարող է կամ չի կարող թույլ տալ ավտոմատ կախվածության հայտնաբերում:Եթե, ըստ կանոնների, հնարավոր է անվանման կոնֆլիկտ, ապա կախվածության ինքնագլխումն անհնար է, և այդ դեպքում մոդուլի վերնագրում դուք պետք է բացահայտորեն նշեք այն մոդուլների անունները, որոնց բաղադրիչները օգտագործվում են դրանում:Որոշ լեզուներ կենտրոնացած են բացառապես փոքր, կառուցվածքայինորեն պարզ ծրագրերի մշակման վրա:Դրանք չեն ապահովում ոչ մոդուլների մշակված համակարգ, ոչ էլ հատուկ բեկորների ճկունություն:C լեզուն ստեղծվեց որպես «բարձր մակարդակի հավաքույթ», որն ինքնին չի ենթադրում բարդությունների որոշակի շեմից վերև գտնվող համակարգերի զարգացում, հետևաբար, դրանում ներառված չէր նաև լայնածավալ ծրագրավորմանն աջակցելը:Բարձր և գերհզոր մակարդակի որոշ լեզուներ (Erlang, Smalltalk, Prolog) հասկացությունները տրամադրում են որպես հիմնական պարզունակ տարրեր, որոնք այլ լեզուներում, կարծես, կառուցողական և ալգորիթմիկ բարդ են (գործընթացներ, դասեր, գիտելիքների հիմքեր) - նման են մի շարք մաթեմատիկական հաշվարկների:Հետևաբար, նման լեզուները հաճախ դիտարկվում են որպես առարկայական:Այնուամենայնիվ, այս լեզուներում այլ ասպեկտների ֆունկցիոնալության ընդլայնումը կարող է դժվար լինել:Ժամանակի ընթացքում կառուցվել են տարբերակներ ՝ դրանք միասին միավորելու համար:Շատ այլ լեզուներ պարունակում են նաև մոդուլային համակարգեր, բայց դրանց մեծ մասը առաջին կարգի մոդուլի լեզուներ են:Lisp- ի և չորրորդ լեզուները թույլ են տալիս ձեզ ստեղծել կամայականորեն և անսահմանափակ համակարգեր, ներառյալ թույլ տալով, որ դուք ինքներդ ձեր մեջ ստեղծեք ներկառուցված առարկայի հատուկ լեզուներ, հետևաբար դրանք հաճախ կոչվում են մետաղալեզու:Այսօր բարդության հիմնախնդրի լուծման ամենատարածված մոտեցումը օբյեկտիվ ուղղվածություն ունեցող ծրագրավորումն է, չնայած դրա կիրառման հաջողությունն իր գոյության տասնամյակների ընթացքում մի քանի անգամ ենթարկվել է թերահավատության, և դեռևս չկա հուսալի ապացույց, որ այն բերում է օգուտներ `համեմատած այլ մոտեցումների հետ:Այն ուղեկցվում է բաղադրիչների միջև կախվածությունը կարգավորելու տարբեր տեխնոլոգիաներով ՝ մետաքսազերծում, պայմանագրեր, նախատիպեր, կեղտազերծում, տեսակներ և այլն:Metaprogramming- ի տարբեր ձևերի, այսինքն ՝ զարգացման գործընթացի ավտոմատացումը տարբեր մակարդակներով օգտագործումը պատմականորեն համարվել է առավել հզոր մոտեցում:Սկզբունքորեն տարբերվող մետրոպոգրաֆիկացումը լեզվից դուրս և ինքնին մատչելի լեզվով:Առաջին կարգի լեզուներ օգտագործելիս ՝ աճող ծրագրային համակարգերի բարդությունը արագորեն գերազանցում է մարդու կողմից տեղեկատվության ընկալման և մշակման ունակության շեմը, հետևաբար, նախնական տեսողական ձևավորման արտաքին միջոցներն օգտագործվում են բարդ սխեմաները պարզեցված ձևով և իջեցված մասշտաբով դիտելու համար, այնուհետև ինքնաբերաբար առաջացնում են ծածկագրի շրջանակ:Բարձր կարգի լեզուներ օգտագործող մշակողների համայնքներում գերակշռում է ճիշտ հակառակ մոտեցումը `կանխել բարդության հնարավորությունը վերահսկողությունից դուրս գալը` տեղեկատվական մոդելները անկախ բաղադրիչներին բաժանելով և միջոցներ մշակելով որոշ մոդելներ մյուսներին ինքնաբերաբար վերածելու համար։