Tarih: Çar, 23 Tem 2003 09:33:31 -0800 Kime: Stefan Ram [gizlilik için kaldırıldı] Kimden: Alan Kay [gizlilik için kaldırıldı] Konu: Re: "nesne yönelimli" nin açıklanması
Selam Stefan -
Gecikme için üzgünüm ama tatildeydim.
Stefan Ram, 18:27 +0200 7/17/03 tarihinde şunları yazdı:
Sevgili Dr. Kay,
Konuyla ilgili eğitim sayfam için "nesne yönelimli programlama" terimiyle ilgili bir miktar söz sahibi olmak istiyorum. "Yetkili" olarak düşündüğüm tek iki kaynak, "ISO / IEC 2382-15" te "nesne yönelimli" yi tanımlayan Uluslararası Standartlar Örgütü ve siz de onların dediği gibi, bu terimi siz yazdınız.
Yaptığımdan oldukça eminim.
Ne yazık ki, o terimin tanımını veya açıklamasını içeren bir web sayfası veya kaynağı bulmak zor. Bu konuda söyleyebilecekleriniz hakkında birkaç rapor var (“kalıtım, polimorfizm ve kapsülleme” gibi), ancak bunlar ilk elden kaynaklar değil. Ayrıca daha sonra "mesajlaşma" konusuna daha çok önem verdiğinizi biliyorum - ama yine de "nesne yönelimli" hakkında bilmek istiyorum.
Kayıtlar için, eğitim sayfam, ek dağıtım ve yayın bölümlerini açıklar mısınız?
"Nesne yönelimli" terimi ilk olarak ne zaman ve nerede kullanıldı?
Utah'da, Kasım 66'dan sonra, ARPAnet için tasarlanan Eskiz defteri, Simula, Burroughs B5000 ve Biyoloji ve Matematik alanındaki geçmişimden etkilendiğim zaman, programlama için bir mimari düşündüm. Muhtemelen biri bana ne yaptığımı sorduğunda 1967’de oldu ve ben de dedim ki: “Nesneye yönelik programlama”.
Orijinal anlayışı aşağıdaki bölümleri vardı.
Nesnelerin bir biyolojik ağ hücreleri ve / veya bir ağdaki ayrı bilgisayarlar gibi olduklarını, sadece mesajlarla iletişim kurabildiklerini düşündüm (bu yüzden mesajlaşma en baştan geldi - programlama dilinde mesajlaşmanın yeterince verimli bir şekilde nasıl yapılacağını görmek biraz zaman aldı. Bir işe yara).
Verilerden kurtulmak istedim. B5000 bunu neredeyse inanılmaz HW mimarisi ile yaptı. Hücre / tüm bilgisayar metaforunun verilerden kurtulacağını ve “<-” mesajının başka bir mesaj belirteci olacağını fark ettim (bunu düşünmem biraz zaman aldı çünkü tüm bu sembollerin isimlerini düşündüm. fonksiyonlar ve prosedürler.
Matematik arkaplanım, her nesnenin kendisiyle ilişkili birkaç cebir olabileceğini ve bunların aileleri olabileceğini ve bunların çok çok faydalı olacağını fark etmemi sağladı. "Polimorfizm" terimi çok daha sonra dayatıldı (bence Peter Wegner tarafından) ve gerçekten geçerli değil, çünkü gerçekten fonksiyonların isimlendirilmesinden geliyor ve ben de fonksiyonlardan biraz daha fazlasını istedim. Yarı-cebirsel formda jenerik davranışlarla başa çıkmak için "jeneriklik" terimini kullandım.
Simula I veya Simula 67'nin miras yapma şeklini beğenmedim (Nygaard ve Dahl'ın sadece muazzam düşünürler ve tasarımcılar olduğunu düşünmeme rağmen). Bu yüzden mirası, daha iyi anlayana kadar yerleşik bir özellik olarak bırakmaya karar verdim.
Bu mimari ile ilgili özgün deneylerim, van Wijngaarten'in ve Wirth'in "Algol'ün Genelleştirilmesi" ve Wirth'in Euler'in uyarladığı bir model kullanılarak yapıldı. Bunların her ikisi de oldukça LISP'ye benzer, ancak daha geleneksel bir okunabilir sözdizimine sahipti. O zamanlar canavar LISP'in somut meta-dil fikrini anlamadım, ancak Irons'un IMP'si de dahil olmak üzere çeşitli kaynaklardan elde edilen genişletilebilir diller hakkındaki fikirlerle biraz daha yakınlaştım.
Bunun ikinci aşaması sonunda LISP'yi anlamak ve daha sonra bu anlayışı daha küçük ve daha küçük ve daha güçlü ve daha geç sınırlanmış 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 zamanda bir başka büyük etki Carl Hewitt'in PLANNER'dı (ki bu, Prolog'u ne kadar iyi ve ne kadar erken tahmin edebileceği göz önüne alındığında hak ettiği haberi asla almadı).
Xerox PARC'taki orijinal Smalltalk, yukarıdakilerden çıktı. Takip eden Smalltalklar, Tarih bölümünün sonunda şikayet edildi: Simula'ya geri adım attılar ve uzatma mekanizmalarının yerini hiçbir yerde daha kullanışlı olmayan daha güvenli olanlarla değiştirmediler.
"Nesne yönelimli [programlama]" sizin için ne ifade ediyor? (Öğretici benzeri bir girişe gerek yok, kısa bir açıklama [mesela "kalıtım, polimorfizm ve kapsülleme ile programlama"] gibi] kendilerine aşina olan bir okuyucu için diğer kavramlar açısından mümkünse açıklamak gerekli değildir. ", çünkü zaten" Küçük Tarihin Erken Tarihi "nden" nesne "ile ilgili açıklamanızla ilgili kaynaklarım var.)
(Türlere karşı değilim, ancak tam bir acı olmayan herhangi bir tür sistem bilmiyorum, bu yüzden hala dinamik yazmayı seviyorum.)
Bana göre OOP sadece mesajlaşma, yerel alıkoyma ve devlet sürecinin korunması ve saklanması ve her şeyin aşırı geç bağlanması demektir. Smalltalk ve LISP'de yapılabilir. Muhtemelen bunun mümkün olduğu başka sistemler de var, ama onların farkında değilim.
[Ayrıca,] Bahsetmem gereken şeylerden biri, Simula tarafından katalize edilen iki ana yol olduğudur. Erken olanı (sadece kaza ile) aldığım bio / net veri dışı prosedür yoluydu. Bir çalışma hedefi olarak biraz sonra gelen diğeri soyut veri tipiydi ve bu çok daha fazla oyun aldı.
Bütün tarihe bakarsak, proto-OOP olayının ADT ile başladığını, "nesneler" dediğim şeye küçük bir çatal olduğunu görüyoruz - bu Smalltalk'a, vb. Yol açtı - küçük çataldan sonra CS kuruluşu hemen hemen ADT yaptı ve veri prosedürü paradigmasına sadık kalmak istedi. Tarihsel olarak, USAF Burroughs 220 dosya sistemine (Smalltalk tarihinde anlattığım), MIT'deki Doug Ross'un (AED ve önceki) erken çalışmalarına, veri yapılarında gömme prosedürü işaretçilerinin, Sketchpad'in sahip olduğu savundu. tam polimorfizm - örneğin veri yapısındaki aynı uzaklık "ekran" anlamına geliyordu ve temsil edilen yapının, vb. ve Burroughs B5000 için uygun rutinin bir göstergesi olacaktı. Program referans tabloları gerçek "büyük nesneler" idi ve hem "veri" hem de "prosedürlere" dair işaretçiler içeriyordu ancak verilerden sonra gidip bir prosedür gösterici bulmaya çalışıyorsa, genellikle doğru olanı yapabilirdi. Ve Utah'taki ilk şeylerle çözdüğüm ilk problemler, sadece metotları ve nesneleri kullanarak “verilerin kaybolması” idi. 60'ların sonunda (sanırım) Bob Balzer "Dataless Programming" adında oldukça şık bir yazı yazdı ve kısa bir süre sonra John Reynolds, lamda'yı kullandığını gösterdiği ve (1970'de) eşit derecede şık bir yazı "Gedanken" yazdığını söyledi. ifadeleri doğru şekilde veri prosedürleri ile soyutlanmasına izin verir. ancak veriden sonra gidip bir prosedür gösterici bulmaya çalışıyorsa doğru olanı yapabilirdi. Ve Utah'taki ilk şeylerle çözdüğüm ilk problemler, sadece metotları ve nesneleri kullanarak “verilerin kaybolması” idi. 60'ların sonunda (sanırım) Bob Balzer "Dataless Programming" adında oldukça şık bir yazı yazdı ve kısa bir süre sonra John Reynolds, lamda'yı kullandığını gösterdiği ve (1970'de) eşit derecede şık bir yazı "Gedanken" yazdığını söyledi. ifadeleri doğru şekilde veri prosedürleri ile soyutlanmasına izin verir. ancak veriden sonra gidip bir prosedür gösterici bulmaya çalışıyorsa doğru olanı yapabilirdi. Ve Utah'taki ilk şeylerle çözdüğüm ilk problemler, sadece metotları ve nesneleri kullanarak “verilerin kaybolması” idi. 60'ların sonunda (sanırım) Bob Balzer "Dataless Programming" adında oldukça şık bir yazı yazdı ve kısa bir süre sonra John Reynolds, lamda'yı kullandığını gösterdiği ve (1970'de) eşit derecede şık bir yazı "Gedanken" yazdığını söyledi. ifadeleri doğru şekilde veri prosedürleri ile soyutlanmasına izin verir.
Nesneleri veri içermeyen olarak seven insanlar sayıca daha küçüktü ve kendimi, Carl Hewitt, Dave Reed ve birkaç diğerini içeriyordu - bu grubun hemen hepsi ARPA topluluğundandı ve bir şekilde ya da başka bir gruba dahil oldular. Temel hesaplama biriminin bir bütün olarak bilgisayar olduğu ARPAnet'in Internet tasarımı. Fakat sadece bir fikrin ne kadar inatçı bir şekilde dayanabileceğini göstermek için, yetmişli yıllarda ve seksenlerde, nesneler ve mesajlar düşünmek yerine "Uzaktan Prosedür Çağrısı" ile uğraşmaya çalışan birçok insan vardı. Sic transit gloria mundi.
Alkış,
Alan Kay