Suponha que eu tenha uma classe abstrata chamada Task
.
Existe um padrão ou convenção que sugira que eu deva nomeá-lo AbstractTask
?
java
naming
coding-standards
juan
fonte
fonte
Respostas:
De acordo com o Effective Java de Bloch (Item 18), o prefixo Abstract é uma convenção usada em um caso especial.
Mas Bloch também aponta que o nome SkeletalInterface teria sentido, mas conclui que
Como outras respostas apontaram, em geral não há razão para aplicar esta convenção de nomenclatura a todas as classes abstratas.
fonte
Não há convenção. É tudo sobre o que o ajudará, como desenvolvedor, a codificar mais rápido e melhor e a ajudar outras pessoas a entender seu código.
Pergunte às pessoas que verão e manterão o código. O que eles preferem ver? O que tornará mais fácil para eles? Em seguida, nomeie-o com base no que eles gostariam.
Em outra nota, Convenções de Código para a Linguagem de Programação Java: 9. Convenções de Nomenclatura não sugerem requisitos:
fonte
Não. O Intellisense vai me dizer trivialmente se é abstrato, então você está violando o DRY aqui.
fonte
abstract
um nome de classe não viola o DRY e nem todo mundo usa inteligência. Por exemplo, o que você faz se está lendo o código em uma página da Web ou se faz parte de um patch que está visualizando em um editor de texto sem formatação ou em uma ferramenta de comparação externa?abstract class AbstractName
? Claramente tem "abstrato" duas vezes. E se você não estiver usando o Intellisense, esse é o seu problema, todo mundo usa ferramentas sãs para visualizar o código.Isso é uma questão de preferência (mas é uma prática ruim), mas a maioria das pessoas não gosta de ver parte dos qualificadores em nome da classe.
A maioria dos IDEs disponibilizará essas informações facilmente para você, portanto, não é necessário colocá-las no nome e será mais fácil omitir essas informações. É uma reminiscência da notação húngara para nomeação de variáveis, e isso certamente é considerado uma forma ruim hoje em dia. Eu recomendo simplesmente chamá-lo
Task
.fonte
No .NET, o uso de "Base" como sufixo para denotar uma classe base abstrata é frequentemente visto. Gostaria de adiar para as outras respostas se essa é uma prática comum em Java.
fonte
Na minha opinião, o nome de uma entidade não deve transmitir informações sobre sua estrutura de tipos, mas sobre sua semântica. Portanto, não faz sentido definir sua classe como "AbstractSomething" se a abstração não fizer parte de seu objetivo de tempo de execução. O fato de ser uma classe abstrata de base é visível para o programador e não precisa ser refletido no nome.
No entanto, se torna perfeito chamar uma implementação de uma fábrica abstrata de AbstractFactory, porque isso se relaciona com a intenção da classe.
Em geral, apóie a convenção de nomenclatura que ajuda a transmitir o máximo de informações sobre o objetivo da sua classe.
Da mesma forma, fique longe de
SomethingImpl
. Não nos importamos que seja uma implementação e não uma classe base. Se sua hierarquia de classes foi projetada corretamente para herança, alguém poderá herdar dela. Certamente não haveria valor neles adicionando mais sufixos "Impl" ou outros artefatos. Também não há valor em adicionar um sufixo "Interface" ou prefixo "I".Considerar:
Ao contrário de:
Eu prefiro o último de longe.
Isso, de certa forma, é semelhante ao uso indevido flagrante da Notação Húngara que lhe deu sua má reputação , pois as pessoas começaram a interpretá-la erroneamente como exigindo que os desenvolvedores prefixassem suas variáveis com um indicador do tipo da variável. Embora isso às vezes possa ter seus usos (principalmente se você tiver preguiça de procurar a definição do tipo), é geralmente inútil. A idéia original de Simonyi com a notação húngara era usá-la como um mnemônico para lembrar o desenvolvedor das capacidades da entidade, não de seu tipo.
fonte
Uma boa regra geral é não incluir propriedades em um nome que sejam óbvias na sintaxe. Como em Java, você precisa marcar uma classe abstrata com a
abstract
palavra-chave com o nome apropriado , eu não a incluiria no nome. Em C ++, por exemplo, o caso não é tão claro, mas pelo menos o compilador informará quando você usou incorretamente uma classe abstrata. Em algo como Python novamente, nomear explicitamente uma classe abstrata como tal não é uma má idéia.A exceção usual à regra é quando o nome é ambíguo. Se, por qualquer motivo, houver uma subclasse concreta
Task
(em outros exemplos, isso pode ser mais sensato, mas seja qual for), use com certezaAbstractTask
.fonte
List
e aAbstractList
classe (que a implementa).Isso me diz que é uma classe abstrata. Adicionar um prefixo é uma tautologia e antipadrão e não é apropriado na maioria dos casos. Consulte o link em que ele fala sobre
package local
ser uma exceção, por exemplo.Na maioria dos casos, as
Abstract
classes não devem fazer parte de uma API voltada para o público, se houver, deve haver realmente um bom motivo e um bom motivo deve fornecer um nome obviamente bom que não sejaAbstractSomeClass
.Na maioria dos casos, se você não conseguir criar um nome mais descritivo, provavelmente precisará fazer um novo design.
fonte
Meus cinco centavos, provavelmente você terá implementações dessa classe abstrata e elas serão nomeadas 'SomeSpecificTask', 'TaskWithBubbles', 'StrangeTask' etc. Portanto, não haverá um conflito de nome entre a sua 'Tarefa' abstrata e elas.
Além disso, a palavra 'abstrata' é sobre sintaxe de idioma, não sobre entidades do domínio comercial, portanto, prefiro não usá-la como parte do nome.
Por outro lado, em uma resposta aqui, vi um trecho de J.Bloch Effective Java, que diz que usar 'abstract' como parte de um nome é uma prática bem estabelecida. Pode ser que sim. Mas de qualquer maneira nas convenções oficiais do código java, não há nada sobre isso.
fonte
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
- não se pode usarList
como o nome daAbstractList
classe, porque esse é o nome da interface. É uma prática bem estabelecida e parte do código Java oficial que está em uso, onde algo que implementa a interface pode ou não estender uma classe abstrata (que também implementa (parte) da interface).Se você trabalha em uma equipe, toda a equipe deve decidir se deve prefixar as classes abstratas com "Resumo".
Se você trabalha por conta própria, depende inteiramente de você, não eu ou qualquer outra pessoa neste site.
fonte
Não sou desenvolvedor Java (INAJD?) E não conheço a nomenclatura padrão para essas coisas, mas acho que
Task
soa abstrato o suficiente para que possa permanecer sozinho.fonte
E se você quiser escrever uma
AbstractSyntaxTree
classe abstrata ? Ou talvez apenas um resumoSyntaxTree
?Não é convencional e pode facilmente confundir as pessoas.
fonte
Eu fiz isso. Eu adicionei 'Resumo' como prefixo à minha classe abstrata chamada AbstractOperation. A razão pela qual fiz isso foi que havia outro pacote que possuía uma classe não abstrata chamada Operação, e isso ajudou minha equipe e os programadores que assumiram o cargo mais tarde a evitar qualquer confusão entre os dois.
fonte