CHE COS’È JAVA - webalice.it introduzione2.pdf · PATH e CLASSPATH • Cosa è una variabile di...

46
CHE COS’È JAVA È un linguaggio (e relativo ambiente di programmazione) definito dalla Sun Microsystems … … per permettere lo sviluppo di applicazioni sicure, performanti e robuste su piattaforme multiple, in reti eterogenee e distribuite (Internet)

Transcript of CHE COS’È JAVA - webalice.it introduzione2.pdf · PATH e CLASSPATH • Cosa è una variabile di...

CHE COS’È JAVA

• È un linguaggio (e relativo ambiente di programmazione) definito dalla Sun Microsystems …

• … per permettere lo sviluppo di applicazioni sicure, performanti e robustesu piattaforme multiple, in reti eterogeneee distribuite (Internet)

IL LINGUAGGIO JAVA: CARATTERISTICHE

• Semplice e orientato agli oggetti• Interpretato• Architetturalmente neutro e portabile• Robusto • Distribuito• Sicuro• Dinamico• Ad elevate prestazioni• Concorrente (multithread)

SEMPLICE E OO

• Sintassi simile a C e C++ (facile da imparare)• Elimina i costrutti più "pericolosi" di C e C++

– aritmetica dei puntatori– (de)allocazione esplicita della memoria– strutture (struct)– definizione di tipi (typedef)– preprocessore (#define)

• Aggiunge garbage collection automatica• Conserva la tecnologia OO di base di C++• Rivisita C++ in alcuni aspetti (C++--==)

• Il compilatore produce un codice di tipo intermedio per una “Java VirtualMachine” (“byte-code”) ...

• … che viene interpretato

INTERPRETATO

codicesorgentecodice

sorgente byte codebyte codecompilatorecompilatoreinterpreteinterprete

BYTECODE: ESEMPIOvoid spin ( ) {

int i;for (i = 0; i < 100; i++) {

;}

} 0 iconst_0 // push int constant 01 istore_1 // store into local 1 (i=0)2 goto 8 // first time, don’t increment5 iinc 1 1 // increment local i by 1 (i++)8 iload_1 // push local 1 (i)9 bipush 100 // push int constant (100)11 if_icmplt 5 // compare, loop if < (I<100)14 return // return void when done

ARCHITETTURALMENTE NEUTRO

• Il byte-code è indipendente dall’architettura hardware (ANDF: Architecture Neutral Distribution Format)

• Pertanto, un programma bytecode può essere eseguito su qualsiasi sistema su cui giri un ambiente run-time Java

ESEMPIOSistema tradizionale

codicesorgentecodice

sorgente

eseguibilemacchina Aeseguibile

macchina Acompilatoremacchina A

compilatoremacchina A

Sistema ANDF

eseguibilemacchina Beseguibile

macchina B

compilatoremacchina B

compilatoremacchina B

…….

codicesorgentecodice

sorgente byte codebyte code

compilatoremacchina A

compilatoremacchina A

compilatoremacchina B

compilatoremacchina B

…….

interpretemacchina Ainterprete

macchina A

interpretemacchina Binterprete

macchina B

…….

ESEMPIO

• Il formato dei dati è specificato esattamente, e non “di minima”, come nel C:

– byte 8 bit complemento a 2– short 16 bit “– int 32 bit “– long 64 bit “– float 32 bit IEEE 754 floating– double 64 bit “– char 16 bit Unicode

• Il sistema Java (compilatore + interprete + librerie run-time) è facilmente portabile su piattaforme diverse

PORTABILE

– il compilatore Java è scritto in Java– l’ambiente run-time è scritto in ANSI C con interfacce

standard (POSIX) verso il sistema operativo– nessuna “implementation dependency”

codicesorgentecodice

sorgente byte codebyte codecompilatorecompilatore interpreteinterprete

librerialibreria S.O.

ROBUSTO

• Controlli estensivi a compile-time e a run-time, per rilevare gli errori quanto prima possibile (es.: typechecking)

• Per questo, le caratteristiche insicure di C e C++ sono rimosse:

– Nessuna gestione esplicita dei puntatori (no aritmetica dei puntatori, no malloc e free esplicite, …)

– Gestione della memoria con garbage collection– Array e stringhe “veri”

• Verifica del byte-code a load-time

DISTRIBUITO

• Pensato per essere eseguito in rete• L’ambiente run-time incorpora funzioni di

rete (sia di basso livello: TCP/IP, che di alto livello: HTTP, …)

• La rete è facilmente accessibile (come i file locali)

SICURO

• L’ambiente di esecuzione si protegge da bytecode potenzialmente “ostile”

• Esempi:– il bytecode viene verificato prima dell’interpretazione

(“theorem prover”), in modo da essere certi di alcune sue caratteristiche

– gli indirizzamenti alla memoria nel bytecode sono risolti sotto il controllo dell’interprete

COMPILE-LOAD-RUN

CompilatoreCompilatore

Byte-codeJava

Byte-codeJava

Rete

hardwarehardware

Loaderdelle classi

Loaderdelle classi

InterpreteInterprete

Ambienterun-time

Ambienterun-time

Verifica delbyte-code

Verifica delbyte-code

SorgenteJava

SorgenteJava

ELEVATE PRESTAZIONI

• La verifica del bytecode permette di saltare molti controlli a run-time: l’interprete è pertanto efficiente

• Per maggiore efficienza, possibilità compilazione on-the-fly del bytecode in codice macchina

COMPILAZIONE ON-THE-FLY

CompilatoreCompilatore

Byte-codeJava

Byte-codeJava

Rete

hardwarehardware

Loaderdelle classi

Loaderdelle classi

InterpreteInterprete

Ambienterun-time

Ambienterun-time

Verifica delbyte-code

Verifica delbyte-code

SorgenteJava

SorgenteJava

Generatoredi codice

Generatoredi codice

DINAMICO

• Il codice è eseguibile anche in assenza di alcuni moduli:

• … le classi necessarie per la esecuzione di un programma Java possono essere caricate e collegate dinamicamente quando servono

Esempio: nuove release di moduli caricabili automaticamente dalla rete quando servono

CONCORRENTE

• Multithreading parte integrante del linguaggio:– Applicazioni interattive più facili a scriversi– Migliore "reattività" (anche se non real-time)

Esempio: caricamento asincrono di immagini nei browser di rete riduce i tempi di attesa

RICCO

La Standard Library Java contiene una ricca collezione di classi e di metodi preconfezionati:

–Language support–Utilities–Input/output–Networking–Abstract Window Toolkit (AWT)

JAVA E INTERNET

WEB BROWSER E SERVER

HTTP used overthis TCP connection

Internet

Disk Disk

Hyperlink

to xyz.com

HTTPServer

HTTPServer

Client

Server abc.com Server xyz.com

Browserprogram

URL: Uniform Resource Locator

<protocollo> :// <nome del server> <nome del file>

Esempio:http://www.dsi.unimi.it/DSI/corsi/programmi/F2

8005/index.htmldeve essere risolto in un indirizzo internet (IP) con l’aiuto di un DomainName Server (DNS)

HTML: ESEMPIO<HTML><HEAD>

<TITLE> Esempio </TITLE> Esempio</HEAD> Testo<BODY> DSI

<P>Testo<A HREF=“http://www.dsi.unimi.it”> DSI </A>

</BODY></HTML>

APPLET JAVA

• Sono programmi Java riferiti da link in pagine HTML

• Vengono caricati e interpretati dal browser (se questo supporta Java)

• Permettono di “animare” le pagine web

HTML con APPLET: ESEMPIO<HTML><HEAD>

<TITLE> Esempio </TITLE> Esempio</HEAD> Testo<BODY> Hallo!

<P>Testo<APPLET CODE=“HelloWorld.class WIDTH=300 HEIGHT=80> Qui c’è un applet che ti saluta</APPLET>

</BODY></HTML>

testo che esce se il browser non supporta gli applet

JAVA BROWSER

httpclient

ftpclient

ftpclient

javaloader

UI library

TCP / IP

interpreteJAVA

I/Olibrary

local disk

rete

interpreteHTML

UN NUOVO PARADIGMA:NETWORK COMPUTING

Approccio tradizionale

Network computing

PROGRAMMIDATI

RETE

PROGRAMMI E DATI

RETE

PC

NC

loadand run

“Installazione del kit di sviluppo di Java (SDK) ed esecuzione del primo programma”

Installazione del JDK sul disco fisso

• Ricerca o download dell’eseguibile JDK

• Doppio click sull’icona del file

A questo punto partirà la procedura automatica d’installazione. Seguire le istruzioni a video.

Installazione del JDK sul disco fisso

Se l’installazione va a termine correttamente sul disco fisso sarà presente la directory Jdk1.X.X con le seguenti sotto directory:

• bin, contente il compilatore e gli altri eseguibili;• demo, contente alcuni demo;• lib, etc.• jre: contiene l’interprete, estensioni, ed altre

informazioni di configurazione• docs: contiene la documentazione (N.B.: da

scaricare separatamente)

PATH e CLASSPATH

• Cosa è una variabile di ambiente:– Una variabile del sistema operativo e visibile da tutte

le applicazioni– Può essere settata temporaneamente in una finestra– Può essere settata per l’intero sistema

• PATH: contiene la lista delle directory dove il sistema operativo cerca i comandi da eseguire

• CLASSPATH: contiene la lista delle directory dove il compilatore java e l’interprete cercano le classi

• JAVA_HOME: per far sapere ad applicazioni che utilizzano JAVA dove si trova la cartella di

Aggiornamento delle variabili di ambiente

Prima di poter scrivere ed eseguire un programma Java è necessario aggiornare le variabili di ambiente per permettere al sistema operativo di trovare il compilatore Java e le classi di sistema.Bisogna aggiornare quindi il PATH e aggiungere una variabile di ambiente detta CLASSPATH

2.1- Aggiunta nel Path di Jdk\bin

La procedura è leggermente diversa a seconda del sistema operativo adoperato:

• Sotto Windows 98 si deve inserire nella variabile path dell’AUTOEXEC.BAT il percorso “drive”:\jdk1.XX\bin. Ad esempio la linea

set path= C:\WINDOWS;C:\WINDOWS\COMMAND;

diventa:Set path=C:\WINDOWS;C:\WINDOWS\COMMAND;c:\jdk1.XX\bin

Aggiunta nel Path di Jdk\bin

• Sotto Windows XP/2000 si deve aprire il control panel, selezionare System (o Sistema nella versione Italiana), quindi Environment (o Ambiente). Scorrere la lista fino a trovare la variabile chiamata PATH e aggiungere il testo “drive”\jdk1.XX\bin all’inizio o alla fine della linea.

Dove “drive” è il disco su cui si è installato il Jdk

Attenzione il Sistema Operativo cerca in Ordine …..!!!!

2.2-Aggiunta della variabile ClassPath

La procedura è identica al caso precedente, con la differenza che la variabile d’ambiente deve essere aggiunta in quanto non presente in genere fra quelle standard.

Sotto Win98 quindi bisogna aprire l’AUTOEXEC.BAT e aggiungere la linea:SET CLASSPATH=.;c:\Nome_dir_lavoro\

Aggiunta della variabile ClassPath

• Sotto WinXP/2000 bisogna aprire il pannello di controllo, quindi aprire l’icona System e selezionare la scheda Environment . Nel campo Variabile scrivere:

CLASSPATHNel campo valore:

.;c:\Nome_dir_lavoro\

Aggiunta della variabile ClassPath

Con il punto s’indica al compilatore Java di cercare le eventuali altre classi nella stessa directory dove si trova il file sorgente.

La stringa “Directory_Lavoro” si dovrà sostituire con il nome dato alla directory che conterrà i file .class (mentre inserire il punto nel ClassPath è necessario, indicare una directory di lavoro è opzionale)

Scrittura del programma di esempio

Il modo più semplice per editare un file sorgente Java è quello di adoperare un programma di scrittura come Notepad o WordPad di Windows.

Supponiamo di voler scrivere il seguente programma Java, che stampa a video un messaggio di saluto:

Testo del primo programma

public class HelloWord{

public static void main (String[] args){System.out.println(“Hello world”);}

}

Generazione del bytecode

Una volta scritto con un editor il testo si salvi il file con ilnome HelloWorld.java (in Java è obbligatorio chiamare il file sorgente con lo stesso nome della classe che contiene il main).

N.B.: Visualizza estensioni

Aprire una finestra Dos, posizionarsi nella directory dove si è salvato il file sorgente e lanciare il “Compilatore” (in realtà non è un vero compilatore in quanto non genera codice oggetto ma bytecode).

3.2-Generazione del bytecode

Il comando da eseguire è:

javac HelloWorld.java

Si ricorda che Java distingue tra maiuscole e minuscole, quindi i nomi helloWorld, helloworld e Helloworld sono tutti e tre errati.

•Perche trova javac ?•Perche trova HelloWord. java?

3.3-Esecuzione del bytecodePer eseguire il file HelloWorld.class generato si deve lanciare la Java Virtual Macchine.Il comando da adoperare sarà:

java HelloWorld

Si noti che non deve essere presente l’estensione .class

•Perche trova java ? Quale Java usa ?•Perche trova HelloWord ?•Se mi trovassi altrove ?

4-Un altro esempio

In questo secondo esempio si adopererà la libreria grafica di Java, creando una dialogbox per l’immissione di alcuni dati. Lo scopo del programma è solo quello di mostrare un primo esempio di output grafico, non è necessario comprendere tutte le istruzioni.Il testo sorgente è:

Testo secondo esempioimport javax.swing.*;public class InputTest{

public static void main(String[] args){String nome=JOptionPane.showInputDialog (“Come ti chiami?”);System.out.println(“Salve “+nome);System.exit(0);}

}

Compilazione ed esecuzione del secondo esempio

Il file va salvato con lo stesso nome della classe con in più l’estensione .java (InputTest.java). Per la generazione del bytecode il comando sarà:

javac InputTest.javaPer l’esecuzione:

java InputTest

Esecuzione del programma

Eseguendo il programma compare la seguente finestra di input:

Esecuzione del programmaImmettendo dei caratteri e premendo OK si otterrà un output su console.