Saya menemukan kutipan ini di " The Joy of Clojure " di hlm. 32, tetapi seseorang mengatakan hal yang sama kepada saya saat makan malam minggu lalu dan saya sudah mendengarnya di tempat lain juga:
[A] Kelemahan dari pemrograman berorientasi objek adalah hubungan erat antara fungsi dan data.
Saya mengerti mengapa kopling yang tidak perlu buruk dalam aplikasi. Juga saya merasa nyaman mengatakan bahwa keadaan yang dapat berubah dan warisan harus dihindari, bahkan dalam Pemrograman Berorientasi Objek. Tapi saya gagal melihat mengapa menempel fungsi di kelas pada dasarnya buruk.
Maksud saya, menambahkan fungsi ke kelas sepertinya menandai email di Gmail, atau menempelkan file di folder. Ini adalah teknik organisasi yang membantu Anda menemukannya lagi. Anda memilih beberapa kriteria, lalu menyatukan semuanya. Sebelum OOP, program kami adalah sekumpulan besar metode dalam file. Maksud saya, Anda harus meletakkan fungsi di suatu tempat. Mengapa tidak mengaturnya?
Jika ini adalah serangan terselubung pada tipe, mengapa mereka tidak mengatakan bahwa membatasi tipe input dan output ke suatu fungsi adalah salah? Saya tidak yakin apakah saya bisa setuju dengan itu, tapi setidaknya saya akrab dengan argumen pro dan con type safety. Bagi saya ini kedengarannya seperti masalah yang terpisah.
Tentu, kadang-kadang orang salah dan menempatkan fungsionalitas di kelas yang salah. Tetapi dibandingkan dengan kesalahan lain, ini tampak seperti ketidaknyamanan yang sangat kecil.
Jadi, Clojure memiliki ruang nama. Bagaimana menempelkan fungsi pada kelas di OOP berbeda dari menempelkan fungsi di ruang nama di Clojure dan mengapa begitu buruk? Ingat, fungsi dalam kelas tidak harus beroperasi hanya pada anggota kelas itu. Lihatlah java.lang.StringBuilder - ini beroperasi pada semua jenis referensi, atau melalui tinju otomatis, pada jenis apa pun.
PS Kutipan ini merujuk pada sebuah buku yang belum saya baca: Pemrograman Multiparadigma di Leda: Timothy Budd, 1995 .