Ini bukan tentang kekekalan atau pewarisan, tetapi lebih pada bagaimana aplikasi Anda akan disusun

Tipe Data Aljabar memiliki kelebihan dan kekurangannya masing-masing. Ini memungkinkan Anda untuk menulis aplikasi Anda dengan cara yang aman untuk mengetik — ketika Anda melakukan pencocokan pola, itu akan menghabiskan semua tipe data untuk Anda. Namun, ada juga kerugian menggunakan ADT jika tipe data Anda terus berubah.

Saya akan memotong pembahasannya dan memberi Anda jawaban tentang perbedaannya - saat Anda menulis aplikasi dengan paradigma pemrograman fungsional, semuanya dikelompokkan berdasarkan operasi. Ketika kita menulis program dengan cara berorientasi objek, semuanya merupakan kelompok berdasarkan objeknya.

Bagi saya, ini adalah penemuan besar! Ini menjelaskan mengapa ADT kadang-kadang bisa menyusahkan.

Saya akan mengilustrasikan artinya - dan ini dapat memberi Anda gambaran kasar tentang apa yang menurut saya perbedaan nyata antara menulis program dalam pemrograman fungsional vs. pemrograman berorientasi objek.

Mari kita jadikan tipe data Tree. Pada percobaan pertama kita membuat pohon, hasilnya akan seperti ini:

Lalu, kita ingin memiliki fungsi yang menghitung tinggi pohon. Ayo buat di sini:

Lalu, kita ingin memiliki fungsi yang menghitung jumlah semua cabang:

Dari dua fungsi di atas, kita perhatikan bahwa setelah kita membuat ADT, kita perlu mengimplementasikan kasus pada setiap ADT — height dan sum perlu mengimplementasikan operasi berdasarkan dua tipe data - Branch dan Leaf.

Jika kita ingin mengimplementasikan ini dengan cara berorientasi objek — kita akan meletakkan metode ini di dalam antarmuka Tree:

Dengan cara berorientasi objek, kami mengelompokkan operasi kami berdasarkan per kelas. Oleh karena itu, Branch akan memiliki fungsinya sendiri untuk height dan sum, dan Leaf akan memiliki fungsinya sendiri untuk height dan sum.

Ini adalah dua cara menyusun aplikasi Anda yang dapat memberikan dampak berbeda pada cara Anda menyusunnya. Mari kita lihat masing-masing pro dan kontra penataan dengan cara ini.

Menambahkan Tipe Data Baru

Kami ingin memperluas Tree agar memiliki tipe data lain, `Kosong, ' yang mewakili anak kosong dalam aplikasi.

Jika pada awalnya kita mengimplementasikan Tipe Pohon dengan ADT dan mengelompokkannya dalam operasi, kita perlu menjalani setiap operasi dan menambahkan Empty dalam kasus pencocokan pola.

Jika kita memiliki banyak fungsi dalam aplikasi kita berdasarkan tipe data Tree, kita harus melalui masing-masing fungsi tersebut dengan menambahkan kasus Empty baru.

Namun, jika kita melakukannya dengan cara berorientasi objek, kita hanya perlu mengimplementasikan kelas baru, Empty, yang memperluas sifat Tree.

Dalam skenario ini, menambahkan tipe data baru akan rumit jika Anda mengelompokkan aplikasi berdasarkan tipe data — karena kita perlu mengubah semua operasi dalam aplikasi untuk menyertakan kasus lain. Namun, dalam cara berorientasi objek, karena setiap fungsi dikelompokkan berdasarkan objek, penambahan tipe data baru perlu mengimplementasikan antarmuka Tree.

Menambahkan operasi baru

Kami ingin menambahkan operasi baru di Tree yang disebut isEmpty.

Jika Anda mengelompokkan aplikasi dengan memisahkan fungsi dan tipe data, membuat isEmptyfunction relatif mudah.

Di sisi lain, jika kita mengimplementasikan aplikasi kita dengan cara berorientasi objek, kita perlu menelusuri semua file dalam aplikasi kita dan mengimplementasikan fungsi isEmpty karena kita mengubah antarmuka kita.

Ini telah menjadi masalah di Jawa. Jika kita memiliki beberapa warisan bersarang, kita perlu mengubah semua kelas yang mengimplementasikan antarmuka.

Dalam hal ini, perubahan untuk menambahkan operasi baru dengan cara yang berguna dalam menyusun kode aplikasi Anda bersifat lokal. Namun, dalam cara menyusun aplikasi Anda yang berorientasi objek, menambahkan proses baru akan sangat mengubah struktur aplikasi.

Apa yang kita pelajari di sini?

Susun model data Anda dengan bijak! Kita tidak pernah tahu masa depan aplikasi yang sedang kita bangun. Oleh karena itu, fleksibilitas sangat penting.

Merancang perangkat lunak sebagian merupakan seni dan sebagian lagi bersifat teknis. Oleh karena itu, setiap pengembang akan memiliki gaya tersendiri dalam menyusun aplikasinya.

Ada topik di seluruh web tentang praktik terbaik dalam menyusun kode Anda. Namun, menurut saya cara terbaik didasarkan pada aplikasi dan logika bisnis Anda saat ini.

Jika Anda tahu bahwa tipe data Anda akan terus berubah di masa depan, mungkin menciptakan nilai dengan cara berorientasi objek akan lebih fleksibel. Jika Anda mengetahui bahwa tipe data Anda kemungkinan besar akan tetap sama, penataan model data Anda secara fungsional dapat bermanfaat di masa depan karena fungsionalitas baru akan lebih banyak ditambahkan daripada tipe data baru.

Terima kasih telah membaca! Jika Anda menyukai postingan ini, Anda dapat mengikuti di Medium untuk melihat postingan serupa lainnya.

Awalnya diterbitkan di https://edward-huang.com.