it-swarm-id.com

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

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 saya ingat pernah mendengar sesuatu yang cukup berwawasan tentang apa yang dia lakukan artinya. 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.

104
Charlie Flowers

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:

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 pada "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 pengiriman pesan sudah dimulai sejak 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 "<-" hanya 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-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.

Percobaan 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, berasal 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-konsep lain untuk pembaca yang akrab dengan mereka, jika mungkin. Juga, 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 sakit sama sekali, jadi saya masih suka mengetik dinamis.)

OOP bagi saya hanya berarti pengiriman pesan, penyimpanan dan perlindungan lokal 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, Pendirian 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 prosedur penyematan pointer dalam struktur data, Sketchpad (yang memiliki polimorfisme penuh - di mana misalnya offset yang sama dalam struktur datanya berarti "tampilan" dan akan ada penunjuk ke rutin yang sesuai untuk jenis objek yang diwakili oleh struktur, dll., dan Burroughs B5000, yang tabel rujukan programnya benar-benar "objek besar" dan berisi petunjuk untuk "data" dan "prosedur" tetapi seringkali dapat melakukan hal yang benar jika mencoba mencari data dan menemukan penunjuk prosedur. masalah yang saya selesaikan dengan barang-barang awal saya di Utah adalah "menghilangnya data" hanya menggunakan metode dan objek. Pada akhir tahun 60an (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 "Ged anken "(pada tahun 1970 saya pikir) di mana ia menunjukkan bahwa menggunakan ekspresi lamda 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 perhitungan 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 bergaul dengan "Panggilan Prosedur Jarak Jauh" alih-alih memikirkan objek dan pesan. Sic transit gloria mundi.

Bersulang,

Alan Kay

90
Manoj

Kebanyakan jika tidak semua yang Alan Kay maksud dengan object-orientasi 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; itu menggunakan konsep aliran data terdistribusi untuk mengkarakterisasi perilaku sistem terdistribusi kompleks dalam hal pola pesan, menggunakan tingkat tinggi, spesifikasi gaya fungsional.
23
Mark Cidade

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 semangat OOP daripada Smalltalks berikutnya. Bagian signifikan Bahasa Erlang lebih seperti bahasa asli OOP 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/

6
Thiago Silva

Salah satu poin utama yang saya ambil dari mengikuti karya Alan Kay dan yang lainnya seperti Jim Coplien adalah bahwa pemrograman berorientasi "objek" yang sebenarnya 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 membuat komputer menjadi alat yang memungkinkan pengguna manusia untuk membuat apa pun yang mereka inginkan: kemampuan penuh komputer secara langsung diekspos kepada pengguna akhir melalui model interaktif 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 di 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 itu. 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 ", karena perilaku itu adalah bagian dari interaksi sistem antara banyak objek yang berubah, bukan bagian dari definisi beberapa TYPE.

6
user1270393