Частные методы над общественными методами

Я изучал класс StringTokenizer.java, и было несколько вопросов, которые приходили на ум.

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

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

Например, в случае класса StringTokenizer мы не могли бы просто поместить весь код реализации в общедоступные методы? Как бы это повлияло на классы, которые используют эти методы, поскольку API для этих методов (т.е. Правила для вызова этих общедоступных методов) останутся прежними? Единственная причина, по которой я могу думать о том, почему частные методы полезны, заключается в том, что она помогает вам писать дублирующий код. Например, если все общедоступные методы сделали то же самое, тогда вы можете объявить частный метод, который выполняет эту задачу и который может использоваться общедоступными методами.

Другой вопрос: в чем преимущество написания реализации в частном методе в отличие от общедоступного метода?

Вот небольшой пример:

public class Sum{

    private int sum(int a, int b){
        return a+b;
    }

    public int getSum(int a, int b){
        return sum(a,b);
    }
}

Vs...

public class Sum{

    public int getSum(int a, int b){
        return a+b;
    }
}

Как первый пример полезнее?

Ответ 1

Чтобы добавить что-то, частный метод может ВСЕГДА быть изменен безопасно, потому что вы точно знаете, что вызываются только из собственного класса, никакие внешние классы не могут вызвать частный метод (они даже не видят его).

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

Теперь подумайте о публичном методе, любой может вызвать этот метод, поэтому, если вы добавите/удалите параметр, вам нужно будет также изменить ВСЕ вызовы этого метода.

Ответ 2

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

Помимо консолидации повторяющегося кода (часто выражаемого как "Не повторяйте себя" или "СУХОЙ" ), использование частных методов также может помочь вам структурировать и документировать ваш код. Если вы обнаружите, что пишете метод, который делает несколько вещей, вы можете рассмотреть возможность его разделения на несколько частных методов. Это может сделать более ясным, какие входы и выходы для каждой части логики (при более тонкой детализации). Кроме того, имена описательных методов могут помочь дополнять документацию кода.

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

Цель объявления метода private -

  • скрывать детали реализации
  • исключить метод из списка как открытый API
  • убедитесь, что логика кода не используется/не используется снаружи
  • в большинстве случаев выполнение вашего метода зависит от других методов, которые выполняются перед ним; то вы также можете быть уверены, что вы контролируете правильную последовательность использования вашего метода.

Используйте private для ваших методов, если вы не намерены использовать ваш метод вне контекста вашего класса.

Ответ 6

Выполнение функций private дает вам преимущество в следующих случаях:

  • Создание функции private дает компилятору JVM возможность встраивания функции и, следовательно, повышение производительности приложения.
  • Если класс наследуется и вы расширяете его из дочернего класса, то в случае, если вы хотите скрыть функции из дочернего класса, вы можете сделать это (вы можете расширить StringTokenizer).
  • Если фрагмент кода должен использоваться в нескольких функциях, вы перемещаете этот код в метод частной утилиты

Ответ 7

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

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