Saya berada di tahun ke-4 di sebuah universitas IT sekarang, dan ketika saya berbicara dengan profesor saya tentang topik ini dia menolak pendapat saya dan memberi saya kritik yang sangat berat (di universitas saya, kami diajari C (ANSI) (dalam Prosedur Kelas pemrograman - tahun pertama di universitas) sebelum C ++ (di kelas OOP tahun kedua) dan lainnya ...
Tetapi pada usia 13 tahun, saudara lelaki saya diajari oleh saya tentang Jawa terlebih dahulu dan tidak ada yang lain. Sekarang, ia dapat melakukan hampir semua hal yang dapat dilakukan oleh siswa kelas 2 normal dengan Java.
Bagi Anda yang pro, saya ingin tahu mengapa menurut Anda kami harus diajarkan pemrograman prosedural terlebih dahulu.
Jawaban:
Ringkasan Cepat:
Karena di dunia nyata, cepat atau lambat, Anda harus bekerja dengan kode prosedural.
Karena Bahasa Prosedural dapat bekerja seperti ekstensi, atau pengantar, Bahasa Berorientasi Obyek, alih-alih hanya menjadi alternatif.
Pelengkap untuk jawaban 2. Karena OOP lebih kompleks daripada Pemrograman Prosedural, oleh karena itu lebih baik untuk mempelajari Pemrograman Prosedural, terlebih dahulu.
Karena di dunia nyata, programmer bekerja dengan, dan menggabungkan beberapa cara untuk menyelesaikan masalah, AKA "pemrograman multi-paradigma", bukan hanya paradigma tunggal.
Sebagian besar bahasa pemrograman adalah multi-paradigma, pada tingkat tertentu, bahkan, jika desainer atau pengembang umum mereka, mengatakan sebaliknya.
[BARU] Karena Pemrograman Modular yang biasanya dicampur dan bingung dengan Pemrograman Prosedural, dapat diterapkan ke OOP Oleh karena itu pertanyaan dapat dibaca sebagai "Mengapa kita harus belajar pemrograman Modular sebelum kita belajar pemrograman berorientasi objek"
Deskripsi Boring yang Diperpanjang:
Butir 1 sangat jelas, bukan penjelasan lebih lanjut.
Poin 2, Kelas, Warisan, Polimorfisme, Antarmuka, dan seterusnya ...
Poin 3, saya kode Pascal Prosedural sebelum saya belajar Object Oriented Pascal, ketika saya sampai di sana saya berkata: "lihat, kelas seperti program prosedural kecil ... ... dan Anda dapat membuat mereka berbicara satu sama lain, keren !!! ".
Saya mendengar hal yang sama dari orang-orang yang pindah dari dataran C ke C plus plus.
Poin 4, Sebagian besar programmer menggabungkan beberapa teknik pemrograman atau paradigma, atau cara untuk menyelesaikan masalah. Fungsional, Prosedural, OOP, logis.
Bahkan Java "Pure OO" tidak pemrograman objek biasa seperti yang dikatakan.
+1 poin untuk mengatakan "Pemrograman Prosedural" bukan "Pemrograman Terstruktur". Atau Pemrograman Modular. Ini penting.
Sebenarnya, beberapa kali istilah-istilah ini diajarkan kepada orang lain dan digunakan secara bergantian, mereka tidak. Pemrograman Terstruktur, mencakup banyak konsep, tidak hanya menggunakan prosedur, dan salah satunya adalah membuat program agar tidak terlihat seperti "Kode Spaghetti".
Hari ini saya membaca beberapa program OO "murni" yang terlihat seperti "Kode Berorientasi Objek", yang berarti bahwa programmer menggunakan OOP, tetapi kodenya terlihat seperti berantakan.
Sering kali, saya dapat membaca kode OO dan memberi tahu bahwa pemrogram mempelajari Pemrograman Terstruktur sebelum OOP, karena kodenya jelas dan diatur.
Dan untuk Pemrograman Modular, saya telah melihat beberapa aplikasi. dalam C ++ dan PHP yang tidak menggunakan modul. *
sumber
Saya akan berpikir bahwa analoginya akan mirip dengan matematika. Anda perlu mempelajari beberapa konsep dasar terlebih dahulu (penjumlahan / pengurangan / ...) kemudian beralih ke topik yang lebih kompleks (aljabar / kalkulus). Program prosedural sangat linier dan lebih mudah untuk memahami aliran kontrol saat Anda sedang belajar sintaksis. OOP mungkin dianggap lebih kompleks, ia dibangun di atas konstruksi yang lebih sederhana yang digunakan dalam bahasa prosedural tetapi lebih abstrak dan lebih sulit untuk dipahami. Memulai dengan bahasa seperti C juga membuat Anda lebih dekat dengan perangkat keras dan membuat Anda berurusan dengan masalah alokasi memori dan pointer, yang perlu Anda pahami tetapi tidak benar-benar bisa digunakan dalam bahasa seperti Java / C #. Ada beberapa nilai nyata dalam hal ini di sekolah terlepas dari apakah itu terjadi pertama atau kedua.
FWIW, itu pasti akan berubah pada akhirnya. Ketika saya mulai sekolah kami belajar di Pascal dan PL / 1. Kami tidak sampai ke C sampai kelas bahasa lanjutan (tanggal saya). Saya tidak menjemput Jawa sampai lulus sekolah - belum ditemukan!
sumber
Pemrograman berorientasi objek adalah kumpulan potongan prosedural secara terorganisir. Saya pikir pelajaran yang Anda pelajari adalah bahwa metodologi berorientasi objek membantu mempertahankan organisasi dan pemeliharaan. Ada banyak programmer yang tidak dapat membuat perbedaan ini dan akan mengklaim program mereka berorientasi objek ketika mereka lebih prosedural.
sumber
Kamu tidak.
Kami belajar pemrograman fungsional terlebih dahulu, dengan Skema. Kemudian kami pindah ke prosedural, lalu OOP, dan kemudian pemrograman deklaratif. Dan percaya atau tidak, sementara saya sudah tahu pemrograman, saya pikir itu sebenarnya lebih mudah bagi orang lain juga: karena FP seperti matematika! Jadi, Anda sudah tahu dasar-dasarnya.
Saya sudah sering berdebat dengan diri saya sendiri, dan akhirnya saya sampai pada kesimpulan bahwa itu benar-benar tergantung pada seberapa baik guru Anda mengajarkan Anda konsep-konsepnya.
Tidak ada jawaban tunggal karena:
Dimulai dengan sesuatu yang prosedural seperti C (atau bahkan perakitan) mungkin merupakan pilihan yang baik, karena Anda belajar bagaimana komputer benar-benar bekerja
Dimulai dengan sesuatu yang berorientasi objek Java mungkin merupakan pilihan yang baik, karena itu relatif mudah dipelajari dan menerapkan OOP untuk kehidupan nyata, dan karena itu mengajarkan Anda tentang pembentukan **
Dimulai dengan pemrograman fungsional seperti Skema mungkin merupakan pilihan yang baik karena mengajarkan Anda tentang berpikir lebih abstrak (dalam hal fungsi, bukan variabel), yang pada akhirnya membuat Anda seorang programmer yang lebih baik
Jika guru Anda tidak mengajar dengan baik, maka tidak masalah apa yang Anda mulai dengan; mereka akan berubah menjadi hampir sama.
sumber
Suatu bahasa dapat berorientasi objek seperti C ++, Java atau C #. Dan Anda bisa mulai dengan bahasa-bahasa ini. Tetapi intinya adalah, bahkan dengan bahasa OO ini, Anda harus mempelajari pemrograman prosedural terlebih dahulu, kemudian OOP. Saya pikir, hal yang sama juga dilakukan oleh Anda untuk kakak Anda.
sumber
=
tugas,if
,for
, dll) menjadi potongan-potongan yang lebih besar (metode), bagaimana bisa Anda pernah berharap memahami OOP. Seperti kebanyakan keterampilan, menjadi sangat cerdas, termotivasi, dan / atau memiliki akses ke instruksi satu-satu dapat memungkinkan Anda untuk belajar banyak, topik terkait secara bersamaan.Pemrograman prosedural, setidaknya dalam bahasa seperti C, pemrograman strip ke praktik yang sangat sederhana: algoritma dan struktur data, dan pada tingkat abstraksi yang merupakan media yang menyenangkan antara kode sumber yang dapat dipahami manusia dan kode assembly.
Dengan cara ini, siswa dapat belajar sedikit ilmu pengetahuan (algoritma, struktur data) dan sedikit rekayasa (sumber-> objek-> kompilasi mesin, arsitektur von-neuman (kemungkinan)) pada saat yang sama.
OOP, melalui C ++ / obj-C memperkenalkan pola organisasi kode, yang hanya satu hal lagi untuk dipelajari. Ini bisa membuat belajar konsep-konsep di atas agak lebih sulit.
OOP via Java (antara lain) berjalan lebih jauh dengan mengabstraksi perangkat keras dan lingkungan. Sekarang produk yang mendasarinya bukan kode mesin, tetapi semacam perantara yang tidak mengungkapkan bagaimana perangkat keras yang mendasarinya bekerja, tetapi efeknya adalah memungkinkan siswa untuk berkonsentrasi pada pola organisasi kode.
Pada akhirnya saya pikir itu merupakan pertukaran antara belajar bagaimana perangkat keras bekerja atau mempelajari pola organisasi kode. Adapun yang lebih penting, saya tidak begitu tahu. Dunia nyata membutuhkan pengetahuan keduanya, setidaknya sampai taraf tertentu.
Saya akan menebak bahwa program sarjana yang dimulai dengan pemrograman prosedural tingkat rendah kemungkinan menghasilkan ilmuwan komputer / insinyur komputer, dan program yang dimulai dengan konsep tingkat tinggi menghasilkan insinyur / pengembang / pemrogram perangkat lunak.
sumber
Nyali objek OOP terdiri dari pemrograman prosedural.
Jika Anda tidak dapat melakukan for for, gunakan pointer dengan benar, nyatakan tipe dan fungsi Anda, Anda tidak akan bisa menulis antarmuka untuk kelas Anda apalagi membuat bagian dalam melakukan apa pun yang layak dilakukan.
Anda benar-benar tidak akan belajar OOP di kelas pengantar, itu hanya akan menjadi sintaks - melompat langsung ke OOP akan membuat hal-hal lebih rumit untuk dipahami (pada awalnya) daripada yang sudah ada.
OOP bukan tentang beberapa sintaks yang menyatakan untuk membentuk kelas, ini tentang struktur data, pola desain, polimorfisme, pewarisan, dan komposisi.
Untuk melakukan semua hal yang perlu Anda ketahui pemrograman prosedural, sesuatu yang mudah dilakukan dalam C. Anda dapat membawa hampir semua yang Anda pelajari dengan C ke dalam Java atau C ++, Anda mungkin harus memikirkan kembali beberapa hal yang Anda anggap remeh dalam C, TAPI ... Anda harus mengetahui tata bahasa (di mana Anda berada di dalam pengantar C) untuk menulis kalimat (harus menulis prosedur untuk mendefinisikan antarmuka) kemudian paragraf (harus tahu struktur data) lalu dan kemudian mengetahui beberapa pola desain (tragedi, komedi, cacat) pahlawan, bagaimana mereka berinteraksi, dan kapan tidak menggunakannya) sebelum Anda dapat menulis novel lengkap (sistem OOP lengkap).
Jika saya jadi Anda, saya akan mengambil beberapa buku berikut: Bahasa Pemrograman C , Bahasa Pemrograman Java , Pola Desain , Geng Empat , dan Pola Penetasan . Saya pasti akan mengambil salinan Bahasa Pemrograman C jika saya serius tentang C / C ++.
Jika Anda hanya ingin melakukan semua cara Java (dan melakukannya untuk $) id mengambil beberapa buku tentang pola desain Java dan bagaimana menggunakan Java dengan server web Apache dan Tomcat dan beberapa buku tentang pemrograman database SQL. Java menendang begitu banyak keledai di web, saya minta maaf tetapi PHP telah memiliki sejarah banyak lubang keamanan membuatnya menjadi sakit di pantat seperti Windows untuk menjaga agar server Anda tidak di-root atau database SQL Anda disuntikkan.
Anda juga harus meluangkan waktu untuk belajar SQL, Oracle MySQL Postgresql, dan MSSQL memiliki banyak kesamaan tentang sintaks, tetapi jika saya harus memilih belajar satu untuk saya sendiri, id, pilih Postgresql hanya karena BSD berlisensi alih-alih GPL (Anda harus mencari perbandingan dan kontras pada lisensi GPL / BSD juga)
sumber
Saya harus mengatakan bahwa sebagian besar kode yang ditulis dalam bahasa berorientasi objek seperti Java sebenarnya tidak berorientasi objek. Benar-benar memahami ide-ide di balik OO itu sulit, akibatnya kode OO yang seharusnya sebagian besar benar-benar prosedural.
Namun, ini tidak ada yang salah dengan menulis kode prosedural di Jawa. Ya, ada manfaat untuk melakukan OO, tapi itu bukan sesuatu yang saya ingin membingungkan seorang programmer pemula. Jadi atas dasar itu, saya tidak melihat ada yang salah dengan mengajar Jawa. Jangan berharap OO nyata darinya, tapi itu berhasil.
Namun, Java menyembunyikan banyak detail level rendah tentang apa yang terjadi di dalam komputer. C meninggalkan ini lebih banyak di tempat terbuka. Seseorang dapat membuat kasus yang baik bahwa siswa harus belajar bagaimana detail tingkat rendah ini bekerja sebelum menggunakan bahasa yang menangani ini untuk mereka. Tetapi Anda juga dapat membuat suatu kasus bahwa Anda harus mengabaikan rincian itu dan mempelajarinya nanti.
sumber
Beberapa orang lain telah menjawab sepanjang tema ini, tetapi saya pikir ada baiknya menyatakan hal ini lebih eksplisit.
Bahkan jika Anda mulai belajar pemrograman dengan bahasa berorientasi objek seperti Java, Anda mulai dengan mempelajari teknik pemrograman prosedural sebelum Anda sampai pada konsep OO . Saat mengajar Java programmer baru, Anda tidak memperkenalkan mereka ke objek dan kelas terlebih dahulu, Anda memperkenalkan mereka ke pernyataan dan variabel. Pada saat siswa berada dalam posisi untuk diajarkan banyak tentang objek dan kelas, mereka sudah memiliki setidaknya dasar-dasar pemrograman prosedural.
Jadi setidaknya, Anda harus belajar pemrograman prosedural di Jawa dan kemudian belajar pemrograman berorientasi objek di Jawa. Apakah Anda menghabiskan satu tahun penuh untuk pemrograman prosedural atau Anda hanya menghabiskan beberapa minggu pertama kursus pemrograman, dan apakah Anda menggunakan bahasa yang berbeda untuk itu atau tidak, hanya berdebat tentang rinciannya.
sumber
Untuk menjadi terlalu blak-blakan tentang hal itu, saya pikir momentum untuk ini terutama berasal dari programer lama yang berharap untuk masa lalu.
Sebelum mengatakan hal lain, saya sama sekali tidak berpegang teguh pada programmer yang lebih tua, banyak dari mereka yang benar-benar ahli. Sayangnya kadang-kadang mereka yang tidak, yang menjadi terhanyut dan tidak pernah benar-benar pandai pemrograman untuk memulainya .. menjadi profesor ketika mereka tidak bisa meretasnya di 'dunia nyata'. (Tidak semua profesor juga ... tapi ... BANYAK)
OOP bukanlah cawan suci pemrograman yang dibuatnya, juga pemrograman prosedural bukanlah peninggalan. Adalah baik untuk mengetahui setidaknya beberapa dari keduanya, tetapi saya pikir praktik umum dari apa yang akhirnya diajarkan sebagai pemrograman prosedural cenderung menjadi pemborosan waktu dan usaha yang besar. Kita perlu belajar pemrograman di dunia akademis, bukan hanya satu gaya atau lainnya. Saya mengaitkan sedikit kode mengerikan dan kesalahpahaman dengan ini, termasuk kode saya sendiri.
sumber
Dua alasan bagi saya: Satu pemrograman OO datang untuk memecahkan masalah pemrograman prosedural. Jadi dengan menulis beberapa kode prosedural dan kemudian hal yang sama di OO, membuatnya lebih mudah untuk memahami perbedaannya.
Ada juga elemen tambahan di sini: Dua pendekatan untuk mendidik tentang topik-topik Pemrograman. Seseorang dapat mulai dengan serendah yang didapatnya (misalnya perakitan, di banyak tempat prosedural, beberapa lainnya mulai dengan sirkuit) dan kemudian naik (menuju OO / Fungsional / Dikelola). Pendekatan lain adalah mulai dari dunia fisik (mis. Browser / Windows 7 dll) dan kemudian mulai masuk lebih dalam. Ada pro dan kontra untuk setiap pendekatan. Universitas Anda memilih yang pertama dan memulai dengan prosedural. Mungkin ada beberapa alasan atau mereka hanya menyalin orang lain :-).
sumber
Tidak ada alasan selain kelembaman kelembagaan. Lihatlah CMU, mereka membuang seluruh kurikulum OOP mereka dan menggantinya dengan pemrograman fungsional. Jadi sekali lagi, jawaban untuk pertanyaan Anda adalah bahwa itu adalah pilihan sewenang-wenang yang dibuat oleh administrator dari sekolah mana pun yang Anda ikuti. Jika ada orang yang bertanya-tanya tentang pernyataan faktual yang saya buat di sini adalah posting tentang mengubah kurikulum di CMU oleh seorang profesor / administrator: Mengajar FP kepada mahasiswa baru .
sumber