Newsgroup: it.comp.java
Titolo: Dubbio (costruzione del software)

Premetto che è la prima volta che mi trovo a sviluppare da solo
un'applicazione piuttosto complessa formata da un certo numero di classi che
realizzano diverse funzionalità (fra cui anche un'interfaccia grafica)
Ho la classe principale del mio package che contiene il metodo main e che
costruisce anche l'interfaccia grafica (un JFrame).
Nell'istanziare le varie componenti di questa interfaccia (es. MyTabbedPane,
MyMenuBar) passo questa classe (quindi this) come argomento ai costruttori
perchè poi mi serve (ad esempio per lanciare un JDialog ecc...)
Ed ecco il dubbio : e se io dichiarassi la mia classe principale (quella
dell'interfaccia grafica..) come static?
Eviterei di portarmela continuamente dietro...
ma da quello che ho capito bisognerebbe cercare fare il meno possibile
classi o variabili statiche vero?
grazie...e scusatemi se non mi son fatto capire :)
Matte

 Eviterei di portarmela continuamente dietro...
Comunque guarda che in JAVA gli oggetti sono tutti passati per
riferimento.
Quello che ti porti "dietro" è quindi un riferimento.
Peso zero!
Spero di esserti stato utilie
Luca Paganelli

::
:: Comunque guarda che in JAVA gli oggetti sono tutti passati per
:: riferimento.
:: Quello che ti porti "dietro" è quindi un riferimento.
:: Peso zero!
::
:: Spero di esserti stato utilie
::
::
Lo so che sono passati per riferimento, il mio dubbio nasceva dal fatto che
mi sembrava di "appesantire" i costruttori dei vari metodi con la
ripetizione di quel parametro...tutto qui
ma probabilmente il mio è un falso problema :)
Grazie della risposta
Matte

 riferimento.
Basta che non riparta per l'ennesima volta la sterile diatriba 
copia/riferimento: in Java tutto passa *esclusivamente* per copia, 
compresi gli handle ad oggetti (semanticamente simile ad un passaggio 
per riferimento)
Vedi Gosling, "Java specifications, 2nd edition".
ciao
uL

 Eviterei di portarmela continuamente dietro...
Non c'e' nulla di male a "portarsela continuamente dietro" (nel senso di 
passarla ai costruttori), se il tuo design lo prevede. Al massimo, puo' 
essere che hai scelto un cattivo design ;-) ma nel tuo caso non ho gli 
elementi per valutare, quindi non saprei.
Un costruttore, nel caso generale, contiene tutti e soli li argomenti 
affinche' l'oggetto costruito abbia uno stato iniziale definito, coerente, 
e in accordo con la sua semantica. 
Traducendo in concreto, se la tua classe e' derivata da una dialog, e una 
dialog *richiede* (per avere uno stato iniziale coerente eccetera) un 
riferimento alla window "genitrice", e' corretto passarla nel costruttore. 
Di piu' e' (generalmente) scorretto _non_ passarla e usare metodi statici 
per ottenere riferimenti ad essa. Il che ha due cattivi effetti: nascondere 
informazioni a chi usa/mantiene la tua classe e quindi si trova ad 
esplorarne l'interfaccia (se guarda ai parametri del costruttore, non ci 
trova una window, pero' se guarda nel codice la dipendenza da una window 
c'e'); e minare possiblita' di riuso, dato che parte dello stato del tuo 
oggetto non sara' "parametrizzabile" e localizzato in costruzione, ma 
appunto hardcoded e disperso nel codice, con conseguente aumento di 
tempi/costi di adattamento e possiblita' di errori.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 ha scritto:
:: Non c'e' nulla di male a "portarsela continuamente dietro" (nel
:: senso di passarla ai costruttori), se il tuo design lo prevede. Al
:: massimo, puo' essere che hai scelto un cattivo design ;-) ma nel tuo
:: caso non ho gli elementi per valutare, quindi non saprei.
::
:: Un costruttore, nel caso generale, contiene tutti e soli li argomenti
:: affinche' l'oggetto costruito abbia uno stato iniziale definito,
:: coerente, e in accordo con la sua semantica.
::
:: Traducendo in concreto, se la tua classe e' derivata da una dialog,
:: e una dialog *richiede* (per avere uno stato iniziale coerente
:: eccetera) un riferimento alla window "genitrice", e' corretto
:: passarla nel costruttore.
::
:: Di piu' e' (generalmente) scorretto _non_ passarla e usare metodi
:: statici per ottenere riferimenti ad essa. Il che ha due cattivi
:: effetti: nascondere informazioni a chi usa/mantiene la tua classe e
:: quindi si trova ad esplorarne l'interfaccia (se guarda ai parametri
:: del costruttore, non ci trova una window, pero' se guarda nel codice
:: la dipendenza da una window c'e'); e minare possiblita' di riuso,
:: dato che parte dello stato del tuo oggetto non sara'
:: "parametrizzabile" e localizzato in costruzione, ma appunto
:: hardcoded e disperso nel codice, con conseguente aumento di
:: tempi/costi di adattamento e possiblita' di errori.
::
Grazie per la tua risposta chiara ed esauriente!
Mi ha chiarito molti dubbi..
Matte