Programmazione ad Oggetti Java – Parte I - ICAR-CNR

Programmazione ad Oggetti
Java – Parte I
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Overview
• Caratteristiche generali
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
1
Caratteristiche generali
• Un moderno linguaggio orientato agli oggetti
• Pensato per lo sviluppo di applicazioni che devono essere
eseguite in un ambiente eterogeneo connesso in rete
• Portabile
• Semplice
• Robusto
• Sicuro
• Multithreaded
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Portabilità
• Portabilità del codice sorgente
– Un programma scritto in un linguaggio ad alto livello
per una determinata macchina virtuale (processore,
s.o.) può essere “riutilizzato” in una macchina
virtuale differente?
– Un esempio
Livello
Semantico
Ansi C
Compilatore 1
Compilatore 2
Linguaggio
Macchina 1
Linguaggio
Macchina 2
Processore 1
Gap Semantico
Compilatore N
Linguaggio
Macchina N
Processore 2
Processore N
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
2
Portabilità (2)
• Il codice sorgente scritto in Ansi C è portabile!
• …ma la portabilità del codice sorgente richiede
la ricompilazione su ogni piattaforma
• Inoltre, cosa succede se un programma C
deve invocare API del sistema operativo?
– La portabilità è limitata a quelle macchine virtuali
che supportano quelle specifiche API
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Portabilità di Java
• Java garantisce la portabilità del codice
eseguibile grazie alla Java Virtual Machine
(JVM)
– Write Once Run Everywhere!
Sorgente Java
Livello
Semantico
Eseguibile Java (Byte Code) generato dal compilatore Java
JVM
JVM
Interprete
Java 1
Interprete
Java 2
Linguaggio
Macchina 1
Linguaggio
Macchina 2
Processore 1
JVM
Gap Semantico
Interprete
Java N
Linguaggio
Macchina N
Processore 2
Processore N
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
3
Ciclo di Sviluppo
Nome.java
Sorgente
Compilatore
Class Loader
Nome.class
Bytecode
JVM
Just in Time Compiler
Sistema Operativo
Processore
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Ciclo di Sviluppo (2)
Il compilatore non produce codice macchina, ma un
insieme ottimizzato di istruzioni detto BYTECODE.
Il sistema run-time di Java emula una macchina virtuale
(Java Virtual Machine) che esegue il BYTECODE .
Ogni architettura per la quale la Virtual Machine sia
implementata, può eseguire lo stesso programma Java.
L’efficienza di esecuzione di Java è superiore rispetto agli altri linguaggi interpretati
(Tcl, Perl...), anche se non raggiunge quella dei linguaggi compilati.
Inoltre l’interprete Java fornisce compilatori “just in time” per trasformare a runtime il BYTECODE in codice macchina, guadagnando in velocità, ma perdendone la
portabilità.
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
4
Ancora sulla portabilità
• Oggi possiamo continuare a dire “Write Once,
Run Everywhere”?
– Java supporta nuovi dispositivi con caratteristiche
hardware molto omogenee tra loro
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Le diverse piattaforme
• Java 2 Standard Edition (J2SE)
– E’ la piattaforma base per workstation e server
• Java 2 Enterprise Edition (J2EE)
– E’ una estensione della piattaforma base arricchita
con servizi per la sicurezza, la gestione delle
transazioni,…
– Supporta il modello a componenti Enterprise Java
Bean (EJB)
• Java 2 Micro Edition (J2ME)
– E’ la piattaforma “ridotta” per palmari, cellulari,…
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
5
Le diverse piattaforme (2)
• Portabilità legata alla piattaforma
J2SE-JVM
ClassLoader
Serialization
Reflection
RMI
J2ME-KVM
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Sicurezza
Un eseguibile prodotto da altri e scaricato via rete sulla
propria macchina potrebbe trasmettere virus o accedere
a dati privati.
Un programma Java non può violare la
sicurezza!
• L’esecuzione di un BYTECODE Java é confinata nel sistema runtime che lo interpreta.
• Nel linguaggio non esistono i puntatori.
• L’ applet non può scrivere né leggere sul client, né aprire
connessioni con altri sistemi.
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
6
Robustezza
• Controlli estensivi a compile-time e a run-time, per
rilevare gli errori quanto prima possibile (es.: type
checking)
• Per questo, le caratteristiche insicure di C e C++ sono
rimosse:
– Nessuna gestione esplicita dei puntatori (no aritmetica dei
puntatori, no malloc e free esplicite, …)
– Gestione della memoria con garbage collection
– Array e stringhe “veri”
• Verifica del byte-code a load-time
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Dinamicità
• Il codice è eseguibile anche in assenza di
alcuni moduli:
• … le classi necessarie per la esecuzione di un
programma Java possono essere caricate e
collegate dinamicamente quando servono
Esempio: nuove release di moduli caricabili
automaticamente dalla rete quando servono
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
7
Concorrenza
• 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
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Ricchezza
• La Standard Library Java contiene una ricca
collezione di classi e di metodi preconfezionati:
–
–
–
–
–
Language support
Utilities
Input/output
Networking
Abstract Window Toolkit (AWT)
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
8
Package
Un package raggruppa un insieme di classi correlate,
che possono essere importate nelle applicazioni.
L’appartenenza ad un pacchetto si realizza inserendo
all’inizio del file l’istruzione : package MyPackage;
Per importare in una applicazione le classi del pacchetto:
import MyPackage.*;
java.lang
java.io
java.util
java.net
java.applet
java.awt
java.awt.image
java.awt.peer
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
Semplicità
• Sintassi simile a C e C++ (facile da imparare)
• Elimina i costrutti più "pericolosi" di C e C++
–
–
–
–
–
aritmetica dei puntatori
(de)allocazione esplicita della memoria
strutture (struct)
definizione di tipi (typedef)
preprocessore (#define)
• Aggiunge garbage collection automatica
• Conserva la tecnologia OO di base di C++
• Rivisita C++ in alcuni aspetti (C++--==)
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
9
Distribuzione
• Pensato per essere eseguito in rete
• L’ambiente run-time incorpora funzioni di rete
(sia di basso livello: TCP/IP, che di alto livello:
HTTP, …)
• La rete è facilmente accessibile (come i file
locali)
Corso di Programmazione ad Oggetti
Ing. Antonio Coronato
Seconda Università di Napoli
ICAR - CNR
10