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