Böyle bir soru sormak için SO kardeşler arasında daha iyi bir yer düşünemiyorum. Başlangıçta "Python saf bir OO dili mi?" ama terim tanımlamaya çalışırken insanların yaşadığı sıkıntıları ve bir tür rahatsızlığı göz önünde bulundurarak terimin kendisi için net bir tanım elde etmeye başladım.
Terimi icat eden Dr.Alan Kay'ın yazışmalarıyla başlamak oldukça adil olacaktır (hücrelere veya diğer canlı nesnelere biyolojik benzetmedeki ilhamı not edin).
Göreve yaklaşmanın aşağıdaki yolları vardır:
- Terimi tanımlamak için benzersiz ve yeterli (Smalltalk, Scala,
Java, vb. Olsa da) belirli özellikleri gösterebilen (veya yapamayan) programlama dillerini listeleyerek karşılaştırmalı bir analiz yapın - ancak IMO bu şekilde gerçekten tam görünmüyor ne de verimli ) - Resmi bir tanım verin (veya buna yakın, örneğin daha akademik veya matematiksel tarzda).
- Tamamen somut dilin anlamsal bağlamına veya a priori programlama deneyimine dayanan felsefi bir tanım verin (topluluk tarafından başarılı bir açıklama şansı olmalı).
Şu anki sürümüm: " İşlemler ve işlenenler arasında ( dilbilgisel olarak ) belirli bir programlama ( biçimsel ) dilinin yanı sıra bu türün bir nesne (OOP açısından) olup olmadığı her işlenenin türünü hakkında çıkarımda bulunabiliyorsa, böyle bir dilde bu dilde bir nesne olan en az bir tür olduğu sürece OO dili. Son olarak, dilin tüm türleri de nesneyse, bu dili saf (güçlü) OO dili olarak tanımlıyoruz. "
Herhangi bir olası gelişme takdir ediyorum. Gördüğünüz gibi, tanımı "nesne" terimine bağımlı hale getirdim (genellikle tamamen nesne sınıfı olarak adlandırılır).
[DÜZENLE]
Ayrıca, yazılan dillerde olduğu gibi bir tip (neyse ki iyi anlaşılmış) kavramını kullanıyorum . Veri tipi programlama veya tip odaklı programlama sadece sözdizimsel bir yorum değildir (program metninin, yani değişmez değerlerin ve veri değişkenlerinin belirli değerlerinin nasıl ele alınacağı - tip güvenliğine dönüşen bir şey), ancak dil gramerine atfedilebilir ve resmi bir şekilde incelenebilir (matematiksel mantık kullanılarak) tür sistemleri olarak adlandırılır . Belirli bir tip sisteminin evrensel bir tipe sahip olmasını gerektirmenin OO dilinin saflığını tanımlamanın yollarından biri olduğuna dikkat edin (bunu anlamsal olarak genişletmenin yolları vardır).
NB
nasıl cevap verilir :
- terminoloji ve kavramlar hakkındaki anlayışınızı destekleyen / açıklayan bir kitap veya referans belirtirseniz yardımcı olur (genellikle iyi bir tanım, temel hariç tüm bağımlı kavramları kapsar veya referans alır).
- mümkünse cevabınızın / tanımınızın girintili bir kategorisini aksi belirtilmedikçe belirtin (yukarıya bakın: 1 - dil örneğine göre, 2 - matematiksel mantık, 3 - teknik açıklama ve programlama felsefesi)
- sınıflandırma önemlidir (ve ayrıca saf-OO terimi OO terimine dahil edildiğinden), cevaplama OO paradigmasının elemanlarını diğer iyi bilinen metodolojilerden karıştırmaya çalışın (ve hiçbir şekilde bunları karıştırmayın / örtüşmeyin, örneğin tipik olarak modüler programlama unsurları kapsanabilir / OO programlama ile somutlaştırılmış): OOP'yi fonksiyonel programlama, Mantıksal programlama (özellikle güçlü bir şekilde uzmanlaşmış), Soyut Veri Tipleri (ADT), Modüler, Metaprogramlama (jenerikler ve LISP'nin makro genişleme süresinden) ayırmaya çalışın, Sözleşmeler (örn. Eyfel), Unsur yönelimli (AO), (deklaratif ve fonksiyonel sınıflandırma ile Dijkstra'nın yapılandırılmış tarihsel tanımları arasındaki fark açıktır)
biçimsel bir tanım verme zorluğu üzerine : şaşırtıcı bir şekilde, belirli bir mantıksal (biçimsel) sistem biçiminde (büyük olasılıkla tür temelli) OOP'nin matematiksel bir tanımını vermek ve bir kavramı birbiri ardına tanımlamak çok kolaydır. Hatta bu formalizmi,sadece soyut eğlence veya egzersizdenziyade güvenlik kontrolüne veya yeni dil tasarım yönlerine (bu Sezgisel Tip Teorisi , Bağımlı türler , bağımsız olarak, FOL formalizmlerinde lambda kalkülüsü olarakarama formülü)uygulayarak daha pratik bir şey yapmaya çalışabilir.ve sadece kategori teorisini kullanarak). Buradaki ana nokta, şaşırtıcı bir şekildebu tür formülasyonlar IMO, büyük olasılıkla başlangıçta eksik OOP (bilgisayar mühendisliğinde) anlayışı ile güçlü bir şekilde önyargılıdır (kusurludur) ve daha sonra neredeyse erişilemez hale gelir (böylece programlama dünyasına geriye doğru katkıda bulunmaz - belki de belirli bir yüzdenin uygulamaları popüler dillere entegre edilmiştir ).
Yani evet, sadece tanım değil, “iyi” bir tanım vermek de zor. Ancak deneyimleriniz ve doğrudan katılımınız nedeniyle bunu burada sormaktan olumluyum arkadaşlar.