Alan Kay terimini icat etmeden önce Nesne Yönelimli Programlama olarak ne adlandırdılar?


22

Alan Kay, "nesne yönelimli" terimini oluşturduğumu ve aklımda C ++ olmadığını söyleyebileceğimi iddia ediyor. Aklında olan şey elbette Smalltalk'tı. Ancak nesne yönelimli programlamayı kendisi yapmadı; Simula'dan temel fikirleri aldı. Eğer terim henüz icat edilmediyse, Simula'da aslında nesne yönelimli programlama ne diyorlardı?

Yanıtlar:


39

Aslında Alan Kay , “nesne yönelimli programlama” terimi ile karşılaştığında aklında Smalltalk'a sahip değildi :

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 arka planı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.

Smalltalk, Simula'dan “nesne” ve “sınıf” kavramlarını, Simula'nın sırasıyla ALGOL'den miras aldığı , Simula’nın Kristen Nygaard ve Ole-Johan’ın “Simula Dillerinin Gelişimi” bölümünde tanımladığı gibi ödünç alması ve genişletmesi sonucu ortaya çıktı. Dahl (1978, sayfa 253):

ALGOL'de bloklar (prosedürler dahil) harici olarak genelleştirilmiş operasyonlar olarak görülür. Yarı-paralel sıralama için mekanizmalar getirilerek, esas olarak aynı yapı, işlemlerin paralel olarak ve blok örneklerinin isimlendirilmesi ve içeriklerine erişilmesi için mekanizmalar aracılığıyla genelleştirilmiş veri nesneleri olarak işlev görmesine neden olabilir. Verilerin ve işlemlerin tek bir yapıda birleştirilmesinin temel faydaları zaten araştırılmıştı.

Bu araştırmanın bir sonucu "prosedür özelliklerinin" yararlı olabileceği keşfi idi. Aşağıdaki bir "soyut" otomobil objesi sınıfının örneği, tarikat Dil Tanımlama belgesinden (Dahl ve Nygaard 1965) alıntılanmıştır. 5.3.

Özellikle alt sınıflandırma için daha fazla ilham vermek, CAR Hoare'nin rekor sınıfiydi (sayfa 258):

Hoare (68) alt sınıf fikri doğal bir başlangıç ​​noktasıydı, ancak iki zorluk vardı:

  1. Yalnızca saf veri kayıtlarından değil, kendi eylemleri ve yerel veri yığınlarından oluşan işlem alt sınıflarına ihtiyacımız vardı.
  2. Ayrıca, ortak işlem özelliklerini, daha önce uygulanmayacakları çeşitli çeşitli durumlarda daha sonra uygulanabilecekleri şekilde bir araya getirmemiz gerekiyordu.

1966 sonbaharında, Hoare'nin rekor sınıf yapısını gereksinimlerimizi karşılayacak şekilde başarıya uyacak şekilde adapte etmeye çalışırken çok zaman harcadı. Çözüm aniden geldi, Aralık 1966'da “ön ek” fikriyle. Köprüde, kamyonda ya da otobüsde olan bir sıra araba ile bir köprü kabini olarak düşündük. (Bu örnek tekrar ortaya çıkmaktadır (Dahl ve Nygaard, 1968).

"Sınıf" ve "nesne" terimleri ayrıca Ole-Johan Dahl, Bjorm Myhrhaug ve Kristen Nygaard'ın SIMULA 67 ORTAK TABAN DİLİ'nde de görünür (sayfa 4-5):

Blok kavramı, ortodoks uygulama alanlarında kullanışlı bir ayrıştırma birimi olan "alt problem" veya "alt algoritmanın" sezgisel nosyonuna tekabül eder.

Bir blok, toplanmış bir veri yapısının ve ilgili algoritmaların ve eylemlerin resmi bir açıklaması veya "modeli" dir.

...

Genişletilmiş bir blok kavramı, "sınıf" bildirimi ve "nesne referansları" (işaretçiler), uzaktan erişim "," yarı-paralel "işlem ve blok" birleştirme "gibi ilişkili etkileşim mekanizmalarıyla tanıtılır.

Sınıflar bölüm 1.3.3'te daha ayrıntılı olarak ele alınmıştır (sayfa 5):

Simula 67'deki merkezi yeni bir konsept “nesne” dir. Bir nesne, kendi yerel verilerine ve "sınıf beyanı" ile tanımlanan eylemlere sahip bağımsız bir programdır (blok örneği). Sınıf bildirimi bir program (veri ve eylem) kalıbı tanımlar ve bu kalıba uyan nesnelerin "aynı sınıfa ait" olduğu söylenir.

...

Bu nedenle, "nesne yönelimli" terimi henüz icat edilmemiş olmasına rağmen, Alan Kay 1969'da Smalltalk geliştirmeye başlamadan önce hem "sınıf" hem de "nesne", modern kullanımlarına benzer şekilde kullanıldı.

Ivan Sutherland , Simula'yı ilk nesne yönelimli programlama dili olarak tanımlayana kadar, Sketchpad'de: Bir insan-makine grafiksel iletişim sistemi (sayfa 4), aynı zamanda CAR Hoare, Douglas T. Ross , ALGOL ve Sketchpad'in etkilerini de tanıyor :

Bununla birlikte, Sutherland'ın kullanıcılar ve programcılar arasındaki bölünmeyi kaldırma girişimi, bunu yapmamakta yeni bir programlama paradigmasına yaratıcı bir sıçrama sağlayan tek sistem değildi. Nygaard ve Dahl's Simula [7], nesne yönelimi ilkelerini içeren ilk geleneksel programlama diliydi, ancak Sketchpad'in sınıf ve örnek temelli miras (nesne olarak adlandırılmamasına rağmen) birkaç yıl öncesine kadar uygulanması.

Bu tezin onayında belirtilen ve ayrıca buna dayanan MIT Lincoln Laboratuarı teknik raporunda belirtilen Douglas T. Ross'un çalışmasıyla ortak bir etkisi olduğu görülüyor. Ross, 1960'lı yılların ortalarında CAR Hoare ile birlikte Algol 68 komitesine oturdu; rekor benzeri bir veri yapısındaki (pleks olarak adlandırılan) önceki çalışması, daha sonra Nygaard ve Dahl tarafından yatırılan Hoare'nin soyut veri türleri [3] hakkındaki fikirlerini etkiledi. Simula'daki sınıf tanım mekanizmalarının kökeni olarak [7].

Alan Kay'ın hem Xerox Star'a hem de Smalltalk dili aracılığıyla nesne yönelimli programlamaya ilgi patlamasına neden olan seminal Dynabook projesi, Sketchpad'den doğrudan etkilendi. Kay, Smalltalk nesnesinin, hem Simula'nın bir dağıtım kaseti hem de Sutherland's Sketchpad tezinin bir kopyasının masasında tesadüfen ortaya çıktığını yazdı. Kay, iki sistemin aynı temel tip kavramlarına dayandığını (görünüşe göre Ross'un pleksinden iki farklı yolla türetildiğini) ve bunların daha yaygın olarak kullanılan bir programlama sisteminin temelini oluşturabileceğini kabul etti. Bu iki etki yolunu karşılaştırırken Simula, ilk nesne yönelimli programlama dili olarak tanınan Sketchpad'den çok daha büyük bir projeydi.

Ancak Alan Kay, açık bir şekilde, Smalltalk'ı ilk nesne yönelimli dil olarak kabul ediyor :

Gerçekten asil ataları olmasına rağmen, Smalltalk'ın katkısı, profesyonel programcının büyük sorunlarına saldırmak ve acemi kullanıcılar için küçük olanları mümkün kılmak için nesne odaklı olarak adlandırdığım yeni bir tasarım paradigmasıdır. Nesneye yönelik tasarım, silikon patlamasıyla mümkün olan daha karmaşık dinamik sistemleri ve kullanıcı ilişkilerini modelleme verimliliğini niteliksel olarak iyileştirme girişimidir.

ve bu terimi oluşturduktan sonra, burada çok fazla tartışma olmadığını düşünüyorum.

Sonunda sorunuzu cevaplamak için: Nesne yöneliminin temel kavramlarından bazıları Simula'da ve Algol ve LISP gibi daha önceki dillerde mevcuttu, ancak paradigmanın kendisi yoktu, dolayısıyla gerçekten bir isme ihtiyaç yoktu.

Smalltalk, en azından Alan Kay'ın nesne yönelimi hakkında ne düşündüğünü düşünerek, nesne yönelimi göz önünde bulundurularak tasarlanmıştır :

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.

Mimari, önceki kavramların bir birleşimi gibi görünebilir, ancak merkezi kavramları Smalltalk tarafından tanıtıldı, böylece paradigmanın ilk uygulaması belirlendi.


2
+1 Her zamanki gibi mükemmel cevap Yannis! Bundan epeyce öğrendim.
Jonathan Henson

6
Aslında, çok fazla tartışma var ve bunun için iyi bir sebep var. Alan Kay'ın “yeni bir paradigma” ile ilgili kendi kendini yetiştirdiği iddiasına rağmen, Smalltalk içeren ancak Simula'yı hariç tutan “nesne yönelimi” tanımlamanın neredeyse hiçbir yolu yoktur. "Her şey bir nesnedir" fikri bazı uygulamalarda vardı (ve çoğunlukla Smalltalk'ta da bir kavramdır - bir optimizasyon olarak, küçük tamsayı nesnelerin C veya Pascal gibi bir şeyin kullanabileceğinden neredeyse ayırt edilemez bir temsili vardır).
Jerry Coffin

1
@JerryCoffin Kavramların ve prensiplerin çoğunun orada olduğunu, güneşin altında yeni bir şeyin olmadığını, Smalltalk Kay'ın Erken Tarihi'nde bile Platon'u bir ton etkiden başka bir nesnenin nesnesi yönelimi için bir ilham kaynağı olarak gördüğünü kabul etmiyorum. Şahsen ben Smalltalk'ı paradigmayı ortaya koymuş gibi düşünmeye devam edeceğim, çünkü paradigma düşünülerek tasarlanan ilk uygulama oldu, oysa daha önceki uygulamalarda özelliklerin, çekirdeğin veya küçüğün olduğu, ancak getirdiği itici felsefenin değil, ilgili kavramları uyguladığı dil ileri.
yannis

1
@ JerryCoffin (devam ...) Ancak bu alev savaş bölgesidir ve bunun gerçekten önemli olduğunu düşünmüyorum. Sanırım Sutherland’in alıntıları, herkesin Kay’ın paradigmayı “icat ettiğini” kabul etmediğini ve konu hakkındaki kişisel görüşümün bir dipnottan başka bir şey olmadığını kabul ettiğini düşünüyorum.
yannis

5
Aslında, merkezi kavram “her varlık bir nesnedir” değil, “her eylem bir mesaj gönderme” dir. Alan Kay, “nesne yönelimli” olarak adlandırdığı için pişmanlık duyduğunu ve “mesaj yönelimli” gibi bir şeyin daha iyi bir terim olabileceğini bile söylüyor.
Jörg W Mittag
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.