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>
<BR><FONT FACE="Times New Roman,Times">Il presente articolo è
il primo di una serie di contributi dedicati al linguaggio di programmazione;
tali articoli saranno pubblicati sul Pluto Journal. L'intenzione di questo
progetto è, innanzitutto, diffondere la conoscenza e l'uso di Java
sulla piattaforma Linux; dunque, la prospettiva degli articoli sarà
molto generale, almeno per quanto riguarda questa prima serie. Negli articoli
che via via si succederanno si punterà l'attenzione, in modo
particolare, sugli aspetti più 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,
chiunque lo desiderasse potrà approfondire autonomamente quegli
aspetti del linguaggio che, per qualsiasi motivo, più lo interessano
e lo appassionano. Almeno per il momento, dunque, nessuno degli articoli
affronterà gli aspetti più particolarmente attinenti alla
programmazione propriamente detta. Inoltre, nella stesura degli articoli
medesimi si darà per scontata una qualche familiarità con
i linguaggi C/C++ e con gli elementi della programmazione Object Oriented;
tale familiarità, pur non essendo pregiudiziale per la comprensione
degli scritti consentirà, comunque, di seguire l'esposizione con
più agio.</FONT>
<BR>
<BR>
<BR>
<LI>
Caratteristiche di Java</LI>
<P>2.1 Java è un linguaggio OOP
<P>Java è 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
nella possibilità di costruire con un certo agio nuovi tipi di dati,
Java implementa le caratteristiche più proprie e peculiari della
programmazione Object Oriented quali, ad esempio, il <I>multithrading,</I>
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 presente che tale somiglianza è, appunto,
esclusivamente formale (sintattica, per la precisione) e si riferisce unicamente
al modo in cui tali strutture ed operatori appaiono, per così dire,
nel file sorgente.
<BR>Ad esempio, tanto per rendere l'idea, il seguente frammento di
codice Java:
<BR>
<BLOCKQUOTE><TT>for(pluto=1 ; pluto<10 ; pluto++) </TT>
<BR><TT> System.out.println("Java stampa sullo stream out");</TT>
<BR> </BLOCKQUOTE>
<FONT FACE="Times New Roman,Times">in un file sorgente C/C++ apparirebbe
come:</FONT>
<BR>
<BLOCKQUOTE><TT>for(pluto=1 ; pluto<10 ; pluto++) </TT>
<BR><TT> printf("C++ stampa sullo stream out");</TT>
<BR> </BLOCKQUOTE>
Dunque, le somiglianze sintattiche tra Java è 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>
<BR>Occorre prestare attenzione a non confondere Java 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>.
<P>
<P>2.1.1<A NAME="CLass-Object"></A> Java ha Class, oggettivamente
<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 gli aspetti
più avanzati, può seguire il link <A HREF="#Links-OOP">OOP</A>.
<BR>Il concetto di classe è fondamentale nella programmazione Object
Oriented; un oggetto è, in sostanza, una istanza particolare di
una data classe. Una Classe costituisce un <I>modello</I> generale
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.
<BR>Si consideri, ad esempio, un oggetto tipico della vita quotidiana:
il tavolo. A titolo di esemplificazione, le caratteristiche più
generali che individuano e caratterizzano un tavolo possono essere ridotte
alle seguenti:
<BR>
<UL>
<UL>
<UL>
<UL>
<LI>
un piano d'appoggio</LI>
<LI>
quattro gambe</LI>
</UL>
</UL>
</UL>
</UL>
Queste due caratteristiche sono sufficienti per descrivere un tavolo nella
sua forma più generale. In Java, la <I>creazione </I>di un modello
generale per il <I>concetto </I>di tavolo così schematizzato si
attua usando la struttura di Classe; sintatticamente, e nella forma più
semplice, una classe che definisce un tale <I>generico </I>tavolo potrebbe
avere la forma seguente:
<BR>
<BR>
<BLOCKQUOTE><TT>public class Tavolo { </TT>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public int areapiano = 0; // area del piano</TT>
<BR><TT>public int lungamba = 0; // lunghezza delle gambe</TT>
<BR> </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>// Costruttore della Classe </TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo() {</TT>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = 2;</TT>
<BR><TT>this.lungamba = 1; </TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>}</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>}</TT>
<BR>
<BR> </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'è il codice attraverso cui, ogni volta si crei un
Oggetto della Classe <TT>Tavolo</TT>, a tale Oggetto vengono assegnati:
l'area della superficie del piano d'appoggio, in questo caso uguale a 2
volte l'unità di misura di superficie; la lunghezza delle gambe,
pari, nel presente esempio, a 1 volta l'unità di misura di
lunghezza. Tale codice è detto <I>costruttore</I> della Classe e
deve essere dichiarato con lo stesso nome della Classe. Ogni Classe può
avere più di un costruttore, ognuno dei quali può 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à
più generale, la si può dotare di un <I>costruttore </I>attraverso
il quale è possibile, quando necessario, 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:
<BR>
<BR>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo(int sup, int lung) {</TT>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = sup; </TT>
<BR><TT>this.lungamba = lung;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<TT>
}</TT> </BLOCKQUOTE>
<BR>
<P>Il codice della Classe, con entrambi i <I>costruttori</I>, è:
<BR>
<BLOCKQUOTE><TT>public class Tavolo { </TT>
<BLOCKQUOTE><TT>public int areapiano = 0; // area del piano</TT>
<BR><TT>public int lungamba = 0; // lunghezza delle gambe</TT>
<BR> </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>// Costruttori della Classe Tavolo</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo() {</TT>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = 2; </TT>
<BR><TT>this.lungamba = 1; </TT>
<P><TT>}</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>public Tavolo(int sup, int lung) {</TT>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = sup; </TT>
<BR><TT>this.lungamba = lung;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>}</TT>
<BR><TT>}</TT>
<P> </BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
Ora, usando la classe sopra definita, è 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.
<BR>Ad esempio, per creare l' Oggetto (il tavolo) <TT>da-cucina</TT>, di
tipo <TT>Tavolo</TT>, con area della superficie di appoggio di <TT>sup</TT>
volte l'unità di superficie e lunghezza delle gambe di <TT>lung
</TT>volte l'unità di lunghezza, occorre il seguente codice:
<BR>
<BR>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo da-cucina = new Tavolo(sup,lung); </TT>
<BR>
<BR> </BLOCKQUOTE>
</BLOCKQUOTE>
Viceversa, per istanziare un Oggetto con misure <I>standard </I>di 2 e
1, deve essere usato il seguente codice:
<BR>
<P>
<OL>
<OL><TT>public Tavolo da-cucina = new Tavolo();</TT>
<BR>
<P> </OL>
</OL>
Il compilatore individua il particolare <I>costruttore</I> da invocare
dal numero e dal tipo dei paramentri usati nella chiamata alla Classe,
chiamamta con cui 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.
<BR>Dunque, la classe <TT>Tavolo</TT> è un modello attraverso il
quale (istanziadolo opportunamente) si costruiscono gli Oggetti (i
tavoli, per rimanere nella metafora) di tipo <TT>Tavolo; </TT>una Classe
può essere considerata come un <TT>progetto</TT> secondo cui vengono
costruiti gli Oggetti particolari, analogamente a quanto accade nella
realtà, in cui vari esemplari di un determinato prodotto vengono
costruiti a partire da un unico disegno tecnico.
<BR>Oltre agli elementi già 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 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>
<BR>
<BR>
<BR>
<OL><TT>public static void main(String args[]) {</TT> </OL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>if(areapiano == 0)</TT>
<BR><TT> System.out.println("Tavolo senza piano");</TT> </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>if(lungamba == 0)</TT>
<BR><TT> System.out.println("Tavolo senza gambe");</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<TT>}</TT>
<P>
<P>
<BR>La Classe completa ha la forma seguente:
<BR>
<BLOCKQUOTE><TT>public class Tavolo { </TT>
<BLOCKQUOTE><TT>public int areapiano = 0; // area del piano</TT>
<BR><TT>public int lungamba = 0; // lunghezza delle gambe</TT>
<BR> </BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>// Costruttori della Classe Tavolo</TT></BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>public Tavolo() {</TT>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = 2; </TT>
<BR><TT>this.lungamba = 1; </TT>
<P><TT>}</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>public Tavolo(int sup, int lung) {</TT>
<BLOCKQUOTE>
<BLOCKQUOTE><TT>this.areapiano = sup; </TT>
<BR><TT>this.lungamba = lung;</TT></BLOCKQUOTE>
</BLOCKQUOTE>
<TT>}</TT>
<BR>
<BLOCKQUOTE><TT>//Metodi della Classe Tavolo</TT></BLOCKQUOTE>
<TT>public static void main(String args[]) {</TT>
<BLOCKQUOTE> <TT>if(areapiano == 0)</TT>
<BR><TT>System.out.println("Tavolo senza piano");</TT>
<P><TT>if(lungamba == 0)</TT>
<BR><TT> System.out.println("Tavolo senza gambe");</TT></BLOCKQUOTE>
<TT>}</TT>
<BR><TT>}</TT>
<BR> </BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<BR>Si osservi che un programma Java non è, esso stesso, 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>
<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 è solo un modello conformemente al quale gli Oggetti
vengono costruiti per poterne usare i metodi e le strutture dati.
<BR>
<BR>
<P>2.1.2 Java ha, addirittura, una <I><A HREF="#VM">Virtual Machine</A>
...</I>
<P><I>... </I>attraverso cui può girare su tutte le pi...attaforme
hardware. A parte il gioco di parole, la caratteristica più importante
e peculiare dei programmi Java è la assoluta indipendenza
del codice sorgente dalle caratteristiche hardware e software di
un particolare computer; in altri termini, ciò significa che lo
stesso codice sorgente viene compilato ed eseguito, senza necessità
di alcuna modifica, su ogni computer e sotto qualsiasi sistema operativo
per il quale Java sia stato implementato. Tale caratteristica non è,
ovviamente, frutto del caso ma, naturalmente, è il risultato di
un preciso e deliberato proposito: progettare un linguaggio di programmazione,
tale che i programmi scritti con esso potessero essere distribuiti
attraverso una qualsiasi rete, e girassero senza problemi su ciascuna delle
più diverse piattaforme costituenti i nodi della rete medesima.
L'applicazione attualmente più diffusa di questo progetto è
costituita dagli applet Java che girano sotto browser web in cui
siano implementati la Virtual Machine e la libreria API di
Java; un esempio di un tale browser è rappresentato dalle
più 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>
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 le pagine web; le <I>applicazioni</I>,
più complesse e di maggiori dimensioni, sono dei veri e propri programmi,
attraverso i quali si può implementare qualsiasi risorsa
software si desideri: Java è un vero e proprio linguaggio di programmazione!
<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 è implementato sulle diverse piattaforme hardware.
Java è, tecnicamente, una piattaforma software; cioè:
Java è costituito da un insieme di programmi e funzioni di libreria
scritti secondo le caratteristiche e le peculiarità di 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) è 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 risorse messe a disposizione dalla particolare piattaforma
hardware; ad esempio, la libreria <A HREF="#API">API</A> dovrà 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ù 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
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ò girare su piattaforme
completamente diverse, proprio grazie al fatto che la <A HREF="#VM">Virtual
Machine</A> fa da tramite tra il codice del programma (sempre lo
stesso) e le risorse della piattaforma hardware usando gli <I>strumenti
</I>forniti dalla libreria <A HREF="#API">API</A>. 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.
<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, il bytecode viene <FONT COLOR="#000000"><I>interpretato
</I>dalla <A HREF="#VM">Virtual Machine</A></FONT> per produrre i risultati
per cui il programma è 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 usando le risorse del computer attraverso i servizi forniti
dalla libreria <A HREF="#API">API</A>.
<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è
Xwindow e Microsoft Windows sono assolutamente incompatibili, per
portare da Linux a Microsoft Windows un qualsiasi programma dotato di interfaccia
GUI, fatte eventualmente salve incompatibilità di altra natura,
occorre comunque riscrivere completamente l'interfaccia grafica per
adattarla alle caratteristiche delle risorse hardware e software
che implementano la <A HREF="#Links-XW">GUI </A>di Microsoft Windows. Per
Java, tale riscrittura non è necessaria: lo stesso codice sorgente
di un qualsiasi programma viene compilato su ogni piattaforma. In sostanza,
i dettagli per la gestione delle risorse <A HREF="#Links-XW">GUI</A>
implementate di Java sono uguali, dal punto di vista del programmatore,
per ogni sistema, che sia esso Linux o Xwindows, o qualsiasi altra piattaforma;
tali risorse sono implementate attraverso i metodi e le interacce
dell' <B>Abstract Window Toolkit </B>( AWT ); l'<B>AWT </B>fa parte
della libreria<B> </B><A HREF="#API">API</A>.
<BR>
<P>
<BR>2.1.2.1 <A NAME="API"></A>La libreria <A HREF="#Links-API">API</A>
<P>La libreria <A HREF="#Links-API">API </A>(Application Programming Interface)
è 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 <A HREF="#Links-API">API</A>
è uguale su tutte le piattaforme su cui Java è implementato;
naturalmente, a livello macchina piattaforma la libreria è implementata
su ciascuna piattaforma conformemente alle caratteristiche della piattaforma
medesima. La descrizione completa e dettagliata della libreria si trova
nella documentazione fornita insieme al <A HREF="#Links-JDK">JDK</A>.
<BR>
<P>
<BR>2.1.2.2 <A NAME="VM"></A>La Virtual Machine
<P>Come si è detto, la Virtual Machine è 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 una
sorta di interfaccia tra la rappresentazione simbolica, universale e generale
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.
<BR>Ad esempio, nel pacchetto <A HREF="#Links-JDK">JDK</A> 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.
<BR>
<P>
<BR>2.1.3 <A NAME="Skeleton"></A>Scheletro di una tipica applicazione
Java
<P>Per l'apprendimento di un linguaggio di programmazione è molto
utile studiare il codice sorgente di programmi completi; il principale
ostacolo in tal senso, soprattutto per i principianti della programmazione,
è costituito dalla difficoltà di comprendere la funzionalità
e l'organicità del particolare modo in cui sono disposte le varie
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ù 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à la descrizione della struttura di una tipica applicazione
Java.
<UL>
<BR> </UL>
<UL><TT>/* Scheletro di un Programma Java */ </TT>
<BR><TT> </TT>
<BR><TT> </TT>
<BR><TT>/* Inizio Sezione Header Files
*/ </TT>
<P><TT>import java.io.*; </TT>
<P><TT>/*Fine Sezione Header Files */ </TT>
<BR><TT> </TT>
<BR><TT> </TT>
<BR><TT> </TT>
<BR>
<P><TT>/* Dichiarazione della Classe Madre */ </TT>
<P><TT>class Skel{
// da qui comincia la classe principale </TT>
<BR>
<BR>
<P><TT>/* Dichiarazione delle Variabili della Classe
*/ </TT>
<BR><TT> </TT>
<OL>
<OL><TT>//Esempio di dihiarazione di variabili</TT>
<BR> </OL>
</OL>
<TT> public
static int var1 = 0;</TT>
<BR><TT> public
float varfloat = 0;</TT>
<P><TT>/* Fine Sezione Dichiarazione Variabili della Classe */</TT>
<BR>
<BR>
<BR>
<P><TT>/* Inizio Sezione Costruttori della Classe */ </TT>
<BR><TT> </TT>
<UL><TT>public Skel(){</TT>
<P><TT> //corpo del costruttore</TT>
<UL><TT>}</TT>
<BR>
<BR> </UL>
<TT>public Skel(int var, float var){</TT>
<BR>
<UL><TT>// corpo del costruttore</TT>
<P><TT>}</TT></UL>
</UL>
<TT> </TT>
<BR>
<P><TT>/*Fine Sezione Costruttori della Classe */</TT>
<BR>
<BR>
<P><TT>/* ***Inizio Sezione Metodi della Classe*** */</TT>
<P><TT> </TT>
<BR><TT>/*Metodo Principale*/</TT>
<P><TT>public static void main(String args[]) {</TT>
<P><TT>/* Dichiarazione delle Variabili interne del Metodo */ </TT>
<BR>
<BR>
<OL>
<OL><TT>int i = 0; </TT></OL>
<TT> int k = 0; </TT>
<BR> </OL>
<TT>/*Fine Dichiarazione Variabili intenre del Metodo */</TT>
<BR>
<BR>
<P><TT>/*Inizion Corpo del Metodo */</TT>
<BR>
<BR>
<OL>
<OL>
<OL>
<OL><TT>// Esempio di codice</TT>
<BR> </OL>
</OL>
</OL>
</OL>
<TT> </TT>
<BR><TT> </TT>
<BR><TT> do
{ </TT>
<P><TT> System.out.println("\nE'
una bella giornata" + k + ","+i); </TT>
<P><TT>
i += 1 ; </TT>
<BR><TT>
k += 1 ; </TT>
<P><TT>
} </TT>
<P><TT>
while( k + i < 100); </TT>
<BR> <TT>
} </TT> <TT> </TT>
<BR><TT> </TT>
<BR><TT>/* Altri Metodi */ </TT>
<BR><TT> </TT>
<BR><TT>/* ***Fine Sezione Metodi della Classe*** */ </TT>
<P><TT>/* Fine della Classe Principale*/ </TT>
<BR>
<P><TT>} // Qui finisce la Classe Principale e l'applicazione</TT>
<BR>
<BR>
<P><TT>/* Inizio Dichiarazione Di eventuali Classi Accessorie Usate dalla
classe Principale. */ </TT>
<BR>
<BR>
<BR>
<BR>
<P><TT>/* Fine Dell'applicazione o dell'applet */</TT> </UL>
<BR>
<BR>
<LI>
Java sotto Linux</LI>
</OL>
<UL>Avendo dato una panaromica generale relativamente alle caratteristiche
salienti del linguaggio, è ora opportuno puntare l'attenzione sulle
risorse di sviluppo disponibili sotto Linux. Per quanto detto sopra,
lo sviluppo di software Java è indipendente ed autonomo rispetto
alle caratteristiche hardware e software della piattaforma su cui il programma
girerà; lo sviluppatore di software Java non ha alcuna necessità
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.
<BR>Sul mio Pentium ho installato la ditribuzione RedHat 4.2 con
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 l'interprete <TT>java</TT>, la <A HREF="#VM">Virtual Machine</A>,
e l' <A HREF="#API">API</A> implementati da Kaffe.
<BR>Per quanto mi riguarda, ho preferito scaricare il pacchetto <A HREF="#JDK">JDK</A>
(Java Development Kit), e relativa documentazione, distribuito gratuitamente
dalla <A HREF="#Links-Ufficiali">Sun</A>. Il <A HREF="#JDK">JDK</A>
è 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 <A HREF="#JDK">JDK</A> contiene anche
l' <TT>appletviewer</TT>, attraverso il quale è possibile far girare
gli applet senza la necessità di usare un browser java-compliant. </UL>
<BR>
<UL>3.1 <A NAME="JDK"></A>Come Procurarsi ed Installare il <A HREF="#Links-JDK">JDK</A> </UL>
<UL>Chi sta leggendo questo articolo ha la possibilità di accedere
al sito della <A HREF="#Links-Ufficiali">Sun</A> e, quasi sicuramente,
ha a disposizione le risorse necessarie per scaricare il pacchetto
<A HREF="#Links-JDK">JDK</A>, insieme a tutta la documentazione e le informazioni
necessarie per installarlo e configurarlo correttamente.
<BR>Buona fortuna e buon divertimento. </UL>
<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>
<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>
<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>
<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>
<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 </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>
<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 </A></LI>
</UL>
</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>
<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>
<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>
<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>
<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>
</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>
|