Tanggal: Rab, 23 Jul 2003 09:33:31 -0800 Kepada: Stefan Ram [dihapus karena privasi] Dari: Alan Kay [dihapus karena privasi] Subjek: Re: Klarifikasi "berorientasi objek"
Hai Stefan -
Maaf atas keterlambatannya tetapi saya sedang berlibur.
Pada 6:27 PM +0200 7/17/03, Stefan Ram menulis:
Dear Dr. Kay,
Saya ingin memiliki beberapa kata otoritatif pada istilah "pemrograman berorientasi objek" untuk halaman tutorial saya pada subjek. Hanya dua sumber yang saya anggap "berwibawa" adalah Organisasi Standar Internasional, yang mendefinisikan "berorientasi objek" dalam "ISO / IEC 2382-15", dan Anda, karena, seperti yang mereka katakan, Anda telah menciptakan istilah itu.
Saya cukup yakin saya lakukan.
Sayangnya, sulit untuk menemukan halaman web atau sumber dengan definisi atau deskripsi Anda tentang istilah itu. Ada beberapa laporan tentang apa yang mungkin Anda katakan dalam hal ini (seperti "warisan, polimorfisme, dan enkapsulasi"), tetapi ini bukan sumber langsung. Saya juga menyadari bahwa nanti Anda lebih menekankan "pesan" - tetapi saya masih ingin tahu tentang "berorientasi objek".
Untuk catatan, halaman tutorial saya, dan distribusi dan publikasi lebih lanjut dapat Anda jelaskan:
Kapan dan di mana istilah "berorientasi objek" digunakan pertama kali?
Di Utah sekitar 66 November ketika, dipengaruhi oleh Sketchpad, Simula, desain untuk ARPAnet, Burroughs B5000, dan latar belakang saya di Biologi dan Matematika, saya memikirkan arsitektur untuk pemrograman. Itu mungkin pada tahun 1967 ketika seseorang bertanya kepada saya apa yang saya lakukan, dan saya berkata: "Ini pemrograman berorientasi objek".
Konsepsi orisinilnya memiliki bagian-bagian berikut.
Saya memikirkan objek yang seperti sel biologis dan / atau komputer individu di jaringan, hanya dapat berkomunikasi dengan pesan (jadi pesan datang di awal - butuh beberapa saat untuk melihat bagaimana melakukan olahpesan dalam bahasa pemrograman dengan cukup efisien untuk menjadi berguna).
Saya ingin membuang data. B5000 hampir melakukan ini melalui arsitektur HW yang hampir tidak dapat dipercaya. Saya menyadari bahwa metafora sel / seluruh komputer akan menghilangkan data, dan bahwa "<-" akan menjadi token pesan lain (butuh beberapa saat untuk memikirkan hal ini karena saya benar-benar menganggap semua simbol ini sebagai nama untuk fungsi dan prosedur.
Latar belakang matematika saya membuat saya menyadari bahwa setiap objek dapat memiliki beberapa aljabar yang terkait dengannya, dan mungkin ada keluarga ini, dan bahwa ini akan sangat berguna. Istilah "polimorfisme" diberlakukan jauh kemudian (saya pikir oleh Peter Wegner) dan itu tidak cukup valid, karena itu benar-benar berasal dari nomenklatur fungsi, dan saya ingin sedikit lebih dari fungsi. Saya membuat istilah "kedermawanan" untuk berurusan dengan perilaku generik dalam bentuk semi-aljabar.
Saya tidak suka cara Simula I atau Simula 67 mewarisi (meskipun saya pikir Nygaard dan Dahl hanya pemikir dan desainer yang luar biasa). Jadi saya memutuskan untuk meninggalkan warisan sebagai fitur bawaan sampai saya memahaminya dengan lebih baik.
Eksperimen asli saya dengan arsitektur ini dilakukan dengan menggunakan model yang saya adaptasi dari van General Wijngaarten dan Wirth "Generalisasi Algol" dan Wirth's Euler. Keduanya agak mirip LISP tetapi dengan sintaks yang dapat dibaca lebih konvensional. Saya tidak mengerti ide monster LISP tentang bahasa logam berwujud, tetapi menjadi agak dekat dengan ide-ide tentang bahasa-bahasa yang dapat dikembangkan dari berbagai sumber, termasuk IMP milik Irons.
Fase kedua dari ini adalah untuk akhirnya memahami LISP dan kemudian menggunakan pemahaman ini untuk membuat understruktur yang jauh lebih baik dan lebih kecil dan lebih kuat dan lebih terlambat. Tesis Dave Fisher dilakukan dengan gaya "McCarthy" dan gagasannya tentang struktur kontrol yang dapat diperluas sangat membantu. Pengaruh besar lainnya pada saat ini adalah PLANNER Carl Hewitt (yang tidak pernah mendapatkan pengakuan yang layak, mengingat seberapa baik dan seberapa cepat ia mampu mengantisipasi Prolog).
Smalltalk asli di Xerox PARC keluar dari atas. Smalltalk berikutnya mengeluh tentang di akhir bab Sejarah: mereka mundur ke arah Simula dan tidak mengganti mekanisme ekstensi dengan yang lebih aman yang mendekati berguna.
Apa arti "pemrograman berorientasi objek" bagi Anda? (Tidak diperlukan pengenalan seperti tutorial, hanya penjelasan singkat [seperti "pemrograman dengan pewarisan, polimorfisme, dan enkapsulasi"] dalam hal konsep lain untuk pembaca yang akrab dengannya, jika memungkinkan. Selain itu, tidak perlu menjelaskan "objek ", karena saya sudah memiliki sumber dengan penjelasan Anda tentang" objek "dari" Sejarah Awal Smalltalk ".)
(Saya tidak menentang tipe, tapi saya tidak tahu sistem tipe apa pun yang tidak menyakitkan, jadi saya masih suka mengetik dinamis.)
OOP bagi saya hanya berarti pengiriman pesan, penyimpanan lokal dan perlindungan dan menyembunyikan proses negara, dan sangat mengikat semua hal. Ini dapat dilakukan di Smalltalk dan di LISP. Mungkin ada sistem lain di mana ini mungkin, tapi saya tidak menyadarinya.
[Juga,] Salah satu hal yang seharusnya saya sebutkan adalah bahwa ada dua jalur utama yang dikatalisis oleh Simula. Yang pertama (hanya karena kecelakaan) adalah rute non-data-prosedur bio / net yang saya ambil. Yang lain, yang datang sedikit kemudian sebagai objek penelitian adalah tipe data abstrak, dan ini mendapat lebih banyak bermain.
Jika kita melihat seluruh sejarah, kita melihat bahwa hal-hal proto-OOP dimulai dengan ADT, memiliki garpu kecil terhadap apa yang saya sebut "objek" - yang mengarah ke Smalltalk, dll., - tetapi setelah garpu kecil itu, Pembentukan CS cukup banyak melakukan ADT dan ingin tetap dengan paradigma data-prosedur. Secara historis, ada baiknya melihat sistem file USAF Burroughs 220 (yang saya jelaskan dalam sejarah Smalltalk), karya awal Doug Ross di MIT (AED dan sebelumnya) di mana ia menganjurkan menanamkan pointer prosedur dalam struktur data, Sketchpad (yang memiliki polimorfisme penuh - di mana misalnya offset yang sama dalam struktur datanya berarti "tampilan" dan akan ada pointer ke rutin yang sesuai untuk jenis objek yang direpresentasikan oleh struktur, dll., dan Burroughs B5000, tabel referensi program yang benar "objek besar" dan berisi petunjuk untuk "data" dan "prosedur" tetapi sering bisa melakukan hal yang benar jika mencoba untuk mengejar data dan menemukan pointer prosedur. Dan masalah pertama yang saya pecahkan dengan barang-barang awal saya di Utah adalah "menghilangnya data" hanya dengan menggunakan metode dan objek. Pada akhir tahun 60-an (saya pikir) Bob Balzer menulis sebuah makalah yang cukup bagus yang disebut "Pemrograman Dataless", dan tak lama kemudian John Reynolds menulis kertas yang sama bagusnya "Gedanken" (pada tahun 1970 saya pikir) di mana ia menunjukkan bahwa menggunakan lamda ekspresi dengan cara yang benar akan memungkinkan data diabstraksi dengan prosedur. tetapi sering dapat melakukan hal yang benar jika ia mencoba untuk mengejar data dan menemukan pointer prosedur. Dan masalah pertama yang saya pecahkan dengan barang-barang awal saya di Utah adalah "menghilangnya data" hanya dengan menggunakan metode dan objek. Pada akhir tahun 60-an (saya pikir) Bob Balzer menulis sebuah makalah yang cukup bagus yang disebut "Pemrograman Dataless", dan tak lama kemudian John Reynolds menulis kertas yang sama bagusnya "Gedanken" (pada tahun 1970 saya pikir) di mana ia menunjukkan bahwa menggunakan lamda ekspresi dengan cara yang benar akan memungkinkan data diabstraksi dengan prosedur. tetapi sering dapat melakukan hal yang benar jika ia mencoba untuk mengejar data dan menemukan pointer prosedur. Dan masalah pertama yang saya pecahkan dengan barang-barang awal saya di Utah adalah "menghilangnya data" hanya dengan menggunakan metode dan objek. Pada akhir tahun 60-an (saya pikir) Bob Balzer menulis sebuah makalah yang cukup bagus yang disebut "Pemrograman Dataless", dan tak lama kemudian John Reynolds menulis kertas yang sama bagusnya "Gedanken" (pada tahun 1970 saya pikir) di mana ia menunjukkan bahwa menggunakan lamda ekspresi dengan cara yang benar akan memungkinkan data diabstraksi dengan prosedur.
Orang-orang yang menyukai objek sebagai non-data jumlahnya lebih kecil, dan termasuk saya, Carl Hewitt, Dave Reed dan beberapa lainnya - hampir semua kelompok ini berasal dari komunitas ARPA dan terlibat dalam satu atau lain cara dengan desain ARPAnet → Internet di mana unit dasar komputasi adalah seluruh komputer. Tetapi hanya untuk menunjukkan betapa kerasnya sebuah ide dapat bertahan, sepanjang tahun tujuh puluhan dan delapan puluhan, ada banyak orang yang mencoba bertahan dengan "Panggilan Prosedur Jarak Jauh" alih-alih memikirkan objek dan pesan. Sic transit gloria mundi.
Tepuk tangan,
Alan Kay