Saya membaca pengenalan Oracle untuk konsep OOP dan saya menemukan deskripsi ini:
Objek dunia nyata memiliki dua karakteristik: Mereka semua memiliki keadaan dan perilaku. Anjing memiliki status (nama, warna, jenis, lapar) dan perilaku (menggonggong, mengambil, mengibaskan ekor). Objek perangkat lunak secara konseptual mirip dengan objek dunia nyata: mereka juga terdiri dari keadaan dan perilaku terkait.
Masalah saya dengan bagian itu adalah bahwa ketika menggambarkan keadaan campuran nya atribut sana juga. Misalnya, nama dan warna anjing adalah atributnya, sementara itu sedang lapar atau gundah adalah statusnya.
Jadi menurut pendapat saya, lebih akurat untuk memecah karakteristik objek menjadi tiga bagian: atribut, status, dan perilaku .
Tentu, ketika menerjemahkan ini ke dalam bahasa pemrograman saya dapat melihat bahwa partisi tiga kali lipat menjadi dua kali lipat, karena atribut dan status akan disimpan ke dalam bidang / variabel, sementara perilaku akan disimpan ke dalam metode / fungsi.
Tetapi secara konseptual lebih masuk akal untuk memisahkan 3 hal.
Berikut contoh lain: pertimbangkan lampu. Mengatakan bahwa baik ukuran lampu dan apakah itu dinyalakan atau tidak adalah keadaan adalah pendapat saya. Ukuran lampu adalah atribut, bukan status, saat sedang dinyalakan atau dimatikan adalah status.
Atau apakah saya melewatkan sesuatu?
sumber
Jawaban:
Anda benar bahwa objek terdiri dari atribut, status, dan perilaku, jika Anda mendefinisikan atribut dengan maksud karakteristik yang tidak berubah dari instance. Faktanya, penting untuk membuat perbedaan ini, karena ada objek yang hanya mengandung atribut, (dalam pengertian Anda,) dan tidak ada keadaan; mereka disebut abadi dan mereka sangat berguna dalam pemrograman.
Definisi tiga bagian ini memang diwakili dalam bahasa pemrograman, misalnya menggunakan
final
kata kunci di Jawa ataureadonly
kata kunci dalam C # untuk menunjukkan data contoh yang mungkin tidak berubah sepanjang masa contoh.Saya harus menambahkan, bahwa data instance yang tidak berubah biasanya tidak disebut atribut. Kita cenderung berbicara tentang mereka sebagai 'data akhir' atau 'hanya baca' atau 'data konstan' tergantung pada bahasa yang kita gunakan. Istilah yang tepat untuk mereka adalah 'invarian', tetapi kemudian kata ini tidak sering digunakan dalam pengertian ini; lebih sering digunakan untuk hal-hal lain.
sumber
Saya pikir lebih akurat untuk mengatakan objek hanya memiliki dua karakteristik. Mengambil contoh Oracle:
Fakta bahwa nilai-nilai (negara) untuk nama, warna, berkembang biak, dan lapar disimpan dalam objek dalam atribut adalah detail implementasi. Anda tidak benar-benar membutuhkan atribut sama sekali.
Jika Anda akan memasukkan atribut sebagai karakteristik ketiga, maka Anda juga harus memasukkan metode sebagai yang keempat, karena (seperti keadaan) perilaku objek dapat berubah juga. Negara dan perilaku adalah dua karakteristik abstrak dari objek. Atribut dan metode adalah implementasi konkret dari konsep-konsep tersebut.
sumber
Status adalah set atribut dan nilai yang sesuai, jadi dari sudut pandang saya, Anda tidak benar (dan Anda membuat kompleksitas tambahan yang tidak perlu ke definisi sederhana).
sumber
Kita dapat mengklasifikasikan hal-hal dengan cara yang tak terhitung banyaknya dan setiap klasifikasi tidak memiliki "jawaban yang benar". Ada manfaat untuk mengklasifikasikan hal-hal hanya jika klasifikasi mengarah pada pemahaman yang lebih dalam atau untuk meningkatkan komunikasi. Jika tim Anda lebih suka menggunakan atribut istilah, status dan fungsi dan memiliki definisi kerja yang baik untuk ini, ini akan membantu meningkatkan komunikasi internal tetapi Anda harus fleksibel ketika berkomunikasi di luar grup ini.
Konsep "lapar" dan "haus" dapat diturunkan dari atribut dasar (misalnya glukosa darah, tingkat hidrasi) sehingga kita dapat menganggap status sebagai atribut-meta yang berasal dari atribut dasar yang dapat kita daur ke Benar atau Salah berdasarkan pada keadaan atribut dasar yang relevan. Sebagai contoh cahaya, kita dapat menganggap cahaya memiliki atribut
applied_voltage
danresistance
fungsivoltage_switch()
danshine()
. Thevoltage_swich()
kemudian fungsi dari beberapa input (misalnya pengguna switch, lampu, timer, dll) danshine()
merupakan fungsi dariapplied_voltage
danresistance
. Kita dapat mendeklarasikan atribut meta yang disebutlight_state
Benar atau Salah untuk membantu membangun objek secara mental, tetapi pada akhirnya ide-ide ini semua hanyalah konstruksi mental yang kita gunakan untuk mengatur pekerjaan kita.sumber
Keadaan objek dikodekan dalam atributnya, baik secara langsung maupun tidak langsung. Misalnya, jika Anda ingin Anjing Anda haus, Anda dapat membiarkannya
Atau, Anda dapat membiarkannya seperti
dan simpulkan apakah anjing Anda haus dengan membandingkan waktu saat ini dengan waktu terakhir ia minum sesuatu.
Either way, keadaan objek Anda terletak di dalam atributnya.
Lalu ada kelas yang tidak memiliki atribut, kebanyakan kelas utilitas. Tetapi Anda biasanya tidak ingin membuat instance dari mereka dalam kasus ini.
Demi bisa beralasan tentang pernyataan, para ilmuwan biasanya berpegang pada prinsip minimalitas. Saya pikir itu sebabnya Oracle tidak menyebutkan status secara eksplisit. Itu bisa diturunkan dari nilai atribut.
sumber
Koneksi dunia nyata salah arah. Inilah cara saya akan mengajarkannya (pendekatan c ++):
Jadi sebenarnya tidak ada yang berbeda antara status dan atribut. Itu hanya kumpulan bit acak. Hanya perbedaan sewenang-wenang untuk memisahkan mereka. Hanya perlu tahu untuk apa itu alias.
sumber