Օբյեկտ կողմնորոշված ծրագրավորում

Վիքիպեդիայից՝ ազատ հանրագիտարանից

Օբյեկտ-կողմնորոշված ծրագրավորում (ՕԿԾ), ծրագրավորման մոտեցում, որի գաղափարական հիմք են հանդիսանում Օբյեկտ և Դաս (class) հասկացությունները.

Պատմություն[խմբագրել | խմբագրել կոդը]

ՕԿԾ-ն առաջացել է պրոցեդուրային ծրագրավորման գաղափարախոսության զարգացման արդյունքում, որտեղ տվյալները, և դրանք մշակող ֆունկցիաները ձևականորեն կապված չեն։

Առաջին ծրագրավորման լեզուն, որտեղ ներկայացված են եղել օբյեկտ կողմնորոշված ծրագրավորման սկզբունքները՝ Սիմուլան(simula) էր։ Իր հայտնվելու պահին (1967 թ.) այն առաջարկում էր հեղափոխական գաղափարներ՝ օբյեկտ, դաս, վիրտուալ մեթոդ և այլն։ Սակայն այս ամենը այնքան էլ մեծ իրարանցմամբ չընդուվեց ժամանակին։ Ամեն դեպքում Սիմուլայի գաղափարների մեծ մասը զարգացվեցին Ալան Քեյի և Դեն Ինգալսի կողմից՝ Սմոլթոկ(Smalltalk) լեզվի մեջ։ Վերջինս էլ դարձավ առաջին լայն տարածում գտած օբյեկտ-կողմնորոշված ծրագրավորման լեզուն։

Ներկայումս օբյեկտ-կողմնորոշված ծրագրավորման լեզուները ամենատարածվածն են աշխարհում, սակայն, օրինակ՝ օպերացիոն համակարգերի ծրագրավորման ոլորտում մինչև հիմա օգտագործվում են պրոցեդուրային մոտեցման սկզբունքները, որոնց կրիչն է լայն տարածում գտած Սի(C) լեզուն։

Հիմնական սկզբունքներ[խմբագրել | խմբագրել կոդը]

Աբստրակցիա (Վերացարկում) ։ Աբստրակցիա - Սա օբյեկտի կարևոր հատկությունների առանձնացումն է, հաշվի չառնելով երկրորդականները։[1]
Ինկապսուլյացիա։ Սա համակարգի հատկություն է, որը թույլ է տալիս միավորել դասի տվյալները և դրանց հետ աշխատող մեթոդները՝ միաժամանակ անտեսանելի պահելով իրականացման առանձնահատկությունները։[1]
Ժառանգում ։ Սա համակարգի հատկություն է, որը թույլ է տալիս նկարագրել նոր դաս՝ մեկ այլ դասի հիմքի վրա, ֆունկցիոնալության մասնակի կամ լրիվ փոխառնմամբ։ Այն դասը, որից կատարվում է ժառանգում կոչվում է բազային կամ ծնող դաս։ Իսկ նոր դասը կոչվում է ածանցյալ կամ ժառանգ դաս։[1]
Պոլիմորֆիզմ (Բազմաձևություն)։ Սա համակարգի հատկություն է, որը թույլ է տալիս միանման ինտերֆեյսով օբյեկտներ ՝ առանց ներքին կառուցվածքի ու տիպի մասին պատկերացում ունենալու։[1]
Դաս ։ Դասը հանդիսանում է ելակետային կոդի տերմինալոգիայով նկարագրված, դեռ գոյություն չունեցող օբյեկտի մոդել։ Փաստացի այն նկարագրում է օբյեկտի կառուցվածքը, հանդիսանալով օբյեկտի ՛՛գծագիր՛՛։
Օբյեկտ ։ Հաշվողական համակարգի հասցեային տիրույթի իմաստային հատված է, որը առաջանում է դասի օրինակ(օբյեկտ) ստեղծելիս։
Նախատիպ ։ Նախատիպը օբյեկտ-օրինակ է, որի օրինակով ու նմանությամբ ստեղծվում են ուրիշ օբյեկտներ։

ՕԿԾ սահմանումը և հիմնական հայեցակարգերը[խմբագրել | խմբագրել կոդը]

ՕԿԾ սահմանումը[խմբագրել | խմբագրել կոդը]

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

Հիմնական հայեցակարգերը[խմբագրել | խմբագրել կոդը]

ՕԿԾ-ում դաս հասկացության առաջացումը պայմանավորված է նման վարքագծով բազմաթիվ օբյեկտներ ունենալու ցանկությամբ։ Այստեղ դասը տվյալների աբստրակտ տիպ է, որը ստեղծվում է ծրագրավորողի կողմից։ Այս տեսանկյունից դիտելիս՝ օբյեկտները այդ աբստրակտ տիպի արժեքներ են, իսկ դասի սահմանումը տալիս է դրանց տվյալների ներքին կառուցվածքը և այդ տվյալների հետ կատարվելիք գործողությունները։ Եթե մի քանի դաս ունեն համանման վարքագիծ, ապա տրամաբանական է կոդ չկրկնելու ցանկությունը՝ ինչը իրականցվում է ժառանգման միջոցով։ Ժառանգման սկզբունքը կայանում է նրանում, որ կարիք չկա սահմանել մի քանի միանման դաս, երբ ուղղակի կարելի է խմբավորել այդ դասերի ընդհանուր մասերը մի ծնող դասի մեջ և այնուհետև ժառանգել մնացածը այդ դասից՝ դրանց սահմանման մեջ նշելով միայն ծնողի նկատմամբ տարբերությունները։

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

Շատ ժամանակակից լեզուներում հաղորդագություն ուղակելու տակ նկատի ունենք մեթոդի կանչը՝ օբյեկտները ունեն դրսից հասանելի մեթոդներ և դրանց կանչերով ապահովվում են օբյեկտների փոխազդեցությունները։ Այս լեզուներից են C++, Java, Oberon-2...

Ծրագրերի նախագծման օբյեկտ-կողմնորոշված մոտեցում[խմբագրել | խմբագրել կոդը]

ՕԿԾ-ն կողմնորոշված է՝ ծրագրավորողների թիմերի կողմից, խոշոր ծրագրային համակարգեր նախագծելու վրա։ Այս դեպքում ընդհանուր համակարգի և առանձին կոմպոնենտների ստեղծումը, այնուհետև դրանց միավորումը կարող է կատարվել տարբեր մարդկանց կողմից։ Շատ հաճախ պրոյեկտի մասին ամեն ինչ ոչ-ոք չի իմանում։

Օբյեկտ-կողմնորոշված նախագծման էությունը կայանում է երկու հիմնական հարցի պատասխանելու մեջ՝

  • Ի՞նչ մասերից է բաղկացած համակարգը։
  • Ինչի՞ համար է պատասխանատու այդ մասերից յուրաքանչյուրը։

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

Կոմպոնենտների առանձնացումից և դրանց միջև փոխահարաբերությունների (ինտերֆեյս) սահմանումից հետո, դրանցից յուրաքանչյուրը կարելի է ծրագրավորել մնացածից գրեթե անկախ (պահպանելով որոշակի տեխնոլոգիական կարգապահություն)։

Մեծ կարևորություն ունի դասերի հիերարխիայի ճիշտ կառուցումը։ ՕԿԾ-մոտեցումներով ստեղծված մեծ համակարգերի հայտնի խնդիրներից մեկը՝ դա այսպես կոչված բազային դասի փխրունության խնդիրն է։ Խնդիրը կայանում է նրանում, որ նախագծման հետագա փուլերում՝ երբ դասերի հիերարխիան արդեն կառուցված է և դրա հիմքի վրա արդեն գրվել է բավականին մեծ քանակությամբ կոդ, բազային դասի մեջ փոփոխություն մտցնելը դառնում է գրեթե անհնար։ Քանի որ բազային դասը նախագծողին հայտնի չէ, թէ իր նախագծած դասի ժառանգներում այդ դասի պահվածքի փոփոխությունը ինչի է կարող հանգեցնել։

Ծանոթագրություններ[խմբագրել | խմբագրել կոդը]

Տես նաև[խմբագրել | խմբագրել կոդը]