Syarat ' keadaan ' dapat digunakan dalam berbagai pengertian, yang bahkan mungkin tidak semua rentan terhadap definisi yang tepat. Karena itu penting bahwa Anda memasukkan definisi dalam makalah Anda, untuk memperjelas bagaimana Anda menggunakan istilah tersebut. Berikut ini saya tidak menawarkan definisi unik tentang keadaan suatu objek melainkan mencoba untuk membuat sketsa sejumlah cara berpikir tentangnya, yang mungkin sesuai dalam konteks yang berbeda.
Namun, pertama-tama, Anda perlu memikirkan apa yang Anda maksud dengan ' objek ': apakah Anda berpikir tentang objek konseptual, yaitu beberapa entitas yang Anda coba modelkan, atau tentang instance kelas dalam program tertentu; mungkin Anda juga ingin memikirkan keadaan variabel yang pada waktu yang berbeda dapat merujuk ke objek yang berbeda atau tentang suatu sistem, mungkin seperti diakses melalui antarmuka pengguna tertentu.
Bagian dari kesulitan dalam mendefinisikan keadaan suatu objek dalam OOP adalah bahwa ketika kita memodelkan entitas dalam bahasa tertentu, bahasa itu sering tidak memungkinkan kita untuk membedakan atribut objek yang secara konseptual merupakan bagian dari entitas yang sama dari yang lain. Sebagai contoh, daftar tertaut Car
terdiri dari sejumlah Link
-objek, yang berisi pointer ke yang berikutnya (dan mungkin sebelumnya) Link
meskipun secara konseptual daftar tersebut adalah objek tunggal; tautan juga dapat disematkan diCar
-menempatkan atau mengandung pointer ke mereka, tetapi dalam hal ini objek yang terhubung secara konseptual terpisah daripada bagian dari daftar; dalam daftar perubahan terbaru, di mana pun, perubahan hanya dapat hadir dalam daftar dan dianggap sebagai bagian dari itu. Dalam berbagai kasus ini kita harus memutuskan apakah kita mempertimbangkan keadaan satu objek untuk memasukkan bahwa objek terkait. Lebih lanjut, Car
mungkin memiliki tautan ke Registering_Authority
- kita mungkin tidak menganggap kondisi mobil berubah ketika otoritas pendaftarannya mengubah URL situs webnya. Kecuali jika bahasa implementasinya memungkinkan kami untuk membedakan berbagai jenis tautan, tidak akan mungkin membuat definisi umum tentang keadaan suatu objek dalam hal bahasa saja.
Status ' eksternal ' atau ' fungsional ' dapat didefinisikan sebagai 'bagaimana berperilaku', mis. bagaimana ia bereaksi terhadap metode invokasi atau antarmuka pengguna. Untuk objek sebagai instance kelas, definisi ini tergantung pada jenis objek yang dilihat: milik sebagai , warna,Circle
Coloured_Circle
tidak terlihat, dan karenanya tidak relevan dengan keadaannya. Kesulitan dengan ini adalah bahwa 'bagaimana ia bereaksi' mungkin perlu didefinisikan dalam hal nilai yang dikembalikan, dan 'nilai' ini mungkin adalah keadaan objek lain. Salah satu cara untuk memformalkan ini adalah dengan mengatakan bahwa dua keadaan dari suatu objek adalah sama jika semua kemungkinan eksekusi di masa depan dari beberapa sistem di mana ia tertanam menghasilkan pemetaan yang sama dari input ke sistem untuk output dari itu. Sistem terlampir ini mungkin diperlukan untuk menjadi sistem mandiri, yang mampu dieksekusi terlepas dari lingkungannya; di sisi lain, orang dapat membiarkannya menjadi sekecil objek yang dipermasalahkan itu sendiri. Dalam kasus apa pun, pendekatan matematika kemudian mendefinisikan negara sebagai kelas kesetaraan
The ' intern ' negara dapat didefinisikan sebagai keadaan representasi. Upaya pertama tampaknya melingkar tetapi mungkin membantu: 'Keadaan internal suatu objek adalah keadaan anggotanya'. Di sini kita perlu berhati-hati untuk membedakan aspek-aspek signifikan dari representasi dari yang tidak penting: pada level terendah, representasi dari suatu objek mungkin termasuk alamat dari objek lain, tetapi tidak mungkin berguna untuk mempertimbangkan perubahan dalam alamat seperti itu. sebagai perubahan status. Di sisi lain, perubahan status cache untuk hasil permintaan, sementara itu tidak ada bedanya dengan keadaan fungsional (seperti dijelaskan di atas), akan menjadi penting ketika mempertimbangkan tes kinerja.