Вопросы разработки Java - класс, функция, модификаторы доступа - PullRequest
1 голос
/ 05 мая 2010

Я новичок в Java. У меня есть вопросы по дизайну.

Допустим, у меня есть приложение для сканирования, которое выполняет следующие действия: 1. сканирует URL и получает его содержимое 2. Разбирает содержимое 3. Отображение содержимого

  1. Как вы выбираете между реализацией функции или класса? - Должен ли анализатор быть функцией класса сканера или он сам по себе является классом, чтобы его могли использовать и другие приложения? - Если это должен быть класс, должен ли он быть защищенным или общедоступным?

  2. Как вы выбираете между реализацией открытого или защищенного класса? - Если бы мне нужно было создать класс для генерации статистики из проанализированного содержимого, например, должен ли этот класс быть защищенным (чтобы к нему мог обращаться только класс искателя), или он должен быть открытым?

Спасибо Рон

Ответы [ 3 ]

2 голосов
/ 05 мая 2010

Я думаю, что ответ Энди очень хороший. У меня есть несколько дополнений:

Если вы считаете, что класс будет расширен в будущем, вы можете установить все свои private методы (если таковые имеются) на protected. Таким образом, любые будущие расширяющие классы также могут получить к ним доступ.

Мне нравится правило, что метод не должен быть длиннее, чем вы можете видеть его открывающие и закрывающие скобки ({ }) без прокрутки. Если метод длиннее, попробуйте разделить его на несколько методов (private, protected или public по вашему выбору). Это делает код более читабельным, а также может сэкономить на строках кода.

Итак, предположим, что метод становится большим, и вы разбили его на несколько private методов. Если эти новые методы используются только в рамках первого «материнского» метода, имеет смысл перенести все это в собственный класс. Таким образом, вы сделаете исходный класс меньше и более читабельным. Кроме того, вы упростите понимание функциональности нового класса, так как он не смешивается с функциональностью исходного класса.

2 голосов
/ 05 мая 2010

Лучшее руководство, которое я видел по этим типам вопросов, - «ТВЕРДЫЕ Принципы ОО Проекта».

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

Самым основным из этих принципов и тем, который как бы отвечает на ваш первый вопрос, является «Принцип единой ответственности». Это говорит о том, что «у класса должна быть одна и только одна причина для изменения». Другими словами, каждый из ваших классов должен делать только одно. Если вам в конечном итоге потребуется изменить работу этой единственной вещи, вам нужно изменить только один класс, и, надеюсь, только одно место, чтобы внести изменения в этом классе. В вашем случае вы, вероятно, захотите, чтобы класс извлекал содержимое из URL, другой класс для анализа его в некоторой структуре данных в памяти, другой класс для обработки данных (при необходимости) и еще один класс (или классы) для отображения контента в любом формате, который вам нужен. Очевидно, что вы можете увлекаться классами, но обычно проще тестировать множество небольших классов с одной операцией, а не один или два больших всеобъемлющих класса.

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

1 голос
/ 05 мая 2010

Мне нравится думать о классах как о «парнях», которые могут делать определенные «методы».

В вашем случае, есть парень, который может извлечь содержание URL, если вы скажете ему, какой это URL.

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

Тогда у нас есть третий парень, который показывает вещи. Он немного отсталый и понимает только то, что производит «другой парень», но эй, все в порядке.

Наконец, проекту нужен босс, который отдает приказы остальным 3 парням и передает сообщения между ними.

ps: Я никогда не думал о том, чтобы делать классы защищенными или нет. Обычно они просто публичные без какой-либо конкретной причины. Пока это не больно, зачем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...