Nomeação de classe abstrata Java

9

Exemplo:

Você cria uma classe abstrata para ações do Ajax. Ações diferentes do Ajax estenderão essa classe.

Problema:

  1. Você nomeia a classe AjaxAction ou AbstractAjaxAction?
  2. Ao criar subclasses, nomeie-os:
    • Açao
    • AjaxAction
    • Apenas nomeie-os como são

Não consegui descobrir qual é a convenção "oficial". Não vejo a necessidade do prefixo "Resumo" ou de qualquer convenção de nomenclatura necessária nas subclasses. (Pode caber de qualquer maneira, dependendo.)

Existe uma convenção oficial? Você poderia me vincular a isso? E quais são suas opiniões sobre esse assunto?

Michael K
fonte

Respostas:

16

Quando possível, tento deixar os detalhes da implementação fora dos nomes, incluindo um prefixo / sufixo para uma classe ou interface abstrata.

Um lugar para procurar orientação / inspiração sobre nomes é a API Java. Não consigo pensar em nenhuma parte que use o prefixo (com uma grande exceção a API Collections, que usa o prefixo Abstract). A pesquisa a seguir produzirá alguns bons exemplos:

"classe abstrata pública" em download.oracle.com/javase/6

Você encontrará que as classes abstratas são chamadas de algo abstrato e as subclasses concretas são chamadas de algo mais concreto. Por exemplo, a classe abstrata Readertem subclasses concretas BufferedReader, StringReader, InputStreamReader, etc.

Como suas subclasses concretas são apenas versões mais específicas de sua classe abstrata, é revelador escolher seus nomes da mesma maneira. No seu exemplo, eu nomearia a classe abstrata AjaxActione a usaria nos nomes das subclasses concretas ( SpecificAjaxAction).

Tyler Holien
fonte
12

Escolha algo e seja consistente. Se você usa o sufixo Basepara indicar uma classe base pretendida ou o prefixo Abstract, apenas seja consistente.

Existem tantas opiniões sobre esse tipo de coisa quanto existem, bem, programadores. Minha opinião, pelo que vale a pena, como essa consistência na nomeação, dentro de um projeto (ou grupo de desenvolvimento ou o que seja) é mais importante do que qualquer esquema de nomeação específico.

Brian Clapper
fonte
4

Eu AjaxActionBasenomearia a classe abstrata e o sufixo de classe filho com 'Action' ou 'AjaxAction', o que resultasse mais legível para as ações que eu precisava criar.

Adam Lear
fonte
0

Prefiro colocar uma dica de que uma classe é abstrata no nome por um motivo simples, mas muito importante:

  • É melhor criar suas APIs em torno de interfaces do que em classes abstratas.
  • Você deseja usar o nome simples, por exemplo, "Ação" para nomear sua interface. Veja, por exemplo, Lista ou Mapa na API Java Collections - todas essas são interfaces.

Portanto, eu normalmente chamaria uma classe abstrata de nível superior de AbstractAction ou BaseAction. A menos que haja uma necessidade muito específica, normalmente eu não os tornaria públicos, para que os usuários do código sejam orientados a usar a interface. As classes base abstratas geralmente devem ser um detalhe de implementação e não um recurso da sua API, a menos que você seja muito cuidadoso sobre como deseja que as pessoas as estendam.

Mikera
fonte