Pemrograman Berorientasi Objek: Mengapa "Berorientasi"?

14

Saya sebagian besar melewati tingkat pemrograman game saya. Ini bukan gelar ilmu komputer, sehingga banyak teori yang dihindari untuk pengembangan portofolio praktis dan apa yang saya lihat sebagai pembelajaran JIT, yang tampaknya lebih penting dalam industri game. Subjek pertama adalah "Pengantar Pemrograman Berorientasi Objek".

Ungkapan itu tidak mengganggu saya sampai saya belajar tentang paradigma pemrograman yang berbeda (saya mendapatkan daftar ini dari https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Imperatif
  • Fungsional
  • Prosedural
  • Tersusun
  • Didorong oleh acara
  • Berorientasi pada objek
  • Deklaratif
  • Berbasis Automata

Saya mendapatkan bahwa ini bukan daftar lengkap, dan bahwa tidak semua konsep ini sama, dan kebanyakan dari mereka bahkan tidak eksklusif, tetapi saya tidak mengerti mengapa kebanyakan dari mereka hanya mendapatkan satu kata - imperatif; fungsional; deklaratif - tetapi ketika kita berbicara tentang pemrograman dengan objek, kita harus mengklarifikasi bahwa kita berorientasi pada objek-objek itu. Tidak bisakah kita menggunakan benda saja? Tidak bisakah kita memiliki benda? Mengapa mereka harus mengarahkan kita, sebagai bintang penuntun kita?

Melihat di sini ( https://en.wikipedia.org/wiki/Object-oriented_programming ), tidak ada penggunaan istilah "berorientasi" yang dialamatkan sebagai istilahnya sendiri. Hanya "objek" yang dijelaskan.

Juga, saya bisa melihat untuk alasan praktis mengapa Event-Driven digunakan, karena Pemrograman Acara sudah menjadi hal yang Anda lakukan ketika Anda menjalankan konferensi, dan Pemrograman Automata membuatnya terdengar seperti Anda sedang mengatur jalur produksi robot, jadi membantu untuk memiliki kata-kata klarifikasi tambahan di sana.

Apa yang membuat Pemrograman Objek, sebagai frasa, tidak cukup untuk menggambarkan apa yang kita lakukan ketika kita menggunakan objek dalam pemrograman kita?

Jelas dari nada bicara saya, saya tidak terlalu menyukai kata "berorientasi". Itu mengingatkan saya pada waktu saya sebagai reporter pengadilan, mendengarkan pengacara setelah pengacara menggunakan frasa "dalam kaitannya dengan" sebagai semacam kutu verbal. Itu tidak berarti apa-apa; itu hanya istilah yang mereka gunakan untuk mengisi udara sementara mereka mencoba memikirkan apa yang harus dikatakan selanjutnya. Namun, saya tidak mencoba mengadvokasi perubahan bahasa, saya hanya bertanya mengapa demikian. Jika seseorang tahu mengapa itu diketahui seperti itu karena alasan historis murni, maka itulah jawabannya. Itu akan menjadi amunisi jika saya memutuskan untuk membuang waktu menganjurkan perubahan bahasa.

Di sisi lain, jika sebenarnya ada alasan yang berguna mengapa suatu bahasa atau potongan kode harus menunjuk ke objek, dengan mengesampingkan semua arah lain, yang bertentangan dengan hanya memiliki mereka di toolbelt, sebagai alat , saya benar-benar akan tertarik untuk mempelajarinya. Saya suka belajar hal-hal yang bermanfaat.

Luar Biasa
sumber
11
Saya kira "Objektif" atau "Objektif" tidak akan memberikan kesan yang tepat tentang apa yang sebenarnya dimaksud ;-)
Doc Brown
Saya mempertimbangkan "Objektifikasi", tetapi memutuskan untuk mengeluarkan getaran yang salah juga.
Luar Biasa
1
Saya pikir "objek" adalah kesalahan, bukan "berorientasi". Apa yang kita sebut berorientasi objek biasanya berorientasi kelas.
Steve314
1
Adakah penggemar Phoenix Wright yang ingin menyebutnya "OBJECTION !! Programming"?
Katana314

Jawaban:

24

Saya percaya Anda membaca cara terlalu banyak ke dalam membangun tata bahasa yang sederhana. Lihatlah daftar paradigma Anda, diurutkan secara berbeda untuk alasan yang akan segera kita bahas:

  • Imperatif
  • Fungsional
  • Prosedural
  • Tersusun
  • Deklaratif
  • Didorong oleh acara
  • Berbasis Automata
  • Berorientasi pada objek

Apa kesamaan kata-kata itu? Mereka semua kata sifat karena mereka dimaksudkan untuk memodifikasi kata "pemrograman". Lebih jauh lagi, dengan pengecualian "imperatif" mereka semua bukan kata sifat "alami", tetapi kata benda "adjectified" - kata benda yang benar-benar menggambarkan inti dari paradigma: fungsi, struktur, automata, dan objek.

Dan ada dua cara yang berbeda di mana kata benda itu adjectified: melalui akhiran seperti -al atau -ed, atau melalui menciptakan kata gabungan menggunakan tanda hubung. Sekarang, seperti yang ditunjukkan Doc Brown, sufiks yang dapat digunakan untuk kata sifat "objek" menghasilkan makna yang berbeda. Yang meninggalkan komposisi.

Dan saya sampaikan bahwa itu adalah kebetulan atau rasa murni bahwa Alan Kay memilih untuk menggunakan "orientasi" untuk kata sifat kompositnya "berorientasi objek". Itu bisa saja "berbasis objek", atau "berbasis objek", dan Anda mungkin membaca terlalu banyak. Bukankah "didorong" kedengarannya seperti obsesi tidak sehat?

Michael Borgwardt
sumber
1
Poin yang sangat baik (meskipun saya pikir Anda maksud kata sifat, bukan kata keterangan - "pemrograman" dalam konteks ini adalah kata benda).
JW01
@ JW01: oops, kau benar
Michael Borgwardt
Ini sebenarnya adalah poin yang sangat bagus - kata "berorientasi" memberikan frase arti yang berbeda untuk "pemrograman objek", karena kata "objek" dengan sendirinya bukan kata sifat. Sebenarnya, saya akan mengatakan alasan "berorientasi" dipilih dari kata lain adalah untuk aliterasi. Juga, saya tidak membaca apa-apa tentang itu, saya melebih-lebihkan untuk menyatakan bahwa ada kata "berorientasi" yang duduk di sana benar-benar tidak dijelaskan dan tidak dipertanyakan dalam literatur, yang membuat saya bertanya-tanya apakah itu benar-benar melakukan sesuatu untuk mendapatkan tempatnya . : P
Luar Biasa
Bertanya-tanya mengapa dia tidak memilih objek-obsesi ... oh ya, itu hanya orang-orang fanatik yang tidak tahu kapan harus berhenti. ;-)
Deduplicator
Ada satu buku oleh seorang penulis Polandia, Jerzy Grębosz, yang disebut "Symfonia C ++" ("The Symphony in C ++") di mana penulis mencoba masuk akal dari ungkapan itu dengan cara yang menarik: Dia mengatakan bahwa itu disebut " berorientasi objek "karena fakta bahwa kode dapat" mengorientasikan dirinya "sesuai dengan objek yang saat ini bekerja (perilaku polimorfik). Dia membedakan ini dari bahasa di mana hanya ada konsep belaka "objek" sebagai potongan data. Tidak ada bukti historis bahwa ini adalah makna aslinya, tetapi cukup jelas bahkan sebagai penjelasan post-factum.
BarbaraKwarc
18

tetapi ketika kita berbicara tentang pemrograman dengan objek, kita harus mengklarifikasi bahwa kita berorientasi pada objek-objek itu. Tidak bisakah kita menggunakan benda saja? Tidak bisakah kita memiliki benda?

Terus terang, ini adalah peninggalan sejarah. Pemrograman fungsional benar-benar pemrograman berorientasi fungsi, pemrograman deklaratif benar-benar pemrograman berorientasi deklarasi ... lagipula kita tidak hanya menggunakan fungsi? Tidak bisakah kita memiliki fungsi saja?

"Berorientasi objek" menggulung lidah lebih baik, dan secara historis sudah berurat berakar.

'Orientasi' datang karena kita tidak berbicara tentang pemrograman tetapi desain. Hanya karena kita menggunakan objek, atau menggunakan fungsi, atau menggunakan peristiwa tidak berarti bahwa metodologi desain kita dilakukan dengan memodelkan ketiganya. Dengan menentukan orientasi metodologi desain, ini membantu berkomunikasi dengan programmer bagaimana mereka harus menafsirkan dan memperluas desain itu - bagaimana fokus pemodelan mewarnai implementasi.

Telastyn
sumber
Jadi sepertinya Anda mengatakan bahwa "berorientasi objek" adalah semacam pernyataan kebijakan dengan ungkapan yang berlebihan, seperti "pro-aktif" yang pada dasarnya memiliki arti yang sama dengan "aktif", itu hanya punya awalan berlebihan yang melekat untuk membuat Pastikan pendengar tidak ketinggalan artinya.
Luar Biasa
1
Saya pikir Anda benar-benar cocok dengan itu: Kami melakukan desain berorientasi objek, dan itulah sebabnya bahasa berorientasi objek - untuk memungkinkan kami mengekspresikan desain ini.
K.Steff
1
@ Luar Biasa Tidak, menambahkan "berorientasi" membuatnya lebih spesifik. "Berorientasi objek" berarti kita tidak membahas secara spesifik tentang objek pemrograman, tetapi sebaliknya tentang bagaimana merancang program sehingga mereka menggunakan objek dengan cara yang bermakna. "Pemrograman objek", "pemrograman fungsi" atau "pemrograman deklarasi" akan merujuk pada pembicaraan khusus tentang implementasi konsep spesifik tersebut alih-alih prinsip-prinsip desain. "Fungsional" dan "deklaratif" adalah kata-kata dengan akhiran yang berusaha menyampaikan makna yang sama, tetapi untuk objek "objektif" atau "obyektif" tidak masuk akal.
Ilari Kajaste
Dan ketika Michael Borgwardt menjawab , kata "berorientasi" sama sekali tidak istimewa. Itu bisa "didorong" atau "berbasis" juga. Poin penting adalah bahwa itu tidak bisa menjadi "pemrograman objek". (Yah laguange selalu cair, jadi bisa , tapi itu tidak akan deskriptif.)
Ilari Kajaste
Saya telah mengganti jawaban karena jawaban Michael Borgwardt benar-benar menjelaskan arti kata tersebut dan bagaimana ia mengubah frasa.
Luar Biasa
2

Menyebutnya yang membantu menjelaskan bahwa objek adalah bagian yang sangat penting dari paradigma.

Pemrograman Berorientasi Objek berakar pada Simula , yang pada dasarnya adalah ALGOL plus beberapa fitur pemrograman objek baru. Dan sesuai dengan sejarah itu, bahkan hari ini sepenuhnya mungkin dalam banyak bahasa (bahkan "bahasa OO murni") untuk mengkodekan sesuatu yang pada dasarnya hanya program prosedural dengan beberapa objek di dalamnya. Tapi ini dianggap gaya buruk oleh pengembang yang lebih berpengalaman.

Sebenarnya melakukan sesuatu "cara berorientasi objek" sangat berbeda dari "cara prosedural." Konsep yang paling penting adalah penggunaan pewarisan dan polimorfisme. Ketika Anda benar-benar mengerti dan menginternalisasi cara kerja kelas dan metode virtual, ini merupakan pengalaman yang membuka mata yang mengubah cara Anda menulis kode dalam banyak kasus, perubahan paradigma yang sebenarnya. (Dengan asumsi, tentu saja, bahwa Anda mulai menulis kode prosedural terlebih dahulu. Banyak siswa hari ini langsung ke Jawa atau C # sebagai bahasa pertama, dan IMO mereka kehilangan benar-benar memahami manfaat OO dengan melakukannya.)

Kami menyebutnya pemrograman berorientasi objek karena program yang ditulis dengan gaya OO tidak hanya berisi objek; struktur seluruh program didasarkan di sekitar mereka dan di sekitar cara mereka bekerja.

Mason Wheeler
sumber
Ini adalah jawaban yang mirip dengan Telastyn, kecuali Anda tampaknya menyiratkan bahwa "pemrograman berorientasi objek" sebagai sebuah istilah sebenarnya berbeda secara mendasar dengan "pemrograman objek". Bisakah Anda jelaskan bagaimana perbedaannya? Maksud saya, bagi saya tampaknya OOP adalah istilah yang cukup longgar sehingga OP akan melayani fungsi yang sama juga.
Luar Biasa
2
Banyak siswa hari ini langsung ke Jawa atau C # sebagai bahasa pertama, dan IMO mereka kehilangan benar-benar memahami manfaat OO dengan melakukannya. - Sebenarnya, saya mulai menggunakan C ++, dan pada tugas pertama saya, saya menggunakan campuran objek dan fungsi, tetapi ditandai karena saya menggunakan fungsi. Beberapa fungsi-fungsi itu murni fungsional, dan tidak mendapat manfaat sama sekali dari enkapsulasi dalam suatu objek, tetapi yang lain mengambil pointer ke variabel untuk bekerja (yaitu: informasi keadaan yang dimodifikasi), menjadi lebih mudah untuk dibuat dan dipanggil begitu mereka dalam suatu objek, jadi saya telah melihat kedua sisi itu.
Luar Biasa