Introduzione a Java
Anteprima
ESTRATTO DOCUMENTO
Lezione 1: Introduzione al corso JAVA
1)Breve presentazione del corso
Questo corso è stato progettato con un obiettivo preciso: fornire gli
elementi per apprendere un linguaggio di programmazione. Gli obiettivi
principali di questo corso sono descritti di seguito:
Presentare il materiale un passo alla volta, per consentire di
assimilare facilmente ogni concetto prima di passare a un nuovo
argomento. La presentazione delle varie caratteristiche è stata
ordinata accuratamente in modo che ciascun argomento sia
esposto nella sua interezza prima di vederlo in azione.
Naturalmente questo non è sempre possibile: in questi casi, è
fornita una breve descrizione introduttiva.
Ricorrere a esempi quanto più semplici e brevi possibili. Questo
approccio talvolta impedisce di affrontare problemi derivati dal
mondo reale; tuttavia, il principiante trova più gratificante riuscire
a capire ogni dettaglio di un esempio, che non essere
impressionato dall’ampiezza del problema che viene risolto.
Bisogna anche tenere conto di un serio limite alla quantità di
codice che può essere assimilato in aula. Per questa ragione
l’autore si aspetta di ricevere critiche per i suoi “esempi
giocattolo”, ma è pronto ad affrontarle per realizzare un prodotto
utile anche dal punto di vista pedagogico.
Fornire le competenze importanti ai fini della comprensione del
linguaggio. Mettere a fuoco ogni sezione, in modo che il tempo
richiesto per la lettura e quello necessario per eseguire le
esercitazioni siano contenuti.
Fornire una base solida che consenta di assimilare gli argomenti in
modo adeguato prima di passare a corsi più approfonditi.
2)Linguaggio di alto livello
La maggior parte dei linguaggi di programmazione moderni è stata
progettata per essere facile da utilizzare e comprendere; per questo
motivo, tali linguaggi vengono definiti linguaggi di alto livello. Java è un
linguaggio di alto livello, cosi come la maggior parte dei linguaggi di
programmazione più diffusi, come Visual Basic, C++, C#, Python o Ruby.
Ma, sfortunatamente, l’hardware dei computer non è in grado di
comprendere direttamente i linguaggi di alto livello. Prima che un
programma scritto in un linguaggio di alto livello possa essere eseguito da
un computer, questo deve essere tradotto in un altro linguaggio,
comprensibile per il computer.
Il linguaggio che il computer è in grado di comprendere è chiamato
linguaggio macchina. Il linguaggio assembly è una rappresentazione
simbolica del linguaggio macchina, più semplice da interpretare da parte
di una persona. Di conseguenza, il linguaggio assembly corrisponde in
parte al linguaggio macchina, ma necessita comunque di alcune piccole
trasformazioni prima di poter essere interpretato dal computer. Questi tipi
dì linguaggi sono definiti linguaggi di basso livello. La traduzione di un
programma da un linguaggio di alto livello, come Java, a un linguaggio di
basso livello viene effettuata interamente o in partee da un altro
programma. Per alcuni linguaggi di alto livello, questa traduzione viene
effettuata da un programma detto compilatore. Il compilatore elabora il
programma scritto in linguaggui di alto livello in modo che possa essere
eseguito sul computer. Questa operazione è detta compilazione del
programma. Una volta compilato, è possibile eseguire il programma
risultante quante volte si vuole, senza doverlo ricompilare. La
terminologia usata potrebbe generare un po’ di confusione, in quanto sia
l’input che l’output del compilatore sono programmi. Per evitare di
confondere le idee, il programma di input per il compilatore verrà
chiamato programma sorgente, detto anche codice sorgente o source
code. Il programma in linguaggio macchina generato dal compilatore
verri chiamato programma oggetto o codice oggetto. La parola codice in
questo caso indica l’intero programma o una sua parte.
3) Strumenti per la generazione di codice JAVA
3.1) il compilatore
Un compilatore c un software che traduce un programma scritto in un
linguaggio di alto livello (come Java), in un programma in un linguaggio
più semplice che il computer è in grado di comprendere
direttamente.Alcuni linguaggi di alto livello non vengono tradotti da
compilatori, ma da un altro tipo di programmi, detti interpreti. Come un
compilatore, un interprete traduce le istruzioni di un programma da un
linguaggio di alto livello a un linguaggio di basso livello. Ma, a differenza
di un compilatore, un interprete esegue ogni singola porzione di codice
subito dopo averla tradotta, invece di tradurre l’intero programma in una
sola passata. Utilizzare un interprete significa che mentre si esegue un
programma, la traduzione si alterna all’ esecuzione. Inoltre, la traduzione
viene ripetuta a ogni esecuzione del programma. La compilazione viene
invece svolta una volta sola e il risultante codice oggetto può essere
eseguito un numero indefinito di volte, senza impiegare nuovamente il
compilatore. La conseguenza è che un programma compilato viene
solitamente eseguito più velocemente di un corrispondente programma
interpretato.
3.2) L'interprete
Un interprete è un programma che alterna la traduzione all’esecuzione
delle istruzioni di un programma scritto in un linguaggio di alto livello.
Uno svantaggio dei processi appena descritti per la traduzione di
programmi scritti in linguaggio di alto livello consiste nel fatto che
occorre un compilatore o un interprete differente per ogni tipo di
linguaggio o di computer che si sta utilizzando. Se si volesse eseguire lo
stesso codice sorgente su tre diversi tipi di computer, occorrerebbe
utilizzare tre diversi compilatori o interpreti. Se poi qualcuno sviluppasse
un tipo di computer completamente nuovo, un gruppo di sviluppatori
dovrebbe scrivere un nuovo compilatore o interprete per quel computer.
Questo costituisce chiaramente un problema, poiché compilatori c sono
programmi di grandi dimensioni, difficili da sviluppare e quindi costosi.
Al contrario di linguaggio puramente compilati, come il c, il java utilizza
un approccio leggermente diverso e più versatile, e combina compilazione
c interpretazione. Tale approccio è di seguito descritto
3.3) Bytecode lava
Il compilatore Java non traduce il programma nel linguaggio macchina
specifico del computer su cui è stato compilato, ma lo traduce in un
linguaggio detto bytecode. Il bytecode non è un linguaggio macchina di
alcun computer. È, invece, un linguaggio macchina di una macchina
virtuale (un computer virtuale) simile a tutti quelli più diffusi. Tradurre un
programma scritto in bytecode nel linguaggio macchina di un computer
effettivo è abbastanza semplice. Il programma che effettua questa
traduzione è una specie di interprete chiamato macchina virtuale Java
{Java Virtual Machine — JVM). La macchina virtuale Java ha quindi il
compito di tradurre ed eseguire il bytecode Java.Per eseguire un
programma Java su un computer occorre procedere come segue: in primo
luogo si utilizza il compilatore per tradurre il programma sorgente Java
nel bytecode corrispondente. Successivamente si utilizza la macchina
virtuale Java del computer specifico per tradurre ciascuna istruzione
bytecode in linguaggio macchina e per eseguire le istruzioni in linguaggio
macchina. L’intero processo è illustrato in Figura 1
In base a quanto descritto, sembra che il bytecodc Java si limiti ad
aggiungere un nuovo passo al processo. Perché, quindi, non scrivere
compilatori che traducano direttamente il codice da Java al linguaggio
macchina del sistema specifico. Questo può essere fatto ed è quello che
viene fatto per molti altri linguaggi di programmazione. Inoltre, questo
approccio permetterebbe di generare programmi oggetto molto più
rapidamente. Tuttavia, il byte- code Java dona a Java un vantaggio
imporrante; la portabilità. Dopo aver compilato il programma Java in
bytecode, è possibile eseguire quel programma su qualsiasi computer
dotato di una macchina virtuale Java, senza bisogno di ricompilarlo.
Questo vuol dire che c possibile inviare il bytecode a un altro computer
attraverso Internet e aspettarsi che questo venga eseguito,
indipendentemente dal sistema operativo che viene utilizzato sul
computer remoto. Questo è uno dei motivi per cui Java è particolarmente
utile per lo sviluppo di applicazioni Internet.
La portabilità presenta un ulteriore vantaggio. Quando un’azienda
produce un nuovo tipo di computer, gli sviluppatori Java non sono
costretti a creare un nuovo compilatore. Il compilatore Java, infatti,
genera bytecode che può venir eseguito su tutti i computer. Ovviamente
ogni tipo di computer deve avere il proprio interprete di bytecode, la
macchina virtuale Java, che traduce le istruzioni bytecode in istruzioni
macchina per quel computer specifico, ma questi interpreti sono molto piu
semplici da sviluppare rispetto a un compilatore. Java può quindi essere
aggiunto a un nuovo sistema in modo molto semplice e a un costo
contenuto. Ovviamente ciascun tipo di computer impiegherà un proprio
traduttore, detto interprete, che traduce le istruzioni bytecode in istruzioni
nel linguaggio macchina specifico per quel computer. E importante
conoscere l’esistenza del bytecode, ma nella quotidianità della
programmazione non d si accorgerà neppure delia sua presenza.
Normalmente si utilizzeranno due comandi: uno per compilare il
programma sorgente Java nel corrispondente bytecode e l'altro per
eseguire il programma. Il comando di esecuzione indica all’interprete di
eseguire il javadoc; sarà tutto trasparente il fatto che il bytecode debba
essere interpretato prima di essere eseguito.
4 Class Loader
Solo raramente un programma Java è contenuto in un unico file di codice
sorgente. Al contrario, tipicamente consiste di diverse porzioni, dette
classi. Si parlerà in dettaglio delle classi più avanti; per ora e sufficiente
pensare alle classi come a porzioni di codice. Le classi sono spesso scritte
da autori diversi e ciascuna classe viene compilata separatamente e
tradotta quindi in un diverso frammento di bytecode. Per eseguire il
programma, i bytccodc delle diverse classi devono essere collegati fra
loro. L’operazione di collegamento viene svolta da un programma detto
class leader (letteralmente ‘‘caricatore delle classi”). L’operazione di
collegamento è tipicamente svolta in maniera automatica. In altri
linguaggi di programmazione, il programma corrispondente al class
loader prende il nome di linker.
5)Caratteristiche del linguaggio JAVA
In questa sezione verranno descritte alcune delle caratteristiche del
linguaggio Java e verrà esaminato un semplice programma. I dettagli del
linguaggio saranno approfonditi nelle successive lezioni.
5.1 Applicazioni e applet
Ci sono due tipi di programmi Java: le applicazioni e le appiet; L’unica
differenza consiste nel fatto che le applicazioni sono concepite per esser
eseguite localmente su un computer, mentre le applet sono pensate per
essere inviate via Internet ed eseguite in un computer remoto.
5.2 II primo programma java
Chi utilizza il programma potrebbe essere la stessa persona che lo ha
scritto. Per esempio, spesso uno studente ricopre sia il ruolo di
programmatore, sia quello di utente; ma, nella quotidianità,
programmatore e utente sono di solito due persone diverse.
La prima riga:
import java.util.Scanner;
indica al compilatore che questo programma usa la classe Scanner. Per il
momento è possibile pensare a una classe come a un frammento di codice
che è possibile usare in un programma. Questa classe è definita nel
package java.util (abbreviazione per “Java utility”). Un package è una
libreria di classi che sono state definite in precedenza.
Le righe rimanenti definiscono la classe Main che si estende dalla prima
parentesi graffa aperta, {, all’ ultima parentesi graffa chiusa,}:
Tra le parentesi graffe ci sono una o più porzioni di codice, denominate
metodi. Ogni applicazione Java ha un metodo chiamato main e altri
metodi. La definizione del metodo main si estende da una seconda
parentesi graffa aperta, fino alla corrispondente parentesi graffa chiusa.
public static void main(String [args]) {
}
Le parole public static void sono necessarie, ma resteranno per ora un
mistero Le prime tre istruzioni del metodo main sono le prime azioni
svolte da questo programma;
System.out.println("Ciao ");
System.out.println("Esegui la somma di due numeri");
System.out.println("Digita entrambi i numeri sulla stessa
Ciascuna di queste istruzioni inizia con System.out.println e mostra su
una stessa riga ciò che si trova all’interno di una coppia di parentesi tonde
e specificato fra doppi apici.
Per esempio, l’istruzione;
System.out.println("Ciao ");
presenta sullo schermo la riga:
"Ciao"
Per il momento si può considerare che System.out.println sia un modo per
dire al computer ""Mostra sullo schermo quanto è contenuto tra le
parentesi”. Tuttavia, è utile introdurre un po’ di terminologia. Per eseguire
le azioni, i programmi Java utilizzano oggetti software, detti più
semplicemente oggetti. Le azioni sono definite da metodi. System.out è
un oggetto utilizzato per inviare un output sullo schermo; println è il
metodo che esegue questa azione e viene invocato dall’oggtto System.
out. In altre parole, println invia allo schermo cio che è specificato
all’interno della coppia di parentesi tonde. L’elemento o gli clementi tra
parentesi sono detti argomenti e forniscono al metodo l’informazione di
cui necessita per eseguire l’operazione richiesta.
In ciascuna di queste tre istruzioni, l’argomento del metodo println è una
stringa di caratteri racchiusa tra doppi apici. Questo argomento è ciò che
println scrive sullo schermo.
Un oggetto esegue un’azione quando viene invocato (o chiamato) uno dei
suoi metodi. In un programma java si ottiene un'invocazione di metodo (o
chiamata di metodo/ scrivendo il nome dell’oggetto, seguito da un punto
(chiamato, in gergo, dot), e dal nome del metodo e infine da una coppia di
parentesi tonde. All’interno delle parantesi possono essere anche definiti
più argomenti.
Le istruzioni:
int n1;
int n2;
dicono che ni e n2 sono i nomi di due variabili. Una variabile può
memorizzare dati. Il termine int indica che i dati devono essere di tipo
intero, cioè numeri interi; int è un esempio di tipo di dato {data type). Un
tipo di dato (o semplicemente tipo) specifica l’insieme dei valori possibili
e le operazioni definite per questi valori, i valori dì un particolare tipo di
dato sono immagazzinati in memoria nel medesimo formato.
La riga successiva:
Scanner tastiera = new Scanner(System.in);
abilita il programma ad accettare, o leggere, i dati che l'utente inserisce
tramite la tastiera. La riga successiva:
n1=tastiera.nextInt();
legge il numero che è stato digitato alla tastiera c lo memorizza nella
variabile n1. La riga successiva è pressoché simile, tranne per il latto che
il numero digitato alla tastiera viene memorizzato nella variabile n2.
Infine, le istruzioni
System.out.println("Ciao ");
System.out.println("Esegui la somma di due numeri");
mostrano rispettivamente una frase esplicativa e la somma dei numeri
memorizzati nelle variabili ni e n2. Si sottolinea che la seconda riga
contiene la variabile e non una stringa di caratteri racchiusa fra apici (o
“quotati"). Questa espressione computa la somma dei numeri memorizzati
nelle variabili ni e n2. Quando un’istruzione di output come questa
contiene un numero o un’espressione che produce come risultato un
numero, questo viene mostrato sullo schermo.
Si noti che ciascuna invocazione di println mostra l’output su una riga
distinta. Rimane da spiegare il significato del punto e virgola specificato
alla fine solo di alcune righe. Il punto e virgola ha il ruolo di carattere di
terminazione, come il punto in una frase italiana. Un punto e virgola
termina quindi un’istruzione.
Chiaramente Java adotta regole precise, che indicano come si devono
scrivere le varie parti di un programma. Queste regole costituiscono la
grammatica del linguaggio, esattamente come le regole dell’italiano. Le
regole grammaticali di un linguaggio, sia esso un linguaggio naturale o un
linguaggio di programmazione, formano la sintassi del linguaggio.
5.3Invocare un metodo
Un programma Java utilizza oggetti per eseguire azioni che sono definite
da metodi. Un oggetto esegue un azione quando si effettua
un’invocazione, o una chiamata, a uno dei suoi metodi. Di solito
l’invocazione viene specificata in un programma scrivendo il nome
dell’oggetto, seguito da un punto, detto dot in inglese, seguito dal nome
I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher deviltrigger di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Firenze - Unifi o del prof Berretti Stefano.
Acquista con carta o conto PayPal
Scarica il file tutte le volte che vuoi
Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato