Che materia stai cercando?

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


PAGINE

24

PESO

175.70 KB

PUBBLICATO

7 mesi fa


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica
SSD:
Università: Firenze - Unifi
A.A.: 2018-2019

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

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Corso di laurea in ingegneria informatica

Analisi I – prova d'esame
Esercitazione
Fondamenti di Informatica I – Linguaggio C
Dispensa
Fondamenti di Informatica I – Manuale Linguaggio C
Dispensa
Appunti Analisi 1
Appunto