Immutable obyek PEMROGRAMAN BERORIENTASI OBJEK
2008 | Direktorat Pembinaan SMK
511 Immutable objek sering berguna
karena beberapa biaya operasional seperti menyalin dan
membandingkan dapat diabaikan, menyederhanakan kode program dan
mempercepat eksekusi. Namun, membuat obyek immutable biasanya
tidak tepat jika objek berisi sejumlah besar data yang berubah-ubah.
Karena itu, banyak bahasa yang mempunyai fasilita kedua objek
tersebut baik mutable dan immutable obyek.
Dalam kebanyakan bahasa berorientasi objek, objek dapat
disebut dengan referensi. Beberapa contoh seperti bahasa Java, C++,
C, VB.NET dan banyak bahasa scrip seperti Ruby dan Python.
Dalam hal ini, hal-hal apakah kondisi obyek dapat berbeda bila benda
dibagi melalui referensi.
Jika obyek yang diketahui adalah immutable, maka dapat disalin cukup
dengan membuat salinan referensi, bukan untuk menyalin seluruh objek.
Karena referensi biasanya hanya ukuran sebuah pointer biasanya jauh
lebih kecil daripada obyek itu sendiri, sehingga lebih mudah dalam
penyimpanan di memori dan meningkatkan kecepatan dalam
eksekusi.
Teknik penyalinan Referensi jauh lebih sulit digunakan pada objek
mutable, karena jika ada pengguna referensi ke sebuah obyek mutable
yang merubahnya, semua pengguna lain akan melihat perubahannya. Jika
ini bukan efek dimaksudkan, maka akan lebih sulit untuk
memberitahukan ke pengguna yang lain untuk meminta mereka merespon
dengan benar.
Dalam situasi ini, defensif menyalin dari seluruh obyek daripada
referensi biasanya lebih mudah namun solusi mahal. Para pengamat
menyatakan bahwa teknik alternatif untuk menangani perubahan objek
mutabel. Immutable objects dapat berguna dalam aplikasi multi-
threaded. Multiple threads dapat bertindak berdasarkan data yang
diwakili oleh immutable objek tanpa memperhatikan data yang diubah
oleh thread lainnya. immutable obyek mempunyai pertimbangan atau
dianggap lebih aman daripada mutable object atau obyek yang
berubah.
Dalam Praktiknya selalu menggunakan referensi pada saat
melakukan copy atau sering dikenal sebagai objek interning. Jika interning
digunakan, dua benda dianggap sama jika dan hanya jika mereka
referensi, biasanya digambarkan sebagai integers yang keuanya
sama. Beberapa bahasa secara otomatis: misalnya, secara otomatis
Python interns string dan lain-lain.
Jika algoritma yang menerapkan interning dijamin, maka untuk
melakukan setiap kasus yang mungkin membandingkan dengan
obyek untuk mengurangi pointer, dan yang penting dalam mendapatkan
kecepatan maksimal dalam aplikasi. Bahkan jika algoritma tidak dijamin
secara lengkap, masih ada kemungkinan jalan yang cepat untuk
meningkatan kasus ketika obyek yang sama dan menggunakan
referensi yang sama. Interning umumnya hanya berguna untuk
immutable benda.
Kadang-kadang kalau bicara tertentu mengenai satu bidang obyek
yang immutable. Ini berarti bahwa tidak ada cara untuk mengubah
kondisi bagian objek, walaupun
512
Direktorat Pembinaan SMK | 2008
bagian lain dari objek mungkin berubah-ubah. Hal ini dapat,
misalnya, untuk membantu menegakkan tertentu secara eksplisit
invariants tentang beberapa data dalam obyek yang sama tinggal
melalui masa objek. Dalam beberapa bahasa, hal ini dilakukan dengan kata
kunci misalnya const di C++, final di Java yang mana dirancang pada
field dari obyek yang immutable.
Keimmutablean tidak menyiratkan bahwa sebagai objek
yang disimpan dalam memori komputer unwriteable. Sebaliknya,
keimmutablean adalah kompilasi waktu membangun dan menunjukkan
apa yang harus dilakukan oleh programmer.
Dalam bahasa C++ implementasi pada sebuah cart akan
memungkinkan pengguna menyatakan sebuah kasus kelas
baru sebagai salah satu const immutable atau mutable, seperti
yang dikehendaki, dengan menyediakan dua versi yang berbeda
dari getItems method. Perhatikan bahwa dalam C + + itu tidak
diperlukan dan bahkan mustahil - untuk menyediakan constructor
khusus untuk kasus const. Template typename T. perhatikan potongan
program dibawah ini:
Program 15.1 class
Cart {
private: std::vectorT items;
public: Cartconst std::vectorT v: itemsv { }
std::vectorT getItems { return items; } const std::vectorT getItems
const { return items; } int total
const {
return sum of the prices }
};