Dalam pemrograman berorientasi objek, objek yang tidak dapat diubah adalah objek yang propertinya tidak dapat diubah setelah dibuat. Sebagian besar objek, sebaliknya, adalah objek yang dapat diubah, yang berarti bahwa beberapa atau semua propertinya dapat diubah secara bebas setelah dibuat. Berbagai bahasa komputer memiliki kemampuan untuk membuat objek yang tidak dapat diubah, termasuk Java, C++, erlang, Tcl, dan scala.
Objek yang tidak dapat diubah dapat dibuat dengan salah satu dari dua cara: dengan membuat kelas yang menurut definisi tidak dapat diubah atau dengan secara eksplisit mendeklarasikan objek yang dapat diubah sebagai tidak dapat diubah. Metodologi untuk membuat kelas yang tidak dapat diubah bervariasi tergantung pada bahasa komputer yang digunakan. Terlepas dari bahasanya, kelas yang tidak dapat diubah tidak boleh memiliki metode yang dapat mengubah data internalnya dan tidak ada cara bagi metode untuk diubah — yaitu diganti atau kelebihan beban — dengan cara yang akan mengubah data internalnya. Ini adalah yang lebih rumit dari dua pendekatan. Untuk membuat objek yang tidak dapat diubah dari objek yang tidak dapat diubah, di sisi lain, seseorang sering dapat menerapkan kata kunci untuk menetapkan objek sebagai tidak dapat diubah.
Sebagai contoh, pembuatan objek yang tidak dapat diubah di Java sangat bergantung pada kata kunci “final”. Cara cepat untuk membuat kelas tidak dapat diubah di Java adalah dengan mendeklarasikan kelas, serta semua metode dan anggota datanya, final. Strategi serupa juga dapat digunakan di C++ dengan kata kunci “const”. Namun, pendekatan ini, tergantung pada konten kelas, mungkin bukan yang terbaik. Secara umum, objek biasanya dapat dibuat tidak berubah dengan pemeliharaan yang cermat terhadap data internalnya.
Membuat objek yang tidak dapat diubah menggunakan kata kunci, seperti pada contoh di atas, seringkali jauh lebih mudah daripada menulis seluruh kelas menjadi tidak dapat diubah. Menggunakan pendekatan ini, bagaimanapun, memiliki bahaya. Saat secara eksplisit menetapkan objek yang tidak dapat diubah dengan cara ini, penting bagi programmer untuk memastikan bahwa semua properti dan data yang sesuai telah dimasukkan ke dalam objek terlebih dahulu. Mengandalkan objek yang tidak lengkap mungkin berbahaya, terutama jika kehilangan informasi penting.
Jika suatu objek dapat berubah tetapi membutuhkan data yang tidak dapat diubah untuk dibuat dengan benar, data yang tidak dapat diubah harus diinisialisasi sebelum objek yang dapat berubah dapat dibuat. Objek yang tidak dapat diubah selalu tidak dapat diubah, apakah itu nilai data atau objek besar, dan harus selalu diperlakukan seperti itu. Secara umum, objek yang tidak dapat diubah tidak dapat dibuat dapat diubah setelah dibuat, meskipun terkadang objek tersebut dapat disalin sebagai objek yang dapat diubah. Biasanya dapat diasumsikan bahwa objek yang tidak dapat diubah dan salinannya juga tidak dapat diubah, yang dapat mencegah masalah data atau memori.