Staroffice 4 - Copertina - Indice |
Articoli
Seconda parte
Perché Java?
Nell'articolo Java sotto Linux si sono descritti, in termini
molto generali, le caratteristiche peculiari del linguaggio; tale
primo articolo, che dà il titolo e l'avvio alla serie di scritti
su Java, è stato pubblicato nel numero di Maggio 1998 del Pluto
Journal. In particolare, in quel primo articolo è stato indicato
il modo in cui procurarsi tutto il software e la documentazione necessari
per installare e configurare la Virtual Machine
e la libreria API di Java e, inoltre, sono stati
forniti alcuni links a documentazione e codice sorgente disponibili gratuitamente
su Internet; tali strumenti sono necessari (e largamente sufficienti)
a chiunque desideri studiare Java usando la ricchissima messe di
documentazione e software disponibile gratuitamente su Internet.
Il presente articolo, il Secondo della Serie, riprenderà i concetti
fondamentali della programmazione Object Oriented, completando con maggiore
dettaglio, e con una prospettiva più ampia, i brevi cenni
tecnici dati nel primo articolo; inoltre, si affronteranno alcune considerazioni
di natura filosofica (per così dire ...) riguardo alle potenzialità
ed alla ambizione di Java; insomma: i fini ed i mezzi del
linguaggio.
Nel primo articolo, per descrivere ed esemplificare il conceto di Classe,
si è fatto riferimento ad un oggetto concreto della vita
quotidiana: un generico tavolo. Naturalmente, una Classe è
una struttura, costruita con un preciso ordine, contenente dati e algoritmi
concepiti appositamente e particolarmente per elaborare proprio i
dati medesimi della Classe; in quanto tale, una Classe può rappresentare
qualsiasi concetto, che abbia o meno una corrispondenza concreta
nella realtà. Ad esmpio, una Classe può rappresentare il
modello per una matrice quadrata di ordine n
, in termini di strutture
dati ed algoritmi per elaborare tali dati; in tal caso, i metodi (algoritmi
e procedure) della Classe potrebbero essere algoritmi per calcolare, ad
esempio, la traccia o il determinante o gli autovalori, etc., della matrice;
istanziando una tale Classe, si ottengono Oggetti che, concettualmente,
si comportano come matrici: sono matrici che possiedono, all'interno
della loro struttura (organismo) gli strumenti per elaborare (conoscere)
se stesse. Dunque, un Oggetto ha una esistenza propria ed, entro certi
limiti, autonoma; esso concede i propri servigi a qualsiasi altro Oggetto
glieli richieda invocandone gli strumenti (metodi) per elaborare
i propri dati; l'Oggetto invocato memorizza nelle sue strutture dati interne
le informazioni passategli dall'Oggetto richiedente il quale, inoltre,
indica la procedura (il metodo) con cui desidera che l'Oggetto invocato
elabori i dati passatigli; quest'ultimo esegue il metodo richiesto sui
dati ricevuti e fornisce il risultato dell'elaborazione all'Oggetto richiedente.
L'esecuzione di un programma Java può essere schematizzato come
una rete di relazioni tra tutti gli Oggetti che concorrono e collaborano
alla elaborazione di determinati dati; i fili di una tale rete
di relazioni sono costituiti dai messaggi, dalle chiamate e dal
ritorno di dati che gli Oggetti si scambiano vicendevolmente. Il flusso
e la diramazione del processo di elaborazione viene diretto dal metodo
main
della Classe madre, ovvero: dal metodo principale della Classe
principale del programma; tale classe coincide, formalmente e sostanzialmente,
con il programma medesimo; la Classe principale è il programma,
ed essa ha, appunto, lo stesso nome del file sorgente.
Ora, la libreria API di Java implementa
(come Classi, Metodi ed Interfacce) la suite TCP/IP
dei protocolli di comunicazione e, quindi, Java può aprire una connesione
su Internet per collegarsi a qualsiasi nodo della rete; quindi, una Classe
usata da un programma Java non deve necessariamente risiedere sulla macchina
su cui gira il programma: la Classe può essere definita in una libreria
residente su qualsiasi macchina accessibile attraverso Internet per
mezzo di un protocollo di rete come TCP/IP.
2.2 La Libreria API
La libreria API non è altro che un
insieme di Classi che implementano, in codice macchina nativo, le funzioni
necessarie per usare le risorse software ed hardware di una determinata
piattaforma. Analogamente a come accade per le Classi scritte dal programmatore,
per usare le risorse della libreria API occorre
instanziarne in Oggetti le Classi di cui si necessita; attraverso tali
Oggetti si accederà alle risorse della piattaforma su cui il programma
gira. Ad esempio, per manipolare un file occorre innanzitutto creare
un Oggetto di tipo file, istanziando l'apposita Classe della libreria API;
quindi, usando i metodi e le strutture di un tale Oggetto, si possono
creare file, aprirli, leggerli, cancellarli, aggiornarli, etc. Insomma,
la Classe (e quindi l'Oggetto da essa istanziato) contiene tutti
i metodi (funzioni) necessari per operare su un file.
2.2 La Mente della Rete (... Fini)
La implementazione del concetto di Classe, e quindi di Oggetto, costituise,
a mio avviso, la caratteristica più interessante e più promettente
dei linguaggi OOP in generale e, in particolare, di Java. In particolare,
la spiccata caratterizzazione di Java come linguaggio multipiattaforma
rende tale linguaggio lo strumento ideale per la realizzazione di
applicazioni distribuite su Internet, essendo Internet costituito dalla
più diverse e varie piattaforme hardware e software: attualmente,
da questo punto di vista, nessun linguaggio di programmazione può
competere con Java. Gli Oggetti e le Classi di Java possono essere suggestivamente
paragonati a cellule distribuite sulle macchine che costituicono Internet;
tali cellule potrebbero essere collegate vicendevolmente attravarso
Internet e costituirebbero gli elementi specializzati intelligenti (concetti,
nozioni, relazioni logiche) di un struttura (la mente di Internet) che
si estenderebbe attraverso tutta la vastita della rete.
javac
non genera file oggetto in codice macchina nativo, ma una rappresentazione
intermedia del file sorgente; tale rappresentazione intermedia è
detta bytecode. Successivamente, il bytecode viene interpretato attraverso
l'interprete di Java, invocato con il comando java
. È evidente,
dunque, come dal punto divista della velocità di esecuzione Java
è penalizzato proprio dalla sua stessa progettazione: le caretteristiche
che lo rendono unico come linguaggio multipiattaforme sono la causa del
suo principale e fondamentale limite.
API: cfr. l'articolo Java sotto Linux, pubblicato sul Pluto Journal del Maggio 1998
Virtual Machine: ibidem
Staroffice 4 - Copertina - Indice |