Herhangi var nesne yönelimli programlama dilleri sınıf paradigma dayalı olmayan?
Herhangi var nesne yönelimli programlama dilleri sınıf paradigma dayalı olmayan?
Yanıtlar:
Bildiğim kadarıyla, Self prototiplere dayalı “sınıfsız” paradigmayı icat eden orijinal dildir . 1980'lerde zaten (deneysel bir aşamada) mevcuttu ve Smalltalk'in prototip modelinin zarif kullanımını aşırı derecede zorlar , böylece sınıflar tamamen elimine edilir.
Bildiğim diğer tüm "sınıfsız" OO dillerini etkiledi:
JavaScript gibi diller , davranışın mevcut nesneleri klonlayarak yeniden kullanıldığı prototiplere dayanır . Bağlandığım Wikipedia makalesi Lua, ActionScript ve diğer bazı dillerin bu paradigmayı takip ettiğini gösteriyor.
Dünyadaki en popüler nesne yönelimli programlama dili sınıflara sahip değil, Javascript olarak adlandırılıyor ve prototip tabanlı: http://en.wikipedia.org/wiki/Prototype-based_programming
Nesne yönlendirme, sadece kısmen birbirine bağlı olan birkaç önemli kavram için kullanılan bir terimdir. Örneğin, kalıtım, sınıflar yerine örnekler arasında durum bazında duruma göre ilan edilebilir veya prototype
Thomas'ın yazdığı gibi bütün sınıf somut bir nesneyle temsil edilebilir . Yapı tanımını örnek oluşturma işleminden ayırmak daha normaldir. Benzer şekilde, geç bağlanma, nominal olarak aynı yönteme sahip nesnelerin çağrıldığında mutlaka aynı şeyi yapmaması ve kararın çalışma zamanında verilmesi anlamına gelir. Prototip tabanlı yaklaşımla da aynı şekilde mümkün. Ve kapsülleme, nesnelerinizin ilan edilmiş sınıfların örnekleri olup olmamasından temel olarak tamamen bağımsızdır.
Bununla birlikte, çoğu OO dili sıkıca sınıf kampındadır. Fakat o zaman bile çizgiyi bulanıklaştıran deyimler vardır: etki alanı odaklı tasarım genellikle belirli nesnelerin kimliğinin statik sınıf diyagramından çok daha önemli olduğu sistemlere yol açar ve dekoratörler aynı sınıf veya arayüzdeki nesnelerin çok daha fazla olmasını sağlar farklı davranış
Kale , sınıf yerine özelliklere dayanan nesne yönelimli bir dildir. Fark, esas olarak uygulama kompozisyonundadır. Bir nesnenin davranışı (yöntem tanımları), program metninde belirli bir noktada bildirimlerle belirlenir. Yani bu anlamda sınıf tabanlı sistemlere benzer.
Tamamen nesneye dayalı olan nesne hesabı (Cardelli'ye göre, sanırım) var. Her yöntem bir örnek üyesidir. Mevcut bir nesnenin içeriğini alarak ve bazı üyelerini ekleyerek, çıkararak veya değiştirerek yeni nesneler oluşturursunuz. Prototiplerden biraz farklı, çünkü yeni nesnenin eski nesneye bağlantısı yok, sadece içeriğinin bir kısmı var.
IIRC, Python ve diğer hashtable-diline dilleri kullanarak benzer şekilde programlamak mümkündür: örnek üye olarak bir işlev ekleyebilir ve ardından bir yöntem olarak çağırabilirsiniz.
Ada, 1995 revizyonundan itibaren, nesne yönelimlidir, ancak birçok OO dilin aksine nesne yönelimli türleri ve modülleri "sınıf" olarak adlandırılan tek bir yapı halinde birleştirmez. Bir türü "sınıf Foo" olarak bildirmek ve tüm ilişkili yöntem bildirimlerini sınıf bildirgesine koymak yerine, bir paketi bildirir ve türünü (a record
) olarak ve paket içindeki diğer şeyleri bildirirsiniz. Sözü edilen diğer dillerden bazıları "sınıfsız" değildir, işleri organize etmenin sadece biraz farklı bir yoludur.
Ada 95'in nesneye yönelik özellikleri dilin mevcut 1983 versiyonuna eklenmiş; miras ve diğerlerini desteklemek için mevcut kayıt ve paket yapılarını genişletti.
Io , başka bir prototip tabanlı nesne yönelimli dildir. Aslında diğer cevaplarda daha önce belirtilen dillerden ilham alıyor.
Io dinamik bir prototip tabanlı programlama dilidir. Io'daki fikirler çoğunlukla Smalltalk (tüm değerler nesnelerdir), Self (prototip tabanlı), NewtonScript (diferansiyel kalıtım), Act1 (eşzamanlılık için aktörler ve gelecekler), Lisp'ten (kod bir çalışma zamanı denetlenebilir / değiştirilebilir ağaçtır) ve Lua (küçük, gömülebilir).
Erlang. Ve evet, Erlang , OO tanımının üç noktasını da yerine getirdiği için nesne yönelimli bir dildir.