Saya membuat presentasi yang menunjukkan perbedaan antara pemrograman struktural dan berorientasi objek dan saya ingin menggambarkan mengapa orang membutuhkan OOP dengan contoh di mana menerapkan konsep OOP akan membuat pengkodean lebih mudah sehingga penonton benar-benar merasa bahwa mereka membutuhkan OOP.
Ada Ide ??
java
c++
object-oriented
Ahmed
sumber
sumber
Jawaban:
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?
sumber
Ada 3 cara dasar untuk memprogram komputer:
goto
s, seperti pada penerjemah BASIC lama, atau dalam bahasa assembly. Tidak banyak orang yang memprogram dengan cara ini lagi.Dalam pandangan saya, pemrograman berorientasi objek adalah sesuatu yang berbeda. Ini tentang bagaimana mengatur program Anda pada skala yang lebih besar. Itu tidak menggantikan atau meniadakan salah satu dari 3 paradigma yang saya sebutkan di atas - dalam sebuah metode, Anda masih perlu memilih salah satu dari 3 paradigma dari daftar untuk menulis.
sumber
Ini semua tentang bagaimana Anda mengantisipasi perubahan.
Kedua konsep memungkinkan untuk reusablility, tetapi OOP membuka pintu untuk perubahan yang lebih mudah. OOP memiliki semua usabilitas yang dilakukan pemrograman Struktural, tetapi Anda juga dapat menggunakannya untuk membuat fungsionalitas baru dengan sedikit usaha.
Anda bisa mengatakan bahwa OOP mewarisi semua fungsi Pemrograman Struktural dengan fungsionalitas tambahan warisan! :-D
sumber
Konsepnya ortogonal. Pemrograman terstruktur adalah tentang kode penataan dalam prosedur / fungsi / metode. Sangat mungkin (dan diinginkan) untuk mengikuti prinsip-prinsip pemrograman terstruktur dalam metode kelas ketika melakukan OOP.
sumber
Itu semacam kata-kata subjektif - pemrograman terstruktur dan OOP adalah gaya pemecahan masalah, dan yang satu tidak selalu lebih baik dari yang lain. Menulis pustaka metode numerik cukup masuk akal jika dilakukan dengan gaya terstruktur, tempat Anda melakukan transformasi pada input data. Agen sederhana yang digerakkan oleh mesin negara, dapat dengan mudah dinyatakan sebagai kelas mandiri di Java atau C ++. OOP dapat menjadi cara alami mengekspresikan wadah penyimpanan untuk struktur data.
Berbicara tentang penyembunyian informasi dan modularitas adalah cara yang baik untuk secara alami memotivasi OOP sebagai gaya.
Pandangan yang menarik tentang masalah ini ditulis oleh Steve Yegge - dalam beberapa hal, salah satu deskripsi yang lebih baik dari perbedaan pendekatan antara kedua gaya.
sumber
OOP lebih mudah dipahami ketika Anda membuat model bisnis. Ketika Anda berpikir tentang elemen-elemen aplikasi, Anda menggunakan beberapa OBYEK dan HUBUNGAN di antara mereka misalnya Buku memiliki Penulis, Judul, ISBN. Buku adalah untuk membiarkan di Perpustakaan dan dapat dipinjam oleh Siswa Pemrograman struktural memaksakan pemikiran tentang proses spesifik, implementasi tidak dalam abstraksi.
OOP dirancang untuk memudahkan perubahan. Perubahan dalam program struktural dimungkinkan tetapi harus dijelaskan dengan kode. Perubahan dalam program OO dapat dijelaskan dengan perubahan model abstrak.
sumber
Lingkup variabel:
Saya pikir prinsip bahasa untuk memastikan pemrograman yang baik adalah membatasi ruang lingkup variabel. Dalam bahasa terstruktur seperti C, ruang lingkup terutama dari dua jenis -
Kita semua tahu ruang lingkup global berbahaya. Tetapi terkadang lingkup lokal tidak cukup untuk menjalankan program. Menghindari cakupan global maka cenderung menggunakan pointer lebih luas, yang memungkinkan penggunaan variabel di luar lingkup. Tetapi pointer sulit dipahami dan digunakan.
Bahasa OOP seperti C ++ menambahkan tipe baru dari scope- Class / Object scope melalui enkapsulasi. Pelingkupan ini semakin ditingkatkan oleh variasi pribadi / publik. Dan ini memecahkan banyak masalah pelingkupan variabel. Lingkup lebih didefinisikan dalam OOP. Dan pointer kurang dibutuhkan.
Ini adalah salah satu fitur hebat dari OOP.
sumber