Rumah  >  Artikel  >  Java  >  Pengaturcaraan Berorientasikan Objek Bukan Seperti Yang Anda Fikirkan, atau Sekurang-kurangnya Ia Tidak Dimaksudkan

Pengaturcaraan Berorientasikan Objek Bukan Seperti Yang Anda Fikirkan, atau Sekurang-kurangnya Ia Tidak Dimaksudkan

王林
王林asal
2024-08-22 06:38:07564semak imbas

Object-Oriented Programming is Not What You Think It Is, or at Least It Wasn’t Meant to Be

"Apabila saya mencipta istilah 'berorientasikan objek,' izinkan saya memberitahu anda, saya tidak memikirkan C++. Idea besar ialah 'pemesejan'... Kunci untuk mencipta sistem yang baik dan boleh diperluaskan terletak lebih kepada mereka bentuk cara modul anda berkomunikasi antara satu sama lain daripada cara sifat dan tingkah laku dalaman mereka sepatutnya."
"Saya kesal kerana telah lama mencipta istilah 'objek' mengenai subjek ini kerana ia membuatkan orang ramai tertumpu pada idea yang lebih kecil. Idea besar ialah 'mesej.'"
— Alan Kay, pencipta bahasa Smalltalk.

Apabila kita mempelajari pengaturcaraan berorientasikan objek, perkara pertama yang ditunjukkan kepada kita ialah idea bahawa kereta mempunyai sifat seperti pintu dan roda, bahawa televisyen mempunyai tingkah laku menghidupkan dan mematikan, bahawa rumah mempunyai tingkap yang boleh buka dan tutup. Tetapi sistem sebenar tidak kelihatan seperti itu.
Anda akan melihat objek yang dipanggil HTTPRequest, tetapi anda tidak akan melihat objek yang dipanggil televisyen. Anda akan menemui logMessage, tetapi bukan house1Joao. Atau juga, ResourceManagement, fileSystem, dsb. Dan sekarang, apakah gelagat yang harus dimiliki oleh "objek" ini?

Idea objek sebagai perwakilan objek dunia nyata muncul sebelum Alan Kay dengan bahasa Simula. Pencipta bahasa, Ole-Johan Dahl dan Kristen Nygaard, sedang mereka bentuk bahasa untuk digunakan untuk simulasi realiti, seperti baris gilir, trafik rangkaian, proses pembuatan, dll. Pengaturcaraan prosedur tidak sesuai untuk menyelesaikan masalah jenis ini.

Di sinilah keperluan untuk satu bentuk pengaturcaraan yang membolehkan anda memberi tumpuan kepada perkara yang benar-benar penting dan meninggalkan pelaksanaan di bawah hud bermula. Bayangkan perlu membina sistem yang teguh dan besar memikirkan lebih lanjut tentang butiran kod daripada masalah itu sendiri. Apatah lagi bahawa bilangan fungsi yang mungkin ada pada kod adalah cukup besar untuk menjadi kusut yang mengelirukan dan tidak jelas.

Mereka mengambil langkah pertama dalam mengabstraksikan konsep yang tidak perlu dalam pengaturcaraan.

"Tetapi itulah OOP moden!" Anda mungkin berseru. Nah, ya dan tidak. Pelaksanaan bahasa Simula untuk paradigma ini adalah berbeza. Tiada tumpuan pada sistem boleh guna semula dan fleksibel tetapi pada acara pemodelan dan proses.
Warisan adalah mudah. Tumpuan adalah pada menapis dan mengkhususkan prosedur dan bukannya fleksibiliti dan hierarki.
Enkapsulasi adalah asas. Tiada konsep pengubah suai akses seperti peribadi, awam dan dilindungi.
Pada asasnya, ideanya adalah untuk mengatur kekacauan kod ke dalam pakej dengan definisi yang lebih jelas.

Beberapa lama kemudian, di Xerox, Alan Kay muncul dengan idea mesejnya. Pada Xerox yang sama yang mencipta grafik komputer dan Smalltalk.
Ideanya pada dasarnya adalah untuk memikirkan objek sebagai makhluk hidup, tetapi bukan sebagai haiwan atau manusia, tetapi sebagai sel. (Alan Kay adalah ahli biologi melalui latihan.)
Tisu hidup berfungsi dengan sempurna berkat komunikasi antara sel. Mereka mempunyai fungsi mereka yang ditakrifkan dengan sangat baik dan tahu cara bertindak balas terhadap 'mesej' yang mereka terima daripada sel lain.
Ideanya adalah untuk mencipta objek yang fungsinya adalah untuk mengetahui cara bertindak balas terhadap mesej dengan cara mereka sendiri. Ia tidak perlu, dan tidak sepatutnya, untuk mengetahui cara tindak balas objek dilaksanakan. Satu-satunya perkara yang anda perlu tahu ialah jenis mesej yang difahami oleh objek tersebut. (Malah, set mesej yang anda boleh 'hantar' kepada objek dipanggil Antara Muka.)
Sebagai contoh, apakah yang anda jangkakan objek jumlah akan dikembalikan apabila anda menghantar mesej "2 + 2"?
Ah, ya. Dalam Smalltalk, semuanya adalah objek, termasuk mesej.
Ya, saya tahu, ia gila. Objek berkomunikasi melalui objek yang mengandungi objek lain. Tetapi itulah ideanya.
"Baiklah, dan bagaimana ini membantu mewujudkan sistem yang boleh diguna semula dan boleh diperluaskan?"
Sistem perisian lebih seperti pendawaian daripada fail. Dan itulah perbezaan yang Alan Kay buat.
Baginya, anda harus bimbang sama ada wayar disambungkan ke kutub yang betul dan bukannya tentang cara fail disusun.

Kesimpulan

Pengaturcaraan Berorientasikan Objek, seperti yang diilhamkan oleh Alan Kay, bukan hanya tentang menyusun kod ke dalam struktur yang meniru dunia sebenar, tetapi tentang mencipta sistem yang berkomunikasi dengan cekap melalui mesej. Walaupun OOP moden telah berkembang daripada idea awal Simula dan mendapat populariti dengan bahasa seperti C++ dan Java, fokus sebenar pendekatan ini, iaitu komunikasi antara objek, sering dicairkan.

Memahami visi asal Kay boleh membawa kami untuk mempertimbangkan semula cara kami mereka bentuk dan membina perisian hari ini. Daripada menumpukan hanya pada struktur dalaman objek dan hierarki kelas, kita juga harus menghargai kesederhanaan dan fleksibiliti yang boleh dibawa oleh komunikasi yang direka bentuk dengan baik antara modul.

Kembali kepada akar umbi OOP boleh membantu kami membangunkan sistem yang lebih berdaya tahan, modular dan mudah dikembangkan. Lagipun, seperti yang diingatkan Kay, "idea besar" itu bukan tentang objek itu sendiri, tetapi tentang cara mereka berkomunikasi.


Sumber:

  1. Alan Kay, "The Early History of Smalltalk," dalam History of Programming Languages, 2nd ed., disunting oleh Thomas J. Bergin dan Richard G. Gibson, Addison-Wesley, 1996, hlm. 511-578.
  2. Kristen Nygaard dan Ole-Johan Dahl, "The Development of the SIMULA Languages," dalam History of Programming Languages, 1st ed., disunting oleh Richard L. Wexelblat, Academic Press, 1981, hlm. 439-493.
  3. Bjarne Stroustrup, Bahasa Pengaturcaraan C++, Addison-Wesley, 2013, Prakata dan Bab 1.
  4. Kay, Alan. "Maksud 'Pengaturcaraan Berorientasikan Objek'." E-mel kepada Stefan Ram, 2003.

P.S.: Artikel ini ditulis oleh Moisés Cristiano dan disunting oleh ChatGPT.

Atas ialah kandungan terperinci Pengaturcaraan Berorientasikan Objek Bukan Seperti Yang Anda Fikirkan, atau Sekurang-kurangnya Ia Tidak Dimaksudkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn