|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
[JAVA] Mi server un consiglio
Ragazzi ho bisogno di un consiglio!
All'interno di un programma ho classe Constant in cui sono definite tutte le impostazioni. Questa è una parte della classe: public class Constant { public final static String constant1 = "xxx"; public final static String constant2 = "yyy"; ..... } Ora ho la necessità di salvare queste impostazioni in un file di testo (unico per utente). Mi potreste dire come affrontare questa cosa modificando il meno possibile il resto del programma?
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
cerca di essere + chiaro.
Per salvare devi vedere la classe File e le classi Stream, al massimo se vuoi ti posto un pò di codice.
__________________
My gaming placement |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Quote:
Ho questa classe Constant che definisce tutte le impostazioni del programma. Così com'è strutturato però, il programma non permette all'utente la modifica di alcune impostazioni. Voglio dare, quindi, la possibilità di modificare queste impostazioni e, di conseguenza, di salvarle in un file. Per aggiungere questa funzionalità al programma, come mi conviene procedere? Mi conviene utilizzare la classe java.util.prefs? O qualche altra tecnica?
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
__________________
![]() |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Quote:
Spiego cosa avevo pensato di fare...Senza eseguire l'installazione del programma su tutti i pc della lan, avevo pensato di installarlo su un server linux, condividere la cartella di installazione e di eseguirlo sui pc prendendo come percorso questa cartella. Al programma, poi, passo come parametro il nome utente con cui vorrei memorizzare le impostazioni... E' fattibile come cosa?
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
Quote:
http://java.sun.com/docs/books/tutor...roperties.html qua ci sta qualche suggerimento...l'ho già usata e funziona a dovere praticamente puoi caricare le properties di default e poi sovrascriverle con quelle dell'utente!!!!!!ovviamente puoi usare percorsi diversi per quelle di default (ex: dentro la cartella del prog) e quelle dell'utente (dentro la cartella dell'utente)!!!!!! |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il package java.util.prefs citato è stato introdotto esattamente per lo scopo da te richiesto. Preferences include il meccanismo per immagazzinare e recuperare impostazioni associate all'utente corrente (Preferences.userRoot()).
Personalmente preferisco Properties perchè non mi piace sapere che un mio programma sta scrivendo qualcosa in un punto del sistema che devo ignorare e che quindi non posso documentare all'utente. Da questo punto di vista è molto più semplice usare un Properties che non un Preferences. Si tratta comunque di un "vezzo" personale essendo innegabile la maggiore idoneità di Preferences ad immagazzinare impostazioni di sistema. Sia l'uno che l'altro approccio richiedono comunque consistenti modifiche al codice che hai già scritto. Intendo per consistenti almeno un intervento per ogni oggetto che ora usi i campi statici di Constants. Il significato di Constants infatti è: "per le ciabatte di giosafatte, questi valori mai e poi mai saranno cambiati" Ora quei valori possono cambiare e tu sei nei guai (metaforici e neppure troppo grandi, ma sempre "guai"). |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Nei post precedenti mi sono espresso male. La classe Constant mi serve per impostare i valori di default utili al funzionamento del programma (es. indirizzo del mail-server, username, password, ecc). Durante l'esecuzione del programma, questi valori non vengono modificati. Se l'utente, però, vuole aggiornare i suoi dati, deve avere la possibilità di salvare le nuove impostazioni. E' sbagliato come approccio?
Comunque, ora sta facendo dei tentativi con java.util.Properties. Ho scritto una nuova classe Settings che legge un valore da un file di testo..Ho anche modificato la classe Constant in questo modo: Codice:
public class Constant { private final static Settings impostazioni = new Settings(Main.getNome()); public final static String EMAIL_SERVER = impostazioni.getValue("EmailServer"); ..... } ![]() Codice:
public class Main extends JFrame { private static String nome; ..... public static void main(String[] args) { ... nome = args[0]; } public static String getNome() { return nome; } } ![]()
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
![]()
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Corretto e che ve ne pare: sono due domandone
![]() Corretto. Dal punto di vista del linguaggio di programmazione Java è ineccepibile ma i linguaggi di programmazione possono fare ben poco per evitare che se ne faccia scempio. E' anche possibile che il risultato coincida con le tue intenzioni: immagino che tu l'abbia provato e ne abbia avuto un riscontro positivo. Diciamo allora che è corretto in quanto rispetta appieno le specifiche del linguaggio di programmazione Java e produce il risultato atteso. Che ve ne pare. Eh eh eh. Credo che la risposta dipenda dall'approccio alla programmazione di chi la voglia dare. Ad esempio per me quello che hai scritto viola il principio di identità. Siccome per me il principio di identità è il muro portante dell'intera costruzione detta "orientamento agli oggetti" e ogni programma andrebbe "scritto" usando la prospettiva orientata agli oggetti, io non potrei che esprimere la stessa cosa in un modo diverso. Probabilmente tu vedi le cose in modo diverso. Attestata questa diversità di punti di vista, direi che la prima cosa realmente importante è che quanto tu hai scritto e riportato nel messaggio sia coerente con il resto del tuo programma. Detto altrimenti, se scrivi metà programma usando un certo orientamento agli oggetti, un quarto seguendo una prospettiva procedurale e un quarto usando quella funzionale potresti avere un problema di coerenza a meno che la diversità di prospettive non sia espressione di un'unica regola comune, più generale che le comprenda tutte e tre, esattamente per come sono state usate. Per come la vedo io, la programmazione è un consapevole esercizio di semplicità. In conseguenza di ciò non posso che dire che se quanto hai scritto ti appare semplice, secondo un'idea di semplicità di cui sei consapevole (cioè puoi spiegare perchè hai scelto una certa struttura al posto di un'altra nei termini della tua idea di semplicità) allora il tuo codice è corretto anche al di là delle mere ragioni del linguaggio Java, incidentalmente rispettate. Ultima modifica di PGI-Bis : 25-05-2006 alle 21:00. Motivo: ah, la grammatica! |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Quote:
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Normalmente risponderei con un codice che sia il più possibile in linea con quanto è comune in tema di orientamento agli oggetti: categorie, esemplari e la finta metafora del messaggio fintamente applicata.
Non per supponenza ma perchè non voglio correre il rischio di confondere le idee ad alcuno. Faccio uno strappo alla regola perchè non si può stare sempre zitti (e non poteva risparmiarmi, penserai ![]() Supponiamo che Ciccio sia l'oggetto che voglia sapere, ad un certo punto della sia vita, il valore di una proprietà "user name". Ecco come, in un programma vero (come si sul dire, in produzione), faccio e farei: Ciccio (parziale) Codice:
private void quandoCiccioVuoleUserName() { Comm getUserNameComm = new Comm( new Sender("Ciccio"), //il mittente new Addressee("SystemPropertiesManager"), //il destinatario new Message(Language.GET_AS_STRING), //il messaggio new Referent(Language.USER_NAME), //ciò di cui si parla new Context(Language.VALUE_REQUEST)); //contesto del messaggio sendComm(getUserNameComm); } //ciccio invia un messaggio attravero il canale "ambiente" public void sendComm(Comm comm) { if(environment != null) { environment.handlComm(comm); } } //ciccio.handleComm public void handleComm(Comm comm) { if(comm.getAddressee().equals("Ciccio")) { if(comm.getContext() == Language.VALUE_ANSWER)) { handleValueAnswerComm(comm); } } } //ciccio riceve il nome di un utente. private void handleValueAnswerComm(Comm comm) { if(comm.getReferent() == Language.USER_NAME) { String userName = comm.getMessage().getContentAsString(); //Ciccio ottiene il nome utente } } Nello stesso sistema potrebbe esistere un oggetto SystemPropertiesManager in grado di riconoscere un atto comunicativo del tipo generato da Ciccio. SystemPropertiesManager (parziale) Codice:
public void handleComm(Comm comm) { if(comm.getAddressee().equals("SystemPropertiesManager")) { if(comm.getContext() == Language.VALUE_REQUEST) { handleValueRequestComm(comm); } } } private void handleValueRequestComm(Comm comm) { Object property = propertyMap.getValue(comm.getReferent()); //estrae USER_NAME Comm propertyAnswerComm = new Comm( new Sender("SystemPropertiesManager"), new Addressee(comm.getSender().toString()), new Message(property), new Referent(Language.USER_NAME), new Context(Language.VALUE_ANSWER)); sendComm(propertyAnswerComm); } private void sendComm(Comm comm) { if(environment != null) { environment.handleComm(comm); } } Il tutto può sembrare molto bizzarro ma non è affatto un'anomalia nei sistemi oggi esistenti (i message driven beans J2EE funzionano grazie ad una logica di questo tipo, i server http sono interpretabili in una prospettiva sostanzialmente simile a questa sebbene più essenziale). Manca tutto il panorama in cui si trovano Ciccio e SystemPropertyManager. Molto brevemente, environment, il canale usato da Ciccio e SystemPropertyManager per la comunicazione, è poi una normalissima coda di propagazione asincrona di messaggi, salve alcune questioni relative alla generazione dei riferimenti ai vari oggetti correlati dal contesto (definisco il contesto come la minima relazione esistente tra due identità frutto della medesima percezione). Ripeto comunque che alla fine della fiera conta solo il fatto che coerentemente ad una diversa interpretazione circa il come realizzare un programma io do una risposta diversa da quella che hai dato tu. E' chiaro che per me sia preferibile quella che do io e per te quella che dai tu, altrimenti saremmo entrambi affetti da personalità multipla: penso una cosa, ne dico un'altra e ne faccio una terza ![]() |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
![]()
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } Ultima modifica di Angus : 26-05-2006 alle 15:37. |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Quote:
![]() ![]()
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non eccepirò mai più alle mie regole
![]() Non credere che quello che ho scritto sia la verità assoluta. Anzi. Pensa che è tutto fondato su un unico pressuposto. Significa che se cade quello diventa tutto un arzigogolo senza arte nè parte. Come se non bastasse, non è un che di dimostrabile: l'identità è una definizione circolare (è identico ciò che esclusivamente uguale a sè stesso). Somiglia di più ad un'evidenza e le evidenze sono tali finchè qualcuno non creda diversamente. |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Ho modificato un po' il codice in questo modo (abbandonando la classe Constant):
Codice:
public class Main extends JFrame { private Settings impostazioni; public static void main(String[] args) { ..... impostazioni = new Settings(args[0]); .... } ......... public Settings getPreferences() { return impostazioni; } } Codice:
public class Class1 extends JFrame { private Main main; private Settings impostazioni; public Class1(Main main) { .... this.main = main; this.impostazioni = main.getPreferences(); .... } } ![]()
__________________
Il 90% dei problemi riscontrati sui computer sono localizzabili tra la sedia e la tastiera, il restante 10% nella scopa della donna delle pulizie.
![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non ho il termine di paragone precedente (il Class1 per come era prima).
Del codice che hai incollato posso dire che vedo chiaramente espressa un'identità (Class1). Class1 rispetta il principio di identità ed il corollario dell'autonomia sebbene il costruttore Java richieda un argomento di tipo Main perchè in Java le classi esprimono anche relazioni. Esplicitamente, Main è per Class1 la relazione che intercorre tra tutti gli oggetti (aka coloro che possiedono un'identità) che possano "getPreferences()", restituire un certo valore Settings, così come per Class1 Settings è la relazione che intercorre tra tutti gli oggetti che (presumo) possano "getUserName", restituire un certo valore userName. Dico che è rispettato in Class1 il principio di autonomia in quanto l'autonomia opera tra identità diverse e non tra un'identità ed una relazione (tra identità). Incidentalmente, in Java ogni "class" esprime una relazione ed eventualmente anche un'identità. Per l'angolo della sciarada ( ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:59.