Sobes.tech
Middle

JavaScript-də obyekt yönümlü proqramlaşdırma ilə digər proqramlaşdırma dillərindəki OOP arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

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 Metodların yenidən təyin olunması in siniflər Özəllik və metodların yenidən təyin olunması in obyektlər
İnkişaf Modifikatorlar (public, private, protected) Konvensiyalar və istifadə 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