Burada, çoğunlukla En İyi gibi fikirlerini ortaya çıkarmaya çalışan birinin (sizin değil) etrafında inşa edilen yaklaşık yüz terminoloji sorunu var.
Tüm nesne yönelimli dillerin çeşitli kavramlarla başa çıkabilmesi gerekir:
- verilerin, veri elemanları ve üye işlevleri olarak bilinen ya da veri ve yöntemler olarak bilinen veriler üzerinde ilişkili işlemler ile birlikte kapsüllenmesi.
- miras, bu nesnelerin bu değişiklikler hariç, diğer nesne kümesine benzediğini söyleme yeteneği
- bir nesnenin hangi yöntemlerin çalıştırılacağına kendisi karar verdiği polimorfizm ("birçok şekil"), böylece isteklerinizi doğru yönlendirmek için dile bağlı olabilirsiniz.
Şimdi, karşılaştırma kadar:
İlk şey bütün "sınıf" ve "prototip" sorusudur. Fikir başlangıçta Simula'da başladı, burada sınıf tabanlı bir yöntemle her sınıf aynı durum alanını ("olası değerleri" okuyun) ve aynı işlemleri paylaşan ve böylece bir denklik sınıfı oluşturan bir dizi nesneyi temsil etti. Smalltalk'a tekrar bakarsanız, bir sınıf açıp yöntemler ekleyebileceğinizden, bu etkili bir şekilde Javascript'te yapabileceklerinizle aynıdır.
Daha sonra OO dilleri statik tip kontrolünü kullanmak istediğinden, derleme zamanında sabit bir sınıf seti fikrini aldık. Açık sınıf versiyonunda daha fazla esnekliğe sahiptiniz; daha yeni sürümde, derleyicide aksi takdirde test yapılması gereken bazı doğruluk türlerini kontrol etme olanağınız vardı.
"Sınıf tabanlı" bir dilde, bu kopyalama derleme zamanında gerçekleşir. Bir prototip dilde işlemler, çalışma zamanında kopyalanan ve değiştirilen prototip veri yapısında saklanır. Soyut olarak, yine de, bir sınıf hala aynı durum alanını ve yöntemlerini paylaşan tüm nesnelerin denklik sınıfıdır. Prototipe bir yöntem eklediğinizde, etkili bir şekilde yeni bir denklik sınıfının bir öğesini oluşturuyorsunuz.
Şimdi, neden yapıyorsun? çünkü çalışma zamanında basit, mantıklı ve zarif bir mekanizma oluşturur. şimdi, yeni bir nesne oluşturmak veya yeni bir sınıf oluşturmak için, tüm verileri ve prototip veri yapısını kopyalayarak derin bir kopya gerçekleştirmeniz yeterlidir. Kalıtım ve polimorfizmi az ya da çok ücretsiz olarak elde edersiniz: yöntem arama her zaman ada göre bir yöntem uygulaması için bir sözlük istemekten oluşur.
Javascript / ECMA betiği ile sonuçlanan nedeni temelde bu 10 yıl önce başlarken, çok daha az güçlü bilgisayarlar ve çok daha az karmaşık tarayıcılar ile uğraşmak oldu. Prototip tabanlı yöntemin seçilmesi, yorumlayıcının nesne yöneliminin arzu edilen özelliklerini korurken çok basit olabileceği anlamına gelir.