Ada banyak heuristik yang terkait dengan desain berorientasi objek. Misalnya, "semua variabel anggota harus pribadi", atau "variabel global harus dihindari", atau "menggunakan run time type identification (RTTI) berbahaya". Apa sumber heuristik ini? Apa yang membuat mereka benar? Apakah itu selalu benar? Kolom ini menyelidiki prinsip desain yang mendasari heuristik ini - prinsip terbuka-tertutup.
Seperti yang dikatakan Ivar Jacobson: “Semua sistem berubah selama siklus hidup mereka. Ini harus diingat ketika mengembangkan sistem yang diperkirakan akan bertahan lebih lama dari versi pertama. ”Bagaimana kita bisa membuat desain yang stabil dalam menghadapi perubahan dan itu akan bertahan lebih lama dari versi pertama? Bertrand Meyer memberi kita bimbingan sejak tahun 1988 ketika dia menciptakan prinsip buka-tutup yang sekarang terkenal. Mengutip dia:
ENTITAS PERANGKAT LUNAK (KELAS, MODUL, FUNGSI, DLL) HARUS DIBUKA UNTUK PERPANJANGAN, TETAPI TERTUTUP UNTUK MODIFIKASI.
Ketika satu perubahan pada suatu program menghasilkan serangkaian perubahan pada modul-modul dependen, program itu memperlihatkan atribut-atribut yang tidak diinginkan yang telah kita asosiasikan dengan desain "buruk". Program ini menjadi rapuh, kaku, tidak dapat diprediksi dan tidak dapat digunakan kembali. Prinsip terbuka-tertutup menyerang ini dengan cara yang sangat mudah. Dikatakan bahwa Anda harus merancang modul yang tidak pernah berubah . Ketika persyaratan berubah, Anda memperluas perilaku modul tersebut dengan menambahkan kode baru, bukan dengan mengubah kode lama yang sudah berfungsi.
Deskripsi
Modul yang sesuai dengan prinsip buka-tutup memiliki dua atribut utama.
- Mereka adalah "Open For Extension".
Ini berarti bahwa perilaku modul dapat diperluas. Kita dapat membuat modul berperilaku dengan cara baru dan berbeda saat persyaratan aplikasi berubah, atau untuk memenuhi kebutuhan aplikasi baru.
- Mereka "Ditutup untuk Modifikasi".
Kode sumber modul tersebut tidak dapat diganggu gugat. Tidak ada yang diizinkan untuk melakukan perubahan kode sumber.
Tampaknya kedua atribut ini bertentangan satu sama lain. Cara normal untuk memperluas perilaku modul adalah dengan membuat perubahan pada modul itu. Modul yang tidak dapat diubah biasanya dianggap memiliki perilaku tetap. Bagaimana dua atribut yang berlawanan ini bisa diselesaikan?
Abstraksi adalah Kunci ...