Denominazione di classe astratta Java


9

Esempio:

Si crea una classe astratta per le azioni Ajax. Diverse azioni Ajax estenderanno tutte questa classe.

Problema:

  1. Denomini la classe AjaxAction o AbstractAjaxAction?
  2. Quando crei sottoclassi, le assegni:
    • Azione
    • AjaxAction
    • Basta nominarli come sono

Non sono stato in grado di trovare la convenzione "ufficiale". Non vedo la necessità del prefisso "Abstract" o delle convenzioni di denominazione richieste nelle sottoclassi. (Può adattarsi comunque, a seconda.)

C'è una convenzione ufficiale? Potresti collegarmi ad esso? E quali sono le tue opinioni su questo argomento?

Risposte:


16

Quando possibile, provo a lasciare i dettagli dell'implementazione fuori dai nomi, incluso un prefisso / suffisso per una classe o un'interfaccia astratta.

Un punto in cui cercare assistenza / ispirazione sulla denominazione è l'API Java. Non riesco a pensare a nessuna parte che utilizza il prefisso (con un'eccezione enorme l'API Collections, che utilizza pesantemente il prefisso Abstract). La seguente ricerca fornirà alcuni esempi piuttosto validi:

"public abstract class" su download.oracle.com/javase/6

Scoprirai che le classi astratte sono chiamate qualcosa di astratto e le sottoclassi concrete sono chiamate qualcosa di più concreto. Ad esempio, classe astratta Readerha sottoclassi concrete BufferedReader, StringReader, InputStreamReader, etc.

Poiché le tue sottoclassi concrete sono solo versioni più specifiche della tua classe astratta, è intento rivelare di scegliere i tuoi nomi allo stesso modo. Nel tuo esempio, nominerei la classe astratta AjaxActione la userei nei nomi delle sottoclassi concrete ( SpecificAjaxAction).


12

Scegli qualcosa e sii coerente. Sia che tu usi il suffisso Baseper indicare una classe base prevista, o il prefisso Abstract, sii coerente con esso.

Ci sono tante opinioni su questo genere di cose quanti sono i programmatori. La mia opinione, per quello che vale, in quanto coerenza nella denominazione, all'interno di un progetto (o gruppo di sviluppo o altro) è più importante di qualsiasi schema di denominazione specifico.


4

AjaxActionBaseDefinirei la classe astratta e sufficherei le classi secondarie con "Action" o "AjaxAction", a seconda di quale sia la lettura più naturale per le azioni che ho bisogno di creare.


0

Preferisco suggerire che una classe è astratta nel nome per un motivo semplice ma molto importante:

  • È meglio costruire le API attorno alle interfacce piuttosto che alle classi astratte.
  • Si desidera utilizzare il nome semplice, ad esempio "Azione" per denominare l'interfaccia. Vedi ad esempio Elenco o Mappa nell'API Java Collections: tutte queste sono interfacce.

Quindi di solito chiamerei una classe astratta di alto livello o AbstractAction o BaseAction. A meno che non vi sia un'esigenza molto specifica, normalmente non li renderei pubblici, in modo che gli utenti del codice vengano indirizzati a utilizzare l'interfaccia. Le classi di base astratte dovrebbero di solito essere un dettaglio di implementazione piuttosto che una caratteristica della tua API, a meno che tu non sia molto attento a come desideri che le persone li estendano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.