Program CS sekolah saya menghindari penyebutan pemrograman berorientasi objek, jadi saya telah melakukan beberapa bacaan sendiri untuk menambahnya - khususnya, Konstruksi Perangkat Lunak Berorientasi Objek oleh Bertrand Meyer.
Meyer berulang kali menekankan bahwa kelas harus menyembunyikan sebanyak mungkin informasi tentang implementasi mereka, yang masuk akal. Secara khusus, ia berargumen berulang kali bahwa atribut (yaitu, statis, sifat-sifat non-komputer kelas) dan rutinitas (sifat kelas yang sesuai dengan panggilan fungsi / prosedur) harus dapat dibedakan satu sama lain.
Sebagai contoh, jika sebuah kelas Person
memiliki atribut age
, ia menegaskan bahwa seharusnya tidak mungkin untuk mengatakan, dari notasi, apakah Person.age
berkorespondensi secara internal dengan sesuatu seperti return current_year - self.birth_date
atau hanya return self.age
, di mana self.age
telah didefinisikan sebagai atribut konstan. Ini masuk akal bagi saya. Namun, ia kemudian mengklaim sebagai berikut:
Dokumentasi klien standar untuk suatu kelas, yang dikenal sebagai bentuk pendek dari kelas, akan dirancang agar tidak mengungkapkan apakah fitur yang diberikan adalah atribut atau fungsi (dalam kasus yang bisa jadi salah satu).
yaitu, ia mengklaim bahwa bahkan dokumentasi untuk kelas harus menghindari menentukan apakah seorang "pengambil" melakukan perhitungan atau tidak.
Ini, saya tidak mengikuti. Bukankah dokumentasi satu-satunya tempat di mana penting untuk memberi tahu pengguna tentang perbedaan ini? Jika saya mendesain database yang penuh dengan Person
objek, bukankah penting untuk mengetahui apakah Person.age
panggilan itu mahal atau tidak , jadi saya dapat memutuskan apakah akan menerapkan semacam cache atau tidak untuknya? Apakah saya salah paham apa yang dia katakan, atau dia hanya contoh ekstrem dari filosofi desain OOP?