Anda mungkin ingin melihat blog video cepat ini . Hasilnya adalah bahwa perbedaan antara pemrograman terstruktur dan pemrograman OO adalah masalah apa yang mereka ambil dari pemrograman, bukan tentang apa yang mereka tambahkan. Disiplin perangkat lunak seperti Pemrograman Terstruktur dan Pemrograman Berorientasi Objek membatasi, tidak memungkinkan. Berikut ini beberapa definisi. Peringatan: Anda tidak akan menyukainya.
Pemrograman terstruktur adalah disiplin yang diterapkan pada goto (transfer kontrol langsung)
Pemrograman OO adalah disiplin yang dikenakan pada pointer ke fungsi (transfer kontrol tidak langsung)
Pemrograman fungsional adalah disiplin yang dikenakan pada penugasan.
Yang pertama tidak terlalu sulit untuk dipahami. Dijkstra menemukan bahwa tidak mungkin untuk membuat bukti umum kebenaran ketika goto diizinkan dalam algoritma. Namun jika struktur kontrol terbatas pada urutan, seleksi, dan iterasi, maka bukti-bukti kebenaran yang mungkin. Tentu saja kami bahkan tidak mencoba untuk membuktikan hal-hal yang benar saat ini, tetapi kami menyukai kesederhanaan dan keanggunan pemrograman terstruktur.
Agak sulit untuk memahami OO. Kita sering mendefinisikan OO sebagai enkapsulasi, pewarisan, dan polimorfisme. Apa yang kurang tahu adalah bahwa ketiga atribut ini dapat dicapai, dan sering yang dicapai dalam C. Memang, C ++ dimulai sebagai hanya preprocessor yang dikompilasi ke C. Ini tidak benar-benar sulit untuk merangkum di C. Juga sulit untuk membangun struktur data yang merupakan himpunan bagian dari satu sama lain, mensimulasikan pewarisan. Namun, polimorfisme sedikit lebih sulit. Ini membutuhkan pointer ke fungsi yang, dalam C, sulit untuk dikelola dengan baik. Apa yang diberikan oleh bahasa seperti C ++ kepada kami adalah disiplin yang dikenakan pada pointer-pointer itu pada fungsi. Kompiler C ++ membangun vtables untuk kita, dan menginisialisasi pointer di dalamnya sesuai dengan formalisme yang ketat. Jadi, dalam arti yang sangat nyata, OO hanyalah disiplin yang dikenakantransfer kontrol tidak langsung yaitu pointer ke fungsi.
Pemrograman terstruktur adalah tentang bagaimana tidak menggunakan goto. OO adalah tentang bagaimana tidak menggunakan pointer ke fungsi. Dan pemrograman fungsional juga adalah semua tentang apa yang tidak boleh dilakukan. Dalam pemrograman fungsional kami tidak menetapkan variabel kecuali dalam kasus-kasus yang paling ketat dikendalikan.
Jadi pada akhirnya, semua "teknologi" Pemrograman ini sebenarnya membatasi disiplin ilmu daripada mengaktifkan teknologi. Mereka memberi tahu kami apa yang tidak boleh dilakukan lebih dari apa yang harus kami lakukan. Dan itu berarti pengembangan perangkat lunak belum berkembang selama 40 tahun terakhir. Sebaliknya, ia menyusut. Itu menjadi semakin terbatas karena kita telah mempelajari semua hal yang seharusnya tidak kita lakukan.
Mempelajari apa yang tidak boleh dilakukan adalah baik; tetapi inilah pertanyaan yang mengganggu: hal-hal baru apa yang telah kita pelajari untuk lakukan?