Sobes.tech
Middle

Ի՞նչն է տարբերությունը JavaScript-ում օբյեկտային ուղղված ծրագրավորման և այլ ծրագրավորման լեզուներում OOP-ի միջև:

sobes.tech AI

Պատասխան AI-ից

JavaScript օգտագործում է պրոտոտիպային ժառանգություն փոխարեն դասային:

Դասային լեզուներում օբյեկտները հանդիսանում են դասերի օրինակներ, որոնք նկարագրում են նրանց կառուցվածքը և վարքը: Ժառանգությունը իրականացնում է գոյություն ունեցող դասերի ընդլայնմամբ:

JavaScript-ում դասեր ավանդական իմաստով չկան: Օբյեկտները ստեղծվում են ուղղակի կամ այլ պրոտոտիպային օբյեկտների հիման վրա: Ժառանգությունը իրականացվում է պրոտոտիպների շղթայով, որտեղ յուրաքանչյուր օբյեկտ ունի հղում իր "հայր" պրոտոտիպին: Երբ դիմում եք օբյեկտի հատկությանը կամ մեթոդին, JavaScript-ը նախ փնտրում է այն հենց օբյեկտում, ապա նրա պրոտոտիպում, հետո պրոտոտիպի պրոտոտիպում և այդպես շարունակ շղթայում:

Օբյեկտի ստեղծման և ժառանգության օրինակ JavaScript-ում:

// Պրոտոտիպային օբյեկտի ստեղծում
const animal = {
  speak() {
    console.log('Անհատական ձայն');
  }
};

// Օբյեկտի ստեղծում պրոտոտիպի հիման վրա
const dog = Object.create(animal);

// Մեթոդի վերագրում նոր օբյեկտի համար
dog.speak = function() {
  console.log('Վաո!');
};

dog.speak(); // Տպում է "Վաո!"

Դասային և պրոտոտիպային OOP համեմատություն:

Գծագիր Դասային OOP (Java, C++) Պրոտոտիպային OOP (JavaScript)
Հիմնական մեխանիզմ Դասեր և օրինակներ դասերի Օբյեկտներ և պրոտոտիպներ
Ժառանգություն Դասերի ժառանգություն 'extends'-ով Ժառանգություն պրոտոտիպների շղթայով
Օբյեկտների ստեղծում 'new' բանալի բառով և կոնստրուկտորներով Ուղիղ, Object.create(), կոնստրուկտորներ (ֆունկցիաներ)
Պոլիմորֆիզմ Մեթոդների վերագրում դասերում Արտահայտման վերագրում օբյեկտներում
Էնկապսուլյացիա Դասային մոդուլներ (public, private, protected) Կոնվենցիաներ և փակագծեր (closures)

ECMAScript 2015 (ES6)-ում դասերի ներդրումը ավելացրեց սինտաքսիկ շաքար՝ պրոտոտիպային ժառանգության վրա, ինչը դարձնում է JavaScript-ի OOP-ը ավելի նման դասային լեզուներին, բայց հիմնական մեխանիզմը մնում է պրոտոտիպային:

// Օրինակ ES6 դասերի օգտագործման
class Animal {
  speak() {
    console.log('Անհատական ձայն');
  }
}

class Dog extends Animal {
  speak() {
    console.log('Վաո!');
  }
}

const myDog = new Dog();
myDog.speak(); // Տպում է "Վաո!"