giovedì 7 febbraio 2008

Convenzioni sui nomi in Java

Dal sito di Java (http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html) presento qui le convenzioni per la rappresentazioni dei nomi in un progetto Java.

  • Package: impotante utilizzare le convenzioni per evitare conflitti sui nomi, soprattutto nel caso di utilizzo di package importati da terze fonti.
    • I nomi dei package vanno scritti tutti in minuscolo.
    • Se si appartiene/lavora per una compagnia che ha un dominio internet, lo si usa all'inizio del nome del package, prima il "suffisso" del nome a dominio (il dominio di primo livello) poi il dominio effettivo della compagnia (il dominio di secondo livello). Nel casa dei package della Sun si ha "com.sun".
    • Se il nome a dominio contiene caratteri speciali non usabili nel nome del package, bisogna convertirli in underscore (per esempio se il nome a dominio è una keyword o se il nome inizia con un numero.
    • Se si vuole indicare un sottodominio, lo si può fare, sempre con la logica di scrivere il nome a dominio in maniera inversa, cioè primolivello.secondolivello.sottodominio
    • Si può specificare anche il nome dle progetto o della persona che ha sviluppato il package, sempre con la logica di inserirlo in fondo al nome del package.
    • Esempi validi sono, per esempio
      com.java
      com.apple.quicktime.v2
  • Classi e interfacce: Anche in questo caso è buona norma rispettare le seguenti convenzioni
    • i nomi dovrebbero rappresentare sostantivi o frasi descrittive non eccessivamente lunghe
    • La prima lettera deve essere maiuscola, le altre minuscolo.
    • Se il nome è composto da più parole, vanno scritte attaccate, con la prima lettera di ognuna in maiuscolo
    • Il nome dovrebbe essere descrittivo della classe, avere un senso, una connessione al significato semantico della classe stessa
    • Sono da evitare i verbi, riservati ai metodi
    • Esempi di nomi corretti per classi ed interfacce sono:
      ClassLoader
      SecurityManager
      Thread
      Dictionary
  • Metodi: utile anche in questo caso rispettare le convenzioni
    • il nome di un metodo dovrebbe essere costituito da un vervo che spieghi l'azione del metodo stesso, scritto in minuscolo.
    • Se si vuole usare più di una parola, contenenti comunque in verbo, la prima parola deve essere minuscola e le altre avere la prima lettera maiuscola.
    • Metodi che leggono e settano una variabile, dovrebbero indicare come prima parola, rispettivamente, get e set, seguita dal nome di variabile interessata
    • Metodi che servono per ricavare la lunghezza di un oggetto dovrebbero chiamarsi lenght
    • Metodi che verificano una variabile booleana dovrebbero chiamarsi is seguita dal nome di variabile da verificare
    • Nomi corretti di metodi sono
      getV
      setV
      isV
      toV
      sommaCostanti
  • Fields (non so bene cosa siano)
    • Names of fields that are not final should be in mixed case with a lowercase first letter and the first letters of subsequent words capitalized.
    • Note that well-designed classes have very few public or protected fields, except for fields that are constants (final static fields).
    • Fields should have names that are nouns, noun phrases, or abbreviations for nouns.
  • Costanti:
    • Le costanti dovrebbero essere rappresentate da parole o frasi descrittive e/o abbreviazioni, scritte in maiuscolo, divise, se più parola, da un underscore.
    • Corretti nomi di costanti sono:
      MIN_VALUE
      MAX_VALUE
      PS_RUNNING
      S_SUSPENDED
  • Varibili locali e Parametri
    • Dovrebbero essere costituite da parole corte, o assemblamenti di lettere, sempre in minuscole, che non necessariamente formano una parola di senso compiuto
    • per esempio una variabile che contiene un riferimento all'oggetto ColoredPoint potrebbe chiamarsi cp
    • oppure buf potrebbe essere un buon nome per un puntatore ad un buffer
    • si dovrebbero evitare variabili di uan sola lettera, escludendo i cicli dove si possono usare (come la classica i) oppure se indicano un type, per esempio per convenzione si usa
      • b for a byte
      • c for a char
      • d for a double
      • e for an Exception
      • f for a float
      • i, j, and k for integers
      • l for a long
      • o for an Object
      • s for a String
      • v for an arbitrary value of some type

Nessun commento: