Yang perlu Anda pahami adalah bahwa ada dua jenis objek:
Objek yang memiliki perilaku . Ini harus menahan diri dari memberikan akses publik ke sebagian besar / anggota data mereka. Saya berharap hanya sedikit metode accessor yang ditentukan untuk ini.
Contohnya adalah regex yang dikompilasi: Objek dibuat untuk memberikan perilaku tertentu (untuk mencocokkan string dengan regex tertentu, dan melaporkan kecocokan (sebagian)), tetapi bagaimana regex yang dikompilasi melakukan tugasnya bukan merupakan milik pengguna bisnis.
Sebagian besar kelas yang saya tulis adalah dalam kategori ini.
Objek yang benar-benar hanya data . Ini seharusnya hanya menyatakan semua anggotanya publik (atau menyediakan set lengkap aksesor untuk mereka).
Contohnya adalah kelas Point2D
. Sama sekali tidak ada invarian yang perlu dipastikan untuk anggota kelas ini, dan pengguna harus dapat mengakses data hanya melalui myPoint.x
dan myPoint.y
.
Secara pribadi, saya tidak menggunakan banyak kelas seperti itu, tetapi saya kira tidak ada kode yang lebih besar yang saya tulis yang tidak menggunakan kelas semacam itu di suatu tempat.
Menjadi mahir dengan orientasi objek termasuk menyadari bahwa perbedaan ini ada, dan belajar untuk mengklasifikasikan fungsi kelas menjadi salah satu dari dua kategori ini.
Jika Anda kode dalam C ++, Anda bisa membuat perbedaan ini secara eksplisit dengan menggunakan class
untuk kategori objek pertama, dan struct
untuk yang kedua. Tentu saja, keduanya setara, kecuali itu class
berarti bahwa semua anggota bersifat pribadi secara default, sementara struct
menyatakan semua anggota publik secara default. Yang merupakan jenis informasi yang ingin Anda komunikasikan.