Почему “частные” методы в объектно-ориентированном?

Я понимаю, что это - очень простое понятие в ООП. Но тем не менее я не могу получить голову вокруг. Я понял, почему членские переменные являются частными, таким образом, пользователь класса не может злоупотребить им путем установки недопустимых значений.

Но как это может относиться к методам?

44
задан pointlesspolitics 12 April 2010 в 08:28
поделиться

7 ответов

Много хороших ответов, но, возможно, еще один от Java-программиста-самоучки, когда я прошел через все это сам с большой болью;)

Подумайте о Класс как нечто видимое снаружи, а не как нечто, что вы видите внутри . Если вы посмотрите на Класс со стороны, что вы увидите?

Возьмем снова часы в качестве примера: часы могут дать вам информацию о текущем времени , и их можно настроить чтобы показать правильное время .

Итак, если смотреть на вещи со стороны, часы - это машина, которая может делать эти две вещи; общедоступные методы, которые мы называем .

Но мы, как конструкторы этих часов, знаем, что перед любой временной операцией мы должны переключиться с 23 на 11 на нашем дисплее (это такие часы), поэтому для этого нам нужно немного изменить внутреннюю структуру. Изменение с 23 на 11 отлично подходит для нас в обоих случаях - установка часов и отображение текущего времени - но мы делаем это «на стороне» , поскольку пользователю не обязательно обо всем этом знать. сложная математика. Это частные методы!

Итак, наш класс Clock может иметь два общедоступных метода ( showTime и setTime ), которые и есть все, что пользователь хочет видеть, и частный метод ( recountTime ), который обеспечивает функциональность для этих общедоступных методов и является тем, что пользователь не хочет, чтобы видеть.

Таким образом, с одной стороны, вы должны иметь в виду, что частным является то, что не будет повторно реализовано и к нему не будут обращаться будущие программисты , использующие ваш код (как было указано в ответах выше). Но частный также означает вещей, выполняемых на стороне, поэтому пользователь этого не видит . Вот почему мы называем общедоступные методы общедоступным интерфейсом - это все, что пользователь увидит снаружи.

Для меня это полезно (я самоучка, так что, может быть, это не очень популярная методика ...), чтобы записать все, что пользователи (реальные пользователи и другие классы) будут делать с моим классом (открытый интерфейс только с подписями общедоступных методов), затем записать подписи частных методов, которые Я-разработчик будет использовать для достижения общедоступных целей, которые обещали предоставить моим пользователям, а затем просто выполнит это с помощью кода.

Может быть полезно иметь в виду, что старое правило C все еще действует (как было выражено в 97 вещей, которые должен знать каждый программист ): функция / метод должны состоять всего из нескольких строк, В самом деле!!

97
ответ дан 26 November 2019 в 21:39
поделиться

Частные методы полезны для разделения задач на более мелкие части или для предотвращения дублирования кода, который часто требуется другим методам в классе, но не должен быть вызванным вне этого класса.

28
ответ дан 26 November 2019 в 21:39
поделиться

Точно по той же причине - некоторые методы предназначены только для использования внутри класса, и использование неклассовыми объектами было бы злоупотреблением. Подумайте о методах, которые увеличивают и уменьшают количество объектов для класса - они должны вызываться только из конструкторов или деструкторов класса и поэтому должны быть закрытыми.

6
ответ дан 26 November 2019 в 21:39
поделиться

Методы (также) используются для структурирования кода, и я не хочу, чтобы внутренняя структура моей реализации просочилась через интерфейс. Часто у меня есть метод, который со стороны кажется выполняющим одну задачу, но на самом деле должен выполнять несколько более мелких задач. В таких случаях я создаю по одному небольшому частному методу для каждой из подзадач и вызываю их из общедоступного метода.

9
ответ дан 26 November 2019 в 21:39
поделиться

Методы, которые являются приватными, могут быть вызваны только методами того же класса или того же "модуля". Методы не принято делать приватными; обычно их делают защищенными, чтобы их могли вызывать дети, или публичными, чтобы их мог вызывать другой код.

3
ответ дан 26 November 2019 в 21:39
поделиться

Ну, в некоторых случаях вы хотите, чтобы только этот конкретный класс использовал метод, и защитить его от использования любым другим классом.

Просто пример, чтобы показать, как это может быть использовано:

У вас есть класс Clock, он работает и работает, отслеживая время и дату. Вы можете получить от него время или дату через публичные методы. Но часы должны быть правильными. Поэтому вы не можете корректировать время или дату за пределами класса. Но сами часы должны иметь возможность корректировать время (например, переход на летнее время)

В этом случае часы будут иметь приватный метод для корректировки времени.

Затем у вас также есть дополнительное преимущество - структурирование кода. Вы можете разделить свой код на более мелкие приватные методы, которые структурируют код, но не позволяют использовать их за пределами вашего класса.

3
ответ дан 26 November 2019 в 21:39
поделиться

Имея в виду все остальные ответы. Следует помнить, что частный метод - это только совет для программиста на многих языках. В большинстве случаев все еще можно использовать частный метод. Например, создав объект, который наследуется от объекта частным методом и переопределяет его метод новым общедоступным методом.

В некоторых современных объектно-ориентированных языках частные методы существуют только по соглашению. Метод с "_" в начале считается конфиденциальным.

1
ответ дан 26 November 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: