Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
2: Introduzione a Java
Vittorio Scarano
Algoritmi e Strutture Dati: Sistemi Distribuiti
Corso di Laurea in Informatica
Università degli Studi di Salerno
Organizzazione della lezione
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Obiettivo:
Introdurre il linguaggio Java ed esaminarne le caratteristiche
che lo rendono particolare
• La genesi di Java
• Le caratteristiche peculiari del linguaggio e le scelte
progettuali
• Il “dado” delle caratteristiche di Java
• Gli strumenti per Java (JDK)
• Un primo esempio
2
1
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Prima di iniziare….
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Aggiornamento sugli orari:
– la llezione di martedì viene spostata alle ore 14-16 e nella
aula A10/11
• Quindi le lezioni si tengono:
– martedì ore 14-16 nella aula A10/11
– gioved’ ore 9-11 nella aula D6
3
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Java è...
•
•
•
•
•
Un tipo di caffè
Un linguaggio di programmazione…
Una piattaforma di sviluppo…
Una moda…
Una storia interessante di …
4
2
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Java: la carta di identità
• Genitori: Sun Microsystem
• Data di nascita: 23 maggio 1995
• Segni particolari:
– Utilizzato nel World Wide Web
• Luoghi frequentati:
Java
– Sistemi di middleware
– Sistemi embedded
– Ambienti a componenti per il calcolo distribuito
Seriamente parlando… Perché Java?
5
Perché Java…
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Frutto dalla esperienza C e C++
– Object Oriented Programming (OOP)
– Linguaggio che facilita programmi bug-free
• Indipendente dalla piattaforma
• Ricco di Application Programming Interface (API)
– Organizzate in packages
• La presentazione da parte di Sun Microsystem
– Un whitepaper con tante keywords
6
3
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Il whitepaper di Java...
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Java è un linguaggio di programmazione
7
La preistoria: Il progetto Green
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• La situazione alla Sun Microsystem nel 90
– La rivoluzione dei Personal Computer era nel pieno
del suo svolgimento
– All’allargarsi del mercato dei desktop, il mercato
delle workstation si restringeva
– La reputazione delle macchine Sun:
• affidabili, solide ma …
• complicate, brutte e “secchione”
8
4
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Un giovane progettista della Sun..
• Patrick Naughton, amico del CEO della Sun McNealy
• Gli viene offerto un lavoro migliore alla Next..
• … ma prima di lasciare gli viene richiesto di scrivere cosa
ritiene si faccia di sbagliato alla Sun e quale può essere una
soluzione.
• Scrive 12 videate di e-mail , dicendo tra l’altro di
– “far sviluppare la interfaccia utente ad un artista”
– “utilizzare un unico tool di sviluppo”
– “focalizzare gli sforzi verso un solo sistema grafico”
– “licenziare tutti quelli che stavano lavorando ai sistemi
grafici”
9
La risposta:
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• E’ sommerso da risposte entusiastiche:
“Patrick ha scritto quello che mi dicevo ogni
mattina ma avevo paura di ammettere”
Una tipica reazione
“ Patrick ha brutalmente ragione: da qualche parte
abbiamo perso il contatto con quello che significa
produrre un prodotto di qualità”
James Gosling
10
5
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Un meeting: “Cosa si fa?”
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Una proposta:
– Innanzitutto una contro-offerta a Naughton che
accetta di restare alla Sun
– Creare un piccolo team ..
“piccolo
abbastanza da poter andare a cena in un
ristorante cinese tutti insieme….”
– … tenerne segreta la missione al resto della Sun per
proteggere il team da influenze negative contro le
innovazioni.
11
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
La missione: Produrre “qualcosa”…
• Sun aveva già perso la battaglia in corso sui Personal
Computer
• Doveva prepararsi per la prossima..
• Una convinzione sul terreno di battaglia:
La convergenza tra
– le apparecchiature domestiche controllate da
microprocessori
– i computers propriamente detti.
12
6
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
L’inizio del progetto Green: l’esilio
– Dicembre 1990: si rinchiudono in 3 (Gosling,
Naughton e Sheridan) in un ufficio fuori dal
campus Sun con “Cokes and Dove bars”
– Ed un milione di dollari da spendere in un anno.
– La prima idea nell’Aprile 1991:
• I microprocessori sono ovunque
• I telecomandi sono anche essi ovunque
• Ogni apparecchiatura ha il proprio complicato
telecomando!
13
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
L’idea:
• Un telecomando
–
–
–
–
universale
di immediato utilizzo
multimediale
per tutte le apparecchiature domestiche!
14
7
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Il Green Team al lavoro:
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Il settore hardware:
– La Hammer Technology: si comprano apparecchiature e
vengono smontate
• Studio sulla interfaccia utente:
– giocano ore ed ore a Nintendo
• Il settore software:
– decidono di inventare un nuovo linguaggio!
15
Il ragionamento di Gosling
• Un linguaggio per elettrodomestici
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
– deve essere affidabile
“Come mettere una spina nella presa elettrica..”
– deve essere compatto
“Non c’è tanta memoria in un piccolo apparato..”
– deve essere portabile
“Deve
funzionare su diversi processori..”
• Conclusione: il C++ non va bene!
16
8
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Nel 1992….(3 settembre)
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• “Cokes and Dove Bars” + $1,000,000 =
17
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
E funziona anche!
18
9
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Cosa c’è “sotto il cofano”?
–
–
–
–
–
–
–
–
Processore SPARC
Motherboard ripiegata
5’’ touchscreen display
un chip grafico custom a doppio buffer
connessioni remote senza filo a 900Mhz
interfaccia PCMCIA
multimedia audio codec
batteria custom
(continua..)
19
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Cosa c’è “sotto il cofano”? (2)
– Una versione di Unix che in meno di 1Mb comprende
drivers per PCMCIA, radio networking, touchscreen,
display, flash RAM file system
– Oak: un linguaggio di programmazione compatto, sicuro
affidabile, distribuito, interpretato, garbage-collected,
multithreaded, dinamico
– libreria grafica
– una interfaccia grafica che usa animazione audio e
metafore dello spazio virtuale
(continua..)
20
10
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Cosa c’è “sotto il cofano”? (3)
– Un insieme di classi per implementare la metafora della
interfaccia utente a 3D
– Un insieme di applicazioni tra le quali:
• una guida TV
• un telecomando per televisione, VCR
• una lavagna distribuita condivisa via radio
• un agente visivo che guida l’utente
Ciao!
21
L’entusiasmo per *7….
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Trattative con
– Mitsubishi (telefoni cellulari, televisioni)
– France Telecom (per il nuovo Minitel)
• Nel novembre 1992:
– La Sun fonda la “First Person Inc.”
– Il progetto Green passa a First Person
– I 14 dipendenti passano a 60….
22
11
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
E le “docce gelate”...
• Nel 93 Mitsubishi e France Telecom si ritirano dalle
trattative
• Il prezzo per un apparato in grado di eseguire
programmi in Oak è stimato a 50$ dalla Sun..
• … circa 50 volte il prezzo che i produttori sono disposti
di solito a pagare.
• E la First Person Inc.?
23
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
“Contrordine!
TV-Interattiva!”
• In marzo 93, in Orlando parte un tentativo della
Time Warner di TV interattiva.
• La First Person decide di partecipare con un
device basato su Oak che gestisca:
– immagini
– dati
– soldi (in maniera sicura)
attraverso la rete distribuita.
24
12
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
La “Doccia gelata”...
• L’appalto viene dato alla Silicon Graphics
• Chairman della SG è Jim Clark
• Il tentativo di TV interattiva con la Time Warner
fallisce nella estate 1993.
• Jim Clark lascia la SG per fondare (94) una società
per entrare nel mercato di una novità: il World
Wide Web..
• E la First Person Inc.?
25
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
“Contrordine!
Videogiochi con CD-ROM!”
• Trattative con la 3DO per inserire Oak in un
videogioco con lettore CD-ROM
• Ci vogliono solo 10 giorni per portare Oak sul
videogioco 3DO
• ...e 3 mesi di trattative commerciali con 3DO
• …chiuse negativamente di fronte alla richiesta di
3DO di avere l’esclusiva su Oak
• E la First Person Inc.?
26
13
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
La situazione nel 1994:
•
•
•
•
•
Il World Wide Web è già diffuso…
Nel 1993, Marc Andreessen (NCSA) ha lanciato Mosaic…
Più del 50% degli host su Internet è Sun
Viene fondata da Clark la Netscape
Patrick Naughton fa 300.000 miglia di volo per cercare di
vendere la tecnologia...
• E la First Person Inc.?
27
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
“Contrordine!
CD-ROM Interattivi per PC !”
• Nella primavera del 94, First Person Inc viene chiusa
dalla Sun
• Bill Joy (Unix BSD e fondatore Sun) decide con
Gosling che
– Oak è un sistema operativo basato su un linguaggio
– Oak è il prodotto da “vendere”!
28
14
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
La nascita di “Java”
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Oak è un nome già soggetto a copyright
• Alternative al nome Java:
– Neon, Lyric, Pepper, Silk
• Joy (20 anni prima) aveva deciso di distribuire i
sorgenti di BSD
• Netscape già stava usando l’approccio
• La Sun decide di distribuire gratis Java!
29
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
La gestazione di Java...
• Gosling lavora sul linguaggio Java
• Naughton prepara un browser WWW chiamato
WebRunner (poi HotJava)
• In Dicembre 94 una versione alfa viene distribuita
• Il 23 Maggio 1995, Java viene presentato a SunWorld
insieme all’accordo con Netscape per inserire Java nei
suoi browser
30
15
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Cosa rimane di questo fallimento?
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Java: un linguaggio di programmazione
31
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Java è semplice e familiare
•
•
•
•
•
Di facile apprendimento quindi basato su linguaggi noti
Ma progettato con accento sulla semplicità
Quindi realizzato per sottrazione da linguaggi esistenti
La base è comunque il C++
Ambiente snello:
– Poche centinaia di Kb per interprete, librerie di base
(Graphical User Interface però più ampia)
32
16
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Cosa si elimina da C e C++
•
•
•
•
•
goto
struct e union
header files
preprocessore
casting automatico
•
•
•
•
•
ereditarietà multipla
operator overloading
funzioni
puntatori
allocazione memoria fatta a
carico del programmatore
33
Java è orientato agli oggetti
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Enfasi sui dati e sui metodi per manipolarli
• Permette produzione:
– efficiente
– rapida
di codice
– portabile
– riusabile
34
17
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Java è distribuito
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Fornisce classi di supporto per
–
–
–
–
–
Datagram (TCP/IP)
sockets
URL
oggetti remoti (Remote Method Invocation)
CORBA
• Di utilizzo nel World Wide Web
– Lato client (browser): applet
– Lato server: servlet
– “Lato” proxy: Web Based Intermediaries di IBM
(Websphere)
35
Java è robusto
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Obiettivo: obbligare il programmatore a scrivere codice
bug-free:
– Fortemente tipizzato (strongly typed)
• niente casting implicito
–
–
–
–
assenza di puntatori
accessi ad array e stringhe controllati a run-time
garbage collector automatico
trattamento eccezioni interno al linguaggio
36
18
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Java è interpretato
• La compilazione in C (o altri linguaggi compilati)
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
hello.c
#include <stdio.h>
........
/* Prototipi funzioni */
compilatore
file
oggetto
Libreria di Funzioni
I/O standard
a.out
file
eseguibile
linker
stdio.h
gcc hello.c
37
Java è interpretato
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• In Java….
Hello.java
Hello.class
........
........
compilatore
javac Hello.java
Java Virtual
Machine
java Hello
38
19
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
La macchina virtuale Java
Un “programma
che esegue
programmi”…
Java Virtual
Machine
Hello.class
39
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Java è indipendente dalla architettura
40
20
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Java è dinamico
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Tipico ciclo di programmazione (ad esempio C)
Edit
Compila
Link
Execute
• In Java il linking è dinamico ed effettuato dal Class
Loader
• Così si evita il problema della fragilità della
superclasse.
41
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
La fragilità della superclasse
• In C++ ogni volta che si modifica una classe, si devono
ricompilare le classi che ereditano
• La compilazione è
– costosa (in termini di tempo di sviluppo)
– complessa (analisi delle dipendenze)
• In Java la classe viene caricata quando “serve” (a runtime)
42
21
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
La soluzione di Java
Compilation-time
Run-time
Java Class
Library
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Java Source
Hello.java
Java Compiler
javac
Class Loader
Network
Java
Interpreter
Just-in-time
compiler
Java
Virtual
Machine
Runtime System
Java Bytecodes
Hello.class
Sistema Operativo
Hardware
43
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Java è portabile
• Oltre a essere indipendente dalla architettura, Java non
ha altri aspetti dipendenti dalla implementazione
• Hardware:
– dimensioni tipi di dato primitivi
• in C un intero può essere 16, 32, 64 bit
– memorizzazione big endian (Motorola) o little endian (Intel)
• Interfacce grafiche:
– Abstract Window Tools (AWT), Swing
44
22
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
Java è sicuro
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Sicurezza attraverso 4 livelli
–
–
–
–
Regole del linguaggio e compilatore
Bytecode Verifier
Class Loader
Security Manager
• Dalla versione 1.1 classi firmate digitalmente
• Esempi di cose che non sono possibili/permesse
– Overrun dello stack a run-time (worm di Internet)
– Accesso a memoria all’esterno di quella assegnata
– Accesso a file locali da classi caricate via Web
45
Il primo livello di sicurezza
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• La sicurezza del linguaggio:
– La assenza di puntatori non permette di falsificare puntatori
– Il late binding degli oggetti in memoria non permette la
conoscenza della loro allocazione in anticipo
46
23
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
I restanti 3 livelli di sicurezza
47
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Il Bytecode Verifier controlla che:
• Non ci siano stack
under/overflow
• Operandi corretti per
opcodes
• Niente casting illegali
• Vengano seguite le regole
di accesso a membri degli
oggetti
48
24
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Il Class Loader…
• Carica la classe in un
unico namespace che
corrisponde alla
provenienza
• Quindi le classi built-in
non possono essere
rimpiazzate da altre
(come il Security
Manager)
49
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Il Security Manager
• Implementa una politica
di sicurezza.
• Esempio: la delete di un
file può essere illegale
• Il Security Manager
viene interpellato
dall’interprete per ogni
azione potenzialmente
pericolosa.
50
25
Corso di ASD: Sistemi Distribuiti (Prof.
Scarano)
14/03/2002
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
Java è multithread
• Threads (processi concorrenti) inseriti all’interno del
linguaggio
• Programmazione facilitata
• Uso dei thread in molte situazioni:
– applet
– multimedia presentation (audio+video+etc.)
– Java non supporta I/O non bloccante con notifica: si crea un
thread per ogni canale!
• Possibilità di usare macchine multiprocessore
51
Java è ad alte prestazioni
ASD: Sistemi Distribuiti. Vi.ttorio Scarano
• Alcune tecniche:
– il controllo del Bytecode verifier permette all’interprete di
evitare i check a run-time
– Just in Time Compiler: compilazione “on-the-fly” di metodi
di classi in linguaggio macchina reale
• La realtà è che Java è un po’ lentino...
52
26