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 */ } };