Ի՞նչն է տարբերությունը 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(); // Տպում է "Վաո!"