Sobes.tech
Middle

JavaScript'te nesne yönelimli programlama ile diğer programlama dillerindeki OOP arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

JavaScript, prototip tabanlı kalıtımı sınıf tabanlı yerine kullanır.

Sınıf tabanlı dillerde, nesneler yapılarını ve davranışlarını tanımlayan sınıfların örnekleridir. Kalıtım, mevcut sınıfların genişletilmesiyle gerçekleştirilir.

JavaScript'te geleneksel anlamda sınıflar yoktur. Nesneler doğrudan veya diğer prototip nesneler temel alınarak oluşturulur. Kalıtım, her nesnenin "ebeveyn" prototipine bağlantısı olan bir prototip zinciri aracılığıyla uygulanır. Bir nesnenin özelliğine veya metoduna erişildiğinde, JavaScript önce nesnede, sonra prototipte, sonra prototipin prototipinde arama yapar ve zincir boyunca devam eder.

JavaScript'te nesne oluşturma ve kalıtım örneği:

// Prototip nesne oluşturma
const animal = {
  speak() {
    console.log('Genel bir ses');
  }
};

// Prototip temel alınarak nesne oluşturma
const dog = Object.create(animal);

// Yeni nesne için metodu yeniden tanımlama
dog.speak = function() {
  console.log('Hav!');
};

dog.speak(); // "Hav!" yazdırır

Sınıf tabanlı ve prototip tabanlı OOP karşılaştırması:

Özellik Sınıf tabanlı OOP (Java, C++) Prototip tabanlı OOP (JavaScript)
Temel mekanizma Sınıflar ve sınıf örnekleri Nesneler ve prototipler
Kalıtım 'extends' ile sınıf kalıtımı Prototip zinciri aracılığıyla kalıtım
Nesne oluşturma 'new' anahtar kelimesi ve yapıcı fonksiyonlar Doğrudan, Object.create(), yapıcılar (fonksiyonlar)
Çok biçimlilik Sınıflarda metodların yeniden tanımlanması Nesnelerde özellik ve metodların yeniden tanımlanması
Kapsülleme Erişim belirteçleri (public, private, protected) Anlaşmalar ve kapanışlar (closures)

ECMAScript 2015 (ES6) ile sınıfların eklenmesi, prototip kalıtım üzerine sözdizimi şekerleri sağlayarak JavaScript'teki OOP'yi sınıf tabanlı dillere daha çok benzetti, ancak temel mekanizma prototip kalmaya devam eder.

// ES6 sınıf kullanımı örneği
class Animal {
  speak() {
    console.log('Genel bir ses');
  }
}

class Dog extends Animal {
  speak() {
    console.log('Hav!');
  }
}

const myDog = new Dog();
myDog.speak(); // "Hav!" yazdırır