File: java.html

package info (click to toggle)
pj-9805 1.0-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 396 kB
  • ctags: 24
  • sloc: makefile: 39; sh: 18
file content (955 lines) | stat: -rw-r--r-- 37,619 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>Java sotto Linux</TITLE>
</HEAD>

<BODY LINK="#0000ff" VLINK="#0000ff" ALINK="#0000ff" BGCOLOR="#ffffff">

<TABLE BORDER=0 CELLPADDING=0 WIDTH=100%>
<TR>

<TD ALIGN=left BGCOLOR="#ffffff">
<A HREF="gpg.html">
<IMG ALT="[precedente]" SRC="pj_images/a_left.gif" BORDER=0></A>
</TD>

<TD ALIGN=center BGCOLOR="#cccccc">
<FONT COLOR="#00ff00">
<A HREF="gpg.html">GPG</A>
- <A HREF="index.html">Copertina</A> -
<A HREF="gimp.html">GIMP</A>
</FONT>
</TD>

<TD ALIGN=right BGCOLOR="#ffffff">
<A HREF="gimp.html">
<IMG ALT="[successivo]" SRC="pj_images/a_right.gif" BORDER=0></A>
</TD>

</TR>
</TABLE>


<P ALIGN=right>
<FONT SIZE=+3 COLOR="#ff0000">
<EM>Articoli</EM>
</FONT>
<HR>

<P ALIGN=center>
<FONT SIZE=+3 COLOR="#0000FF">Java sotto Linux
</FONT>
</P>


<OL>
<LI>
<FONT SIZE=+1>Presentazione</FONT></LI>

<BR>&nbsp;
<BR><FONT FACE="Times New Roman,Times">Il presente articolo&nbsp; &egrave;
il primo di una serie di contributi dedicati al linguaggio di programmazione;
tali articoli saranno pubblicati sul Pluto Journal. L'intenzione di questo
progetto &egrave;, innanzitutto, diffondere la conoscenza e l'uso di Java
sulla piattaforma Linux; dunque, la prospettiva&nbsp; degli articoli sar&agrave;
molto generale, almeno per quanto riguarda questa prima serie. Negli articoli
che via via&nbsp; si succederanno si punter&agrave; l'attenzione, in modo
particolare, sugli aspetti pi&ugrave; generali del linguaggio e saranno
dati i riferimenti attraverso i quali trovare informazioni, documentazione
e software relativi a Java e disponibili gratuitamente su Internet. In
tal modo, dopo una prima, generale panoramica fornita dagli articoli,&nbsp;
chiunque lo desiderasse potr&agrave; approfondire autonomamente quegli
aspetti del linguaggio che, per qualsiasi motivo,&nbsp; pi&ugrave; lo interessano
e lo appassionano. Almeno per il momento, dunque,&nbsp; nessuno degli articoli
affronter&agrave; gli aspetti pi&ugrave; particolarmente attinenti alla
programmazione propriamente detta. Inoltre, nella stesura degli articoli
medesimi si dar&agrave; per scontata una qualche familiarit&agrave; con
i linguaggi C/C++ e con gli elementi della programmazione Object Oriented;
tale familiarit&agrave;, pur non essendo pregiudiziale per la comprensione
degli scritti consentir&agrave;, comunque, di seguire l'esposizione con
pi&ugrave; agio.</FONT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<LI>
Caratteristiche di Java</LI>


<P>2.1 Java &egrave; un linguaggio OOP&nbsp;

<P>Java &egrave; un linguaggio di programmazione <I>effettivamente</I>
Object Oriented; <A HREF="http://www.ee.ic.ac.uk/media/html/Java/Tutorial/noMoreC/index.html">diversamente
dal C++</A>, in cui la implementazione Object Oriented consistente fondamentlmente&nbsp;
nella possibilit&agrave; di costruire con un certo agio nuovi tipi di dati,
Java implementa le caratteristiche pi&ugrave; proprie e peculiari della
programmazione Object Oriented quali, ad esempio, il <I>multithrading,</I>&nbsp;
l'effettivo <I>overloading </I>e un controllo strettissimo dell'accesso
ai dati interni di un particolare <A HREF="#CLass-Object">oggetto</A> da
parte di altri oggetti. I principali costrutti sintattici (cicli <TT>for,
while, do...while, </TT>gli operatori di: incremento <TT>++</TT>, decremento
<TT>--</TT>, etc.) dei due linguaggi sono formalmente simili; tuttavia,
occorre tener ben&nbsp; presente che tale somiglianza &egrave;, appunto,
esclusivamente formale (sintattica, per la precisione) e si riferisce unicamente
al modo in cui tali strutture ed operatori appaiono, per cos&igrave; dire,
nel file sorgente.&nbsp;
<BR>Ad esempio, tanto per rendere l'idea, il seguente&nbsp; frammento di
codice Java:&nbsp;
<BR>&nbsp;
<BLOCKQUOTE><TT>for(pluto=1 ; pluto&lt;10 ; pluto++)&nbsp;</TT>&nbsp;
<BR><TT>&nbsp; System.out.println("Java stampa sullo stream out");</TT>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
<FONT FACE="Times New Roman,Times">in un file sorgente C/C++ apparirebbe
come:</FONT>&nbsp;
<BR>&nbsp;
<BLOCKQUOTE><TT>for(pluto=1 ; pluto&lt;10 ; pluto++)&nbsp;</TT>&nbsp;
<BR><TT>&nbsp; printf("C++ stampa sullo stream out");</TT>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
Dunque, le somiglianze sintattiche tra Java &egrave; C++ si riducono, sostanzialmente,
ad analogie di questo tipo. Naturalmente, entrambi i linguaggi implementano
i concetti di Classe e Oggetto, seppure con alcune differenze sintattiche.
Inoltre, Java non implementa i <TT>puntatori </TT>ed i costrutti <TT>struct
</TT>e <TT>union.</TT>&nbsp;
<BR>Occorre prestare attenzione a non confondere Java&nbsp; e Javascipt;
la presenza del termine <I>Java</I> ammicca, falsamente, ad una parentela
che effettivamente non esiste: <A HREF="http://www.physics.iastate.edu//numaps/96/days/13/jjsdiffer.html">Java
e Javascript sono due linguaggi distinti ed indipendenti</A>.&nbsp;

<P>&nbsp;

<P>2.1.1<A NAME="CLass-Object"></A>&nbsp; Java ha Class, oggettivamente&nbsp;

<P>In quanto segue si descrivono sommariamente i concetti di Classe e Oggetto,
caratteristici della programmazione <A HREF="#Links-OOP">OOP</A> . Chi
avesse bisogno di familiarizzarsi ulteriorermente con gli elementi della
programmazione Object Oriented, o volesse approfondirne&nbsp; gli aspetti
pi&ugrave; avanzati,&nbsp; pu&ograve; seguire il link <A HREF="#Links-OOP">OOP</A>.&nbsp;
<BR>Il concetto di classe &egrave; fondamentale nella programmazione Object
Oriented; un oggetto &egrave;, in sostanza, una istanza particolare di
una data classe. Una Classe costituisce un <I>modello</I> generale&nbsp;
attraverso il quale vengono descritte le caratteristiche <I>universali
</I>di una determinata struttura. Tali caratteristiche universali sono
precisamente quelle che ciascun Oggetto particolare, modellato sulla Classe,
deve condividere con gli Oggetti appartenenti alla sua classe.&nbsp;
<BR>Si consideri, ad esempio, un oggetto tipico della vita quotidiana:
il tavolo. A titolo di esemplificazione, le caratteristiche pi&ugrave;
generali che individuano e caratterizzano un tavolo possono essere ridotte
alle seguenti:&nbsp;
<BR>&nbsp;
<UL>
<UL>
<UL>
<UL>
<LI>
un piano d'appoggio</LI>

<LI>
quattro gambe</LI>
</UL>
&nbsp;</UL>
</UL>
</UL>
Queste due caratteristiche sono sufficienti per descrivere un tavolo nella
sua forma pi&ugrave; generale. In Java, la <I>creazione </I>di un modello
generale per il <I>concetto </I>di tavolo cos&igrave; schematizzato si
attua usando la struttura di Classe; sintatticamente, e nella forma pi&ugrave;
semplice, una classe che definisce un tale <I>generico </I>tavolo potrebbe
avere la forma seguente:&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BLOCKQUOTE><TT>public class Tavolo {&nbsp;</TT>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public int areapiano = 0; // area del piano</TT>&nbsp;
<BR><TT>public int lungamba = 0; // lunghezza delle gambe</TT>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>// Costruttore della Classe&nbsp;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo() {</TT>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = 2;</TT>&nbsp;
<BR><TT>this.lungamba =&nbsp; 1;&nbsp;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE><TT>}</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>}</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
Nella prima parte della Classe sono definite le variabili che caratterizzano
in modo generico un tavolo, indicandone le due caratteristiche distintive:
il piano di appoggio (<TT>areapiano</TT>: l'area della superficie del piano
d'appaggio) e le gambe (<TT>lungamba</TT>: lunghezza delle gambe del tavolo).
Nella seconda parte, quella che segue il commento <I>Costruttore della
classe, </I>c'&egrave; il codice attraverso cui, ogni volta si crei un
Oggetto della Classe <TT>Tavolo</TT>,&nbsp; a tale Oggetto vengono assegnati:
l'area della superficie del piano d'appoggio, in questo caso uguale a 2
volte l'unit&agrave; di misura di superficie; la lunghezza delle gambe,
pari, nel presente esempio,&nbsp; a 1 volta l'unit&agrave; di misura di
lunghezza. Tale codice &egrave; detto <I>costruttore</I> della Classe e
deve essere dichiarato con lo stesso nome della Classe. Ogni Classe pu&ograve;
avere pi&ugrave; di un costruttore, ognuno dei quali pu&ograve; essere
invocato per inizializzare, in modo peculiare, un particolare oggetto.
Tutti i <I>costruttori </I>hanno lo stesso nome della Classe; Java distingue
i <I>costruttori </I>dal numero e dal tipo di argomenti, diversi per ciascun
<I>costruttore</I>. Ad esempio, per rendere la Classe di utilit&agrave;
pi&ugrave; generale, la si pu&ograve; dotare di un <I>costruttore </I>attraverso
il quale &egrave; possibile, quando necessario,&nbsp; creare un Oggetto
del tipo <TT>Tavolo</TT> assegnandogli, di volta in volta, misure per l'area
e lunghezza diverse da 2 e 1, rispettivamente; il codice per un tale costruttore
potrebbe essere:&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo(int sup, int lung) {</TT>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = sup;&nbsp;</TT>&nbsp;
<BR><TT>this.lungamba = lung;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<TT>
}</TT>&nbsp;</BLOCKQUOTE>
&nbsp;
<BR>&nbsp;

<P>Il codice della Classe, con entrambi i <I>costruttori</I>, &egrave;:&nbsp;
<BR>&nbsp;
<BLOCKQUOTE><TT>public class Tavolo {&nbsp;</TT>&nbsp;
<BLOCKQUOTE><TT>public int areapiano = 0; // area del piano</TT>&nbsp;
<BR><TT>public int lungamba = 0; // lunghezza delle gambe</TT>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>// Costruttori della Classe Tavolo</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo() {</TT>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = 2;&nbsp;</TT>&nbsp;
<BR><TT>this.lungamba =&nbsp; 1;&nbsp;</TT>&nbsp;

<P><TT>}</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>public Tavolo(int sup, int lung) {</TT>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = sup;&nbsp;</TT>&nbsp;
<BR><TT>this.lungamba = lung;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<TT>}</TT>&nbsp;
<BR><TT>}</TT>&nbsp;

<P>&nbsp;</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
Ora, usando la classe sopra definita, &egrave; possibile creare (<I>istanziare</I>,
nel gergo di Java) Oggetti <TT>Tavolo </TT>con qualsiasi area della superficie
d'appoggio e qualsiasi lunghezza delle gambe.&nbsp;
<BR>Ad esempio, per creare l' Oggetto (il tavolo) <TT>da-cucina</TT>, di
tipo <TT>Tavolo</TT>,&nbsp; con area della superficie di appoggio di <TT>sup</TT>
volte l'unit&agrave; di superficie e lunghezza delle gambe di <TT>lung
</TT>volte l'unit&agrave; di lunghezza, occorre il seguente codice:&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo da-cucina = new Tavolo(sup,lung);&nbsp;</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
</BLOCKQUOTE>
Viceversa, per istanziare un Oggetto con misure <I>standard </I>di 2 e
1, deve essere usato il seguente codice:&nbsp;
<BR>&nbsp;

<P>&nbsp;
<OL>
<OL><TT>public Tavolo da-cucina = new Tavolo();</TT>&nbsp;
<BR>&nbsp;

<P>&nbsp;</OL>
</OL>
Il compilatore individua il particolare&nbsp; <I>costruttore</I> da invocare
dal numero e dal tipo dei paramentri usati nella chiamata alla Classe,
chiamamta con cui&nbsp; si istanzia il particolare Oggetto. Il codice <TT>new
Tavolo(sup, lung) </TT>crea, istanziando la Classe <TT>Tavolo</TT>, un
Oggetto di tipo <TT>Tavolo</TT>, assegnandogli l'area della superficie
del piano di appoggio e la lunghezza delle gambe attraverso il costruttore
<TT>public Tavolo(int sup, int lung); </TT>il codice <TT>public Tavolo</TT>
dichiara <TT>da-cucina</TT> come Oggetto di tipo <TT>Tavolo</TT>; infine,
l'operatore <TT>=</TT> assegna all'Oggetto (al tavolo) <TT>da-cucina</TT>
l'area di superficie e la lunghezza delle gambe, in questo caso <TT>sup
</TT>e <TT>lung </TT>rispettivamente.&nbsp;
<BR>Dunque, la classe <TT>Tavolo</TT> &egrave; un modello attraverso il
quale (istanziadolo opportunamente) si&nbsp; costruiscono gli Oggetti (i
tavoli, per rimanere nella metafora) di tipo <TT>Tavolo; </TT>una Classe
pu&ograve; essere considerata come un <TT>progetto</TT> secondo cui vengono
costruiti gli Oggetti particolari, analogamente a&nbsp; quanto accade nella
realt&agrave;, in cui vari esemplari di un determinato prodotto vengono
costruiti a partire da un unico disegno tecnico.&nbsp;
<BR>Oltre agli elementi gi&agrave; descritti, una Classe contiene anche
le procedure per manipolare ed elaborare le informazioni contenute nelle
sue variabili e nelle sue strutture dati interne; tali procedure vengono
chiamate <I>metodi </I>nel gergo della Programmazione Object Oriented.
Le applicazioni e gli applet Java elaborano le informazioni attraverso
i metodi forniti dagli oggetti che li costituiscono; in particolare, una
applicazione o un applet Java possono&nbsp; essere costituiti da uno unico
oggetto che contiene in se i dati e tutte le procedure (<I>metodi</I>)
per elaborare e manipolare tali dati. Ad esempio, si potrebbe dotare la
Classe <TT>Tavolo</TT> e, quindi, ogni Oggetto da essa istanziato, con
un metodo per controllare che le misure fornite per definire l'oggetto
non siano <I>assurde:</I>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<OL><TT>public static void main(String args[]) {</TT>&nbsp;</OL>

<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>if(areapiano == 0)</TT>&nbsp;
<BR><TT>&nbsp;&nbsp; System.out.println("Tavolo senza piano");</TT>&nbsp;</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE><TT>if(lungamba == 0)</TT>&nbsp;
<BR><TT>&nbsp;&nbsp; System.out.println("Tavolo senza gambe");</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<TT>}</TT>&nbsp;

<P>&nbsp;

<P>&nbsp;
<BR>La Classe completa ha la forma seguente:&nbsp;
<BR>&nbsp;
<BLOCKQUOTE><TT>public class Tavolo {&nbsp;</TT>&nbsp;
<BLOCKQUOTE><TT>public int areapiano = 0; // area del piano</TT>&nbsp;
<BR><TT>public int lungamba = 0; // lunghezza delle gambe</TT>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>// Costruttori della Classe Tavolo</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>

<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo() {</TT>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = 2;&nbsp;</TT>&nbsp;
<BR><TT>this.lungamba =&nbsp; 1;&nbsp;</TT>&nbsp;

<P><TT>}</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>public Tavolo(int sup, int lung) {</TT>&nbsp;
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = sup;&nbsp;</TT>&nbsp;
<BR><TT>this.lungamba = lung;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<TT>}</TT>&nbsp;
<BR>&nbsp;
<BLOCKQUOTE><TT>//Metodi della Classe Tavolo</TT></BLOCKQUOTE>
<TT>public static void main(String args[]) {</TT>&nbsp;
<BLOCKQUOTE>&nbsp;<TT>if(areapiano == 0)</TT>&nbsp;
<BR><TT>System.out.println("Tavolo senza piano");</TT>&nbsp;

<P><TT>if(lungamba == 0)</TT>&nbsp;
<BR><TT>&nbsp;System.out.println("Tavolo senza gambe");</TT></BLOCKQUOTE>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<TT>}</TT>&nbsp;
<BR><TT>}</TT>&nbsp;
<BR>&nbsp;</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
&nbsp;
<BR>Si osservi che un programma Java non &egrave;, esso stesso,&nbsp; altro
se non una Classe che contiene il <I>metodo </I><TT>main</TT>: l'esecuzione
del programma comincia dal metodo <TT>main</TT> e termina quando l'esecuzione
raggiunge la fine del <I>metodo</I>, ovvero quando finisce ogni sottoprocesso
(<I>thread</I>) lanciato dal metodo <TT>main</TT>. Dunque, la Classe principale
(programma) deve necessariamente contenere il metodo <TT>main.</TT>&nbsp;
<BR>Si osservi, inoltre, che per usare i metodi e le strutture di una Classe
occorre innanzitutto istanziare la Classe creando un Oggetto. In pratica,
si usano i metodi e le strutture dell'Oggetto istanziato, non quelle della
Classe; la Classe &egrave; solo un modello conformemente al quale gli Oggetti
vengono costruiti per poterne usare i metodi e le strutture dati.&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P>2.1.2&nbsp; Java ha, addirittura, una <I><A HREF="#VM">Virtual Machine</A>
...</I>&nbsp;

<P><I>... </I>attraverso cui pu&ograve; girare su tutte le pi...attaforme
hardware. A parte il gioco di parole, la caratteristica pi&ugrave; importante
e peculiare dei programmi&nbsp; Java &egrave; la assoluta indipendenza
del codice sorgente&nbsp; dalle caratteristiche hardware e software di
un particolare computer; in altri termini, ci&ograve; significa che lo
stesso codice sorgente viene compilato ed eseguito, senza necessit&agrave;
di alcuna modifica, su ogni computer e sotto qualsiasi sistema operativo
per il quale Java sia stato implementato. Tale caratteristica non &egrave;,
ovviamente, frutto del caso ma, naturalmente, &egrave; il risultato di
un preciso e deliberato proposito: progettare un linguaggio di programmazione,
tale che i programmi scritti&nbsp; con esso potessero essere distribuiti
attraverso una qualsiasi rete, e girassero senza problemi su ciascuna delle
pi&ugrave; diverse piattaforme costituenti i nodi della rete medesima.
L'applicazione attualmente pi&ugrave; diffusa di questo progetto &egrave;
costituita dagli applet Java che girano sotto browser web in cui&nbsp;
siano&nbsp; implementati&nbsp; la Virtual Machine e la libreria API di
Java; un&nbsp; esempio di un tale browser &egrave; rappresentato dalle
pi&ugrave; recenti versioni di Netscape. In effetti, la <A HREF="http://www.sun.com">Sun</A>
ha sviluppato il browser <A HREF="http://axdel1.bo.infn.it/gianni/links/lk_java.html">HotJava</A>&nbsp;
proprio come piattaforma su cui far girare gli applet. Gli <I>applet </I>sono
programmi di dimensioni contenute, appositamente scritti per arricchire
e rendere interattive&nbsp; le pagine web; le <I>applicazioni</I>,&nbsp;
pi&ugrave; complesse e di maggiori dimensioni, sono dei veri e propri programmi,
attraverso i quali si pu&ograve; implementare qualsiasi&nbsp;&nbsp; risorsa
software si desideri: Java &egrave; un vero e proprio linguaggio di programmazione!&nbsp;
<BR>La caratteristica che rende Java un linguaggio assolutamente multipiattaforma
consiste nella sua peculiare struttura e progettazione e nel modo particolare
in cui il linguaggio &egrave; implementato sulle diverse piattaforme hardware.
Java &egrave;, tecnicamente, una piattaforma software; cio&egrave;:&nbsp;
Java &egrave; costituito da un insieme di programmi e funzioni di libreria
scritti secondo le caratteristiche e le peculiarit&agrave; di&nbsp; ciascuna
piattaforma hardware su cui si vogliono far girare i programmi Java; tali
programmi e funzioni di libreria implementano i due componenti principali
di Java: la libreria <A HREF="#API">API</A> e la <A HREF="#VM">Virtual
Machine</A>. Dunque, per portare Java su una particolare piattaforma hardware
(Windows, piuttosto che Linux o DEC) &egrave; necessario scrivere la libreria
<A HREF="#API">API</A> e la <A HREF="#VM">Virtual Machine</A> per la particolare
piattaforma, in modo che la libreria <A HREF="#API">API </A>fornisca un
insieme di <I>strumenti </I>(propriamente, tali strumenti sono classi,
con i relativi metodi, e interfacce) completo per il controllo e l'uso
di tutte le&nbsp; risorse messe a disposizione dalla particolare piattaforma
hardware; ad esempio, la libreria <A HREF="#API">API</A> dovr&agrave; contenere
<I>strumenti </I>per gestire la particolare interfaccia <A HREF="#Links-XW">GUI</A>,
il suono, la gestione dei flussi di input e output, etc., oltre ad implementare,
naturalmente, tutte le altre funzioni pi&ugrave; generali, come, ad esempio:
le funzioni trigonomeriche, la gestione delle stringhe, e via di seguito.
Attraverso gli <I>strumenti </I>forniti dalla libreria <A HREF="#API">API</A>,
la <A HREF="#VM">Virtual Machine</A> controlla ed usa, conformemente&nbsp;
alle istruzioni del programma, le risorse hardware e software della particolare
piattaforma hardware su cui gira il programma medesimo; lo stesso programma,
senza alcuna modifica al codice sorgente, pu&ograve; girare su piattaforme
completamente diverse, proprio grazie al fatto che la <A HREF="#VM">Virtual
Machine</A>&nbsp; fa da tramite tra il codice del programma (sempre lo
stesso) e le risorse della piattaforma hardware usando gli&nbsp; <I>strumenti
</I>forniti dalla libreria <A HREF="#API">API</A>.&nbsp; Dunque, lo stesso
codice sorgente gira sia sotto Linux che sotto Windows che sotto ogni qualsiasi
altra piattaforma hardware dotata della sue proprie particolari libreria
API e Virtual Machine.&nbsp;
<BR>In pratica, compilando il codice sorgente di un programma Java non
si ottiene immediatamente il file eseguibile sulla particolare piattaforma;
piuttosto, si ottiene una sorta di rappresentazione simbolica intermedia
del programma, detta bytecode. Successivamente, attraverso il comando <I>java,
</I>che invoca l'interprete,&nbsp; il bytecode viene&nbsp; <FONT COLOR="#000000"><I>interpretato
</I>dalla <A HREF="#VM">Virtual Machine</A></FONT> per produrre i risultati
per cui il programma &egrave; stato scritto. Dunque, ogni programma Java
viene prima compilato, per ottenere la rappresentazione nella forma del
bytecode; successivamente, ogni volta che lo si richede invocando l'interprete
Java (con il comando <I>java</I>), la Virtual Machine <I>interpreta </I>il
bytecode e, come illustrato sopra, esegue le operazioni codificate nel
programma&nbsp; usando le risorse del computer attraverso i servizi forniti
dalla libreria <A HREF="#API">API</A>.&nbsp;
<BR>Ad esempio, per implementare l'interfaccia grafica di un programma
scritto in C++ (o in qualsiasi altro linguaggio che non sia Java) sotto
Linux, occorre conoscere: il <A HREF="#Links-XW">ToolKit</A> che implementa
le risorse <A HREF="#Links-XW">GUI</A> (Graphical User Interface) sotto
<A HREF="#Links-XW">Xwindow</A> (da non confondersi con Microsoft Windows);
l'interfaccia grafica di Linux e le relative funzioni di libreria della
particolare implementazione del C++ sotto Linux. Analogamente dicasi per
l'implementazione dell'interfaccia grafica dello stesso o di un qualsiasi
altro programma che debba girare sotto Microsoft Windows. Ora, poich&egrave;
Xwindow e Microsoft Windows sono assolutamente incompatibili,&nbsp; per
portare da Linux a Microsoft Windows un qualsiasi programma dotato di interfaccia
GUI,&nbsp; fatte eventualmente salve incompatibilit&agrave; di altra natura,
occorre comunque riscrivere completamente l'interfaccia grafica&nbsp; per
adattarla alle caratteristiche&nbsp; delle risorse hardware e software
che implementano la <A HREF="#Links-XW">GUI </A>di Microsoft Windows. Per
Java, tale riscrittura non &egrave; necessaria: lo stesso codice sorgente
di un qualsiasi programma viene compilato su ogni piattaforma. In sostanza,
i dettagli&nbsp; per la gestione delle risorse <A HREF="#Links-XW">GUI</A>&nbsp;
implementate di Java sono uguali, dal punto di vista del programmatore,&nbsp;
per ogni sistema, che sia esso Linux o Xwindows, o qualsiasi altra piattaforma;
tali risorse sono implementate attraverso&nbsp; i metodi e le interacce
dell' <B>Abstract Window Toolkit&nbsp; </B>( AWT ); l'<B>AWT </B>fa parte
della libreria<B> </B><A HREF="#API">API</A>.&nbsp;
<BR>&nbsp;

<P>&nbsp;
<BR>2.1.2.1&nbsp;<A NAME="API"></A>La libreria <A HREF="#Links-API">API</A>&nbsp;

<P>La libreria <A HREF="#Links-API">API </A>(Application Programming Interface)
&egrave; un insieme completo di classi ed interfacce che implementano tutte
le funzioni necessarie per scrivere programmi Java senza restrizione alcuna.
Dal punto di vista del programmatore Java, la libreria&nbsp; <A HREF="#Links-API">API</A>
&egrave; uguale su tutte le piattaforme su cui Java &egrave; implementato;
naturalmente, a livello macchina piattaforma la libreria &egrave; implementata
su ciascuna piattaforma conformemente alle caratteristiche della piattaforma&nbsp;
medesima. La descrizione completa e dettagliata della libreria si trova
nella documentazione fornita insieme al <A HREF="#Links-JDK">JDK</A>.&nbsp;
<BR>&nbsp;

<P>&nbsp;
<BR>2.1.2.2&nbsp;<A NAME="VM"></A>La Virtual Machine&nbsp;

<P>Come si &egrave; detto, la Virtual Machine &egrave; la parte dell'implementazione
del linguaggio che fornisce un <I>ambiente </I>dentro cui gira il programma
Java e, attraverso i servizi della libreria API, costituisce&nbsp; una
sorta di interfaccia tra la rappresentazione simbolica, universale e generale&nbsp;
delle risorse software ed hardware di un calcolatore e le concrete, peculiari,
caratteristiche software ed hardware del particolare sistema su cui il
programma gira effettivamente.&nbsp;
<BR>Ad esempio, nel pacchetto <A HREF="#Links-JDK">JDK</A>&nbsp; l'interprete
<TT>java</TT> e l'applicazione <TT>appletviewer</TT> (consente di lanciare
un applet senza dover usare un browser Java-compatibile) quando invocati
lanciano la Virtual Machine che interpreta il codice dell'applicazione
o dell'applet che sia.&nbsp;
<BR>&nbsp;

<P>&nbsp;
<BR>2.1.3&nbsp;<A NAME="Skeleton"></A>Scheletro di una tipica applicazione
Java&nbsp;

<P>Per l'apprendimento di un linguaggio di programmazione &egrave; molto
utile studiare il codice sorgente di programmi completi; il principale
ostacolo in tal senso, soprattutto per i principianti della programmazione,
&egrave; costituito dalla difficolt&agrave; di comprendere la funzionalit&agrave;
e l'organicit&agrave; del particolare modo in cui sono disposte le varie&nbsp;
parti di codice in un programma scritto nel determinato linguaggio di programmazione.
Viceversa, conoscendo il criterio con cui le parti di codice sono disposte,
risulta molto pi&ugrave; agevole riuscire a capire il funzionamento di
un programma, anche nella circostanza in cui si abbia una conoscenza superficiale
della sintassi del paricolare linguaggio. Per tale motivo, in questa sezione
si d&agrave; la descrizione della struttura&nbsp; di una tipica applicazione
Java.&nbsp;
<UL>&nbsp;
<BR>&nbsp;</UL>

<UL><TT>/* Scheletro di un Programma Java */&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR><TT>/* Inizio Sezione&nbsp; Header Files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*/&nbsp;</TT>&nbsp;

<P><TT>import java.io.*;&nbsp;</TT>&nbsp;

<P><TT>/*Fine Sezione Header Files */&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR>&nbsp;

<P><TT>/* Dichiarazione della Classe Madre&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;</TT>&nbsp;

<P><TT>class Skel{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// da qui comincia la classe principale&nbsp;</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P><TT>/* Dichiarazione delle Variabili della Classe&nbsp;&nbsp;&nbsp;&nbsp;
*/&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<OL>
<OL><TT>//Esempio di dihiarazione di variabili</TT>&nbsp;
<BR>&nbsp;</OL>
</OL>
<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public
static int var1 = 0;</TT>&nbsp;
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public
float varfloat = 0;</TT>&nbsp;

<P><TT>/* Fine Sezione Dichiarazione Variabili della Classe */</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P><TT>/* Inizio Sezione Costruttori della Classe */&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<UL><TT>public Skel(){</TT>&nbsp;

<P><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //corpo del costruttore</TT>&nbsp;
<UL><TT>}</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;</UL>
<TT>public Skel(int var, float var){</TT>&nbsp;
<BR>&nbsp;
<UL><TT>// corpo del costruttore</TT>&nbsp;

<P><TT>}</TT></UL>
</UL>
<TT>&nbsp;</TT>&nbsp;
<BR>&nbsp;

<P><TT>/*Fine Sezione Costruttori della Classe */</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P><TT>/* ***Inizio Sezione Metodi della Classe*** */</TT>&nbsp;

<P><TT>&nbsp;</TT>&nbsp;
<BR><TT>/*Metodo Principale*/</TT>&nbsp;

<P><TT>public static void main(String args[]) {</TT>&nbsp;

<P><TT>/* Dichiarazione delle Variabili interne del Metodo */&nbsp;</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<OL>
<OL><TT>int i = 0;&nbsp;</TT></OL>
<TT>&nbsp;&nbsp;&nbsp; int k = 0;&nbsp;</TT>&nbsp;
<BR>&nbsp;</OL>
<TT>/*Fine Dichiarazione Variabili intenre del Metodo */</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P><TT>/*Inizion Corpo del Metodo */</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<OL>
<OL>
<OL>
<OL><TT>// Esempio di codice</TT>&nbsp;
<BR>&nbsp;</OL>
</OL>
</OL>
</OL>
<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do&nbsp;&nbsp;
{&nbsp;</TT>&nbsp;

<P><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("\nE'
una bella giornata" + k + ","+i);&nbsp;</TT>&nbsp;

<P><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
i += 1 ;&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
k += 1 ;&nbsp;</TT>&nbsp;

<P><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}&nbsp;</TT>&nbsp;

<P><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
while( k + i &lt; 100);&nbsp;</TT>&nbsp;
<BR>&nbsp;&nbsp;<TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}&nbsp;</TT>&nbsp;&nbsp;<TT>&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR><TT>/* Altri Metodi&nbsp;&nbsp;&nbsp; */&nbsp;</TT>&nbsp;
<BR><TT>&nbsp;</TT>&nbsp;
<BR><TT>/* ***Fine Sezione Metodi della Classe*** */&nbsp;</TT>&nbsp;

<P><TT>/* Fine della Classe Principale*/&nbsp;</TT>&nbsp;
<BR>&nbsp;

<P><TT>}&nbsp;&nbsp;&nbsp; // Qui finisce la Classe Principale e l'applicazione</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P><TT>/* Inizio Dichiarazione Di eventuali Classi Accessorie Usate dalla
classe Principale. */&nbsp;</TT>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P><TT>/* Fine Dell'applicazione o dell'applet */</TT>&nbsp;</UL>
&nbsp;
<BR>&nbsp;
<BR>&nbsp;
<LI>
Java sotto Linux</LI>
</OL>

<UL>Avendo dato una panaromica generale relativamente&nbsp; alle caratteristiche
salienti del linguaggio, &egrave; ora opportuno puntare l'attenzione sulle
risorse di sviluppo disponibili sotto Linux.&nbsp; Per quanto detto sopra,
lo sviluppo di software Java &egrave; indipendente ed autonomo rispetto
alle caratteristiche hardware e software della piattaforma su cui il programma
girer&agrave;; lo sviluppatore di software Java non ha alcuna necessit&agrave;
di conoscere tali caratteristiche particolari, diversamente da quanto accade
per lo sviluppo di software con altri linguaggi di programmazione, C e
C++ compresi. Ogni applicazione Java gira su qualsiasi piattaforma su cui
sia installata la libreria <A HREF="#Links-API">API</A> e su cui sia implementata
la <A HREF="#VM">Virtual Machine</A> Java.&nbsp;
<BR>Sul mio Pentium ho installato&nbsp; la ditribuzione RedHat 4.2 con&nbsp;
la versione 2.0.30 del Kernel; tale distribuzione contiene il compilatore
stand-alone <TT>guavac</TT> del progetto GNU e una virtual machine, detta
Kaffe, che francamente non ho mai usato. Il compilatore <TT>guavac </TT>compila
un file sorgente e produce il bytecode per interpretare il quale occorre
usare&nbsp; l'interprete <TT>java</TT>, la <A HREF="#VM">Virtual Machine</A>,&nbsp;
e l' <A HREF="#API">API</A> implementati da Kaffe.&nbsp;
<BR>Per quanto mi riguarda, ho preferito scaricare il pacchetto <A HREF="#JDK">JDK</A>
(Java Development Kit), e relativa documentazione, distribuito gratuitamente
dalla&nbsp; <A HREF="#Links-Ufficiali">Sun</A>. Il <A HREF="#JDK">JDK</A>
&egrave; un ambiente di sviluppo Java completo; oltre alla Virtual Machine,
all' API, al compilatore <TT>javac </TT>e all'interprete <TT>java</TT>,
ci sono strumenti per il debugging e la generazione automatica di documentazione
per le applicazioni; il&nbsp; <A HREF="#JDK">JDK</A>&nbsp; contiene anche
l' <TT>appletviewer</TT>, attraverso il quale &egrave; possibile far girare
gli applet senza la necessit&agrave; di usare un browser java-compliant.&nbsp;</UL>
&nbsp;
<BR>&nbsp;
<UL>3.1&nbsp;<A NAME="JDK"></A>Come Procurarsi ed Installare il <A HREF="#Links-JDK">JDK</A>&nbsp;</UL>

<UL>Chi sta leggendo questo articolo ha la possibilit&agrave; di accedere
al sito della <A HREF="#Links-Ufficiali">Sun</A> e, quasi sicuramente,
ha a disposizione le risorse necessarie per scaricare&nbsp; il pacchetto
<A HREF="#Links-JDK">JDK</A>, insieme a tutta la documentazione e le informazioni
necessarie per installarlo e configurarlo correttamente.&nbsp;
<BR>Buona fortuna e buon divertimento.&nbsp;</UL>
&nbsp;
<UL>
<LI>
<A NAME="Links"></A>Links</LI>
</UL>

<UL>
<UL>
<LI>
<A NAME="Links-Ufficiali"></A>Siti Ufficiali</LI>

<UL>
<LI>
<A HREF="http://www.sun.com/">Sun</A></LI>

<LI>
<A HREF="http://java.sun.com">Java sul Server Sun</A></LI>
</UL>
&nbsp;
<LI>
<A NAME="Links-HJ"></A>HotJava</LI>

<UL>
<LI>
<A HREF="http://axdel1.bo.infn.it/gianni/links/lk_java.html">HotJava ed
Applets</A></LI>
</UL>
&nbsp;
<LI>
<A NAME="Links-ITL"></A>Italiani</LI>

<UL>
<LI>
<A HREF="http://java.tin.it/">Java su TIN</A></LI>

<LI>
<A HREF="http://www.anfiteatro.it/java.html">Anfiteatro</A></LI>
</UL>
</UL>
&nbsp;
<UL>
<LI>
<A NAME="Links-JDK"></A>Java Development Kit e Relativa documentazione</LI>

<UL>
<LI>
<A HREF="http://java.sun.com/products/jdk/">Il software JDK</A></LI>

<LI>
<A HREF="http://www.javasoft.com/products/jdk/1.1/docs/">Manuale del JDK</A></LI>

<LI>
<A HREF="http://java.sun.com/products/jdk/1.0.2/index.html">Altri documenti</A></LI>
</UL>
&nbsp;
<LI>
<A NAME="Links-API"></A>API tutorial</LI>

<UL>
<LI>
<A HREF="http://keryxsoft.hpl.hp.com/keryx-1.0a/html/API.html">Tutorial&nbsp;</A></LI>
</UL>
</UL>
</UL>

<UL>
<UL>
<LI>
<A NAME="Links-OOP"></A>OOP</LI>

<UL>
<LI>
<A HREF="http://sepwww.stanford.edu/sep/josman/oop/oop1.htm">Manuale sulla
Programmazione Object Oriented</A></LI>

<LI>
<A HREF="http://www.ecok.edu/~jgm/ooplinks.html">Documenti su OOP</A></LI>
</UL>
&nbsp;
<LI>
<A NAME="Link-tutorial"></A>Tutorials e Documentazione</LI>

<UL>
<LI>
<A HREF="http://java.sun.com/docs/books/tutorial/index.htm">Tutorial sul
sito Sun</A></LI>

<LI>
<A HREF="http://java.sun.com/docs/programmer.html">Documentazione per Sviluppatori</A></LI>

<LI>
<A HREF="http://dspace.dial.pipex.com/town/terrace/oz49/java.ht">Con Applet
e Script</A></LI>

<LI>
<A HREF="http://desktoppublishing.com/java.htm">Tutorial Java e altro</A></LI>

<LI>
<A HREF="http://java.sun.com/docs/books/jls">Java Language Specifications</A></LI>

<LI>
<A HREF="http://www.javasoft.com/books/Series">La serie completa di documenti
Sun su Java&nbsp;</A></LI>
</UL>
&nbsp;</UL>

<UL>
<LI>
<A NAME="Links-NewsGroup"></A>News Group e Tutorials</LI>

<UL>
<LI>
<A HREF="http://java.sun.com:81/docs/index.html">Sul Sito Sun</A></LI>

<LI>
<A HREF="http://www.dezines.com/dezines/javalinks.html">Su Dezines</A></LI>
</UL>
&nbsp;
<LI>
<A NAME="Links-Faq"></A>FAQ</LI>

<UL>
<LI>
<A HREF="http://www.aereal.com/faq/">FAQ su Java e Java Script</A></LI>
</UL>
</UL>
&nbsp;
<UL>
<LI>
<A NAME="Links-Sviluppatori"></A>Risorse per Sviluppatori</LI>

<UL>
<LI>
<A HREF="http://www.developer.com/directories/pages/dir.java.html">Risorse
varie per sviluppatori</A></LI>

<LI>
<A HREF="http://developer.javasoft.com/servlet/SessionServlet?action=showLogin&url=/developer/index.html">Altre
risorse</A></LI>

<LI>
<A HREF="../../../../../../../../javaboutique.internet.com/submit.html">Ancora
risorse</A></LI>

<LI>
<A HREF="http://www.javaworld.com/javaworld/apprev/apprev.index.html">Di
nuovo risorse</A></LI>
</UL>
&nbsp;
<LI>
<A NAME="Links-Codice"></A>Codice Sorgente</LI>

<UL>
<LI>
<A HREF="http://www.fccc.edu/users/muquit/Dgclock.html">Clock</A></LI>

<LI>
<A HREF="http://members.aol.com/shadows125/arcade.htm">Giochi</A></LI>

<LI>
<A HREF="http://java.sun.com/applets/js-applets.html">Applets su java.sun.com</A></LI>

<LI>
<A HREF="http://www.neosoft.com/~forge/java/Cartog/Cartog.htm">Cartografia</A></LI>

<LI>
<A HREF="http://www.mit.edu:8001/people/nathanw/java/Tetris.html">Tetris</A></LI>

<LI>
<A HREF="http://java.applets.co.u">Applets vari</A></LI>

<LI>
<A HREF="http://www.csus.edu/org/mathsoc/line_alg.html">Algebra Lineare</A></LI>

<LI>
<A HREF="http://ra.cfm.ohio-state.edu/grad/zhao/algorithms/algorithms.htm">Algoritmi</A></LI>
</UL>
&nbsp;
<LI>
<A NAME="Links-XW"></A>Xwindow</LI>

<UL>
<LI>
<A HREF="http://www.camb.opengroup.org/tech/desktop/x/">X Consortium</A></LI>

<LI>
<A HREF="http://www.eng.usf.edu/EC/training/xwindows/xwindows.html">Xwindow</A></LI>

<LI>
<A HREF="http://www.qpsf.edu.au/mirrors/csep/unix_guide/unix_guide.html">Altri
Documenti su Xwindow e Linux</A></LI>
</UL>

<UL>
<LI>
<A HREF="http://www.gwdg.de/gs-2.0/subsection2_3_4_4.html">Ancora documentazione
su Xwindow</A></LI>
</UL>
&nbsp;</UL>
</UL>


<P ALIGN=RIGHT>di
<A HREF="barbuto@student.dm.unipi.it">Francesco Barbuto</A>
</P>


<HR>
<TABLE BORDER=0 CELLPADDING=0 WIDTH=100%>
<TR>

<TD ALIGN=left BGCOLOR="#ffffff">
<A HREF="gpg.html">
<IMG ALT="[precedente]" SRC="pj_images/a_left.gif" BORDER=0></A>
</TD>

<TD ALIGN=center BGCOLOR="#cccccc">
<FONT COLOR="#00ff00">
<A HREF="gpg.html">GPG</A>
- <A HREF="index.html">Copertina</A> -
<A HREF="gimp.html">GIMP</A>
</FONT>
</TD>

<TD ALIGN=right BGCOLOR="#ffffff">
<A HREF="gimp.html">
<IMG ALT="[successivo]" SRC="pj_images/a_right.gif" BORDER=0></A>
</TD>

</TR>
</TABLE>

</BODY>
</HTML>