>Messaggio in formato MIME composto da più parti.
>
>------=_NextPart_000_0007_01C0E0C8.03CB25A0
>Content-Type: text/plain;
> charset="iso-8859-1"
>Content-Transfer-Encoding: quoted-printable
>
>Gi=E0 da quando frequentavo l'universit=E0 java era famoso non tanto per =
>l'obbligo della OOP (Object Oriented Programming) ma per la totale =
>assenza dei puntatori. Ora io mi devo occupare di Java, e non avendolo =
>trattato come argomento universitario, mi ritrovo con qualche Bug anche =
>se ho una modesta esperienza in fatto di programmazione. Il problema =E8 =
>questo. Se devo organizzare una struttura dinamica ad albelo, come =
>faccio senza l'utilizzo dei puntatori?
il fatto che java non abbia i puntatori e' un falso mito :)
java non ha l'aritmetica dei puntatori (si dice cosi'?)
ad esempio
Oggetto o = new Oggetto();
o altro non e' che un puntatore (che pero' nessuno chiama puntatore)
quindi se devi realizzare un albero puoi farlo esattamente come in C
public class nodo
{
private nodo l;
private nodo r;
...
public nodo(...)
{
...
}
}
ciao_O
esiste l'apposita struttura JTree
-------------------
ara...@lohobbitelatorre.org
>>>questo. Se devo organizzare una struttura dinamica ad albelo, come =
>>>faccio senza l'utilizzo dei puntatori?
>
>esiste l'apposita struttura JTree
Non scherziamo per favore... JTree e' una struttura di Swing che si
usa per esempio per gli alberi delle cartelle e dei file.. per
rappresentarli graficamente !!! In altre aporole usi JTree per fare
interfacce simili a quelle del File Manager o di Esplora Risorse.. non
c'entra nulla invece con la struttura dati Albero (binario, n-ario ,
AVL o quello che ti pare) che e' tutt'altra cosa !!!
Augusto Pucci ( http://www.prospektiva.it/webmaster/ )
Webmaster di Prospektiva On-line
http://www.prospektiva.it
Webmaster di SIPO Toscana
http://sipotoscana.supereva.it
>Non scherziamo per favore... JTree e' una struttura di Swing che si
>usa per esempio per gli alberi delle cartelle e dei file.. per
>rappresentarli graficamente !!!
Mi è capitato di usare le classi del package javax.swing.tree anche per altri
scopi senza avvalermi dell'interfaccia grafica: mi sono trovato bene e le
classi sono abbastanza complete e semplici da usare.
In ogni caso anche senza i puntatori è possibile creare alberi binari e n-ari.
Semplicemente si avranno "oggetti Nodi", invece che un'insieme di puntatori.
In fondo quando si passa un Oggetto ad una funzione è un po' come (non uccidetemi)
se si passasse un puntatore a quell'oggetto solo che lo fa la JVM al tuo posto! ;)
Vi prego, non assalitemi e prendete tutto ciò come un delirio post-malattia...
See:
javax.swing.tree.DefaultMutableTreeNode
... di cui segnalo, utilissimi, i metodi:
postorderEnumeration()
preorderEnumeration()
[link]
http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
Bye
>
> il fatto che java non abbia i puntatori e' un falso mito :)
> java non ha l'aritmetica dei puntatori (si dice cosi'?)
>
> ad esempio
>
> Oggetto o = new Oggetto();
>
> o altro non e' che un puntatore (che pero' nessuno chiama puntatore)
Errore carissimo.
E' un riferimento. C'e' una sottile differenza semantica tra riferimento e
puntatore.
X> Andrea Medeghini wrote:
>> il fatto che java non abbia i puntatori e' un falso mito :)
>> java non ha l'aritmetica dei puntatori (si dice cosi'?)
X> Errore carissimo.
Mica tanto. Nei corsi sun te lo dicono chiaro e tondo che i riferiment
non son altr che puntator (intoccabili) sotto mentite spoglie.
X> E' un riferimento. C'e' una sottile differenza semantica tra riferimento e
X> puntatore.
La differenza è che nell'uso, non nella semantica: accedi ad oggetto e
non ad oggetto puntato da ma solo perché c'è sotto un meccanismo per
mascherare la cosa. Semanticamente hai un'area di memoria
(corrispondente alla variabile dichiarata) che contiene l'indirizzo
nello heap dell'oggetto cui fai riferimento. Non è una cosa nuova, c'è
(ma non si chiamavano riferimenti) già nel primo linguaggio di
programmazione bello (LISP). Nei linguaggi procedurali riferimenti tra
l'altro esistono dal Pascal (come tipo di passaggio per parametri) e
si tratta sempre di indirizzi ad aree di memoria (nel pascal messi
sullo stack per la chiamata a procedura/funzione).
Teoricamente è possibile fare i riferimenti senza i puntatori (vedi
gli handle di Windows) ma non sono così efficenti.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri | David Korn, 1987 ioccc best one liner
(aka saint)|-------------------------------------------------------------------
em@ail: sa...@eng.it ( vedere X-nospam nello header - see X-nospam in header )
>
> Mica tanto. Nei corsi sun te lo dicono chiaro e tondo che i riferiment
Buoni i corsi SUN.. Proprio buoni! Perche' tanti pazzi vanno al MIT quando
ci sono i corsi SUN?
> non son altr che puntator (intoccabili) sotto mentite spoglie.
Sono loro che sono incompetenti sotto mentite spoglie.
> X> E' un riferimento. C'e' una sottile differenza semantica tra
> riferimento e X> puntatore.
>
> La differenza è che nell'uso, non nella semantica: accedi ad oggetto e
> non ad oggetto puntato da ma solo perché c'è sotto un meccanismo per
> mascherare la cosa. Semanticamente hai un'area di memoria
> (corrispondente alla variabile dichiarata) che contiene l'indirizzo
> nello heap dell'oggetto cui fai riferimento. Non è una cosa nuova, c'è
> (ma non si chiamavano riferimenti) già nel primo linguaggio di
> programmazione bello (LISP). Nei linguaggi procedurali riferimenti tra
Ehh lo so, lo so che fa fino citare il LISP, e dire che e' bello, ma guarda
che non c'entra.
> l'altro esistono dal Pascal (come tipo di passaggio per parametri) e
> si tratta sempre di indirizzi ad aree di memoria (nel pascal messi
> sullo stack per la chiamata a procedura/funzione).
Sbagli completamente. Un puntatore e' un indirizzo in memoria e le cui
dimensioni 16-32 o 64 dipendono dallo spazio di indirizzi che il tuo
processo vede e sono spesso dimensionati in funzione della CPU sulla quale
lavori.
Un riferimento ha un livello di astrazione diverso. Tuttavia puo' essere
implementato in linguaggi poco sofisticati con un puntatore, ma il fatto
che uno scelga di implementare un riferimento con un puntatore non dice che
siano sinonimi. Se decido di implementare lo stack per le chiamate a
funzione con uno heap, ci riesco, ma non vuol dire che stack e heap sono la
stessa cosa, almeno per me. Per altri forse l'aver fatto uno stack con un
heap dice che sono la stessa cosa.
>
> Teoricamente è possibile fare i riferimenti senza i puntatori (vedi
> gli handle di Windows) ma non sono così efficenti.
Bravo! Ti stai avvicinando alla soluzione. Un handle e' un esempio di un
riferimento ad un oggetto (facciamo un esempio banale l'handle di un file
che nel vecchio C veniva ritornato dalla open) non e' un puntatore.
O forse credevi che ti davano l'accesso alle strutture interne del sistema
operativo che manco puoi indirizzare? Dai che ci siamo alla soluzione.
Allora un riferimento puo' potenzialmente dare un grado di protezione
all'oggetto riferito molto maggiore che un puntatore il quale punta allo
spazio di indirizzi del processo e non puo' quindi dare. E' un discorso
che vale per tutti i linguaggi, il senso delle due parole, non dirmi che in
questo o quel linguaggio hanno mischiato le cose per cui si assomigliano,
non me ne frega nulla
In sostanza il riferimento ha un livello di astrazione rispetto alla
memoria fisica che il puntatore non ha. Qui sta la differenza nella
semantica del linguaggio che non avevi afferrato. Poi ciascuno puo non
capire la differenza e sbagliare i nomi, basta riflettere.
Non capisco perche' teoricamente poi. Vuoi dire che quando apro un socket o
un file faccio una operazione teorica? A me sembrano azioni molto pratiche.
Non trovo poi cosi' ineffcienti le operazioni sui socket e files. certo se
potessi quando voglio sapere la posizione corrente nel file leggere le
strutture interne e leggere i 4 bytes direttamente nel S:O. sarebbe una
scheggia.
Prova....
.
oh... senza offesa... ma lo sai che sei un rompiballe di dimensioni
galattiche? E nelle spoglie di un rompiballe? ;) Ho dato una rapida
scorsa ai msg che hai mandato finora: avrai si e no "aiutato" un paio di
persone e mandate a cagare almeno un centinaio con qualche cavillo più o
meno giustificato.
Se non cambi atteggiamento, avrai vita molto breve sul ng, che è una
comunità di persone con gli stessi interessi e che vive talvolta delle
differenze di competenze, talvolta dell'opposto. Non si entra in una
comunità strillando "siete tutti scarsi, io sono il piu' bravo e
ascoltate me", non si arriva da nessuna parte e non giova a nessuno. Se
hai le competenze, aiuta chi ne ha di meno. Quelle che non hai, cerca di
impararle anche (non solo, ovvio) dai msg di chi è più esperto di te (ce
ne sono parecchi che postano, più o meno frequentemente, qui sul ng,
compresi alcuni di quelli che hai maldestramente "bacchettato").
Nessuno sa tutto, probabilmente neanche te: se domani postassi qualche
quesito qui sul ng credi che qualcuno ti risponderebbe?
ciao
--
______
/_____/\ Ugo Landini
/____ \\ \ Supervisor degli incompetenti
/_____\ \\ / Sun Educational Services
/_____/ \/ / /
/_____/ / \//\ SUN Microsystems Italia S.p.A.
\_____\//\ / / Via Romagnosi, 4
\_____/ / /\ / 00196 - Rome (RM) - Italy
\_____/ \\ \ @mail : ugo.l...@sun.com
\_____\ \\ Phone : +39 (0) 6 36708.682
\_____\/ GSM : +39 (0) 335 7766651
> oh... senza offesa... ma lo sai che sei un rompiballe di dimensioni
> galattiche? E nelle spoglie di un rompiballe? ;) Ho dato una rapida
> scorsa ai msg che hai mandato finora: avrai si e no "aiutato" un paio di
> persone e mandate a cagare almeno un centinaio con qualche cavillo più o
> meno giustificato.
> Se non cambi atteggiamento, avrai vita molto breve sul ng, che è una
> comunità di persone con gli stessi interessi e che vive talvolta delle
> differenze di competenze, talvolta dell'opposto. Non si entra in una
> comunità strillando "siete tutti scarsi, io sono il piu' bravo e
> ascoltate me", non si arriva da nessuna parte e non giova a nessuno. Se
> hai le competenze, aiuta chi ne ha di meno. Quelle che non hai, cerca di
> impararle anche (non solo, ovvio) dai msg di chi è più esperto di te (ce
> ne sono parecchi che postano, più o meno frequentemente, qui sul ng,
> compresi alcuni di quelli che hai maldestramente "bacchettato").
> Nessuno sa tutto, probabilmente neanche te: se domani postassi qualche
> quesito qui sul ng credi che qualcuno ti risponderebbe?
Nessun problema a smettere totalmente di postare, visto che non server
allora.
>
> Nessun problema a smettere totalmente di postare, visto che non server
> allora.
E perchè? Non puoi invece semplicemente essere più educato ed usare le
tue conoscenze per uno scopo un po' più nobile che offendere gli altri?
Penso proprio di rappresentare il pensiero di tanti dicendoti che i tuoi
commenti sarebbero ben accetti se posti in altro modo e con altro scopo.
Nessuno qui sta seduto alla finestra a tirare sassi in testa a chi
sbaglia o a sfoggiare conoscenze, anche se talvolta certi post sono
"irresistibili". Se pensi che il livello del ng è basso, cerca di
alzarlo! Proponi thread utili, nei limiti del tempo che il lavoro ti
lascia, e lascia magari le risposte più banali a chi comincia ad essere
"esperto".
Ci aspettiamo da te un thread "costruttivo" al più presto. Magari un
altro esempio di rifattorizzazione come fu fatto qualche settimana fa,
oppure metriche di accoppiamento e coesione, oppure quello che vuoi e
che ti piace: potresti trovare qualcuno intererssato a scambiare
opinioni,e, chissà, imparare anche qualcosa (o magari no: però ti sarai
fatto qualche amico)
salutoni e non fuggire.
--
______
/_____/\ Ugo Landini
/____ \\ \ Education Technical Supervisor
X> Gian Uberto Lauri wrote:
>>
>> Mica tanto. Nei corsi sun te lo dicono chiaro e tondo che i riferiment
X> Buoni i corsi SUN.. Proprio buoni! Perche' tanti pazzi vanno al MIT quando
X> ci sono i corsi SUN?
Perché al MIT ci sono le CM5 :) e le StarFire 10000 arrivano quando
sono ancora in "beta" mentre ai corsi SUN se ti va bene c'è un Ultra10
col CDE sopra :(. Ma quando i corsi SUN te li pagano, ti pagano
l'albergo e quando esci puoi farti quattro passi dalle parti di
Ottaviano (fermata Metro A di Roma) sono una piacevole e divertente
vacanza.
>> non son altr che puntator (intoccabili) sotto mentite spoglie.
X> Sono loro che sono incompetenti sotto mentite spoglie.
Ovvio che rispetto ai puntatori sono incompleti. Lo ha fatto apposta
Gosling per evitare le trappole che ci sono coi puntatori del C.
>> (corrispondente alla variabile dichiarata) che contiene l'indirizzo
>> nello heap dell'oggetto cui fai riferimento. Non è una cosa nuova, c'è
>> (ma non si chiamavano riferimenti) già nel primo linguaggio di
>> programmazione bello (LISP). Nei linguaggi procedurali riferimenti tra
X> Ehh lo so, lo so che fa fino citare il LISP, e dire che e' bello, ma guarda
X> che non c'entra.
Allora non conosci il Lisp. E c'entra con Java molto più di quello che
credi.
>> l'altro esistono dal Pascal (come tipo di passaggio per parametri) e
>> si tratta sempre di indirizzi ad aree di memoria (nel pascal messi
>> sullo stack per la chiamata a procedura/funzione).
X> Un riferimento ha un livello di astrazione diverso.
Niet Tovarich! In Pascal hanno il medesimo livello di astrazione e
potrebbero benissimo essere implementati con un altro meccanismo
diverso dall'indirizzo in memoria. In C è diverso, in C un puntatore è
un indirizzo di memoria. Lo stesso potresti essere così pazzo da
costruire un meccanismo che astrae dalla memoria fisica e permette di
fare l'aritmetica. Più o meno quello che ti fa una MMU...
X> Tuttavia puo' essere
X> implementato in linguaggi poco sofisticati con un puntatore, ma il fatto
X> che uno scelga di implementare un riferimento con un puntatore non dice che
X> siano sinonimi.
L'uso degli indirizzi fisici non è sinonimo di scarsa sofisticazione.
Pascal li usa per efficenza, Wirth aveva bisogno di un linguaggio
semplice che consumasse meno cicli macchina possibile (i costi di
esercizio di un CDC6600 erano decisamente alti) e quindi meglio
risparmiare cicli macchina.
Forse il risparmio di cicli macchina per te è un concetto strano, ma
al MIT ti garantisco che ci vanno ancora dietro.
X> Non capisco perche' teoricamente poi. Vuoi dire che quando apro un socket o
X> un file faccio una operazione teorica? A me sembrano azioni molto pratiche.
X> Non trovo poi cosi' ineffcienti le operazioni sui socket e files.
Andiamo a studiarci un po' i sistemi operativi prima di mischiare mele
e patate. I descrittori di sistema per i file non sono nel tuo spazio
di indirizzamento, non potresti arrivarci con un puntatore...
>il fatto che java non abbia i puntatori e' un falso mito :)
>java non ha l'aritmetica dei puntatori (si dice cosi'?)
Si dice cosi'. :-)
--
God is Real, unless declared Integer.
ObjectZone - http://space.tin.it/computer/csadun
>
> Perché al MIT ci sono le CM5 :) e le StarFire 10000 arrivano quando
> sono ancora in "beta" mentre ai corsi SUN se ti va bene c'è un Ultra10
> col CDE sopra :(.
beh... un E10K per un corso di Java mi sembra troppo.
Le Ultra10 o Ultra5 vanno benissimo per lo scopo, e comunque meglio che
lavorare su PC!
Il MIT poi e' un'universita', quindi non capisco il parallelo. E' chiaro
che Sun, come altre societa' della Silicon Valley, lavora a stretto
contatto col MIT... o pensate che nascano tutti "imparati", come si dice
a Roma?
> Ma quando i corsi SUN te li pagano, ti pagano
> l'albergo e quando esci puoi farti quattro passi dalle parti di
> Ottaviano (fermata Metro A di Roma) sono una piacevole e divertente
> vacanza.
>
ok per la vacanza... ma l'utilita' dove la mettiamo? (Ugo aziendalista
;))
--
UL
Ritengo tuttavia superfluo rispondere precisarando i miei post precedenti o
commentando le tue posizioni. Cosi' qualcuno non sara' infastidito da
ulteriori sfoggi.
Bye
Era per me la vita breve ?