Nomenclatura de clase abstracta de Java

9

Ejemplo:

Crea una clase abstracta para acciones de Ajax. Diferentes acciones de Ajax extenderán esta clase.

Problema:

  1. ¿Nombra la clase AjaxAction o AbstractAjaxAction?
  2. Cuando crea subclases, ¿las nombra?
    • Acción
    • AjaxAction
    • Solo nómbrelos como son

No he podido encontrar cuál es la convención "oficial". No veo la necesidad del prefijo "Resumen" o cualquier convención de nomenclatura requerida en las subclases. (De todos modos, puede caber, dependiendo).

¿Hay una convención oficial? ¿Podrías vincularme a eso? ¿Y cuáles son sus opiniones sobre este tema?

Michael K
fuente

Respuestas:

16

Cuando es posible, trato de dejar los detalles de implementación fuera de los nombres, incluido un prefijo / sufijo para una clase o interfaz abstracta.

Un lugar para buscar orientación / inspiración para nombrar es la API de Java. No puedo pensar en ninguna parte que use el prefijo (con una gran excepción es la API de Colecciones, que usa mucho el prefijo Abstract). La siguiente búsqueda arrojará algunos ejemplos bastante buenos:

"clase de resumen público" en download.oracle.com/javase/6

Encontrarás que las clases abstractas se denominan algo abstracto y las subclases concretas se denominan algo más concreto. Por ejemplo, la clase abstracta Readertiene subclases concretas BufferedReader, StringReader, InputStreamReader, etc.

Dado que sus subclases concretas son versiones más específicas de su clase abstracta, es revelador elegir sus nombres de la misma manera. En su ejemplo, nombraría la clase abstracta AjaxActiony la usaría en los nombres de las subclases concretas ( SpecificAjaxAction).

Tyler Holien
fuente
12

Elige algo y sé consistente. Ya sea que use el sufijo Basepara indicar una clase base deseada o el prefijo Abstract, simplemente sea coherente al respecto.

Hay tantas opiniones sobre este tipo de cosas como hay, bueno, programadores. Mi opinión, por lo que vale, ya que esa coherencia en los nombres, dentro de un proyecto (o grupo de desarrollo o lo que sea) es más importante que cualquier esquema de nombres específico.

Brian Clapper
fuente
4

AjaxActionBaseLlamaría a la clase abstracta y a las clases secundarias de sufijo con 'Acción' o 'AjaxAction', lo que terminó siendo más legible de forma natural para las acciones que necesitaba crear.

Adam Lear
fuente
0

Prefiero poner una pista de que una clase es abstracta en el nombre por una razón simple pero muy importante:

  • Es mejor construir sus API en torno a interfaces en lugar de clases abstractas.
  • Desea utilizar el nombre simple, por ejemplo, "Acción" para nombrar su interfaz. Consulte, por ejemplo, Lista o Mapa en la API de colecciones de Java; todas estas son interfaces.

Por lo tanto, normalmente llamaría a una clase abstracta de nivel superior AbstractAction o BaseAction. A menos que haya una necesidad muy específica, normalmente no los haría públicos, por lo que los usuarios del código deben usar la interfaz. Las clases base abstractas generalmente deben ser un detalle de implementación en lugar de una característica de su API, a menos que sea muy cuidadoso acerca de cómo desea que las personas las extiendan.

mikera
fuente