Newsgroup: it.comp.java
Titolo: applicazione java e programmatore OBJECT DISORIENTED

Salve a tutti!
Sono alle prese con un progetto (java ovviamente) dove è prevista 
un'interfaccia utente grafica (swing), e l'interazione con un database 
Oracle.
Premetto che sono abbastanza pratico di java in generale, ma ultimamente 
mi sono reso conto di avere + di qualche lacuna in diversi ambiti...
Inoltre sto cercando di creare un'analisi "aiutandomi" con l'UML (sto 
leggendo i pdf scaricabili da 
mokabyte.it
).
Questo sia come esercizio per impratichirmi col linguaggio, sia per 
cercare di sopperire a qualche mancanza progettuale...chi vivrà vedrà. :)
Passando al dunque.
Il primo dubbio che non riesco assolutamente a dissipare riguarda 
l'interfaccia grafica.
Dopo aver passato diverse ore con Google mi sono reso conto che a tutti 
gli effetti non esiste una procedura "standard" per realizzare 
un'applicazione con interfaccia grafica (la cosa mi preoccupa assai...).
In breve l'interfaccia grafica dev'essere composta in questo modo:
una JComboBox, un JTextField, un JButton ed una JTable.
Alla pressione del bottone la tabella deve popolarsi con dei dati 
estratti dal database oracle. La combo serve a scegliere il database a 
cui connettersi, mentre il campo di testo prende il parametro della query.
A tutti gli effetti può sembrare un programma banale (e probabilmente 
per molti lo è), ma ha sollevato non pochi dubbi.
Creando un possibile diagramma delle classi l'analista in erba che è in 
me ha tirato fuori le seguenti classi:
##############################################################################
JFrame : GuiInterface     --> frame principale
JComboBox : Elenco     --> elenco di selezione
DefaultComboBoxModel : ElencoModel   --> modello di dati della combo box
JTable : Vista            --> tabella dove visualizzare i dati
AbstactTableModel : VistaModel  --> modello dei dati della tabella
DefaultTableColumnModel : VistaColumnModel  --> modello delle colonne
##############################################################################
La prima perplessità è arrivata al momento di definire le dipendenze 
delle classi. Ovvero, "VistaModel" e "VistaColumnModel" devono 
appartenere all'oggetto "GuiInterface" o all'oggetto "Vista"?
Se si, con che visibilità?
Stesso dubbio vale per l'oggetto "ElencoModel" con l'oggetto "Elenco".
In seguito mi sono posto il quesito del reperimento dei dati dal 
database, e quì sorge un'altra questione spinosa.
Inizialmente avevo pensato di creare i metodi di apertura e chiusura 
della connessione, nonchè di reperimento dei dati all'interno della 
classe "GuiInterface", ma mi sono reso conto che in questo modo iniziava 
a perdere di specificità, quindi ho creato una classe a parte per 
l'interfacciamento col database "OracleDbInteface" (scusate il nome 
altisonante), con i soliti metodi "OpenConnection" e "CloseConnection", 
ma a questo punto è sorta un'ulteriore questione...come faccio a far si 
che tutti gli altri oggetti la vedano? Sarebbe corretto far si che 
questa classe di interfacciamento sia una classe Singleton? (ho letto da 
poco sull'argomento e non mi è ancora del tutto chiaro il concetto, 
anche se essenzialmente mi pare di aver capito si tratti di una "classe 
statica")
Inoltre dove sarebbe + corretto istanziarla? A mio avviso nella classe 
"GuiInterface".
Creando questa classe avente tutti i metodi statici risolvo il problema 
della visibilità (anche se ho ancora dubbi dal punto di vista della 
"correttezza Object Oriented"), ma resta un ultimo dubbio sul tipo di 
dato da restituire all'esecuzione della query, che non può essere di 
certo un oggetto di tipo Recordset (infatti andrebbe perso alla chiusura 
dello Statement), quindi quale sarebbe la soluzione + formale?
Scusate per la lunghezza del post, ma non ho saputo essere + conciso di 
così, anche perchè ci tenevo ad esprimere il + chiaramente possibile il 
problema ( o meglio i problemi ).
Grazie a tutti.

 dello Statement), quindi quale sarebbe la soluzione + formale?
Qui mi perdo.
ciao!

Ciao,
    io ti consiglio di realizzare l'applicazione separando le logiche, e ti consiglio
anche di lasciare perdere l'MVC di Swing che tanto tende a diventare solo un generatore di
complessità :-)
    Se io fossi in te separerei quindi l'interfaccia utente (le classi della GUI) dalla
logica di business (le classi che eseguono la query sulla base dati). A livello di
macro-design vedrei bene quindi un oggetto di business che espone due servizi, 1)ottenere
la lista dei database disponibili e 2)eseguire una query su un database. Questo oggetto
(che poi diventano n oggetti :-D) lo puoi sviluppare e testare separatamente
disinteressandoti dell'interfaccia utente. Per la gui utilizzerei invece una o più classi,
realizzate con Swing o con quello che ti pare :-), che interagirebbero con un'istanza
dell'oggetto di business, che se vuoi fare le cose semplici gli puoi anche passare nel
costruttore nel main() dell'applicazione.
Giusto un suggerimento. In bocca al lupo, ciao!
    Bruno.
-- 
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
| Membro del JUG Torino - 
http://www.jugtorino.it

 
CREPI!
Grazie per l'incoraggiamento, ma credimi, ho assolutamente bisogno di 
qualche esempio, o quanto meno di una spiegazione dettagliata.
Penso che sarebbe molto apprezzata e da tanti!
Mi sono spulciato lo storico del ng su google, ma non un post che 
spiegasse sull'argomento!
Una bel post sull'argomento aiuterebbe senz'altro molte persone anche in 
futuro!
Ancora grazie mille per l'aiuto!

 un oggetto separato?
L'istanza del modello businness viene creata dalla GUI che ne conserva 
un riferimento; altrimenti come potrebbe interrogare il modello?


Mi sembra di essere stato chiaro. In generale non esiste una "ricetta", un "howto", una
"checklist" per realizzare applicazioni: bisogna studiare, e parecchio, partendo dai
principi di base dell'Object Oriented. E poi tanta esperienza :-)
Ciao,
