it-swarm.asia

Peki * Alan Kay "nesne yönelimli" terimi ile gerçekten ne anlama geliyordu?

Alan Kay, "nesne yönelimli" teriminin mucididir. Ve çoğu zaman OO bugün dediğimiz şeyin kastettiği şey olmadığını) söylediği söylenir.

Örneğin, bunu Google’da buldum:

'Nesne yönelimli' terimini oluşturdum ve size C++ aklımda olmadığını söyleyebilirim

- Alan Kay, OOPSLA '97

Onun ne anlama geldiği hakkında oldukça anlayışlı bir şey duyduğumu hatırlıyorum . "İleti geçen" satırları boyunca bir şey.

Ne demek istediğini biliyor musun? Ne anlama geldiğini ve bugünün ortak OO'sundan nasıl farklı olduğunu daha ayrıntılı olarak doldurabilir misiniz? Varsa lütfen bazı referansları paylaşın.

Teşekkürler.

104
Charlie Flowers

http://www.purl.org/stefan_ram/pub/doc_kay_oop_en


Tarih: Çar, 23 Tem 2003 09:33:31 -0800 Alıcı: Stefan Ram [gizlilik için kaldırıldı] Kimden: Alan Kay [gizlilik için kaldırıldı] Konu: Re: "nesne yönelimli" nin açıklaması

Merhaba Stefan -

Gecikme için özür dilerim ama tatildeydim.

6:27 PM +0200 7/17/03), Stefan Ram şunu yazdı:

Sevgili Dr. Kay,

Konuyla ilgili öğretici sayfam için "nesne yönelimli programlama" teriminde bazı güvenilir Word'leri kullanmak istiyorum. "Yetkili" olduğunu düşündüğüm iki kaynak, "ISO/IEC 2382-15" te "nesne yönelimli" yi tanımlayan Uluslararası Standartlar Organizasyonu'dur ve siz söyledikleri gibi bu terimi icat ettiniz.

Yaptığımdan eminim.

Ne yazık ki, bu terimi tanımladığınız veya açıkladığınız bir web sayfası veya kaynak bulmak zordur. Bu konuda söyledikleriniz hakkında birkaç rapor var ("kalıtım, polimorfizm ve kapsülleme" gibi), ancak bunlar ilk elden kaynak değildir. Daha sonra "mesajlaşmaya" daha fazla önem verdiğinizin de farkındayım - ama yine de "nesne yönelimli" hakkında bilmek istiyorum.

Kayıtlar, eğitim sayfam ve daha fazla dağıtım ve yayın için lütfen açıklayabilir misiniz?

"Nesneye yönelik" terimi ilk olarak ne zaman ve nerede kullanıldı?

66 Kasım'dan sonra Utah'ta Sketchpad, Simula, ARPAnet tasarımı, Burroughs B5000 ve Biyoloji ve Matematik alanındaki geçmişimden etkilenerek programlama için bir mimari düşündüm. Birisi bana ne yaptığımı sorduğunda muhtemelen 1967'de oldu ve dedim ki: "Nesne yönelimli programlama".

Orijinal anlayışı aşağıdaki bölümlere sahipti.

  • Nesnelerin bir ağdaki biyolojik hücreler ve/veya bireysel bilgisayarlar gibi olduğunu düşündüm, sadece mesajlarla iletişim kurabiliyordum (bu yüzden mesajlaşma en başta geldi - bir programlama dilinde mesajlaşmanın nasıl verimli bir şekilde yapılacağını görmek biraz zaman aldı Bir işe yara).

  • Verilerden kurtulmak istedim. B5000 bunu neredeyse inanılmaz HW mimarisiyle neredeyse yapmıştır. Hücre/tüm bilgisayar metaforunun verilerden kurtulacağını ve "<-" sadece başka bir mesaj jetonu olacağını fark ettim (bunu düşünmek biraz zaman aldı çünkü tüm bu sembolleri gerçekten isimler olarak düşündüm fonksiyonlar ve prosedürler.

  • Matematik geçmişim, her nesnenin kendisiyle ilişkili birkaç cebir olabileceğini ve bunların aileleri olabileceğini ve bunların çok yararlı olacağını fark etmemi sağladı. "Polimorfizm" terimi çok daha sonra da uygulandı (Sanırım Peter Wegner tarafından) ve bu gerçekten geçerli değil, çünkü gerçekten fonksiyonların isimlendirilmesinden geliyor ve fonksiyonlardan biraz daha fazlasını istedim. Yarı cebirsel bir biçimde genel davranışlarla başa çıkmak için "jeneriklik" terimini oluşturdum.

  • Simula I veya Simula 67'nin miras alma şeklini beğenmedim (Nygaard ve Dahl'ın sadece muazzam düşünürler ve tasarımcılar olduğunu düşündüm). Bu yüzden mirasımı daha iyi anlayana kadar yerleşik bir özellik olarak bırakmaya karar verdim.

Bu mimari ile ilgili orijinal deneylerim, van Wijngaarten ve Wirth'in "ALGOL Genellemesi" ve Wirth'in Euler'inden uyarladığım bir model kullanılarak yapıldı. Bunların her ikisi de oldukça LISP benzeri ancak daha geleneksel okunabilir sözdizimine sahipti. O zamanlar canavar LISP'in somut üstdüzey fikrini anlamadım, ancak Irons'un IMP'si de dahil olmak üzere çeşitli kaynaklardan gelen genişletilebilir diller hakkında fikirlere biraz yaklaştım.

Bunun ikinci aşaması sonunda LISP'yi anlamak ve daha sonra bu anlayışı çok daha güzel ve daha küçük, daha güçlü ve daha geç bağlı alt yapılar yapmak için kullanmaktı. Dave Fisher'ın tezi "McCarthy" tarzında yapıldı ve genişletilebilir kontrol yapıları hakkındaki fikirleri çok yardımcı oldu. Bu sırada bir başka büyük etki, Carl Hewitt'in PLANNER'iydi (Prolog'u ne kadar iyi ve ne kadar erken tahmin edebildiği göz önüne alındığında, hak ettiği hiçbir zaman tanınmadı).

Xerox PARC'daki orijinal Smalltalk yukarıdakilerden çıktı. Sonraki Smalltalk, Tarih bölümünün sonunda şikayette bulunur: Simula'ya ters kayırlar ve uzatma mekanizmalarını, yakınında herhangi bir yere kadar daha güvenli olanlarla değiştirmediler.

"Nesneye yönelik [programlama]" sizin için ne ifade ediyor? (Öğretici benzeri bir giriş gerekmez, sadece tanıdık bir okuyucu için diğer kavramlar açısından kısa bir açıklama [örneğin “kalıtım, polimorfizm ve kapsülleme ile programlama”]. Mümkünse nesneyi açıklamak gerekli değildir " ", çünkü" Smalltalk Erken Tarihi "nden" nesne "açıklamanızla ilgili kaynaklara zaten sahibim.)

(Tiplere karşı değilim, ama tam bir acı olmayan herhangi bir tip sistemi bilmiyorum, bu yüzden hala dinamik yazmayı seviyorum.)

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. Smalltalk ve LISP'de yapılabilir. Muhtemelen bunun mümkün olduğu başka sistemler de var, ama bunların farkında değilim.

[Ayrıca,] Bahsetmem gereken şeylerden biri, Simula tarafından katalize edilen iki ana yol olmasıydı. İlk aşama (sadece tesadüfen) aldığım bio/net veri prosedürü olmayan yoldu. Bir süre sonra bir çalışma nesnesi olarak gelen diğeri soyut veri türleridir ve bu çok daha fazla oyun oynamıştır.

Tüm tarihe bakarsak, ADT ile başlayan proto-OOP şeylerinin, "nesneler" dediğim şeye doğru küçük bir çatalı olduğunu görüyoruz - bu da Smalltalk'e yol açtı, vb. - Ama küçük çataldan sonra, CS kuruluşu hemen hemen ADT yaptı ve veri prosedürü paradigmasına sadık kalmak istedi. Tarihsel olarak, Doug Ross'un erken çalışması olan USAF Burroughs 220 dosya sistemine (Smalltalk tarihinde tanımladığım), gömme prosedürünü savunduğu MIT (AED ve daha önceki)) veri yapılarındaki işaretçiler, Sketchpad (tam polimorfizme sahipti - örneğin veri yapısındaki aynı ofset "görüntüleme" anlamına geliyordu ve temsil edilen yapının türü için uygun rutine bir işaretçi olacaktı ve Program referans tabloları gerçek "büyük nesneler" olan ve hem "veri" hem de "prosedürler" için işaretçiler içeren ancak verilerin peşinden gidip bir prosedür işaretçisi bulduysa genellikle doğru olanı yapan B5000 Burroughs. benim Utah şeyleri ile çözdüğüm sorunlar sadece yöntemleri ve nesneleri kullanarak "verilerin kaybolması" idi. 60'lı yılların sonunda (sanırım) Bob Balzer "Dataless Programming" adında oldukça şık bir kağıt yazdı ve kısa bir süre sonra John Reynolds yazdı eşit derecede şık bir kağıt "Ged anken "(1970 yılında sanırım) lamda ifadelerini doğru şekilde kullanmanın verilerin prosedürlerle soyutlanmasına izin vereceğini gösterdi.

Nesneleri veri olmayan olarak beğenenlerin sayısı daha küçüktü ve kendimi Carl Hewitt, Dave Reed ve diğer birkaçını da içeriyordu - bu grubun hemen hepsi ARPA topluluğundan ve temel hesaplama biriminin tam bir bilgisayar olduğu ARPAnet → Internet tasarımına şu ya da bu şekilde dahil oldular ama yetmişli ve seksenli yıllar boyunca bir fikrin ne kadar inatla asılabileceğini göstermek için nesneleri ve mesajları düşünmek yerine "Uzaktan Yordam Çağrısı" ile almaya çalıştı.

Alkış,

Alan Kay

90
Manoj

Alan Kay'ın nesne yönelimi ile kastettiği şeylerin çoğu Smalltalk dilinde somutlaştırılmıştır.

Ayrıca, http://en.wikipedia.org/wiki/Message_passing#Influences_on_other_programming_models :

Alan Kay, mesaj geçişinin OOP'deki nesnelerden daha önemli olduğunu ve nesnelerin kendilerinin sıklıkla aşırı vurgulandığını iddia etti. Canlı dağıtılmış nesneler programlama modeli bu gözlem üzerine kuruludur; dağıtılmış bir veri akışı kavramını, üst düzey, işlevsel stil belirtimlerini kullanarak karmaşık bir dağıtılmış sistemin mesaj örüntüleri açısından davranışını karakterize etmek için kullanır.
23
Mark Cidade

Alan Kay'ın nesne yönelimi ile kastettiği şeylerin çoğu değilse de Smalltalk dilinde somutlaşır.

"Tüm fikri PARC'ta bile yapmadık. Carl Hewitt'in Aktörlerin fikirlerinin çoğunun orijinal Smalltalk tarafından tetiklenen çoğu, sonraki Smalltalks'tan daha = OOP) ruhundaydı. Erlang daha gerçek bir OOP dil mevcut Smalltalk ve kesinlikle "OOP Paint" ile boyanmış C tabanlı diller gibi.

Alan Kay'ın yorumundan alınmıştır:

http://computinged.wordpress.com/2010/09/11/moti-asks-objects-never-well-hardly-ever/

6
Thiago Silva

Alan Kay ve Jim Coplien gibi diğer çalışmaları takip etmekten aldığım en önemli noktalardan biri, gerçek "nesne" odaklı programlamanın bilgisayarları ve yazılımları İNSAN/KULLANICI zihinsel modelleri açısından modellemeyle ilgili olmasıdır. sadece PROGRAMMERS için bir araç.

Anladığım kadarıyla Alan'ın vizyonu OOP bilgisayarı bir insan kullanıcının istediği şeyi yapmasına izin veren bir araç yapmaktı: bilgisayarın tüm yetenekleri doğrudan bir son kullanıcı tarafından sezgisel interaktif model: Sadece kod yoluyla değil, çalışma zamanı nesnelerini ve etkileşimleri DOĞRUDAN görüntüleyebilmeli ve şekillendirebilmeliyim.

Kavramın bir kanıtı olarak JavaScript'te bunun bazı sürümlerini deneme planlarım hakkında bir yazı: http://www.cemetech.net/forum/viewtopic.php?p=234494#234494

Yazılım geliştirme/programlama açısından Jim Coplien, kodun kullanıcıların zihinsel modeline nasıl benzeyebileceğinden bahsediyor. Yani, kod, bir kişinin davranışını tanımlayan sesiyle aynı şekilde okur. Bu büyük ölçüde SINIFLAR ve TÜRLER yerine OBJECTS açısından düşünülerek gerçekleştirilir. Davranış, bir nesnenin IDENTITY tanımının bir parçası olarak değil, nesneler tarafından oynanan ROLES terimleriyle açıklanır. Etkileşimleri, bir etkileşimde oynadıkları ROLE tarafından tanımlanan nesneler açısından modelleyebilmelisiniz. İnsan zihinsel modelleri şu şekilde çalışır: Garson, Müşteri, Kasiyer, Kaynak Hesap, Hedef Hesap, ... Bunlar TÜRLER değil, ROLES, ve o anda bu rolü oynayan herhangi bir nesne için yöntemler tanımlamak istiyorsunuz. ", çünkü bu davranış, bazı TYPE tanımının bir parçası olmaktan ziyade, değişen nesneler arasındaki sistem etkileşiminin bir parçasıdır.

6
user1270393