**Օբյեկտը** ծրագրավորման մեջ կարող է լինել փոփոխական, տվյալների կառուցվածք կամ ֆունկցիա, և որպես այդպիսին, հիշողության տեղ է, որն ունի արժեք և հնարավոր է ուղեկցված է նույնարկիչի կողմից։
Դաս հիմնված օբյեկտ կողմնորոշված ծրագրավորման(ՕԾԿ) նմուշի մեջ, "օբյեկտը" վերաբերում է այն դասի տվյալ 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++-ն են, Սեմանտիկ Վեբ օբյեկտների հետ։

| ՕԿԾ Օբյեկտներ | Սեմանտիկ Վեբ Օբյեկտներ |
| --- | --- |
| Դասերը դիտված են որպես instance տիպեր։ | Դասերը դիտված են որպես անհատների բազմություններ։ |
| Instance-ները չեն կարող փոխել իրենց տիպեր աշխատելու ընթացքում։ | Դասերի անդամակցությունը կարող է փոխվել աշխատելու ընթացքում։ |
| Դասերի ցանկը լիովին ճանաչված է կոմպիլյացիայի ժամանակ և չի կարող փոփոխվել դրանից հետո։ | Դասերը կարող են ստեղծվել և փոխվել աշխատելու ընթացքում։ |
| Կոմպիլյատորները օգտագործվում են կառուցման ժամանակ։ Կոմպիլյացիայի ընթացքի սխալները ցույց են տալիս խնդիրներ։ | Reasoner-ները կարող են օգտագործվել դասակարգման և կայունության ստուգման համար աշխատելու կամ կառուցման ժամանակամիջոցին։ |
| Դասերը կոդավորում են իրենց իմաստի և վարքագծի մեծ մասը իմպերատիվ ֆունկցիաների և մեթոդների միջոցով։ | Դասերը իրենց իմաստը դարձնում են պարզ OWL պնդումների առումով։ Ոչ մի իմպերատիվ կոդ չի կարող կցվել։ |
| Instance-ները այնաստիճան անանուն են, որ չեն կարող հեշտությամբ կիրառվել գործող ծրագրից դուրս։ | Բոլոր RDF և OWL կոչված ռեսուրսները ունեն յուրահատուկ URI, որի տակ կարող են հղվել։ |
| Մեկուսացված աշխարհ։ Եթե չկա բավարար տեղեկություն պնդման ճշմարտությունը ապացուցելու համար, ապա այն ենթադրվում է կեղծ։ | Բաց աշխարհ։ Եթե չկա բավարար տեղեկություն պնդման ճշմարտությունը ապացուցելու համար, ապա այն կարող է լինել ճշմարիտ կամ կեղծ։ |

Տես նաև
-------

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

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

1. ↑  Oppel, Andy (2005). *SQL Demystified*. McGraw Hill. p. 7. ISBN 0-07-226224-9.
2. ↑  Gabriel, Richard; Linda G. DeMichie. "The Common Lisp Object System: An Overview" (PDF). *Lucid Inc. Technical Report*. Արխիվացված է the original (PDF) 2003 թ․ ապրիլի 6-ին. Retrieved 2016 թ․ փետրվարի 14.
3. ↑  Wegner, Peter (December 1987). Meyrowitz, Norman (ed.). "Dimensions of Object-Based Language Design". *OOPSLA'87 Conference Proceedings*. **22** (12): 168–182. doi:10.1145/38807.38823.
4. ↑  Barbey, S; M. Kempe; A. Strohmeier (1993). "Object-Oriented Programming with Ada 9X". *Draft Technical Report*. Swiss Federal Institute of Technology in Lausanne Software Engineering Laboratory. Retrieved 2013 թ․ դեկտեմբերի 15. Ընդհանրապես Ada 83-ը ինքնին չի համարվում օբյեկտ կողմնորոշված, ավելի ճիշտ, ըստ Wegner-ի [Weg 87] տերմինաբանության, այն ընդունված է ասել օբյեկտ հիմնված, քանի որ այն ապահովում է միայն սահմանափակ ժառանգման ձև և ունի պոլիմորֆիզմի պակաս։
5. ↑  Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). *Object Oriented Software Engineering*. Addison-Wesley ACM Press. ISBN 0-201-54435-0.
6. ↑  "What is an Object?". *oracle.com*. Oracle Corporation. Retrieved 2013 թ․ դեկտեմբերի 13.
7. ↑  Martin, Robert C. "Design Principles and Design Patterns" (PDF). Retrieved 2000.
8. ↑  Orfali, Robert (1996). *The Essential Client/Server Survival Guide*. New York: Wiley Computer Publishing. pp. 399–403. ISBN 0-471-15325-7.
9. ↑  Ostrowski, K. Birman, K. Dolev, D. and Ahnn, J. (2008). "Programming with Live Distributed Objects", *Proceedings of the 22nd European Conference on Object-Oriented Programming*, Paphos, Cyprus, July 07–11, 2008, J. Vitek, Ed. *Lecture Notes In Computer Science*, vol. 5142, Springer-Verlag, Berlin, Heidelberg, 463-489, .
10. ↑  Berners-Lee, Tim; James Hendler; Ora Lassila (2001 թ․ մայիսի 17). "The Semantic Web A new form of Web content that is meaningful to computers will unleash a revolution of new possibilities". *Scientific American*. **284**: 34–43. doi:10.1038/scientificamerican0501-34. Արխիվացված է the original 2013 թ․ ապրիլի 24-ին. Retrieved 2016 թ․ փետրվարի 14.
11. ↑  Knublauch, Holger; Oberle, Daniel; Tetlow, Phil; Wallace, Evan (2006 թ․ մարտի 9). "A Semantic Web Primer for Object-Oriented Software Developers". W3C. Retrieved 2008 թ․ հուլիսի 30.
12. ↑  Table excerpted from tables in:

Արտաքին հղումներ
----------------

* *What Is an Object?* from *The Java Tutorials*
* THE COMPUTER OBJECTS LOOKING FOR THEIR SOCIAL AND ORGANIZATIONAL IMPLICATIONS. http://revistas.face.ufmg.br/index.php/farol/article/view/2709