Чи справедливо сказати, що є хорошою практикою замовчувати все private
наперед, коли щось кодує?
А потім лише оновити його, protected
якщо потрібен підклас або public
інший клас?
Чи справедливо сказати, що є хорошою практикою замовчувати все private
наперед, коли щось кодує?
А потім лише оновити його, protected
якщо потрібен підклас або public
інший клас?
Відповіді:
Коротка відповідь: Так
Більш довга відповідь:
Так, але це не слід трактувати як пропозицію почати з написання своїх занять із усього приватного; такий підхід передбачає дизайн класу, орієнтуючись на деталі реалізації, перш ніж ви зупинилися на інтерфейсі.
Один з найважливіших аспектів, який слід враховувати при проектуванні класу, - як він буде використовуватися; що включає роздуми про ваші загальнодоступні методи, перш ніж ви почнете думати про приватні деталі / деталі реалізації.
Крім того, такий підхід, як правило, не вистачає шансів запитати себе: "Як би я написати одиничний тест для цього класу?" - що важливо запитати, навіть якщо ви насправді не пишете одиничні тести. (Пов'язано: "Які принципи дизайну рекламують перевіряється код?" )
Отже, після того, як ви визначили загальнодоступний інтерфейс, тоді добре б решту за замовчуванням встановити приватним, оскільки більшість із них, як правило, є деталізацією з дрібною реалізацією, яка не стосується нічого поза класом.
"А потім лише оновіть його до захищеного, якщо йому потрібен підклас, або до публічного, якщо йому потрібен інший клас?"
Це неправильний підхід. На час проектування ви повинні знати, який доступ до публіки ви хочете надати. Зазвичай ви даєте доступ громадськості, тому що в цьому і полягає вся мета вашого класу. І ви надаєте захищений доступ, оскільки ви хочете, щоб підкласи мали доступ до речей. І ви використовуєте приватне для речей, які нікому не займаються.
Тепер, якщо комусь потрібен доступ до речей, до яких вони не можуть отримати доступ, то вам слід дуже подумати над цією потребою . Їм не потрібен такий доступ, або ваш дизайн неправильний. Може бути , ваш дизайн є неправильним, і що - то не є публічним , які повинні бути відкритими, щоб ви змінити. Але якщо ваш дизайн правильний, то з потребою щось не так, тож ви виправте це, замість того, щоб пошкодити дизайн.
private
або protected
?
Запорукою розуміння цього аспекту об'єктно-орієнтованого програмування є концепція інкапсуляції даних . Ідея полягає в тому, щоб зробити клас легшим для розуміння, приховавши деталі його реалізації. Це називається приховуванням даних . Таким чином, ми хочемо лише розкрити (оприлюднити) ті функції, які необхідні для використання класу. Ці функції є інтерфейсом до класу.
Подумайте про інтерфейс, як колесо автомобіля. Ви вирішуєте, в якому напрямку рухається машина, повертаючи колесо, але під кришками є поворотні клапани, гідравліка, шківи, що змінюють обертання ваших коліс, але вам не потрібно бути інженером-механіком для управління автомобілем.
Тож відповідь на ваше запитання - так. Ви хочете приховати якомога більше деталей про клас від інших класів. Зрозуміти, коли щось має бути публічним, приватним чи захищеним, легко вивчити, але важко освоїти.