Jadi, apa * yang * Alan Kay maksud dari istilah "berorientasi objek"?

95

Kabarnya, Alan Kay adalah penemu istilah "berorientasi objek". Dan dia sering dikutip mengatakan bahwa apa yang kita sebut OO hari ini bukan yang dia maksud.

Sebagai contoh, saya baru saja menemukan ini di Google:

Saya membuat istilah 'berorientasi objek', dan saya dapat memberitahu Anda bahwa saya tidak memiliki C ++ dalam pikiran

- Alan Kay, OOPSLA '97

Samar-samar aku ingat mendengar sesuatu yang sangat berguna tentang apa yang dia lakukan berarti. Sesuatu di sepanjang baris "message passing".

Apakah Anda tahu apa maksudnya? Bisakah Anda mengisi lebih detail tentang apa yang ia maksudkan dan bagaimana perbedaannya dengan OO biasa saat ini? Silakan bagikan beberapa referensi jika Anda punya.

Terima kasih.

Charlie Flowers
sumber
Anda mungkin menemukan postingan blog saya menarik pada subjek ini: yegor256.com/tag/oop.html
yegor256
Periksa bagian komentar dari posting blog ini, di mana Alan Kay sendiri menjawab pertanyaan: Alan Kay Salah Tentang Dia Menjadi Salah
yegor256

Jawaban:

82

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


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

Manoj
sumber
1
HTTP / 1.1 403 Akses Ditolak.
Pekerjaan
1
Saya hanya dapat mengaksesnya, jadi itu pasti masalah sementara. Terima kasih untuk tautan itu, Manoj.
David Conrad
2
@Job Rabu (16 Maret, hari Anda mendapatkan kesalahan 403) adalah hari layanan bulanan admin domain di userpage.fu-berlin.de). Mereka secara rutin mengambil bagian dari jaringan offline sebulan sekali. Uh, ya, jangan tanya ...
Konrad Rudolph
Bisakah Anda / seseorang mengklarifikasi apa yang dimaksud dengan "Saya ingin menyingkirkan data"? Data adalah bagian integral dari OO (yaitu sering dienkapsulasi dalam suatu kelas, atau diteruskan ke / dari kelas), dan paradigma apa pun yang digunakan, seseorang tidak dapat melakukannya tanpa data dalam komputasi, sehingga membuang data tidak masuk akal bagi saya .
Dennis
1
<- adalah operator penugasan smalltalk asli
DangerMouse
22

Kebanyakan jika tidak semua yang Alan Kay maksudkan dengan orientasi objek diwujudkan dalam bahasa Smalltalk.

Juga, dari http://en.wikipedia.org/wiki/Message_passing#Influences_on_other_programming_models :

Alan Kay berpendapat bahwa menyampaikan pesan lebih penting daripada objek di OOP, dan objek itu sendiri sering terlalu ditekankan. Model pemrograman objek terdistribusi langsung dibangun berdasarkan pengamatan ini; menggunakan konsep aliran data terdistribusi untuk mengkarakterisasi perilaku sistem terdistribusi kompleks dalam hal pola pesan, menggunakan tingkat tinggi, spesifikasi gaya fungsional.
Mark Cidade
sumber
18
Seseorang kemudian bertanya-tanya mengapa ia menyebutnya "Berorientasi Objek" daripada "Berorientasi Pesan".
David Thornley
@ David Thornley: Jadi itu akan membuat metode C ++ berorientasi?
back2dos
60
Saya terlalu blythe tentang istilah kembali di tahun 60-an dan seharusnya memilih sesuatu seperti "berorientasi pesan"
Alan Kay
1
Tetapi apakah yang dimaksud dengan "berorientasi pesan"? (Saya bisa memikirkan panggilan async (mungkin), tetapi tidak benar-benar tahu bahasa apa pun yang tidak menerapkan metode "normal" yang lebih atau kurang; ada satu hal tentang nilai pengembalian, juga, tetapi ini bisa diakali dengan semacam ' parameter ref '/' out 'atau sesuatu seperti itu)
mlvljr
1
"message oriented" pada dasarnya bersifat mengikat / dinamis-mengetik — pesan yang dikirimkan ke objek dianalisis (oleh objek itu) saat runtime.
Mark Cidade
6

Kebanyakan jika tidak semua yang Alan Kay maksudkan dengan orientasi objek diwujudkan dalam bahasa Smalltalk.

"Kami bahkan tidak melakukan semua ide di PARC. Banyak ide Aktor Carl Hewitt yang dipicu oleh Smalltalk asli lebih sesuai semangat OOP daripada Smalltalks berikutnya. Bagian-bagian penting Erlang lebih seperti bahasa OOP nyata Smalltalk saat ini, dan tentu saja bahasa berbasis C yang telah dilukis dengan "OOP paint". "

Diambil dari komentar Alan Kay di:

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

Thiago Silva
sumber
Anda harus menelusuri komentar, berikut tautan langsung ke komentar Alan Kay: computinged.wordpress.com/2010/09/11/…
icc97
Seluruh komentar itu sangat berguna, dimulai dengan jawaban potensial untuk pertanyaan ini: "Contoh bagus dari sistem besar yang saya anggap" berorientasi objek "adalah Internet. Ia memiliki miliaran objek yang sepenuhnya dienkapsulasi (komputer sendiri) dan penggunaannya. sistem pesan murni "permintaan bukan perintah", dll. "
icc97
5

Salah satu poin utama yang saya ambil dari mengikuti karya Alan Kay dan yang lainnya seperti Jim Coplien adalah bahwa pemrograman berorientasi "objek" yang benar adalah tentang pemodelan komputer dan perangkat lunak dalam hal model mental MANUSIA / PENGGUNA, daripada menjadi hanya alat untuk PEMASOK.

Seperti yang saya pahami, visi Alan tentang OOP adalah menjadikan komputer sebagai alat yang memungkinkan pengguna manusia untuk membuat apa pun yang mereka inginkan: kemampuan penuh komputer secara langsung terpapar kepada pengguna akhir melalui model interaktif yang intuitif. Saya harus dapat melihat dan memahat objek runtime dan interaksi secara LANGSUNG, tidak hanya melalui kode.

Berikut adalah posting tentang rencana saya untuk mencoba beberapa versi ini dalam JavaScript sebagai bukti konsep: http://www.cemetech.net/forum/viewtopic.php?p=234494#234494

Dari perspektif pengembangan / pemrograman perangkat lunak, Jim Coplien berbicara tentang bagaimana kode dapat dan HARUS menyerupai model mental pengguna. Artinya, kode membaca dengan cara yang sama seperti yang akan terdengar oleh seseorang yang menggambarkan perilaku itu. Ini sebagian besar dicapai dengan berpikir dalam hal OBYEK, bukan dalam hal KELAS dan JENIS. Perilaku dijelaskan berdasarkan ketentuan ROL yang dimainkan oleh objek, bukan sebagai bagian dari definisi IDENTITAS objek. Anda harus dapat memodelkan interaksi pada istilah objek, yang diidentifikasi oleh ROLE yang mereka mainkan dalam interaksi. Ini adalah cara kerja model mental manusia: Pelayan, Pelanggan, Kasir, Akun Sumber, Akun Tujuan, ... Ini adalah PERAN, bukan JENIS, dan Anda ingin dapat menentukan metode untuk "objek apa pun yang memainkan peran ini pada saat itu ",

pengguna1270393
sumber
DDD menggunakan konsep serupa. Mungkin Anda benar tentang ini. :-)
inf3rno