Alan Kay tidak menemukan benda

Orang terus berpendapat bahwa bahasa berorientasi objek modern sebenarnya "tidak berorientasi objek" karena mereka tidak memenuhi definisi OOP Alan Kay. Menurut pendapat saya, ini masuk akal, meskipun saya tidak setuju dengan kesimpulannya. Baru-baru ini, saya bertemu orang-orang yang mengatakan bahwa Kay-lah yang menciptakan benda-benda itu. Ini sebenarnya tidak benar.


Alan Kay tidak menemukan benda. Mereka berada di Simula , yang mengarah ke Smalltalk-72 sebagai sumber inspirasi utama (hlm. 117). Terbitan Byte tahun 1981, sebuah majalah populer yang mempopulerkan Smalltalk dan OOP, mengatakan bahwa "ide dasar objek, pesan, dan kelas berasal dari SIMULA." Dikatakan bahwa Simula memungkinkan pengguna untuk membuat "sistem berorientasi objek", yang mungkin terlalu banyak, namun demikian. Tim Smalltalk mengenal sistem benda-benda Simula dengan baik dan mendapat inspirasi darinya.


Salah satu alasan mengapa mitos seperti itu masih hidup adalah apa yang dikatakan Kay sendiri pada tahun 1998 :


Saya hanya mengingatkan Anda bahwa pada OOPSLA terakhir saya mencoba menyampaikan kepada semua orang bahwa Smalltalk bukan hanya BUKAN sintaks atau perpustakaan kelas, tetapi bahkan kelas. Saya sangat menyesal bahwa saya sebelumnya menciptakan istilah "objek" untuk topik ini, karena itu membuat banyak orang fokus pada ide yang lebih kecil.

Dan selanjutnya dalam wawancara ini dia melanjutkan:


Maksudku, aku menemukan istilah "benda." Karena kami membuat objek pertama, tidak ada objek lain untuk meradikalisasi ini.

Dia kemudian berhenti mengatakan ini , tetapi orang masih terus menggunakan kutipan itu sebagai fakta.


Alan Kay menemukan istilah "Pemrograman Berorientasi Objek"


Ini mutlak benar.


OOP ada di kelas dan objek


Baru-baru ini, banyak yang terus berpendapat bahwa OOP sebenarnya tidak ada di kelas dan objek, dan bahwa sebenarnya, pesan yang paling penting adalah. Dalam posting tahun 1998, setelah Kay mengatakan dia menyesali "objek," dia juga mengatakan bahwa "ide bagus adalah pesan." Dia lebih lanjut menulis :


OOP bagi saya hanyalah pesan, pertahanan lokal dan perlindungan, menyembunyikan negara dan kemudian mengikat semuanya. Ini dapat dilakukan di Smalltalk dan di LISP. Mungkin ada sistem lain di mana ini mungkin, tetapi saya tidak tahu tentang mereka.

Pada OOP awal, sebagian besar pesan dianggap penting, terutama untuk fasilitas servis. Begini cara Don Ingalls menjelaskan OOP dalam pengantar Smalltalk-76 :


Smalltalk lebih berorientasi objek daripada berorientasi fungsi, dan ini sering membingungkan orang dengan pengalaman dalam ilmu komputer. Misalnya, <someobject>+4 berarti mengirim +4 objek sebagai pesan. Perbedaan utama adalah bahwa semuanya dikendalikan oleh objek, bukan + . Jika <someobject> adalah bilangan bulat dari 3, maka hasilnya adalah bilangan bulat dari 7. Namun, jika <someobject> adalah string 'Meta' , hasilnya bisa menjadi Meta4 . Dengan demikian, beban semantik sejalan dengan objek sistem, dan kode tetap merupakan bentuk abstrak, hanya mengarahkan aliran pesan.

Dalam Mikroelektronika dan Komputer Pribadi, Kay berbicara tentang sistem pesan-ke-tindakan di mana "setiap tindakan milik keluarga," dan berbicara tentang memperluas kegiatan dalam "sudut pandang" hubungan objek sebagai perbatasan masa depan. Dalam buku petunjuk Smalltalk-72, ia menulis (hlm. 18):


Gagasan utama saat menulis program Bicara kecil adalah untuk menentukan kelas yang menangani hubungan antara objek di lingkungan yang dibuat.

Ketika melihat sumber-sumber awal, gambar terbentuk bahwa OOP terdiri dari tiga ide utama: kelas yang mendefinisikan protokol dan implementasi, objek sebagai instance dari kelas dan pesan sebagai alat komunikasi. Gagasan bahwa kelas dan objek adalah pesan sekunder muncul jauh kemudian.


Smalltalk adalah bahasa berorientasi objek nyata pertama


ACM mempersembahkan Turing Premiere kepada Dahl dan Nyugor, dan menyebut mereka "rekan penulis PLO." Byte juga menulis bahwa Simula berorientasi objek, dan dalam artikel "Revolusi Komputer belum terjadi," Kay menyebut Sketchpad "sangat berorientasi objek." Menurut pendapat saya, ini tidak cukup mengakui manfaat Smalltalk. Tidak seperti sistem lain, dalam Smalltalk:


  • Tidak ada primitif tanpa objek: angka adalah objek, kesalahan adalah objek, kelas adalah objek, pesan adalah objek.
  • Anda dapat mengirimkan pesan ke objek apa pun, termasuk pesan lainnya.
  • Metode dan implementasi dikaitkan dengan objek, bukan dengan sesi.

Poin terakhir adalah yang paling rumit dan mungkin paling penting, meskipun tidak ada yang benar-benar menjelaskan apa yang membuatnya begitu istimewa. Dalam Simula, menjalankan metode yang hilang menyebabkan kesalahan. Ini adalah bagian dari spesifikasi Simula. Di Smalltalk-80, jika tidak ada metode yang cocok dengan pesan, objek default mengembalikan pesan doesNotUnderstand . Penelepon dapat menanggapinya, atau meneruskan pesan, atau menandakan kesalahan. Kelas juga dapat mengesampingkan tindakan default dan melakukan sesuatu selain mengembalikan doesNotUnderstand .


Ini juga berarti bahwa sistem pesan tidak tergantung pada struktur internal objek. Mereka bahkan tidak harus menjadi bagian dari satu proyek. Oleh karena itu, Anda dapat melakukan hal-hal seperti mengirim pesan ke objek yang ditulis dalam berbagai bahasa , mengirim definisi objek melalui surat , mengirim pesan melalui SMS, dll. Menurut pendapat saya, ini justru kekuatan "pesan", tetapi pada saat yang sama itu adalah salah satu aspek yang paling sedikit dipelajari.


Smalltalk memiliki konteks sekitar


Orang tidak menciptakan alat secara spontan. Mereka memiliki situasi dan tugas khusus, dan mereka berusaha mencari solusi untuk masalah ini. Inovasi dalam Smalltalk dan OOP tidak terkecuali.


Alan Kay tertarik dengan topik komputer pribadi. Karyanya di FLEX, Dynabook, dan Smalltalk dibangun di sekitar ini. Menurutnya, PC seharusnya sepenuhnya di bawah kendali pengguna; semuanya, dari logika inti sistem hingga rendering grafik, dapat diatur dan dieksplorasi selama operasi. Melewati pesan dan mengikat terlambat memecahkan sejumlah masalah. Jika seorang anak menginstal game baru, apakah saya perlu mengkompilasi ulang seluruh OS untuk menggunakan program baru? Tidak: memungkinkan pengiriman pesan sewenang-wenang ke objek apa pun dan bergantung pada pemrosesan protokol selama bekerja untuk menyelesaikan tugas. (*) Jika seseorang melanggar logika sistem suara, haruskah seluruh OS jatuh? Tentu saja tidak, jadi biarkan benda memutuskan bagaimana memproses pesan itu sendiri. Objek tampil baik di sini.


Ole Dahl dan Kirsten Nyugor berusaha memecahkan masalah yang sama sekali berbeda. Mereka tertarik dengan simulasi . Satu studi dalam panduan Simula memodelkan penyebaran infeksi di antara populasi tetap. Sistem ini benar-benar tertutup: Anda memiliki seperangkat kode yang tetap, Anda menjalankan simulasi dan mendapatkan hasilnya. Bagi mereka, olahpesan tidak berguna. Tetapi kemampuan untuk mendefinisikan simulasi dalam hal simulasi lain, untuk mengkhususkan entitas dan model waktu sebagai objek kelas pertama sangat berguna. Objek juga tampil baik di sini.


Jadi siapa yang menggunakan benda "dengan benar"? Ini adalah pertanyaan yang tidak masuk akal. Mereka melakukan hal yang berbeda karena mereka memiliki tugas yang berbeda. Ide OOP modern kami adalah sintesis dari semua ide mereka, serta gagasan Adele Goldberg, Barbara Liskov, David Parnassus, Bertrand Meyer, Gul Ag dan banyak lainnya. Tapi tidak ada yang bisa mengatakan apa itu "OOP". Konsep berkembang, seperti halnya tugas.


tl; dr


Wawancara yang diambil lebih dari 30 tahun lalu bukan sumber yang baik.




* Mungkin ini membuat Powershell penerus spiritual untuk Smalltalk.

Source: https://habr.com/ru/post/id455638/


All Articles