Capitolo 2 - Università degli Studi di Milano

CAPITOLO 2
INTRODUZIONE
AL LINGUAGGIO JAVA
E
ALL'AMBIENTE HOTJAVA
IL LINGUAGGIO JAVA
•
•
•
•
•
•
•
•
•
•
Semplice ed estensibile (OO)
Distribuito
Interpretato
Robusto
Sicuro
Architetturalmente neutrale
Portabile
A elevate prestazioni
Concorrente (multithreaded)
Dinamico
SEMPLICE/ESTENSIBILE (OO)
• Sintassi simile a C e C++ (facile da imparare)
• Elimina i costrutti più "pericolosi" di C e C++
–
–
–
–
–
•
•
•
•
aritmetica dei puntatori
strutture (struct)
definizione di tipi (typedef)
preprocessore (#define)
(de)allocazione esplicita della memoria
Aggiunge garbage collection (GC) automatica
Conserva la tecnologia OO di base di C++
Rivisita C++ in alcuni aspetti (W.Joy: C++--==)
Interprete completo occupa 215 KB di RAM
DISTRIBUITO E NEUTRALE
• Incorpora molte funzionalità di rete (TCP/IP)
• Comprende librerie di livello superiore (HTTP)
• Rete facilmente accessibile (come i file locali)
•
•
•
•
•
Compilatore produce codice di tipo byte-code
Byte-code indipendente da architettura HW
Codice eseguibile su molte piattaforme HW
Sviluppo: Solaris (SPARC), Win95 e NT (Intel)
Disponibilità: le principali piattaforme HW/SW
FLUSSO DEL CODICE
Loader
delle classi
Sorgente
Java
Verifica del
byte-code
Interprete
Compilatore
Rete
Generatore
di codice
Ambiente
a run-time
Byte-code
Java
Piattaforma hardware
ROBUSTO
•
•
•
•
•
•
•
•
•
Rilevamento errori (compile-time e run-time)
Type-checking (compile-time e run-time)
Mascheramento dei puntatori all'utente
Impossibilità di fare "casting" di puntatori
Controllo automatico dei puntatori nulli
Controllo automatico degli indici degli array
Gestione delle eccezioni da parte dell'utente
Verifica del byte-code prima dell'esecuzione
Gestione della memoria (allocazione & GC)
SICURO
•
•
•
•
Dimostratore della correttezza del byte-code
Rispetto garantito dei limiti dello stack
Correttezza dei parametri delle istruzioni
Legalità dell'accesso ai campi degli oggetti
– pubblici
– privati
– protetti
• Legalità di tutte le conversioni di tipo
• In particolare, impossibilità di convertire
numeri a puntatori, etc.
PORTABILE, INTERPRETATO E
A ELEVATE PRESTAZIONI
• Formato dei dati specificato nei dettagli (p.es.
gli interi sono di 32 bit e in complemento a 2)
• Primitive grafiche astratte facilmente portabili
agli ambienti Unix, Windows e Macintosh
• Interpretazione abbrevia il ciclo di sviluppo
• Circa 300.000 funcalls/sec (SPARCstation10)
• Traduzione a run-time di byte-code in codice
macchina fornirà prestazioni simili a C e C++
CONCORRENTE E DINAMICO
•
•
•
•
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
•
•
•
•
Codice eseguibile anche in assenza di moduli
Nuove release di moduli usabili a parità di API
Nuovi protocolli caricabili da rete (download)
Browser non più "centralisti" ma "federalisti"
BROWSER "FEDERALISTA"
•
•
•
•
•
•
•
•
•
Client:
Rete:
Server:
Rete:
Client:
Rete:
Server:
Rete:
Client:
richiesta oggetto da parte utente
trasferimento richiesta al server
reperimento oggetto nel database
trasferimento oggetto al client
rilevamento oggetto di tipo ignoto
trasferimento informativa al server
reperimento codice Java adeguato
trasferimento codice Java al client
visualizzazione oggetto richiesto
L'AMBIENTE HOTJAVA
•
•
•
•
Browser abilitato all'impiego di Java
Manipola URL tradizionali
Decodifica pagine HTML tradizionali
Attiva programmi Java riferiti da pagine HTML
• Programmi Java attivabili non solo via HTML
• Quasi tutti i browser oggi sono Java-enabled
• Gli altri browser ignorano i link a oggetti Java