Sementara beberapa objek yang saya buat memodelkan objek dunia nyata, tidakkah kode pra-OOP melakukan hal yang sama?
Perbedaan terbesar antara kode OOP dan kode pra-OOP adalah bahwa model sebelumnya adalah situasi dunia nyata sebagai kelompok entitas yang berbeda berinteraksi satu sama lain, masing-masing dengan "kekuatan" terbatas mengenai apa yang dapat dilakukan, dan juga mampu "bereaksi" terhadap peristiwa eksternal dengan tindakannya sendiri. Yang terakhir memodelkan semuanya sebagai sebagian besar data yang tidak melakukan apa-apa sendiri, sedangkan perhitungannya mewakili "hal-hal yang terjadi" dan dapat mempengaruhi salah satu atau semuanya.
Apakah itu lebih baik memodelkan dunia nyata atau tidak, itu benar-benar tergantung pada segi dunia mana yang Anda modelkan. Sebuah simulasi fisika, misalnya, di mana Anda ingin menggambarkan efek yang, katakanlah, api yang sedang menyala akan ada di objek sekitarnya, akan lebih baik diwakili oleh pendekatan "tradisional", karena baik cahaya maupun panasnya baik-baik saja. proses yang didefinisikan yang mempengaruhi keadaan eksternal dan internal dari objek lain, dan tidak bervariasi sesuai dengan perilaku masing-masing objek tertentu, hanya dipengaruhi oleh sifat-sifatnya.
Di sisi lain, jika Anda memodelkan komponen berbeda yang berinteraksi untuk menghasilkan perilaku yang diinginkan, memperlakukan mereka sebagai agen alih-alih hal-hal pasif dapat membuatnya lebih mudah untuk melakukannya dengan benar tanpa kehilangan apa pun. Jika saya ingin menyalakan TV saya, saya hanya menekan tombol, jika kabel listrik dicabut TV.turnOn
akan memeriksa untuk saya. Jadi, tidak ada risiko memutar roda gigi dan lupa untuk memutar roda gigi lain yang menyentuhnya, karena roda gigi itu sendiri (jika diprogram dengan benar) akan menjaga interaksi sekunder yang terjadi sebagai konsekuensi dari yang utama.
Tapi OO benar-benar tentang bagaimana memodelkan sesuatu, dan metode pemodelan itu tampaknya tidak terinspirasi oleh dunia nyata bagi saya.
Saya percaya ini lebih berkaitan dengan cara kita memandang dunia daripada bagaimana dunia sebenarnya. Orang dapat berargumen bahwa semuanya hanya sekelompok atom (atau energi, atau gelombang, apa pun), tetapi itu tidak membantu kita menangani tugas mengatasi masalah yang kita hadapi, dengan memahami lingkungan di sekitar kita dan memprediksi peristiwa di masa depan ( atau menggambarkan yang sebelumnya). Jadi kita membuat "model mental" dunia, dan seringkali model mental itu menemukan korespondensi yang lebih baik dengan OO daripada data + memproses satu - yang bisa dibilang memodelkan "lebih baik" bagaimana dunia nyata benar-benar beroperasi.
Menarik juga untuk dicatat bahwa kebanyakan orang menganggap OOP sebagai sinonim dengan "OOP klasik", di mana kami secara taksonomis membuat set dan himpunan bagian dari hal-hal, dan secara jelas menempatkan objek dalam set yang sangat spesifik. Itu sangat berguna untuk membuat tipe baru yang dapat digunakan kembali , tetapi tidak begitu bagus ketika entitas yang Anda modelkan cukup mandiri, dan sementara itu memulai interaksi dengan objek lain, jarang, jika pernah, adalah target interaksi. Atau lebih buruk, ketika ada sedikit (mungkin hanya satu) instance dari entiy itu, atau instans sangat bervariasi dalam komposisi, perilaku atau keduanya.
Namun, ada juga "prototipe OOP", di mana objek dijelaskan dengan memilih yang serupa dan menyebutkan aspek-aspek di mana mereka berbeda. Saya menyarankan esai ini untuk penjelasan yang baik dan tidak terlalu teknis dari proses pemikiran (seluruh pos terlalu besar, bahkan untuk standar Steve Yegge, jadi saya menunjuk ke bagian yang relevan: P). Sekali lagi, ini adalah pasangan yang cocok untuk model mental kita ketika membayangkan contoh yang tidak diketahui dengan membandingkannya dengan yang diketahui, tetapi tidak harus untuk bagaimana dunia nyata "bekerja" ... (dua ekor sapi benar-benar sepenuhnya entitas entitas, bahkan jika kita melihatnya sebagai "sama" dalam banyak hal)