• Non ci sono risultati.

Java: un linguaggio per applicazioni di rete

N/A
N/A
Protected

Academic year: 2021

Condividi "Java: un linguaggio per applicazioni di rete"

Copied!
11
0
0

Testo completo

(1)

Java: un linguaggio per applicazioni di rete

Moreno Falaschi

Dipartimento di Ingegneria dell’Informazione e Scienze Matematiche Universit`a di Siena

March 3, 2014

(2)

Caratteristiche di Java

• (SUN) Linguaggio semplice, orientato agli oggetti,

distribuito, interpretato, indipendente dall’architettura, portabile, alte-prestazioni, multi-thread, dinam-

ico.

Le caratteristiche di Java per applicazioni di rete:

• Un programma Java (applet) (sottoclasse della classe di sistema APPLET) pu` o essere richiam- ato mediante alcune istruzioni (TAG apposito) inserite in un documento HTML eseguibili su un qualsiasi WEB-browser abilitato per Java.

• Un programma Java puo accedere a files conte-

nenti suoni, immagini, testi ed altri programmi

Java ovunque situati sulla rete WEB, mediante

dei riferimenti basati su indirizzi WEB (URL).

(3)

Caratteristiche di rete:

Permette una programmazione interattiva (creazione e gestione di finestre, movimenti del mouse, bot- toni, menu, ecc...), indipendente dalla architet- tura!

Queste caratteristiche non fanno parte del lin- guaggio, ma sono aggiunte mediante un gran nu- mero di classi di sistema.

L’esecuzione dei programmi Java caricati sulla rete avviene con il metodo della “migrazione del codice”. Il codice Java eseguibile viene caricato dal WEB-browser prelevandolo dal sito remoto e viene eseguito sulla propria macchina.

Non si aggravia il server remoto.

L’esecuzione locale ` e efficiente (alternative?)

Quindi il costo maggiore (con le reti attuali, lente)

risiede nel trasferimento del codice.

(4)

Java: caratteristiche linguistiche

Linguaggio object-oriented, con una sintassi simile a C e C++.

• per permettere ai programmatori di linguaggi dif- fusi ed efficienti come C e C++ di passare “agevol- mente” alla programmazione in Java

E cosi agevole? `

C ` e procedurale, non ` e semplice passare ad una programmazione in stile O.O.

Un programmatore C++ trova meno difficolt` a per` o vi sono diverse differenze per le caratter- istiche O.O.

Linguaggio interpretato. Il compilatore Java produce codice intermedio indipendente dalla macchina (byte- code) che verr` a poi interpretato dall’interprete Java (sulla macchina astratta Java).

La indipendenza dall’architettura ` e fondamentale dato

che il codice Java deve essere eseguito su architet-

ture diversissime sulla rete.

(5)

Codice portabile: applicazioni sviluppate in Java es- eguibili ’ovunque’.

Tutti i tipi di dato primitivi (ad esempio i tipi numerici) sono definiti mediante degli standard.

i compilatori Java devono rispettarli (a differenza

del C++)

(6)

Caratteristiche di Java

E un linguaggio dinamico in quanto permette di ` caricare classi durante l’esecuzione con opportuni metodi.

Linguaggio distribuito: il package java.net (conte- nente la classe URL..) permette di caricare files distribuiti trattandoli come fossero locali.

La versione Java 1.0 non dava nessuna possibilit` a di esecuzione distribuita in senso classico. Nella versione 1.1 ` e stata aggiunta la possibilit` a di invo- care un metodo remoto contenuto in un oggetto Java su un sito remoto.

Linguaggio semplice: pochi costrutti, semplici e sin- tatticamente simili a C e C++.

Importanti rimozioni dal linguaggio: goto, punta-

tori, istruzioni esplicite per recuperare segmenti

di memoria dinamica allocata per le strutture dati.

(7)

Caratteristiche linguistiche di Java

Linguaggio Robusto: permette lo sviluppo di soft- ware affidabile

Controllo dei tipi forte (quasi tutto statico) Assenza di puntatori

Conversioni di tipo esplicite sugli oggetti control- late a run-time.

Garbage collection, incrementale: meno errori ges- tione memoria.

Meccanismi linguistici per la gestione delle con-

dizioni di errore (eccezioni)

(8)

Sicurezza:

• l’esecuzione del codice avviene sul proprio com- puter quindi bisogna evitare di caricare virus.

Ovviamente non c’e’ mai una garanzia totale, per` o:

– il bytecode non puo’ contenere operazioni di accesso alla memoria (niente puntatori)

– l’interprete Java effettua un controllo accurato da questo punto di vista sul codice potenzial- mente “non sicuro” verificando che il bytecode sia tutto codice eseguibile.

– Le richieste di risorse di sistema (come per es- empio la gestione dei file) vengono monitorate da una classe di sistema ‘SecurityManager’ . Molte limitazioni.

– In Java 1.1 si pu` o aggiungere una ‘firma’ digi-

tale (di garanzia) crittografata al codice Java,

per poter eseguire il codice in ‘sicurezza’.

(9)

Velocit` a e esecuzione parallela/distribuita

• Alta velocit` a: 20 volte pi` u lento di codice C (in Java 1.0), 10 volte (in Java 1.1)

– Si puo’ compilare a run time in codice nativo.

Alcuni interpreti Java includono compilatori Just in time

– Ci sono metodi in Java che permettono di in- terfacciarsi con codice compilato C o C++ (ovvi- amente perdendo la portabilita’)

Linguaggio Multithread Quindi permette program- mazione concorrente basata su thread (pro- grammi sequenziali) eseguibili in parallelo e sincronizzati mediante il costrutto ’sincronized’.

classe di sistema Thread (creazione thread, as- segnazione priorita’, ecc..)

costrutto ’syncronized’. Permette di marcare

regioni critiche e metodi che devono essere es-

(10)

Conclusioni:

• Java ` e un linguaggio ‘intermedio’ tra scripting languages e linguaggi compilati in codice di basso livello come C e C++

• Introduce un controllo diretto della multimedi- alit` a rendendo le operazioni interattive.

• ` E portabile e rende le applicazioni eseguibili ovunque.

• Alcune critiche/osservazioni:

il linguaggio ` e semplice ma non ` e semplice usare le classi di sistema (oltre 500 metodi di sistema nella versione 1.1. Anche spiegare il significato dei parametri risulta complesso)

La costruzione di un’interfaccia grafica ` e meno automatica che in un linguaggio visuale.

Il linguaggio non possiede ancora una definizione rigorosa fornita dai progettisti (esistono adesso molti lavori di ricerca che definiscono una seman- tica formale del nucleo del linguaggio). Le classi di sistema si ‘apprendono’ per esempi. Risulta difficile poi fare modifiche con sicurezza.

Sarebbe quindi opportuno avere a disposizione

potenti strumenti di sviluppo del software.

(11)

Il fatto che manchi una definizione rigorosa pu` o portare ad errori anche nell’implementazione.

Estensioni per la programmazione distribuita.

Strumenti di ottimizzazione del codice Estensione dei tipi in Java.

Verifica di correttezza di programmi Java.

Utilit` a di altri linguaggi a pi` u alto livello (lin- guaggi dichiarativi) compilati su Java, per ampli- are l’insieme delle possibili applicazioni:

– Intelligenza artificiale, sistemi esperti, prob-

lemi di ricerca di soluzioni, soluzione di vin-

coli.

Riferimenti

Documenti correlati

Crea un oggetto di tipo File File denominato denominato nome nome a partire dalla directory dir a partire dalla directory dir (descritta tramite una stringa)..

■ Il client ottiene uno stub (surrogato dell’oggetto rosso presso il client) tramite il server registry. ■ Deve conoscerne IP, porta

• stop() , che viene chiamato dal browser ogni volta che l'applet deve essere fermata (perché esce dall'area visibile della pagina). – tipicamente ferma un'animazione o

3) Il servitore accetta la richiesta del cliente: con ciò si stabilisce una connezioe e si il server crea una nuova Socket già collegata al cliente, tramite cui i due comunicano.

Se definiamo ascoltatori diversi per eventi diversi il sistema provvederà ad inviare gli eventi solo all'ascoltatore opportuno, e il metodo actionPerformed non deve più

• Quando un metodo viene ridefinito in una classe derivata, il nuo- vo metodo pu`o lanciare solo le eccezioni dichiarate nel metodo della classe base.. • Tutte le eccezioni

● JDepend traverses Java class file directories and generates design quality metrics for each Java package. JDepend allows

Usando le classi del precedente esercizio, scrivere una semplice classe Agenzia Assicurativa, dove ciascun oggetto della classe `e caratterizzato dal nome dell’agenzia e da un elenco