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