Orang sering dapat mendengar bahwa OOP secara alami sesuai dengan cara orang berpikir tentang dunia. Tetapi saya akan sangat tidak setuju dengan pernyataan ini: Kami (atau paling tidak saya) mengonseptualisasikan dunia dalam hal hubungan antara hal-hal yang kami temui, tetapi fokus OOP adalah merancang kelas individu dan hierarki mereka.
Perhatikan bahwa, dalam kehidupan sehari-hari, hubungan dan tindakan sebagian besar ada di antara objek yang akan menjadi contoh kelas yang tidak terkait dalam OOP. Contoh hubungan tersebut adalah: "layar saya ada di atas meja"; "Aku (manusia) sedang duduk di kursi"; "mobil ada di jalan"; "Saya mengetik di keyboard"; "mesin kopi mendidihkan air", "teks ditampilkan di jendela terminal."
Kami berpikir dalam hal kata kerja bivalen (kadang-kadang trivalen, seperti, misalnya dalam, "Saya memberi Anda bunga") di mana kata kerja adalah tindakan (relasi) yang beroperasi pada dua objek untuk menghasilkan beberapa hasil / tindakan. The Fokus adalah pada tindakan, dan dua (atau tiga) [tata bahasa] benda memiliki sama pentingnya.
Bandingkan dengan OOP di mana Anda pertama kali harus menemukan satu objek (kata benda) dan katakan padanya untuk melakukan beberapa tindakan pada objek lain. Cara berpikir dialihkan dari tindakan / kata kerja yang beroperasi pada kata benda ke kata benda yang beroperasi pada kata benda - seolah-olah semuanya dikatakan dengan suara pasif atau refleksif, misalnya, "teks ditampilkan oleh jendela terminal". Atau mungkin "teks menarik dirinya di jendela terminal".
Tidak hanya fokus dialihkan ke kata benda, tetapi salah satu kata benda (sebut saja subjek tata bahasa) diberikan "kepentingan" yang lebih tinggi daripada yang lain (objek tata bahasa). Jadi seseorang harus memutuskan apakah akan mengatakan terminalWindow.show (someText) atau someText.show (terminalWindow). Tetapi mengapa membebani orang dengan keputusan sepele seperti itu tanpa konsekuensi operasional ketika orang benar-benar bermaksud menunjukkan (terminalWindow, someText)? [Konsekuensinya secara operasional tidak signifikan - dalam kedua kasus teks ditampilkan pada jendela terminal - tetapi bisa sangat serius dalam desain hierarki kelas dan pilihan "salah" dapat menyebabkan kode berbelit-belit dan sulit dipertahankan.]
Oleh karena itu saya berpendapat bahwa cara utama melakukan OOP (berbasis kelas, pengiriman tunggal) sulit karena itu TIDAK UNATRAL dan tidak sesuai dengan bagaimana manusia berpikir tentang dunia. Metode generik dari CLOS lebih dekat dengan cara berpikir saya, tetapi, sayangnya, ini bukan pendekatan luas.
Mengingat masalah-masalah ini, bagaimana / mengapa hal itu terjadi sehingga cara OOP saat ini menjadi populer? Dan apa, jika ada, yang bisa dilakukan untuk menurunkannya?