JavaScriptda ob'ektga yo'naltirilgan dasturlash va boshqa dasturlash tillaridagi OOP o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
JavaScript prototip əsaslı irsiyyət istifadə edir, sinif əsaslı deyil.
Siniflərə əsaslanan obyekt yönümlü dillərdə obyektlər, onların quruluşunu və davranışını təsvir edən siniflərin nümunələridir. İrsiyyət mövcud siniflərin genişləndirilməsi yolu ilə həyata keçirilir.
JavaScript-də ənənəvi mənada siniflər yoxdur. Obyektlər birbaşa və ya digər prototip obyektlər əsasında yaradılır. İrsiyyət, hər obyektin "valideyn" prototipinə istinad etdiyi prototip zənciri vasitəsilə həyata keçirilir. Bir obyektin xüsusiyyəti və ya metodu üzərinə müraciət edildikdə, JavaScript əvvəlcə onu obyektin özündə, sonra onun prototipində, sonra prototipin prototipində axtarır və zəncir boyunca davam edir.
JavaScript-də obyekt və irsiyyət nümunəsi:
// Prototip obyektin yaradılması
const animal = {
speak() {
console.log('Ümumi səs');
}
};
// Prototip əsasında obyektin yaradılması
const dog = Object.create(animal);
// Yeni obyekt üçün metodu yenidən təyin etmək
dog.speak = function() {
console.log('Hav!');
};
dog.speak(); // "Hav!" göstərəcək
Sinif əsaslı və prototip əsaslı OOP-in müqayisəsi:
| Xüsusiyyət | Sinif əsaslı OOP (Java, C++) | Prototip əsaslı OOP (JavaScript) |
|---|---|---|
| Əsas mexanizm | Siniflər və nümunələr | Obyektlər və prototiplər |
| İrsiyyət | 'extends' ilə sinif irsiyyəti | Prototip zənciri vasitəsilə irsiyyət |
| Obyekt yaradılması | 'new' açar sözü və konstruktorlar | Birbaşa, Object.create(), konstruktorlar (funksiyalar) |
| Polimorfizm | Sinifdə metodların yenidən təyin olunması | Obyektlərdə xüsusiyyət və metodların yenidən təyin olunması |
| İnkişaf | Əlçatanlıq modifikatorları (public, private, protected) | Konvensiyalar və bağlamalar (closures) |
ECMAScript 2015 (ES6) ilə siniflərin əlavə olunması, prototip irsiyyət üzərində sintaktik şəkər təmin etdi və JavaScript-də OOP-nin sinif əsaslı dillərə daha çox bənzəməsinə imkan verdi, lakin əsas mexanizm prototip olaraq qalır.
// ES6-də sinif istifadəsi nümunəsi
class Animal {
speak() {
console.log('Ümumi səs');
}
}
class Dog extends Animal {
speak() {
console.log('Woof!');
}
}
const myDog = new Dog();
myDog.speak(); // "Woof!" göstərəcək