Newsgroup: it.comp.java
Titolo: UML - Oggetti

Salve a tutto il NG.
Vorrei porvi alcuni miei dubbi circa l'utilizzo in generale di UML, e spero
che
persone più competenti di me (cioè praticamente tutti) riescano a chiarirmi
questi dubbi.
In UML ad esempio mi costruisco in modo più astratto possibile il diagramma
delle classi,
con tutte le associazioni, generaliazzazioni, specializzazioni, attributi e
operazioni per ogni classe.
Considero ad esempio un sistema che consenta la verbalizzazione di un esame
universitario.
Avro' quindi la mia classe Studente, la mia Classe Professore, la mia classe
Corso, collegate
con un'associazione che fa corrispondere univocamente
Studente-Professore-Corso.
Ok...fino a qua nessun problema.
In fase di implementazione del diagramma delle classi cerco di rispettare
tutti i principi per rendere
più modulare il programma in modo che nessuna classe "interferisca" con
nessun altra.
E adesso? Non riesco a capire qual è il ruolo della base di dati nell'intero
sistema.
E' ovvio che studente-professore-corso dovranno rimanere persistenti in un
archivio, dopo il superamente dell'esame. Perchè allocare tre oggetti? Non
posso subito inserire i dati di interesse per la mia realtà all'interno
della base di dati con una INSERT?
Se voglio sapere la media dei voti che un professore assegna in sede di
esame se ad esempio il professore ha verbalizzato 2000 esami, come devo
procedere con un sistema ad oggetti?
1) mi faccio calcolare la media direttamente dalla base di dati con una
query con funzione AVG;?
2) faccio la query e mi estrapolo 2000 record, istanzio 2000 oggetti e poi
con un ciclo mi sommo il totale dei voti dividendo il tutto per 2000?
Cioè quello che non riesco a capire è questo. Se il sistema fosse sempre in
RAM, mi sembra giusto che quando istanzio un nuovo Professore tale
professore rimanga attivo per far fare delle operazioni (ad es. verbalizza)
o delle ricerche varie. Tale professore sarà sempre vigile e presente per
ulteriori scopi.  Ma generalmente li sistema non è sempre acceso.  Ogni
volta che spengo e riaccendo il sistema mi dovro' ricreare tutti gli
oggetti, prelevando le informazioni dalla base di dati, per avere tutto
subito e pronto oppure rimmarrà tutto in archivio e verranno modificate le
cose all'occorrenza?
Nel primo caso non avrei uno spreco di risorse?
Nel secondo caso che vantaggio avrei a lavorare con gli oggetti?
grazie in anticipo
leolas

 Nel secondo caso che vantaggio avrei a lavorare con gli oggetti?
Il problema che poni è noto come "impedence mismatch", ed è lo stesso
problema che si pose all'inizio tra programmazione imperativa e SQL:
mentre la prog. imp. manipolava singoli record, le query SQL
restituiscono e manipolano *insiemi* di record. Questo
"disaccoppiamento" fu risolto dai cursori, ma sono pur sempre una
pezza a colori.
Questo è ancora più evidente se utilizzi una metodologia
Object-Oriented, dove si creano i problemi che poni tu (e pure
altri). Per questo motivo sono nati i DBMS Object-Oriented ed
Object-Relational; questi ultimi sono quelli che stanno conquistando
il mercato.
Ciao!
-- 
__/\__ * this mail has been written by Talpa Stellare
\ TS / * che da piccolo una volta e' morto.
 |/\|  * icq# 78630739 - togli i caratteri maiuscoli x e-mail

 all'occorrenza? 
Gli oggetti che ti servono, non tutti. Il bilanciamento e' il problema - e 
in genere si risove con technice classiche come pooling, liste last-
accessed, e di OO distribuita come copie degli stessi oggetti in ambienti 
runtime diversi, sincronizzate mediante qualche meccanismo di 
sincronizzazione.
Il problema generale, specie quando ci aggiungi l'accesso concorrente agli 
stessi oggetti *e'* dannatamente complesso (e quindi interessante ;-): che 
e' il motivo per cui le soluzioni fatte in casa (cioe' che hanno il fuoco 
sull'applicazione piuttosto che sul problema in se') tendono a funzionare 
ma ad essere rigide. 
-- 
Fighting for peace is like fucking for virginity
ObjectZone - 
http://space.tin.it/computer/csadun