2010-04-12 2 views
33

Я понимаю, что это очень простая концепция в oops. Но все же я не могу опустить голову. Я понял, почему переменные-члены являются частными, поэтому пользователь класса не может злоупотреблять им, установив недопустимые значения.Почему «частные» методы в объекте ориентированы?

Но как это применимо к методам?

+2

Чтобы предотвратить программирование от публичных методов, которые прокручиваются вечно в вертикальном направлении. Вам нужны частные методы, чтобы прервать реализацию общедоступного метода в читаемые/поддерживаемые/сплоченные/многоразовые (СУШКИ) фрагменты - каждый фрагмент идеально представляет собой частный метод с раскрывающимся именем намерения. – Gishu

+1

Спасибо за ваши комментарии .. Я получил ответ, который был у меня в голове с давних времен. Stackoverflow действительно полезен. – pointlesspolitics

+0

Важно отметить, что в большинстве случаев вам, вероятно, не нужен метод 'private', а метод' protected'. ([Разница] (https://stackoverflow.com/questions/224966/private-and-protected-members-c)) – rinogo

ответ

80

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

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

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

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

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

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

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

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

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

5

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

26

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

+0

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

+0

Предположим, что у вас есть группа предварительных условий, которые необходимо проверить, прежде чем вызывать различные методы в вашем классе или блокировку, которую необходимо получить, или действительно любой блок кода, который будет повторяться несколькими способами, но не имеет смысла за пределами класса. Этот код является идеальным кандидатом на то, чтобы быть введенным в частный метод, именно потому, что он повторяется и не имеет смысла вне класса. Последняя причина _is_ о области метода. – uckelman

3

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

+0

«чтобы дети могли их назвать» - лучший ответ ИМО. «частный» модификатор доступа делает класс child не наследованным методом/переменной. Это основное различие между частным и защищенным. – l00k

8

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

+0

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

+0

Видимость не является основной особенностью «частного» этого модификатора доступа. «Защищенный» также скрыт от доступа общественности. – l00k

2

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

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

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

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

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

1

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

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