Saya telah membaca artikel kontroversial Mengajar FP kepada mahasiswa baru yang diposting oleh Robert Harper yang adalah seorang profesor di CMU. Dia mengklaim bahwa CMU tidak akan lagi mengajarkan pemrograman berorientasi objek dalam kursus pengantar karena itu "tidak cocok untuk kurikulum CS modern."
Dan dia mengklaim bahwa:
Pemrograman berorientasi objek sepenuhnya dihilangkan dari kurikulum pengantar, karena keduanya anti-modular dan anti-paralel pada dasarnya.
Mengapa menganggap OOP sebagai anti-modular dan anti-paralel?
Jawaban:
Harap pertimbangkan, bahwa kebutuhan Harper untuk mengajar kelas kurikulum CS pengantar sangat berbeda dari kebutuhan proyek kehidupan nyata . Tugasnya adalah mengajarkan konsep-konsep dasar (misalnya modularitas, paralelisme, induksi) kepada mahasiswa baru. Karena itu sangat penting, bahwa bahasa (dan paradigma) yang dipilih dapat mengekspresikan konsep-konsep ini dengan sesedikit mungkin upacara (sintaksis dan konseptual). Keakraban, dukungan alat, perpustakaan yang tersedia, kinerja eksekusi, dll. Sepenuhnya tidak relevan dalam konteks ini. Jadi harap ingat ini ketika mempertimbangkan yang berikut ...
Pandangan bahwa OO adalah anti-modular hasil dari sejumlah besar dependensi ke kelas lain bahkan objek kelas yang dirancang dengan baik cenderung berakhir dengan. Bahwa ini adalah masalah - bahkan di mata para pendukung OO - menjadi jelas ketika Anda melihat proliferasi kerangka Ketergantungan Injeksi , artikel, buku dan posting blog dalam beberapa tahun terakhir (juga munculnya ejekan dan rintisan yang menarik).
Petunjuk lain adalah pentingnya Pola Desain dan kompleksitas penerapannya - dibandingkan dengan beberapa paradigma pemrograman lainnya - misalnya Pabrik, Pembangun, Adaptor, Jembatan, Dekorator, Penglihatan, Komando, Iterator, Mediator, Pengamat, Strategi dan Metode Templat, dan mungkin semua Komposit dalam beberapa hal terkait dengan meningkatkan modularitas kode OO.
Warisan juga bermasalah (misalnya Fragile Base Class Problem ) dan (subtype) polimorfisme menggoda seseorang untuk menumpahkan implementasi algoritma antara beberapa kelas, di mana perubahan dapat beriak melalui seluruh rantai pewarisan (atas dan ke bawah!).
Tuduhan menjadi anti-paralel terkait dengan penekanan negara dibandingkan dengan perhitungan (alias. Mutability vs immutability). Yang pertama membuatnya lebih terlibat untuk mengekspresikan dependensi subkomputasi (yang merupakan Harper's mengambil paralelisme!) Karena Anda biasanya tidak dapat menyimpulkan dari lokasi negara dikelola (alias file, di mana variabel instance dideklarasikan) yang aktor luar akan mengubahnya pada titik waktu berapa.
Penekanan pada kekekalan dan komputasi membuat mengekspresikan dependensi subkomputasi menjadi lebih mudah, karena tidak ada manajemen negara, hanya fungsi / komputasi yang digabungkan di tempat di mana Anda ingin mengekspresikan dependensi subkomputasi.
sumber
Ini mungkin klaim yang berani untuk dibuat, tapi entah bagaimana saya curiga, Robert Harper ini tidak pernah benar-benar menulis perangkat lunak yang sebenarnya dalam hidupnya. Yang tampaknya ia perhatikan hanyalah ML dan sistem tipe statis. Kontribusi sebesar itu mungkin, saya tidak melihat bagaimana klaimnya tentang OOP memiliki relevansi.
Artikel ini tidak kontroversial. Kontroversi melibatkan pemeriksaan, argumen, dan diskusi. Apa yang Anda miliki di sini adalah beberapa akademisi bodoh yang mengajukan dua tuduhan yang cukup mendasar hanya dalam satu pernyataan tunggal, tanpa repot-repot memberikan argumen.
Klaim tentang OOP sebagai anti-modular hanyalah omong kosong belaka. Saya bahkan tidak tahu bagaimana menanggapinya, tidak hanya tidak ada argumen yang diberikan tetapi juga OOP dengan desain adalah pendekatan untuk membangun modularitas dengan kopling yang sangat rendah antara modul individu melalui cara enkapsulasi dan abstraksi.
Mengklaim OOP anti-paralel hanya menunjukkan kurangnya pemahaman. OOP tidak mengunci keputusan tentang konkurensi. OOP hanya menentukan untuk menyembunyikannya: Jika dibangun dengan benar, Anda tidak bisa mengatakan, apakah implementasi suatu objek paralel atau tidak.
Jadi pada akhirnya OOP dan pemrograman paralel bersifat ortogonal. Model aktor adalah model elegan untuk konkurensi yang dapat secara langsung tercermin dalam sistem objek (tetapi tidak harus), menghasilkan kombinasi yang hebat dari keduanya.
Masalah dengan OOP adalah, hanya sedikit orang yang benar-benar memahaminya dalam arti yang didefinisikan oleh Alan Kay .
Inilah sebabnya mengapa Jawa adalah untuk OOP tongkat runcing untuk pertempuran laut. Ini juga berlaku bagi banyak orang yang disebut "bahasa OOP", tetapi hal tentang Jawa adalah, bahwa tampaknya menjadi kepercayaan umum di Universitas, bahwa Jawa harus digunakan untuk mengajar OOP.
Saya setuju dengan semua orang yang berpikir perkenalan untuk OOP dengan Java harus dihapus dari CS kurikulum. Saya juga berpikir bahwa orang yang jelas-jelas kurang memahami OOP seharusnya tidak mengajarkannya. Jadi mungkin lebih baik jika Bob tongkat untuk ML untuk kursus dan hanya mengajarkan apa yang ia memiliki pemahaman yang kuat tentang.
Sekarang OOP lebih dari etiket modis, orang-orang seperti untuk tongkat ke segala sesuatu. Ini merugikan OOP dan kata orang. OOP tidak ketinggalan jaman. Masa keemasan OOP belum tiba, ketika orang akhirnya mengerti apa itu tentang apa yang bukan tentang (misalnya menyelesaikan setiap masalah yang mungkin terjadi dengan menggunakan kata kunci
class
500 kali).sumber
Anda mendapatkan fanatik dari setiap garis.
Pemrograman berorientasi objek bukan peluru perak. Tidak pernah ada. Apa itu, adalah korban hype. Tidak bisa dihindari, orang muak dengan hype dan serangan balasan mulai berkembang (terlepas dari kegunaan sebenarnya dari paradigma).
Dua puluh tahun dari sekarang, tidak diragukan lagi, kita akan memiliki reaksi lain terhadap pemrograman fungsional.
sumber
Saya tidak bisa menjawab pertanyaan ini sepenuhnya karena kita hanya bisa menebak pemikiran samar penulisnya. Saya sangat curiga bahwa artikel ini akan membuat penulisnya malu. Tidak ada apa pun tentang OOP yang menyarankan bahwa itu bukan modular maupun paralel:
Modularitas : Aspek utama dari OOP adalah bahwa ia memang modular (tetapi modularitas berarti hal yang berbeda dalam konteks yang berbeda). Jadi, terlepas dari apakah penulis berbicara tentang generalisasi atau pemrograman statis, ia salah.
Parallelisation : Adapun pemrograman paralel, sebagian besar kerangka kerja telah mendukung interupts kemudian threading dan sekarang parallelisation yang tepat seperti apa yang kita lihat di .Net framework 4.0 dan bahasa OOP yang melesat ke dalamnya.
Saya menduga bahwa penulis telah menjadi korban mode karena ada kesalahpahaman bahwa pemrograman fungsional dan OOP saling eksklusif dalam penggunaannya. Ada gaya fungsional dalam bahasa OOP yang didokumentasikan dengan baik, misalnya, Oliver Sturm telah menerbitkan di bidang ini.
sumber
Penulis berpendapat bahwa OOP terlalu sulit untuk dipahami oleh programmer baru, yang mungkin benar - meskipun saya ragu, mengingat persyaratan masuk untuk CMU! Pernyataan anti-modular dan anti-paralel mungkin benar dalam konteks yang sempit jika dibandingkan dengan bahasa murni fungsional, tetapi hampir tidak merupakan kecaman dari seluruh paradigma (yang tampaknya bekerja dengan baik bagi mereka yang tahu cara menggunakannya).
Kurikulum yang diusulkan akan mengajarkan pemrograman fungsional dalam satu kelas, pemrograman imperatif (prosedural) di kelas lain, dan struktur data di kelas lain. Setelah mahasiswa baru menguasai 3 hal ini, ia harus siap untuk belajar OOP.
Secara pribadi saya pikir itu berlebihan, tetapi akademisi suka mencoba hal-hal baru dan ekstrim. Sebagai penyeimbang, MIT dulu (dan mungkin masih) mengajarkan semua paradigma pemrograman utama dalam satu kelas mahasiswa baru.
Anehnya, kedua sekolah telah menghasilkan beberapa programmer yang sangat bagus. Sosok pergi.
sumber