Java - Dipartimento di Ingegneria dell`informazione e scienze

Transcript

Java - Dipartimento di Ingegneria dell`informazione e scienze
Java: un linguaggio per applicazioni di rete
Moreno Falaschi
Dipartimento di Ingegneria dell’Informazione e Scienze Matematiche
Università di Siena
March 3, 2014
1
Caratteristiche di Java
• (SUN) Linguaggio semplice, orientato agli oggetti,
distribuito, interpretato, indipendente dall’architettura,
portabile, alte-prestazioni, multi-thread, dinamico.
Le caratteristiche di Java per applicazioni di rete:
• Un programma Java (applet) (sottoclasse della
classe di sistema APPLET) può essere richiamato 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 contenenti suoni, immagini, testi ed altri programmi
Java ovunque situati sulla rete WEB, mediante
dei riferimenti basati su indirizzi WEB (URL).
2
Caratteristiche di rete:
Permette una programmazione interattiva (creazione
e gestione di finestre, movimenti del mouse, bottoni, menu, ecc...), indipendente dalla architettura!
Queste caratteristiche non fanno parte del linguaggio, ma sono aggiunte mediante un gran numero 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 è efficiente (alternative?)
Quindi il costo maggiore (con le reti attuali, lente)
risiede nel trasferimento del codice.
3
Java: caratteristiche linguistiche
Linguaggio object-oriented, con una sintassi
simile a C e C++.
• per permettere ai programmatori di linguaggi diffusi ed efficienti come C e C++ di passare “agevolmente” alla programmazione in Java
È cosi agevole?
C è procedurale, non è semplice passare ad una
programmazione in stile O.O.
Un programmatore C++ trova meno difficoltà
però vi sono diverse differenze per le caratteristiche O.O.
Linguaggio interpretato. Il compilatore Java produce
codice intermedio indipendente dalla macchina (bytecode) che verrà poi interpretato dall’interprete
Java (sulla macchina astratta Java).
La indipendenza dall’architettura è fondamentale dato
che il codice Java deve essere eseguito su architetture diversissime sulla rete.
4
Codice portabile: applicazioni sviluppate in Java eseguibili ’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++)
5
Caratteristiche di Java
È un linguaggio dinamico in quanto permette di
caricare classi durante l’esecuzione con opportuni
metodi.
Linguaggio distribuito: il package java.net (contenente la classe URL..) permette di caricare files
distribuiti trattandoli come fossero locali.
La versione Java 1.0 non dava nessuna possibilità
di esecuzione distribuita in senso classico. Nella
versione 1.1 è stata aggiunta la possibilità di invocare un metodo remoto contenuto in un oggetto
Java su un sito remoto.
Linguaggio semplice: pochi costrutti, semplici e sintatticamente simili a C e C++.
Importanti rimozioni dal linguaggio: goto, puntatori, istruzioni esplicite per recuperare segmenti
di memoria dinamica allocata per le strutture dati.
6
Caratteristiche linguistiche di Java
Linguaggio Robusto: permette lo sviluppo di software affidabile
Controllo dei tipi forte (quasi tutto statico)
Assenza di puntatori
Conversioni di tipo esplicite sugli oggetti controllate a run-time.
Garbage collection, incrementale: meno errori gestione memoria.
Meccanismi linguistici per la gestione delle condizioni di errore (eccezioni)
7
Sicurezza:
• l’esecuzione del codice avviene sul proprio computer quindi bisogna evitare di caricare virus.
Ovviamente non c’e’ mai una garanzia totale, però:
– 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 potenzialmente “non sicuro” verificando che il bytecode
sia tutto codice eseguibile.
– Le richieste di risorse di sistema (come per esempio la gestione dei file) vengono monitorate
da una classe di sistema ‘SecurityManager’ .
Molte limitazioni.
– In Java 1.1 si può aggiungere una ‘firma’ digitale (di garanzia) crittografata al codice Java,
per poter eseguire il codice in ‘sicurezza’.
8
Velocità e esecuzione parallela/distribuita
• Alta velocità: 20 volte più 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 interfacciarsi con codice compilato C o C++ (ovviamente perdendo la portabilita’)
Linguaggio Multithread Quindi permette programmazione concorrente basata su thread (programmi sequenziali) eseguibili in parallelo e
sincronizzati mediante il costrutto ’sincronized’.
classe di sistema Thread (creazione thread, assegnazione priorita’, ecc..)
costrutto ’syncronized’. Permette di marcare
regioni critiche e metodi che devono essere eseguiti in mutua esclusione.
9
Conclusioni:
• Java è un linguaggio ‘intermedio’ tra scripting
languages e linguaggi compilati in codice di basso
livello come C e C++
• Introduce un controllo diretto della multimedialità rendendo le operazioni interattive.
• È portabile e rende le applicazioni eseguibili ovunque.
• Alcune critiche/osservazioni:
il linguaggio è semplice ma non è 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 è 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 semantica 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.
10
Il fatto che manchi una definizione rigorosa può
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à di altri linguaggi a più alto livello (linguaggi dichiarativi) compilati su Java, per ampliare l’insieme delle possibili applicazioni:
– Intelligenza artificiale, sistemi esperti, problemi di ricerca di soluzioni, soluzione di vincoli.
11