View Single Post
Old 14-03-2006, 17:10   #11
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Tutti dovrebbero laurearsi in Filosofia e Psicologia. Putroppo io non ho seguito il consiglio che do e, come noti, sono rimasto a livello di appassionato.

Sfortunatamente non riesco ad abituarmi agli IDE di fascia alta e non ho avuto quindi modo di apprezzare l'uso che questi strumenti facciano delle annotazioni.

Pur non occupandomi di programmazione server-side ho letto qualcosa sulla terza generazione dei fagioli d'impresa e mi pare che la semplificazione sia notevole, se non altro per la riduzione negli elementi che è necessario creare. La mia è comunque un'impressione, occorrerebbe il parere di qualcuno più avvezzo alla materia J2EE.

Per Annotazioni e Runtime la questione è a mio giudizio meno rilevante di quanto si segnali in alcuni testi. Nell'orrenda quarta edizione di The Java Programming Language pare che sia il loro carattere più esalatante ma, a mio modo di vedere e nel contesto dell'introspezione, hanno una sola differenza rispetto alle interfacce marcatrici (tipo java.io.Serializable o java.util.EventListener) e sta nella loro capacità di "marcare" un membro a prescindere dall'esistenza di un rapporto di parentela tra il Tipo del membro ed il Tipo usato come discrimine per l'esecuzione riflessiva di un blocco ideale di istruzioni.

Faccio un esempio:

Codice:
@interface Control {}

class A {
    @Control X member = new X();
}
Per un'istanza di A posso determinare riflessivamente se member sia o no un @Control a prescindere dal fatto che X (il tipo di member) abbia o meno una relazione di parentela con un altro Tipo.

Nella maggior parte delle situazioni, mi sfugge dove stia il miglioramento pratico rispetto a:

Codice:
interface Control {}

class SubX extends X implements Control {}

class A {
    X member = new SubX();
}
Senza contare il fatto che, se considerassimo le annotazioni come una convenzione di denominazione, allora potremmo dire equivalente:

Codice:
class A {
   X suffixMember = new X();
}
Identificheremmo "suffixMember" come appartenente ad una certa categoria non espressa da una relazione di parentela secondo gli strumenti del linguaggio ma attraverso una convenzione di denominazione dei campo.

Con le annotazioni c'è un vantaggio in chiarezza. "Tutti sanno che", l'at preposto ad un nome indica annotazione: se l'annotazione è "RUNTIME", allora occorre drizzare le antenne .
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso