Saya telah membaca The Early History of Smalltalk dan ada beberapa yang menyebutkan "penugasan" yang membuat saya mempertanyakan pemahaman saya tentang maknanya:
Meskipun OOP berasal dari banyak motivasi, dua adalah pusat. Yang berskala besar adalah menemukan skema modul yang lebih baik untuk sistem kompleks yang melibatkan penyembunyian detail, dan yang berskala kecil adalah menemukan versi tugas yang lebih fleksibel, dan kemudian mencoba menghilangkannya sama sekali.
(dari 1960-66 - OOP Awal dan gagasan formatif lainnya dari tahun enam puluhan , Bagian I)
Apa yang saya dapatkan dari Simula adalah bahwa Anda sekarang dapat mengganti binding dan tugas dengan gol . Hal terakhir yang Anda inginkan dari setiap programmer adalah mengacaukan keadaan internal meskipun disajikan secara kiasan. Sebaliknya, objek harus disajikan sebagai situs perilaku tingkat tinggi yang lebih tepat untuk digunakan sebagai komponen dinamis . (...) Sangat disayangkan bahwa banyak dari apa yang disebut "pemrograman berorientasi objek" saat ini hanyalah pemrograman gaya lama dengan konstruksi yang lebih menarik. Banyak program dimuat dengan operasi "penugasan-gaya" sekarang dilakukan oleh prosedur terlampir lebih mahal.
(dari Gaya "Berorientasi Objek" , Bagian IV)
Apakah saya benar dalam mengartikan maksud sebagai objek yang dimaksudkan sebagai fasad dan metode apa pun (atau "pesan") yang tujuannya adalah untuk menetapkan variabel instan pada objek (yaitu "penugasan") mengalahkan tujuannya? Penafsiran ini tampaknya didukung oleh dua pernyataan kemudian di Bagian IV:
Empat teknik yang digunakan bersama - keadaan persisten, polimorfisme, instantiasi, dan metode-sebagai-tujuan untuk objek - menjelaskan sebagian besar kekuatan. Tidak satu pun dari ini memerlukan "bahasa berorientasi objek" untuk dipekerjakan - ALGOL 68 hampir dapat beralih ke gaya ini - dan OOPL hanya memfokuskan pikiran desainer dalam arah yang bermanfaat. Namun, melakukan enkapsulasi benar adalah komitmen tidak hanya untuk abstraksi negara, tetapi untuk menghilangkan metafora berorientasi negara dari pemrograman.
...dan:
Pernyataan penugasan - bahkan yang abstrak - mengekspresikan tujuan tingkat sangat rendah, dan lebih dari itu akan diperlukan untuk menyelesaikan apa pun. Secara umum, kami tidak ingin programmer untuk bermain-main dengan keadaan, apakah disimulasikan atau tidak.
Apakah adil untuk mengatakan bahwa kejadian-kejadian yang tidak jelas dan tidak dapat diubah sedang didorong di sini? Atau itu hanya perubahan status langsung yang tidak disarankan? Sebagai contoh, jika saya memiliki BankAccount
kelas, tidak masalah untuk memiliki GetBalance
, Deposit
dan Withdraw
contoh metode / pesan; pastikan saja tidak ada SetBalance
metode / pesan instan?
sumber
Saya menyadari bahwa Alan sudah menjawab pertanyaan ini, dan sepertinya tidak ada gunanya untuk menjawab lebih lanjut. Namun, Alan tidak menjawab setiap pertanyaan yang Anda miliki.
Khususnya:
Jawabannya di sini adalah Anda tidak menggunakan perilaku tingkat tinggi untuk menyusun program Anda. Sistem layanan keuangan dunia nyata seharusnya tidak memiliki metode Setoran pada kelas BankAccount, karena itu sama sekali bukan cara bank bekerja sebelum penemuan komputer! Ketika ATM ditemukan, mereka harus benar-benar mengotomatiskan apa yang dilakukan Teller di bank. Peran Teller adalah untuk memberi tahu pelanggan tentang status akun mereka. Untuk melakukan ini, pelanggan diizinkan untuk berinteraksi dengan Teller hanya dalam beberapa cara, seperti meneruskan Slip Setoran ke Teller.
Dengan langsung memverifikasi objek-objek ini - Teller, Slip Setoran, dll. - domain masalah disusun berdasarkan pesan yang dilewati oleh entitas dalam sistem.
Akun itu sendiri memainkan peran - ide Akun secara harfiah berarti akun arus masuk dan keluar keuangan dalam kaitannya dengan Aset, Kewajiban, Pendapatan, atau Biaya. Sistem Akuntansi, atau Akuntan, mencatat, mempertahankan dan mereproduksi arus ini dan memberi tahu Anda posisi keuangan akun pada suatu titik waktu. Laporan terbaru oleh Teller dapat dianggap sebagai "sekarang", tetapi tidak benar-benar: Ini benar-benar posisi keuangan seperti yang dijelaskan oleh Akuntan pada suatu titik waktu. Itu hanya memiliki ilusi menjadi "sekarang" ketika Anda pergi ke bank, karena umumnya Anda adalah satu-satunya yang berwenang untuk melakukan pembayaran. Ini benar terutama 100 tahun yang lalu, tetapi hari ini banyak orang memiliki pembayaran otomatis,
Mengapa ini penting? Nah, tanyakan pada diri sendiri apa yang perlu dilakukan untuk mencatat transaksi:
Nasabah memiliki log audit internal sendiri atas semua yang telah mereka lakukan, termasuk penerimaan dari Bank. Demikian juga, Bank menyimpan log audit internal mereka sendiri atas semua yang telah mereka lakukan. Bank selalu melakukan akuntansi entri ganda , artinya mereka mencatat transaksi dalam Buku Besar dan Neraca. Ini memungkinkan Bank untuk melakukan rekonsiliasidan pastikan tidak ada entri palsu ketika mereka menutup buku mereka untuk periode keuangan tertentu (harian, mingguan, bulanan, triwulanan, tahunan, dua tahunan, apa pun). Ini juga menunjukkan bahwa catatan untuk apa yang direkam harus idempoten. Berarti, jika kami menulis sebuah program untuk mendaftar semua transaksi unik, kami dapat melakukannya meskipun duplikat palsu ada di log audit internal kami, karena kami memasukkan pengidentifikasi transaksi idempoten ke dalam pesan logging.
Mengingat kemampuan pembayaran otomatis untuk mendebit dan mengkredit akun Anda, tampaknya masuk akal bahwa Akuntan juga dapat melakukan perkiraan untuk Anda. Ini adalah realisasi dampak yang bisa dimiliki komputer pada sistem akuntansi. Oleh karena itu, seseorang menemukan skema sistem akuntansi yang disebut Resources-Events-Agents yang lebih sejalan dengan tidak hanya melihat masa lalu, tetapi juga melihat masa depan dan memperkirakan arus kas pada granularity yang lebih halus daripada sebelumnya. Pada dasarnya, REA hanya lebih banyak metadata daripada sistem akuntansi klasik, memungkinkan pelaporan dan analisis bisnis yang lebih baik. Misalnya, analisis "rantai nilai" dan analisis "rantai pasokan" bukanlah hal yang mudah dilakukan dengan akuntansi klasik.
Demikian juga, Agoric Computing atau Smart Contracts membawa ide dari mekanisme pasar ke komputasi. Penting bahwa ketika Anda memberikan Slip Setoran, Anda juga memberikan Cek atau Dompet untuk disimpan. Karena ada waktu antara menerima cek dan itu benar-benar masuk ke Akun Anda, Anda memerlukan cara aman untuk mengelola mata uang. Ternyata, kemampuan objek adalah cara alami untuk mencapai mata uang aman yang didistribusikan. Mereka dapat digunakan untuk memastikan bahwa Alice tidak menipu Bob dengan menarik semua dana setelah dia menulis Bob cek itu.
sumber
BankAccount
contoh mainan OOP yang terlalu umum .