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

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

## Օբյեկտ հիմնված լեզուներ
Ծրագրավորման լեզուներում կարևոր տարբերությունը օբյեկտ կողմնորոշված լեզվի և օբյեկտին հիմնված լեզվի միջև տարբերությունն է։ Լեզուն սովորաբար համարվում է օբյեկտ հիմնված, եթե այն ներառում է օբյեկտի հիմնական կարողությունները՝ նույնականությունը, հատկությունները և ատրիբուտները։ Լեզուն համարվում է օբյեկտ կողմնորոշված, եթե այն օբյեկտ հիմնված է և ունի պոլիմորֆիզմի ու ժառանգման կարողություն։ Պոլիմորֆիզմը վերաբերում է ֆունկցիայի անունը բազմակի ռեժիմներով (որոնց հիման վրա օբյեկտ(ներ)ը անցել են դրանով) ծանրաբեռնելու կարողությանը։ Պայմանական հաղորդագրությունը անցնելով տարբերակում է միայն առաջին օբյեկտի վրա և համարում է այն այդ օբյեկտին "հաղորդագրություն ուղարկող": Չնայած դրան, որոշ ՕԾԿ լեզուներ, ինչպես Flavors-ը և Common Lisp օբյեկտի համակարգը (CLOS), ընդունակ են տարբերակել ավելին, քան ֆունկցիայի առաջին պարամետրը։ Ժառանգումը օբյեկտի դասը ենթադասավորելու, նոր դաս, որը գոյություն ունեցողներից մեկի ենթադասն է և ժառանգել է բոլոր տվյալային ճնշումները և վարքագծերը դրա ծնողներից, բայց նաև փոխել է մեկ կամ մի քանիսը դրանցից, ստեղծելու կարողությունն է։

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

Օբյեկտ կողմնորոշված ծրագրավորումը մոտեցում է՝ մոդելավորելու մոդուլյար վերաօգտագործվող ծրագրային ապահովման համակարգեր։ Օբյեկտ կողմնորոշված մոտեցումը դեռ համակարգչային ծրագրավորման վաղ սկզբնավորումից եկած լավ մոդելավորման փորձերի էվոլյուցիան է։ Օբյեկտ կողմնորոշումը պարզապես կառուցվածքային ծրագրավորման և տվյալների աբստրակտ տիպերի նման հին տեխնիկաների տրամաբանական ընդլայնում է։ Օբյեկտը տվյալի աբստրակտ տիպ է պոլիմորֆիզմի և ժառանգման լրացումով։
Օբյեկտ կողմնորոշված համակարգը ինտեգրում է տվյալը և կոդը՝ օգտագործելով "օբյեկտ" հասկացությունը։ Օբյեկտը ունի վիճակ (տվյալ) և վարքագիծ (կոդ)։ Օբյեկտները կարող են համապատասխանել իրական աշխարհում գտնվող իրերին։ Օրինակ՝ գրաֆիկական ծրագրավորումը կունենա այնպիսի առարկաներ, ինչպիսիք են *շրջանը*, *քառակուսին*, *մենյուն*։ Առցանց գնումների համակարգը կունենա *գնումների քարտ, սպառող, արտադրանք*։ Գնումների համակարգը կաջակցի այնպիսի վարքագծերի, ինչպիսիք են *տեղավորել պատվերը*, *վճարում կատարել* և *զեղչ առաջարկել*։ Օբյեկտները մոդելավորված են ինչպես դասերի հիերարխիաները։ Օրինակ՝ գնումների համակարգում կարող են լինել այնպիսի բարձր մակարդակի դասեր, ինչպիսիք են *էլեկտրոնիկան*, *խոհանոցային պարագաները* և *գիրքը*։ Կարող են լինել լրացուցիչ հղկումներ, օրինակ՝ *էլեկտրոնիկայի*, *CD նվագարկչի, DVD նվագարկչի* և այլնի համար։ Այս դասերը և ենթադասերը համապատասխանում են մաթեմատիկական տրամաբանության բազմություններին և ենթաբազմություններին։

## Մասնագիտացված օբյեկտներ
Օբյեկտների համար կարևոր հասկացություն է նախագծման ձևանմուշը։ Նախագծման ձևանմուշը հաճախ հանդիպող խնդիրը հաղթահարելու համար ապահովում է բազմակի օգտագործվող կաղապար։ Հետևյալ օբյեկտային բացատրությունները օբյեկտների համար ամենատարածված նախագծման ձևանմուշների օրինակներ են։

*Ֆունկցիա օբյեկտ. միակ մեթոդով օբյեկտ է (C++-ում այդ մեթոդը ֆունկցիայի օպերատորն է՝ "operator()"), որը ավելի նման է ֆունկցիային (ինչպես C/C++ դեպի ֆունկցիա սլաքը)։
*Անփոփոխ օբյեկտ. օբյեկտ է, որը ստեղծված է հաստատուն վիճակով ստեղծման ժամանակ և հետագայում չի փոխվում։
*Առաջին դասի օբյեկտ. օբյեկտ է, որը կարող է օգտագործվել առանց սահմանափակման։
*Հավաքածու օբյեկտ (ծրագրավորում). օբյեկտ է, որը կարող է պարունակել այլ օբյեկտներ։
*գործարան օբյեկտ. օբյեկտ է, որի նպատակը այլ օբյեկտներ ստեղծելն է։
*Մետաօբյեկտ. օբյեկտ է, որից կարող են այլ օբյեկտներ ստեղծվել (համեմատած դասի հետ, որի օբյեկտ լինելը պարտադիր չէ)։
*Նախատիպ օբյեկտ. մասնագիտացած մետաօբյեկտ է, որից պատճենման շնորհիվ կարող են այլ օբյեկտներ ստեղծվել։
*Աստվածային օբյեկտ. օբյեկտ է, որը գիտի կամ անում է շատ բաներ (այն anti-pattern-ի օրինակ է)։
*Եզակի օգտագործման օբյեկտ. օբյեկտ է, որը իր դասի մեջ միակ instance-ն է ծրագրի կյանքի տևողության ընթացքում։
*Filter object.

## Բաշխված օբյեկտներ

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

Բաշխված օբյեկտները փաթեթավորելու համար ստանդարտ մեթոդը Ինտերֆեյսի բնութագրման լեզվի (ԻԲԼ) միջոցով է տեղի ունենում։ ԻԲԼ-ն պաշտպանում է սերվերի բաշխված օբյեկտների բոլոր դետալների client-ին։ Դետալներ են, օրինակ նրանք, որոնք համակարգիչը բնակեցնում է օբյեկտները, ինչ ծրագրավորման լեզու կամ օպերացիոն համակարգ է օգտագործում և այլ պլատֆորմին հատուկ խնդիրներ։ ԻԲԼ-ն սովորաբար բաշխված միջավայրի մասն է, որը ապահովում է այնպիսի ծառայություններ, ինչպիսիք են արձանագրությունները և ճնշումը միօրինակ վարքագծով բոլոր օբյեկտների համար։ Երկու ամենահայտնի ստանդարտները բաշխված օբյեկտների համար Object Management Group-ի CORBA ստանդարտն է և Microsoft-ի DCOM-ը։

Ի հավելում բաշխված օբյեկտներին՝ օբյեկտների հիմնական հասկացության ընդլայնումների քանակը առաջարկված է բաշխված համակարգմանը ակտիվացնելու համար։
**Պրոտոկոլ օբյեկտներ* պրոտոկոլի ստեքի բաղադրիչներ են, որոնք բացում են ցանցի հաղորդակցությունը օբյեկտ կողմնորոշված ինտերֆեյսի մեջ։
**[[Ռեպլիկացիա (ծրագրավորում)|Ռեպլիկացման օբյեկտներ]]* բաշխված օբյեկտների խմբեր են (կոչվում են անգլ.՝ *replicas*), որոնք աշխատեցնում են բաշխված բազմակուսակցական պրոտոկոլները ներքին վիճակում բարձր կայունություն ձեռք բերելու համար և արձագանքում են հարցումներին համակարգված եղանակով։ Օրինակները ընդգրկում են կեղծ հանդուրժող CORBA օբյեկտներ։
**[[Կենդանի բաշխված օբյեկտ]]ներ* (ավելի պարզ՝ *[[Կենդանի բաշխված օբյեկտ|կենդանի օբյեկտներ]]*) ընդհանրացնում են *ռեպլիկացված օբյեկտ* հասկացությունը ռեպլիկաների խմբերի, որոնք կարող են ներսում օգտագործել ցանկացած բաշխված արձանագրություն, հնարավոր ազդելու մեկ շաբաթվա կայունությանը իրենց տեղական վիճակների միջև։

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

## Օբյեկտներ և Բովանդակային ցանց
Սեմանտիկ ցանցը իրապես բաշխված օբյեկտների ֆրեյմվորկ է։ Սեմանտիկ ցանցի երկու բանալի տեխնոլոգիաներն են Web Ontology Language-ը (OWL) և Resource Description Framework-ը (RDF)։ RDF-ն ապահովում է համացանցում հասանելի հիմնական օբյեկտ անունների, հատկությունների, ատրիբուտների, հարաբերությունների սահմանելու ունակությունը։ OWL-ը ավելացնում է ավելի հարուստ օբյեկտային մոդել, հիմնված այն տեսության վրա, ըստ որի՝ այն ապահովում է լրացուցիչ նախագծման հնարավորություններ, ինչպես բազմակի ժառանգումն է։ 
OWL օբյեկտները նման չեն ստանդարտ լայն տարածված բաշխված օբյեկտներին, որոնք մուտք են գործում Ինտերֆեյսի բնութագրման լեզվի միջոցով։ Այսպիսի մոտեցումը համապատասխան չէր լինի համացանցի համար, քանի որ համացանցը մշտապես զարգացող է, և ստանդարտացումը ինտերֆեյսի մեկ կողմում դժվար է ձեռք բերվում։ OWL օբյեկտները միտված են նման լինելու այն օբյեկտների տեսակին, որոնք օգտագործվում են ծրագրավորման լեզուներում այնպիսի կիրառական բնագավառի նախագծեր սահմանելու համար, ինչպիսիք են Java-ն և C++-ը։

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

Մեկ այլ կարևոր տարբերություն է եղանակը, որով նմուշը ապահովում է տեղեկություն, որը ներկայում համակարգի մեջ չէ։ Ծրագրավորման լեզուները և տվյալների բազայի համակարգների մեծամասնությունը օգտագործում է "ենթադրություն մեկուսացված աշխարհի մասին": Եթե փաստը հայտնի չէ համակարգին, ապա այդ փաստը ենթադրվում է կեղծ։ Սեմանտիկ Վեբ օբյեկտները օգտագործում են ենթադրություն բաց աշխարհի մասին և պնդումը համարվում է կեղծ, եթե կա իրական հավաստի տեղեկություն, որ այն կեղծ է, այլ դեպքում այն ենթադրվում է անհայտ՝ ո՛չ ճշմարիտ, ո՛չ կեղծ։

OWL օբյեկտները իրականում շատ նման են արհեստական բանականության frame լեզուներին, ինչպիսիք են KL-ONE և Loom-ը։

Հետևյալ աղյուսակը համեմատում է ավանդական օբյեկտները Օբյեկտ կողմնորոշված ծրագրավորման լեզուներից, ինչպիսիք Java կամ C++-ն են, Սեմանտիկ Վեբ օբյեկտների հետ։

## Տես նաև
*Օբյեկտ կյանքի տևողություն
*Օբյեկտ պատճեն
*Նախագծման ձևանմուշներ
*Բիզնես օբյեկտ (ծրագրավորում)
*Actor ձևանմուշ

## Ծանոթագրություններ

## Արտաքին հղումներ
*''What Is an Object?'' from *The Java Tutorials*
*

Կատեգորիա:Ծրագրավորում