"Nesne Yönelimi" terimi Dr. Alan Kay tarafından üretilmiştir, bu yüzden ne anlama geldiğine dair yetkili kaynaktır ve onu şöyle tanımlar :
OOP bana sadece mesajlaşma, yerel tutma ve devlet sürecinin korunması ve gizlenmesi ve her şeyin aşırı geç bağlanması anlamına geliyor.
Bunu parçalayalım:
- mesajlaşma (Smalltalk'a aşina değilseniz "sanal yöntem dağıtımı")
- devlet süreci
- yerel olarak muhafaza edildi
- korumalı
- gizli
- her şeyin aşırı geç bağlayıcılığı
Uygulama açısından, mesajlaşma geç bağlı bir prosedür çağrısıdır ve prosedür çağrıları geç bağlıysa, tasarım zamanında ne arayacağınızı bilemezsiniz , bu nedenle devletin somut temsili hakkında herhangi bir varsayım yapamazsınız. Yani, gerçekten mesajlaşma ile ilgili, geç bağlama mesajlaşma uygulamasıdır ve kapsülleme bunun bir sonucudur.
Daha sonra " Büyük fikir" mesajlaşma " olduğunu açıkladı ve" mesaj yönelimli "yerine" nesne yönelimli "olarak adlandırdığı için pişmanlık duydu, çünkü" nesne yönelimli "terimi önemsiz şeye odaklanıyor (nesneler) ) ve gerçekten önemli olandan (mesajlaşma) dikkat dağıtır:
Smalltalk'un sadece sözdizimi ya da sınıf kütüphanesi olmadığını, hatta sınıflarla ilgili olmadığını herkese hatırlatmak için son OOPSLA'da bazı acıları aldığımı nazik bir hatırlatma. Uzun zaman önce bu konu için "nesneler" terimini bulduğum için özür dilerim, çünkü birçok insan daha az fikre odaklanıyor.
Büyük fikir "mesajlaşma" - Smalltalk / Squeak çekirdeği bununla ilgilidir (ve bu Xerox PARC aşamasında asla tam olarak tamamlanmamış bir şeydir). Japonların küçük bir sözcüğü vardır - ma - "arasında" olan - belki de en yakın İngilizce karşılığı "geçiş reklamı" dır. Büyük ve büyütülebilir sistemler üretmenin anahtarı, modüllerinin iç özelliklerinin ve davranışlarının olması gerekenden ziyade nasıl iletişim kurduğunu tasarlamaktır. İnterneti düşünün - yaşamak için, (a) herhangi bir standardın ötesinde birçok farklı türde fikir ve gerçekleştirmeye izin vermek ve (b) bu fikirler arasında değişen derecelerde güvenli birlikte çalışabilirliğe izin vermek zorundadır.
(Elbette, bugün çoğu insan nesnelere değil, daha da yanlış olan sınıflara odaklanıyor.)
Mesajlaşma , hem metafor hem de bir mekanizma olarak OO için esastır .
Birisine mesaj gönderirseniz, onunla ne yaptığını bilmezsiniz. Gözleyebileceğiniz tek şey onların cevabıdır. İletiyi kendileri işleyip işlemediklerini (yani nesnenin bir yöntemi varsa), iletiyi başka bir kişiye iletmişlerse (temsilci / proxy), anladılar bile. Enkapsülasyonun hepsi bu, OO tamamen bununla ilgili. Proxy'yi gerçekte nasıl beklediğinize yanıt verdiği sürece gerçek şeyden ayıramazsınız.
"Mesajlaşma" için daha "modern" bir terim, "dinamik yöntem dağıtımı" veya "sanal yöntem çağrısı" dır, ancak bu metaforu kaybeder ve mekanizmaya odaklanır.
Yani, Alan Kay'ın tanımına bakmanın iki yolu vardır: eğer kendi başına ayakta durursanız, mesajlaşmanın temelde geç bağlı bir prosedür çağrısı olduğunu ve geç bağlama kapsülleme anlamına geldiğini gözlemleyebilirsiniz, böylece # 1 ve # 2 aslında gereksizdir ve OO tamamen geç bağlama ile ilgilidir.
Ancak, daha sonra önemli olanın mesajlaşma olduğunu açıkladı ve böylece farklı bir açıdan bakabiliriz: mesajlaşma geç bağlı. Şimdi, eğer mesajlaşma mümkün olan tek şey olsaydı, o zaman # 3 önemsiz doğruydu: sadece bir şey varsa ve bu şey geç bağlıysa, o zaman her şey geç bağlı. Ve bir kez daha, kapsülleme mesajlaşmadan kaynaklanıyor.
Benzer noktalar William R. Cook tarafından tekrar gözden geçirilen Veri Soyutlamasını Anlama ve ayrıca "Nesne" ve "Nesneye Yönelik" Modern Tanımlar Önerisinde de yer almaktadır .
İşlemlerin dinamik gönderimi, nesnelerin temel özelliğidir. Bu, çağrılacak işlemin nesnenin dinamik bir özelliği olduğu anlamına gelir. İşlemler statik olarak tanımlanamaz ve genel olarak, belirli bir isteğe yanıt olarak hangi işlemin çalıştırılacağı dışında, çalıştırılması dışında hiçbir yol yoktur. Bu, her zaman dinamik olarak gönderilen birinci sınıf işlevlerle tamamen aynıdır.
Smalltalk-72'de herhangi bir nesne bile yoktu! Yalnızca ayrıştırılan, yeniden yazılan ve yeniden yönlendirilen mesaj akışları vardı . İlk önce yöntemler (mesaj akışlarını ayrıştırmak ve yeniden yönlendirmek için standart yollar), daha sonra nesneler geldi (bazı özel durumları paylaşan yöntem grupları). Miras çok sonra geldi ve sınıflar sadece mirası desteklemenin bir yolu olarak tanıtıldı. Kay'ın araştırma grubu prototipleri zaten biliyor olsaydı, muhtemelen ilk etapta hiç ders vermezlerdi.
Türler ve Programlama Dillerinde Benjamin Pierce , Nesne Yönelimi'nin tanımlayıcı özelliğinin Açık Özyineleme olduğunu savunmaktadır .
Alan Kay'a göre OO tamamen mesajlaşma ile ilgili. William Cook'a göre, OO tamamen dinamik yöntem dağıtımı ile ilgilidir (ki bu gerçekten aynı şeydir). Benjamin Pierce'a göre, OO tamamen Açık Özyineleme ile ilgilidir, bu temel olarak öz referansların dinamik olarak çözüldüğü (veya en azından bu düşünmenin bir yolu) veya başka bir deyişle mesajlaşma anlamına gelir.
Gördüğünüz gibi, "OO" terimini icat eden kişi nesneler üzerinde oldukça metafizik bir görüşe sahiptir, Cook oldukça pragmatik bir görüşe sahiptir ve Pierce çok titiz bir matematiksel görüşe sahiptir. Ama önemli olan şudur: filozof, pragmatist ve teorisyen aynı fikirde! Mesajlaşma OO'nun tek direğidir. Dönemi.
Burada kalıtımdan bahsedilmediğine dikkat edin! Kalıtım OO için gerekli değildir. Genel olarak, çoğu OO dilinin yeniden kullanım için bir yolu vardır, ancak bunun kalıtım olması gerekmez. Örneğin bir çeşit heyet de olabilir. Aslında, Orlando Antlaşması tartışır heyeti miras alternatif ve farklı nesne oiented dillerin tasarım alanı içinde farklı tasarım noktalarına heyet ve miras kurşun formları olarak. (Aslında Java gibi kalıtımı destekleyen dillerde bile, insanlara bundan kaçınmayı öğrettiklerini, yine OO için gerekli olmadığını belirttiklerini unutmayın.)