«Օբյեկտ կողմնորոշված ծրագրավորում»–ի խմբագրումների տարբերություն

Content deleted Content added
Տող 1.
{{Տեղեկաքարտ Ալգորիթմ}}
'''Օբյեկտ-կողմնորոշված ծրագրավորում (ՕԿԾ)''' ({{lang-en|Object-oriented programming (OOP)}}), [[ծրագրավորման մոտեցումներ|ծրագրավորման մոտեցում]], որի գաղափարական հիմք են հանդիսանում [[Օբյեկտ (ծրագրավորում)|Օբյեկտ]] և [[Դաս (ծրագրավորում)|Դաս]] (class) հասկացությունները.հասկացությունները։
 
Օբյեկտի հատկանիշներից մեկն այն է, որ իր սեփական ընթացակարգերը հասանելիություն ունեն և հաճախ կարող են փոփոխել իր իսկ տվյալների դաշտերը (օբյեկտները ունեն [[this (ծրագրավորում)|{{code|this|C++}}]] կամ {{code|self|swift}} հասկացությունները)։ ՕԿԾ֊ում համակարգչային ծրագրերը կազմված են օբյեկտներից, որոնք գտնվում են իրար հետ փոխազդեցության մեջ։
 
Առավել լայնորեն օգագործվող ծրագրավորման լեզուներից շատերը (օր․՝ C++, Java, Python) [[ծրագրավորման պարադիգմ | բազմապարադիգմ]] են և այս կամ այն չափով ապահովում են օբյեկտ-կողմնորոշված ծրագրավորման հնարավորություն, սովորաբար [[իմպերատիվ ծրագրավորում | իմպերատիվ]] և [[պրոցեդուրային ծրագրավորում|պրոցեդուրային ծրագրավորման]] համադրությամբ։ Կարևոր օբյեկտ-կողմնորոշված լեզուներից են
[[Java (ծրագրավորման լեզու)|Java]],
[[C++]],
[[C Sharp|C#]],
[[Python]],
[[R (ծրագրավորման լեզու)|R]],
[[PHP]],
[[Visual Basic .NET]],
[[JavaScript]],
[[Ruby (ծրագրավորման լեզու)|Ruby]],
[[Perl]],
[[Object Pascal]],
[[Objective-C]],
[[Dart|Dart]],
[[Swift (ծրագրավորման լեզու)|Swift]],
[[Scala (ծրագրավորման լեզու)|Scala]],
[[Kotlin]],
[[Common Lisp]],
[[MATLAB]],
և
[[Smalltalk]]։
 
 
== Պատմություն ==
Տող 46 ⟶ 71՝
 
Մեծ կարևորություն ունի դասերի հիերարխիայի ճիշտ կառուցումը։ ՕԿԾ-մոտեցումներով ստեղծված մեծ համակարգերի հայտնի խնդիրներից մեկը՝ դա այսպես կոչված բազային դասի փխրունության խնդիրն է։ Խնդիրն այն է, որ նախագծման հետագա փուլերում՝ երբ դասերի հիերարխիան արդեն կառուցված է և դրա հիմքի վրա արդեն գրվել է բավականին մեծ քանակությամբ կոդ, բազային դասի մեջ փոփոխություն մտցնելը դառնում է գրեթե անհնար։ Քանի որ բազային դասը նախագծողին հայտնի չէ, թէ իր նախագծած դասի ժառանգներում այդ դասի պահվածքի փոփոխությունը ինչի է կարող հանգեցնել։
 
== Նախագծման ձևանմուշներ ==
{{Հիմնական հոդված|Նախագծման ձևանմուշներ}}
Օբյեկտ-կողմնորոշված նախագծման խնդիրների լուծման բազմաթիվ մոտեցումներ կան։ Դրանցից ամենատարածվածը հայտնի է [[նախագծման ձևանմուշներ]] անունով։ Լայն կիրառության մեջ «նախագծման ձևանմուշներ» տերմինը կարող է վերաբերվել ծրագրային ապահովման նախագծման ժամանակ սովորաբար առաջացող, ընդհանուր, կրկնվող ցանկացած խնդիրների լուծման ձևանմուշներին։ Այս սովորաբար առաջացող խնդիրներից որոշները ունեն մասնավորապես օբյեկտ-կողմնորոշված մշակմանը հատուկ ենթատեքստ և լուծումներ։
 
=== Չորսի բանդայի նախագծման ձևանմուշներ ===
 
[[Նախագծման մոդելներ (գիրք)|''Նախագծման մոդելներ. Օբեյկտ կողմնորոշված ծրագրավորման մեջ բազմակի օգտագործման տարրեր'']]
<ref>{{cite book
| first = Erich
| last = Gamma
| authorlink =
| coauthors = Richard Helm, Ralph Johnson, and John Vlissides
| year = 1995
| title = Design Patterns: Elements of Reusable Object-Oriented Software
| publisher = Addison-Wesley
| isbn = 0-201-63361-2
}}</ref>֊ը [[1994]]թ.-ին լույս տեսած ազդեցիկ գիրք է գրված [[Էրիխ Գամմա]]յի, [[Ռիչարդ Հելմ]]ի, [[Ռալֆ Ջոնսոն]]ի և [[Ջոն Վլիսիդես]]ի կողմից, որոնց հաճախակի կոչում են "Gang of Four" (հայերեն՝ Չորսի բանդա)։ Գրքում նկարագրված են ծրագրավորման հաճախ հանդիպող 23 խնդիրներ և դրանց լուծման ձևանմուշները։
Գիրքը նկարագրում է հետևյալ ձևանմուշները․
*''[[Ստեղծող ձևանմուշներ]]'' (5)․ [[Ֆաբրիկային մեթոդ (նախագծման ձևանմուշ)|Ֆաբրիկային մեթոդ]], [[Աբստրակտ ֆաբրիկա (նախագծման ձևանմուշ)|Աբստրակտ ֆաբրիկա]], [[Եզակի օգտագործման (նախագծման ձևանմուշ)|Եզակի օգտագործման]], [[Կառուցող (նախագծման ձևանմուշ)|Կառուցող]], [[Նախատիպ (նախագծման ձևանմուշ)|Նախատիպ]]
*''[[Կառուցվածքային նախագծման ձևանմուշներ|Կառուցվածքային ձևանմուշներ]]'' (7)․ [[Ադապտեր (նախագծման ձևանմուշ)|Ադապտեր]], [[Կամուրջ (նախագծման ձևանմուշ)|Կամուրջ]], [[Կազմող (նախագծման ձևանմուշ)|Կազմող]], [[Դեկորատոր (նախագծման ձևանմուշ)|Դեկորատոր]], [[Ճակատ (նախագծման ձևանմուշ)|Ճակատ]], [[Հարմարեցնող (նախագծման ձևանմուշ)|Հարմարեցնող]], [[Պրոքսի (նախագծման ձևանմուշ)|Պրոքսի]]
*''[[Վարքագծային ձևանմուշներ]]'' (11). [[Պարտականությունների շղթա (նախագծման ձևանմուշ)|Պարտականությունների շղթա]], [[Հրաման (նախագծման ձևանմուշ)|Հրաման]], [[Թարգմանիչ (նախագծման ձևանմուշ)|Թարգմանիչ]], [[Իտերատոր (նախագծման ձևանմուշ)|Իտերատոր]], [[Միջնորդ (նախագծման ձևանմուշ)|Միջնորդ]], [[Պահպանող (նախագծման ձևանմուշ)|Պահպանող]], [[Դիտորդ (նախագծման ձևանմուշ)|Դիտորդ]], [[Վիճակ (նախագծման ձևանմուշ)|Վիճակ]], [[Մարտավարություն (նախագծման ձևանմուշ)|Մարտավարություն]], [[Կաղապարային մեթոդ (նախագծման ձևանմուշ)|Կաղապարային մեթոդ]], [[Այցելող (նախագծման ձևանմուշ)|Այցելող]]
 
== SOLID և GRASP ուղեցույցներ ==
[[SOLID]]֊ը ծրագրավորման 5 գործելակերպերի մնեմոնիկ հապավում է․
* ''[[Միակ պատասխանատվության սկզբունք]]''․ Յուրաքանչյուր դաս պետք է լուծի միայն մեկ խնդիր։ Դասը պետք է պատասխանատու լինի միայն մեկ խնդրի լուծման համար։
* ''[[Բաց-փակ սկզբունք]]''. Ծրագրային սուբյեկտները (դասեր, մոդուլներ, ֆունկցիաներ) պետք է բաց լինեն ընդլայնման համար, փակ լինեն փոփոխությունների համար։
* ''[[Լիսկովի փոխարինման սկզբունք]]''. Անհրաժեշտ է, որ ժառանգ դասերը կարողանան փոխարինել ծնող դասերին։ Այս սկզբունքի նպատակը կայանում է նրանում, որ ժառանգ դասերը կարող են օգտագործվել ծնող դասերի փոխարեն, որոնցից նրանք ձևավորվում են՝ առանց խափանելու ծրագիրը:
* ''[[Ինտերֆեյսի առանձնացման սկզբունք]]''. Ծրագրային ապահովման սուբյեկտները չպետք է կախված լինեն այն մեթոդներից, որոնք նրանք չեն օգտագործում:
* ''[[Կախվածության ինվերսիայի սկզբունք]]''. Կախվածության առարկան պետք է լինի աբստրակցիա, այլ ոչ թե կոնկրետ ինչ-որ բան.
# Վերին մակարդակի մոդուլները չպետք է կախված լինեն ցածր մակարդակի մոդուլներից: Երկուսն էլ պետք է կախված լինեն աբստրակցիաներից:
# Աբստրակցիաները չպետք է կախված լինեն դետալներից: Դետալները պետք է կախված լինեն աբստրակցիաներից:
 
== Ծանոթագրություններ ==
{{ծանցանկ}}
 
 
== Տես նաև ==
* [[Քրիսթեն Նյուգոր]]
* [[Օլե-Յոհան Դալ]]
 
[[Կատեգորիա:Ծրագրավորում]]