Home » Featured, Guida per i programmatori, Manuale di Stile e Risorse

Stile e Specifiche di programmazione in BEEing

5 January 2010 114 views No Comment


StileProgrammazione

Introduzione.

Questo post è indirizzato esclusivamente ai programmatori che abbiano interesse ad orientarsi nel codice sorgente di BEEing.
Per migliorare la lettura del codice ed il lavoro in team, abbiamo definito alcune semplici specifiche che vanno dalla definizione dei nomi delle variabili, dei metodi, ecc.. alla struttura dei package.

Specifiche:

NOMI COMPOSTI:

Java impone che i nomi di metodi,di variabili … vengano scritti con l’iniziale minuscola.
Se sono nomi composti, ogni nuova parola deve iniziare con la lettera maiuscola.

***************************************************************
setPostName(final String postName){
…..
…..
}
***************************************************************

DIVISIONE ALL’INTERNO DEI PROGETTI:

Il codice sorgente di BEEing è organizzato in packages ed in cartelle.
La divisione in cartelle rispetta le specifiche del pattern MVC (Model View Control), e separa nettamente GUI (View),  Model e Controller:

  • GUI: Parte di grafica. Spesso viene fatta un ulteriore divisione in GUI_WIDGETS, GUI_COMPONENTS, GUI_WINDOWS…
  • MODEL: Sezione relativa al Database.
  • CONTROLLER: Cartella destinata a contenere classi di utiliti, classi astratte …

***************************************************************

NOMI DEI PACKAGE:

In BEEing si è scelto di definire in nomi dei package in questo modo:

Prima parte: org.sf.bee.

Seconda parte: nome del progetto o identificativo della sezione: (esempio search, admin, wiki …);

Terza parte: nome della cartella in cui si trova il package: gui (se si trova in una cartella GUI), gui.components (se si trova nella cartella GUI_COMPONENTS);

Quarta parte: components, widgets, windows a seconda del tipo di componente. Non viene inserita se è già stata specificata al terzo punto;

Quinta parte: pagectrls, nel caso si tratti di un componente che funga da controller della pagina. In questo modo è molto facile distinguere tra classi principali e classi secondarie.

Sesta parte: nome esplicito ed identificativo della funzionalità della classe. Tutto in minuscolo e senza separatori.
ESEMPIO:

***************************************************************

UTILIZZATE NOMI INTELLIGENTI:

le funzioni, le proprietà, le variabili … devono avere nomi semplici; in questo modo sia chi scrive il codice sia chi lo va a leggere può dedurne immediatamente lo scopo. Eventualmente utilizzate dei prefissi per indicare tipi diversi di variabili e funzioni.

Scrivendo i nomi chiaramente non avrete bisogno di scrivere commenti troppo descrittivi.
Esempi di nomi per i metodi:
doSave, doRemove … –> il prefisso do rende l’idea di un’azione, quindi può essere utilizzato per i metodi chiamati al click su un bottone, su un link …;

getText, getName … –> il prefisso get, in italiano “dammi”, dedicatelo a quei metodi che devono restituire qualcosa;

setText, setName … –> viceversa adoperate la parola set, in italiano “imposta”, per quei metodi che devono inizializzare o aggiornare dei dati (normalmente vengono passati, come argomenti, i dati da aggiornare);

init, initComponents… –> il prefisso init dev’essere utilizzato per indicare una inizializzazione. Normalmente tutti i metodi che iniziano con init vengono posti vicini nel codice.

E’ buona norma che i metodi abbiano una lunghezza massima intorno alle 15 righe. Quando iniziano ad essere 20 – 30 sarebbe buona norma pensare di dividere i metodi in due o più; in questo modo sarà più facile manutenere e debuggare il codice.

Un’altra tecnica spesso utilizzata per aver maggiore chiarezza consiste nell’inserire delle righe bianche per dividere le varie parti di un metodo.

***************************************************************

CURARE LA FORMA:

è importante, sia per chi sviluppa che per chi legge, che il codice sia pulito, ordinato e ben formattato.

Cercate di dichiarare le variabili sempre prima del codice così da poterle ritrovare facilmente. –>
Utilizzate sempre le costanti (nome della variabile tutto maiuscolo). –>
Quando potete, anteponete al tipo di variabile la keyword final. –>



Andiamo nel dettaglio…

Cercate di dichiarare le variabili sempre prima del codice così da poterle ritrovare facilmente.

StileProgrammazione_Properties
Le variabili della classe vengono identificate come “Properties” se prevedono i metodi “set” e “get“.
StileProgrammazione_CompFieldsConstants
I “Fields” vengono distinti dalle altre variabili in quanto il nome identificativo viene preceduto da un singolo underscore “_”.  Questa tecnica derivante dal C++ rappresenta, a mio parere, un’alternativa più elegante al “this.” introdotto con Java. Per questo motivo è stata adottata in tutto il framework e dovrà essere utilizzata.

Utilizzate sempre le costanti (nome della variabile tutto maiuscolo).

All’interno di una classe (Prova.java):

public static final String BTN_ADD = “btnAdd”;

All’interno di un’altra classe che debba utilizzare lo stesso bottone della classe Prova (Test.java):
public static final String BTN_ADD =  Prova.BTN_ADD;
In questo modo non dovrete ricercare per tutta la classe (o addirittura su più classi) una stringa da modificare (es. da “btnAdd” a “btnNew”), basterà farlo per una sola costante.

Formattate bene il codice; molti strumenti di sviluppo offrono delle funzioni che consentono una strutturazione automatica.

Quando potete, anteponete al tipo di variabile la costante final.

L’applicazione della keyword final alle variabili è un’ottimizzazione in quanto constente di allocarle direttamente in memoria così che possano essere reperite più velocemente.
Naturalmente comporta alcune limitazioni, in quanto dopo la dichiarazione, potrete inizializzare la variabile UNA sola volta.

Applicando final ad una classe, impedisce la creazione di sottoclassi (N.B. non confondere il concetto di sottoclasse, subclass, con istanza della classe).

Se applicata ai metodi ne impedisce l’override.

Alcune variabili, quelle relative ai componenti grafici, è buona norma inizializzare SOLO una volta per ogni istanza di classe.


L’utilizzo di questo metodo comporta i seguenti vantaggi:
- performance migliori
- drastica riduzione di null pointer exception e di pagine bianche.
Mal che vada, non vedendo il componente, potrete farvi immediatamente un’idea su chi ha originato l’errore.

AUTORERoberto Fratti

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.