Object-Oriented Programming-ի JavaScript-ում
Տեսական հիմքեր Object-Oriented Programming-ի JavaScript-ում
Օբյեկտաուղղված ծրագրավորումը (OOP) ծրագրավորման պարադիգմ է, որը նախագծված է իրական աշխարհի կոնցեպցիաները՝ օբյեկտներ, դասեր (classes), ժառանգում (inheritance) և մեթոդներ (methods)՝ մոդելավորելու համար։ Այն նպաստում է կոդի կազմակերպմանը, վերօգտագործմանը և ընդարձակելիությանը։
JavaScript-ը «class-based» լեզու չէ սկզբնապես․ այն prototype-based լեզու է, ինչը նշանակում է, որ ժառանգման հիմքում ընկած է [[Prototype]]
կապը, ոչ թե բուն դասերը։ Սակայն ES6-ից հետո ավելացված class
սինտաքսը ընդամենը շերտ է՝ ընդգծելու համար դասերի իմիտացիան։
Ծրագրերի մասշտաբը աճելուն զուգընթաց՝ անհրաժեշտ է լինում կոդը բաժանել փոքր մոդուլների, թաքցնել բարդությունները և նվազեցնել կախվածությունները։ Այստեղ է OOP-ն սկսում փայլել՝ առաջարկելով հետևյալ հնարավորությունները․
Ի տարբերություն Java-ի կամ C++-ի՝ JavaScript-ում դասերը չեն հանդիսանում լեզվային հիմք։ Դրանք բրաուզերում Object
և Function
տիպերի հիման վրա կառուցվող կեղծ դասեր են։ Օրինակ՝ երբ դու ստեղծում ես class, բրաուզերը ստեղծում է constructor ֆունկցիա, որի prototype
-ում տեղադրվում են մեթոդները։
class User { constructor(name) { this.name = name; }
greet() { console.log(Hello, ${this.name}); } }
const u = new User('Ani'); u.greet(); // Hello, Ani
Սակայն իրականում սա այն է, ինչ engine-ը հասկանում է՝
function User(name) { this.name = name; }
User.prototype.greet = function() { console.log(Hello, ${this.name}); };
Սա է JavaScript-ի հիմքում ընկած prototype chain-ը՝ ոչ թե իրական դասեր։
Պարադիգմ | Հիմնական գաղափար | Կոդի կազմակերպում |
---|---|---|
Procedural | Հրամաններ, ընթացակարգեր | Ֆունկցիաներ + գլոբալ տվյալներ |
OOP | Օբյեկտներ, դասեր, ժառանգում | Օբյեկտներ և մեթոդներ |
Functional | Մաքուր ֆունկցիաներ, տվյալների անփոխարելիություն | Composability + referential transparency |
JavaScript-ը եզակի է նրանով, որ աջակցում է երեքն էլ, ինչը հնարավորություն է տալիս ծրագրավորողին ընտրել տվյալ խնդրին ամենահարմար մոտեցումը։
OOP-ն JavaScript-ում տալիս է կառուցվածքային մտածողություն՝ հատկապես մեծ համակարգեր նախագծելիս։ Սակայն պետք է հասկանալ՝ class սինտաքսը պարզապես syntactic sugar է՝ փակագծված prototype մոդելի վրա։ OOP-ի իրական ուժը գալիս է սկզբունքների ճիշտ կիրառությունից, ոչ թե պարզապես դասերի օգտագործումից։
Հաջորդ մասում կխոսենք օբյեկտների կառուցման տարբեր մեթոդների մասին՝ սկսած ամենահիմնարարից մինչև առավել ճկուն մոտեցումներ։