Apakah adil untuk mengatakan bahwa itu adalah praktik yang baik untuk private
mengatur default segala sesuatu di muka ketika mengkodekan sesuatu?
Dan kemudian hanya memutakhirkannya ke protected
jika subclass membutuhkannya, atau public
jika kelas lain membutuhkannya?
Jawaban:
Jawaban singkat: Ya
Jawaban yang lebih panjang:
Ya, tetapi itu tidak harus ditafsirkan sebagai saran untuk memulai dengan menulis kelas Anda dengan segala sesuatu yang pribadi; pendekatan itu menyiratkan desain kelas dengan berfokus pada detail implementasi sebelum Anda memilih antarmuka.
Salah satu aspek paling penting untuk dipertimbangkan ketika merancang kelas adalah bagaimana itu akan digunakan; yang melibatkan pemikiran tentang metode publik Anda sebelum Anda mulai memikirkan detail pribadi / implementasi.
Lebih jauh, pendekatan itu biasanya melewatkan kesempatan untuk bertanya pada diri sendiri, "Bagaimana saya menulis tes unit untuk kelas ini?" - yang merupakan pertanyaan penting untuk ditanyakan meskipun Anda sebenarnya tidak menulis tes unit. (Terkait: "Apa prinsip desain yang mempromosikan kode yang dapat diuji?" )
Jadi, setelah Anda mendefinisikan antarmuka publik, maka itu ide yang baik untuk default sisanya ke pribadi karena sebagian besar dari itu biasanya akan menjadi detail implementasi berpasir yang tidak menjadi perhatian terhadap apa pun di luar kelas.
sumber
"Dan kemudian hanya memutakhirkannya untuk dilindungi jika subclass membutuhkannya, atau publik jika kelas lain membutuhkannya?"
Itu pendekatan yang salah. Pada saat desain, Anda harus tahu akses publik apa yang ingin Anda berikan. Biasanya Anda memberikan akses publik karena itulah tujuan seluruh kelas Anda. Dan Anda memberikan akses yang dilindungi karena Anda ingin subclass untuk mengakses sesuatu. Dan Anda menggunakan pribadi untuk hal-hal yang bukan urusan orang lain.
Sekarang jika seseorang membutuhkan akses ke hal-hal yang tidak dapat diakses, maka Anda harus berpikir keras tentang kebutuhan itu . Mereka seharusnya tidak memerlukan akses itu, atau desain Anda salah. Mungkin desain Anda adalah salah, dan sesuatu yang tidak umum yang harus publik, sehingga Anda mengubah itu. Tetapi jika desain Anda benar, maka ada sesuatu yang salah dengan kebutuhan tersebut , jadi Anda memperbaikinya alih - alih merusak desain Anda.
sumber
private
atauprotected
?Kunci untuk memahami aspek pemrograman Berorientasi Objek ini adalah konsep enkapsulasi data . Idenya adalah untuk membuat kelas lebih mudah dipahami dengan menyembunyikan detail implementasinya. Ini disebut penyembunyian data . Dengan demikian, kami hanya ingin mengekspos (mempublikasikan) fungsi-fungsi yang diperlukan untuk menggunakan kelas. Fungsi-fungsi ini adalah antarmuka ke kelas.
Pikirkan antarmuka seperti setir mobil. Anda memutuskan ke arah mana mobil berjalan dengan memutar roda, tetapi di bawah selimut terdapat katup putar, hidrolika, katrol yang mengubah rotasi roda Anda, tetapi Anda tidak perlu menjadi insinyur mekanik untuk mengendarai mobil.
Jadi jawaban untuk pertanyaan Anda adalah ya. Anda ingin menyembunyikan rincian tentang kelas dari kelas lain sebanyak mungkin. Memahami kapan sesuatu harus bersifat publik, pribadi, atau dilindungi mudah dipelajari tetapi sulit untuk dikuasai.
sumber