Un po' di storia di Java

Java: (n.) Isola dell'Indonesia (superficie 48.842 miglia quadrate)
java: (n.) caffè infuso (da Java)

Forse avrete sentito parlare di Java come linguaggio di programmazione per applicazioni su Internet oppure semplicemente come linguaggio di programmazione orientato agli oggetti e general purpose. Ma quando fu ideato doveva essere tutt'altro:

  • Nel 1991 James Gosling della Sun Microsystems guida un team per lo sviluppo di un nuovo linguaggio di programmazione per il controllo di elettrodomestici (tostapane, TV, ...)
    • programmazione di alto livello
    • capace di essere eseguito su diversi tipi di processori (indipendenza dall'architettura)
    • che non richiedesse compilatori troppo sofisticati (i produttori degli elettrodomestici non avrebbero investito risorse in quel settore)
    L'idea è di introdurre un unico, semplice linguaggio intermedio (chiamato byte-code) per il quale potessero facilmente essere scritti dei compilatori ad hoc.
  • Il progetto non ebbe fortuna presso i produttori di elettrodomestici
  • Nel 1994, con il successo di Internet, James Gosling, assieme a Patrick Naughton e Jonathan Payne, ripresero l'idea per sviluppare un web browser (HotJava) capace di scaricare programmi (Applet) dalla rete e eseguirli
  • Nel 1995, fu presentato alla fiera SunWorld che ne decretò il successo!
  • Dal 1996 supportato nei browser più diffusi (di malavoglia da Microsoft)

Inizialmente avrebbe dovuto essere chiamato Oak, ma esistendo già un linguaggio con questo nome gli sviluppatori si riunirono per scegliere un altro nome e prendendo un caffè ...

Se il successo di Java come linguaggio per applet è comprensibile, per quanto riguarda il suo successo come linguaggio di programmazione general purpose ci sembra importante la decisione della Sun di rendere pubblici i sorgenti.




Filosofia di Java

Ci sono cinque principi cardine dietro la progettazione del linguaggio Java:
  1. Uso di metodologie di programmazione object-oriented
  2. Permettere allo stesso programma di essere eseguito su molteplici piattaforme (Write Once, Run Anywhere)
  3. Supporto built-in per programmazione di rete
  4. Esecuzione sicura di codice proveniente da remoto
  5. Facile da usare



 Caratteristiche principali di Java

  • Orientato a oggetti: garantisce la modularità e l'estendibilità del linguaggio
  • Progettato come estensione e semplificazione di C e C++
  • Progettato per essere utilizzato in Internet:
    • Esempio di applet [Medialab];
    • ...i sorgenti dell'applet sono in questa directory [Medialab], e non sono banali...
  • Indipendente dalla piattaforma (cioè da hardware e sistema operativo), grazie alla Java Virtual Machine (JVM)



Indipendenza dalla piattaforma (1)

Questo è lo schema standard di compilazione/esecuzione che avevamo visto:
tutto dipende dalla piattaforma




Indipendenza dalla piattaforma (2)

Schema misto di compilazione e interpretazione.
  • Il sorgente del programma (uno o più file .java) vengono compilati in bytecode (codice di byte) (producendo file .class)
  • Esecuzione (interpretazione) con la Java Virtual Machine (JVM - Macchina Virtuale di Java).
  • Ci sono JVM per praticamente tutte le piattaforme (Solaris, Windows, Linux, Macintosh,...)

  • I file  .class possono essere eseguiti su qualunque JVM. Questo permette, ad esempio, di scaricare un applet e eseguirlo direttamente senza compilarlo.
  • Per aumentare l'efficienza sono state sviluppate anche tecniche di compilazione dinamica del codice scaricato.



Java e la Didattica

Java si è imposto come uno dei principali linguaggi per la programmazione generica e per l'apprendimento dell'informatica... però è opportuno premettere che:

  • non è stato progettato esplicitamente per insegnare agli studenti a scrivere i primi programmi e quindi richiede alcuni tecnicismi anche per programmi molto semplici;
  • non è ancora del tutto stabile: ha subito molte revisioni e estensioni (1996 v1.0, 1997 v1.1, 1998 v1.2, 2000 v1.3, 2002 v1.4, 2004 v5.0, 2007 v6.0);
  • comprende una vastissima raccolta di pacchetti di libreria: non si può imparare tutto Java in pochi mesi.

Comunque vedrete che Java è semplice, elegante e, dal punto di vista didattico, preferibile ad altri linguaggi.

Per esempio, al contrario del linguaggio C, Java in molti casi vi impedirà di eseguire programmi insensati, segnalando opportuni errori in fase di compilazione che vi aiuteranno a ragionare sul codice che state scrivendo.




Primitive o estensioni per ...

  • Definire e manipolare Collezioni [Java Collection Framework] (argomento di studio del Laboratorio di Programmazione di Strutture Dati, nel primo semestre del secondo anno)
  • Concorrenza [multi-threading]: esempio di algoritmi di ordinamento [Medialab] (argomento di studio del Laboratorio di Programmazione Concorrente e di Sistema, secondo semestre del secondo anno)
  • Programmazione di rete: manipolazione di socket, connessione a URL, Remote Method Invocation [RMI] (argomento di studio del Laboratorio di Programmazione di Rete, nel primo semestre del terzo anno)
  • Progettare interfacce grafiche, con le Java Foundation Classes [JFC], che comprendono l'Abstract Windowing Toolkit [AWT] e Swing.

    Esempio: eseguire il seguente comando usando come current directory "/":

    appletviewer /<path-di-java>/demo/jfc/SwingSet2/SwingSet2.html

  • e ancora: persistenza dei dati [serializable], meccanismi per la sicurezza, connettività con basi di dati, reflection, programmazione per componenti (beans)...