Именование абстрактных классов Java

9

Пример:

Вы создаете абстрактный класс для действий Ajax. Различные действия Ajax будут расширять этот класс.

Проблема:

  1. Вы называете класс AjaxAction или AbstractAjaxAction?
  2. Когда вы создаете подклассы, вы называете их:
    • действие
    • AjaxAction
    • Просто назовите их, что они

Я не смог найти, что такое «официальная» конвенция. Я не вижу необходимости префикса "Abstract" или какого-либо обязательного соглашения об именах в подклассах. (Это может соответствовать в любом случае, в зависимости.)

Есть ли официальная конвенция? Не могли бы вы связать меня с этим? И что вы думаете по этому поводу?

Майкл К
источник

Ответы:

16

Когда это возможно, я стараюсь не включать детали реализации в имена, включая префикс / суффикс для абстрактного класса или интерфейса.

Одним из мест, где можно найти руководство / вдохновение в именовании, является Java API. Я не могу вспомнить какие-либо части, которые используют префикс (за огромным исключением, являющимся API-интерфейсом коллекций, который интенсивно использует префикс Abstract). Следующий поиск даст несколько довольно хороших примеров:

"публичный абстрактный класс" на download.oracle.com/javase/6

Вы обнаружите, что абстрактные классы называются чем-то абстрактным, а конкретные подклассы называются чем-то более конкретным. Например, абстрактный класс Readerимеет конкретные подклассы BufferedReader, StringReader, InputStreamReaderи т.д.

Поскольку ваши конкретные подклассы являются просто более конкретными версиями вашего абстрактного класса, намеревается выбрать ваши имена таким же образом. В вашем примере я бы назвал абстрактный класс AjaxActionи использовал его в именах конкретных подклассов ( SpecificAjaxAction).

Тайлер Холиен
источник
12

Выбери что-нибудь и будь последовательным. Используете ли вы суффикс Baseдля обозначения предполагаемого базового класса или префикс Abstract, просто будьте последовательны в этом.

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

Брайан Клаппер
источник
4

Я бы назвал абстрактный класс AjaxActionBaseи суффикс дочерних классов либо «Action», либо «AjaxAction», в зависимости от того, что получилось более естественно читаемым для действий, которые мне нужно было создать.

Адам Лир
источник
0

Я предпочитаю указать намек на то, что класс является абстрактным в названии по одной простой, но очень важной причине:

  • Лучше строить свои API вокруг интерфейсов, а не абстрактных классов.
  • Вы хотите использовать простое имя, например, «Действие», чтобы назвать ваш интерфейс. См., Например, List или Map в API коллекций Java - все это интерфейсы.

Следовательно, я бы обычно вызывал абстрактный класс верхнего уровня либо AbstractAction, либо BaseAction. Если бы в этом не было особой необходимости, я бы не стал делать это общедоступным, чтобы пользователи кода были ориентированы на использование интерфейса. Абстрактные базовые классы обычно должны быть деталями реализации, а не функцией вашего API, если только вы не очень осторожны в том, как вы хотите, чтобы люди их расширяли.

mikera
источник