Fondamenti di Java - Facolta di Ingegneria

Principi di Progettazione del Software
a.a. 2016-2017
Fondamenti di Java (pt. 1)
ing. Roberto Vergallo
Contatti
■  Ing. Roberto Vergallo, Ph.D.
■  Orario di ricevimento
–  Preferibile fissare un appuntamento tramite email:
[email protected]
■  Laboratorio GSA Lab
–  http://gsalab.unisalento.it
Fondamenti di java
2
Roberto Vergallo
1
Testi per esercitazione consigliati
■  M. tarquini, A. Luigi “Java
Mattone dopo mattone”,
HOEPLI informatica
■  Cay S. Horstmann
“Concetti di Informatica e
Fondamenti di Java” Terza
Edizione, Apogeo
Fondamenti di java
3
Roberto Vergallo
Risorse
■  Pagina del prof. Mainetti (area materiale didattico):
–  http://www.ingegneria.unisalento.it/scheda_personale/-/people/
luca.mainetti/materiale
Fondamenti di java
4
Roberto Vergallo
2
Obiettivi della lezione
■  PARTE 1: Introduzione alla Programmazione Object
Oriented (OOP)
–  Paradigma Imperativo e Procedurale
–  Paradigma Object Oriented
–  Classi e Oggetti
■  PARTE 2: Introduzione al Linguaggio Java
–  Caratteristiche Principali di Java
–  Java Development Kit (JDK)
■  PARTE 3: Introduzione alla Sintassi di Java
–  Variabili, Operatori, Regole sintattiche di Java, ecc.
–  Primo esempio
Fondamenti di java
5
Roberto Vergallo
Risorse e strumenti
■  Tutorial Java
–  http://docs.oracle.com/javase/tutorial/?frontpage-spotlight
–  http://www.roseindia.net/java/
■  MOOC Java
–  https://www.edx.org/course/introduction-programming-java-part-1-uc3mxit-1-1x-1#
–  https://www.edx.org/course/software-construction-java-mitx-6-005-1x
■  Java 2 Platform Standard Edition 7.0
–  http://www.oracle.com/technetwork/java/javase/downloads/
index.html
■  Eclipse IDE for Java Developers
–  http://www.eclipse.org/downloads/
Fondamenti di java
6
Roberto Vergallo
3
http://docs.oracle.com/javase/7/docs/api/
Fondamenti di java
7
Roberto Vergallo
PARTE 1
Introduzione alla Programmazione Object Orientented
(OOP)
4
Evoluzione del modello di programmazione
■  Sviluppare software è un problema semantico
Fondamenti di java
9
Roberto Vergallo
Dominio del problema e dominio della soluzione
■  Il programmatore deve creare un mapping fra “dominio
del problema” e “dominio della soluzione”
–  Tale mapping è spesso innaturale e di difficile comprensione
Fondamenti di java
10
Roberto Vergallo
5
Evoluzione del modello di programmazione
Linguaggio
C
Java
Pascal
C++
Assembler
Fortran
…
Paradigma imperativo
Paradigma
Procedurale
Paradigma
Object Oriented
Macchina
11
Fondamenti di java
Tempo
Roberto Vergallo
Paradigma imperativo
■  I linguaggi imperativi definiscono un “dominio della
soluzione” che “astrae” la macchina sottostante
–  Es.
1.  read i
2.  print i
3.  goto 1
■  Un tempo i
programmi erano
scritti in Assembler
in cui ogni dato era
globale e le funzioni
andavano disegnate
a basso livello.
Fondamenti di java
12
Roberto Vergallo
6
Paradigma procedurale
■  Poi ci fu l’avvento dei linguaggi procedurali come il C che si basano sul
modello detto “paradigma procedurale” riassumibile in due parole:
“Divide et Impera”.
•  Un problema complesso viene suddiviso in problemi più semplici in modo
che sia facilmente risolvibili mediante programmi procedurali.
•  Le procedure sono blocchi di codice riutilizzabile che possiedono un
proprio insieme di dati e realizzano specifiche funzioni.
•  All’interno di un’applicazione è necessario
che i dati vengano condivisi tra loro.
Questo meccanismo si risolve mediante
l’uso di variabili globali, passaggio di
parametri e restituzione di valori.
•  Esempio: print usa output per scrivere su
terminale, modificando variabili globali.
•  Problema: Cosa succede se un
programmatore usa direttamente output?
Fondamenti di java
13
Roberto Vergallo
Paradigma Object Oriented
■  Per risolvere i problemi presentati dall’approccio
procedurale, i programmatori hanno fatto sempre più uso di
tecniche mirate a proteggere dati globali o funzioni
nascondendone il codice.
■  Il paradigma Object Oriented accentra l’attenzione verso i
dati.
–  L’applicazione viene suddivisa in un insieme di oggetti in grado di
interagire tra di loro e codificati in modo tale che la macchina sia in
grado di comprenderli.
–  Un linguaggio OO semplifica il meccanismo di creazione degli
oggetti.
–  Il paradigma OO si basa sulla tecnica di incapsulare e
raggruppare parti di un programma
Fondamenti di java
14
Roberto Vergallo
7
Cos’è un Oggetto?
■  Definizione da vocabolario:
“Un oggetto è un’entità che si
possa immaginare dotata di
determinate caratteristiche
e funzionalità”.
■  Il confinamento di informazioni e funzionalità in
oggetti permette livelli maggiori di astrazione e
semplifica la gestione di sistemi complessi.
15
Fondamenti di java
Roberto Vergallo
Gli oggetti come modello naturale
■  Gli oggetti nel software possono rappresentare entità
del mondo reale
–  Il primo uso di linguaggi a oggetti è stato fatto per effettuare
simulazioni
Interazioni tra diversi componenti
=
scambio di messaggi
Fondamenti di java
16
Roberto Vergallo
8
Linguaggi orientati agli oggetti
■  Forniscono astrazioni che consentono di rappresentare
direttamente nel dominio della soluzione gli elementi
del dominio del problema
–  Oggetti
–  Classi
–  Messaggi
•  Il programmatore inizia analizzando tutti i singoli aspetti concettuali che
compongono un programma. Questi concetti sono chiamati oggetti con nomi legati a
ciò che rappresentano.
•  Gli oggetti sono costituiti da attributi (dati) e funzionalità (metodi).
•  L’analisi dovrà includere le modalità di interazione tra gli oggetti e proprio grazie a
queste interazioni sarà possibile riunire gli oggetti per formare un’applicazione.
•  A differenza di procedure e funzioni, gli oggetti sono auto-documentanti e il
funzionamento interno delle funzionalità di un oggetto è completamente nascosto al
programmatore.
Fondamenti di java
17
Roberto Vergallo
Classi di oggetti
■  Pensiamo ad un libro come appartenente ad una classe di oggetti
aventi caratteristiche comuni: numeri di pagine, testo inserito in ogni
pagina, note inserite a fondo pagina (attributi).
■  Le azioni che tipicamente si compiono quando si utilizza un libro sono:
voltare pagina, leggere il testo, guardare le figure, ecc.( metodi).
■  È interessante notare che si utilizza il termine libro per generalizzare un
concetto relativo a qualcosa che contiene pagine da sfogliare, da
leggere o da strappare ossia ci si riferisce ad un insieme di oggetti con
attributi comuni, ma comunque composto da entità aventi ognuna
caratteristiche proprie che rendono ognuna differente rispetto all’altra.
■  La classe è una categoria di oggetti che fornisce la descrizione
generale del concetto di libro.
■  L’oggetto è una istanza della classe ( ogni nuovo libro) avente
caratteristiche proprie.
Fondamenti di java
18
Roberto Vergallo
9
Classi di oggetti
■  Descrivere gli oggetti uno ad uno è poco vantaggioso.
Infatti:
–  ogni oggetto richiederebbe una descrizione specifica;
–  la grande varietà ostacolerebbe la comunicazione.
■  Al contrario, una classe è uno schema generale per la creazione di oggetti simili:
–  la struttura degli oggetti è descritta come schema;
–  il comportamento degli oggetti è definito in modo effettivo.
comportamento
struttura
dichiarazione delle variabili
metodi effettivi
Roberto Vergallo
19
Fondamenti di java
Un modello a oggetti
■  L’idea informale:
rappresentare le entità della programmazione
come aggregazioni di variabili e metodi
Esempio:
ContoCorrente
comportamento
giraPagina
struttura
titolo
autore
editore
genere
acquista
variabili
aggiungiBookmark
metodi
Fondamenti di java
20
Roberto Vergallo
10
Rappresentazione di un oggetto
Mes
Met
sag
gio
odo
Me
ss
gi
o
odo
gg
do
sa
to
Me
s
Me
Attributo
ag
Met
Attributo
Attributo
io
Fondamenti di java
21
Roberto Vergallo
Messaggi
■  Gli oggetti sono gli elementi attivi di un programma
–  Come fanno gli oggetti a compiere le azioni desiderate ?
■  Gli oggetti sono attivati dalla ricezioni di un messaggio
■  Una classe determina i messaggi a cui un oggetto può
rispondere
–  metodi
■  I messaggi sono inviati da altri oggetti
Fondamenti di java
22
Roberto Vergallo
11
Scambio di messaggi
■  Il flusso dell’esecuzione viene visto come
un flusso di messaggi
Oggetto A
Utente
ricevente.nomeMetodo(parametri)
Esempio:
libro.vaiApagina(52)
libro
Oggetto B
Libro
messaggio
■  Componenti di un messaggio:
–  un riferimento al ricevente;
–  il nome del metodo;
–  i parametri.
Roberto Vergallo
23
Fondamenti di java
Classi e istanze: ContoCorrente
class ContoCorrente {
String codice;
String titolare;
float saldo;
...
void deposita(float somma) {
saldo += somma;
}
void preleva(float somma) {
saldo -= somma;
}
ContoCorrente
preleva
codice
titolare
saldo
istanza di
deposita
N58AB
Giorgio
1.350
istanza di
}
c1.deposita(31)
istanza di
N58AB
Marco
2.500
54Z
Andrea
7.823
c2.preleva(275)
c3.deposita(50)
Fondamenti di java
24
Operatore
Roberto Vergallo
12
Tipo delle variabili
■  In ogni linguaggio OOP ogni variabile deve avere un tipo
dichiarato
■  In prima approssimazione, vi sono due categorie di tipi:
–  tipi primitivi: int, float, byte short, long, double, char,
boolean);
–  riferimenti (puntatori!) ad oggetti
“Fausto Coppi”
class Ciclista {
valore
int mediaKmAlGiorno;
Bicicletta bici;
...
riferimento
void allenamento() {
int rapporto;
...
bici.cambiaRapporto(rapporto);
}
Fondamenti di java
70
bici
riferimento
Bicicletta
}
25
Roberto Vergallo
PARTE 2
Introduzione al linguaggio Java
13
Nascita di Java
■  Java viene sviluppato nei laboratori della Sun Microsystem
a partire dal 1990
■  Il suo scopo iniziale era quello di equipaggiare
apparecchiature elettroniche come televisori o altre
apparecchiature analoghe
■  Uno dei presupposti di progetto era quello di creare un
linguaggio indipendente dal processore
■  Il linguaggio avrebbe dovuto essere usato per gestire le reti
e le comunicazioni
■  Doveva essere un linguaggio ad oggetti
■  L'apprendimento del linguaggio doveva essere semplice per
chi fosse già pratico di C++
Fondamenti di java
27
Roberto Vergallo
Nascita di Java
■  1990 - Specificato da James Gosling con un gruppo (detto
Green Team) di ricercatori della Sun Microsystem
■  1991 - Usato per progetti in ambito consumer electronic con
il nome Oak (da un albero visto dalla finestra di Gosling).
■  1992 - Presentazione del primo prototipo di dispositivo
simile ad un calcolatore con sola interfaccia grafica intuitiva
(uso dell'animazione Duke).
■  1993 - Usato per sviluppare sistemi di TV interattiva
■  1995 - Cambio di nome in Java (non è un acronimo)
Fondamenti di java
28
Roberto Vergallo
14
Il linguaggio Java
■  Semplice
■  Sicuro
■  Indipendente dalla piattaforma
–  "write once, run anywhere"
■  Libreria molto ricca
–  packages
■  Pensato per Internet
–  applet
Roberto Vergallo
29
Fondamenti di java
Linguaggi e traduzione
■  I programmi sono scritti in un Linguaggio di
Programmazione
Linguaggio macchina
Linguaggio simbolico
Traduzione
Fondamenti di java
30
Roberto Vergallo
15
Linguaggi compilati e interpretati
linguaggio
compilato
Il compilatore produce un eseguibile
in codice macchina. L’esecuzione
sarà molto veloce ma lo stesso
eseguibile non può essere usato su
piattaforme diverse.
linguaggio
interpretato
Il codice é indipendente dalla
piattaforma, ma deve essere
eseguito attraverso un interprete
che in genere è molto poco
efficiente.
Fondamenti di java
Roberto Vergallo
31
Creare un programma in C x Windows
Codice sorgente
#include <stdio.h>
...
main(int argc, char **argv) {
...
initialize(argv[0]);
run(argv[1], argv[2]);
if (!errno)
printf(”Done.\n”);
else
exit(errno);
cc <opzioni> <nomi di file>
Compilatore
(windows)
Binario
Binario
(windows)
Programma
eseguibile
Linker
(windows)
}
(windows)
Librerie
Librerie
Librerie
■  Tipicamente:
–  si creano uno o più moduli (file) di codice sorgente;
–  si utilizzano librerie standard e/o librerie specifiche;
–  il compilatore traduce il codice sorgente in un formato binario;
–  il linker combina il prodotto della compilazione con le librerie.
Fondamenti di java
32
Roberto Vergallo
16
Creare un programma in C x Linux
Codice sorgente
cc <opzioni> <nomi di file>
#include <stdio.h>
...
main(int argc, char **argv) {
...
initialize(argv[0]);
run(argv[1], argv[2]);
Compilatore
(Linux)
Binario
Binario
(Linux)
Programma
eseguibile
Linker
(Linux)
if (!errno)
printf(”Done.\n”);
else
exit(errno);
}
(Linux)
Librerie
Librerie
Librerie
■  Tipicamente:
–  si creano uno o più moduli (file) di codice sorgente;
–  si utilizzano librerie standard e/o librerie specifiche;
–  il compilatore traduce il codice sorgente in un formato binario;
–  il linker combina il prodotto della compilazione con le librerie.
33
Fondamenti di java
Roberto Vergallo
Traduzione Java
■  Sfrutta sia la compilazione che l’interpretazione
■  Java Byte Code
–  Il linguaggio macchina di una macchina virtuale
–  Java Virtual Machine (JVM)
–  NON leggibile dall’uomo
–  Conservato in class files
Fondamenti di java
34
Roberto Vergallo
17
Traduzione Java
javac <opzioni> <nomi di file>
Compilatore
Codice sorgente
Bytecode
Binario
public class Esempio1 {
Programma
in
esecuzione
Interprete
public static void
main(String[] args) {
System.out.println(“Primo
Programma Java”); …
}
Librerie
Librerie
Librerie
}
–  non si produce un programma eseguibile indipendente;
–  il codice sorgente viene tradotto in bytecodes;
–  il collegamento tra ‘pezzi’ di programma viene fatto ‘al volo’;
–  le operazioni effettive vengono eseguite dall’interprete.
Fondamenti di java
35
Roberto Vergallo
Traduzione Java
Fondamenti di java
36
Roberto Vergallo
18
Java Virtual Machine
■  Un programma Java NON può essere eseguito senza
Java Virtual Machine
–  Interpreta il codice Java Byte Code
–  Oggi si utilizza la compilazione just-in-time
–  E’ a sua volta in esecuzione sul calcolatore
Roberto Vergallo
37
Fondamenti di java
Bootstrap dell’esecuzione
■  La macchina virtuale Java esegue come prima cosa il
metodo main della classe di bootstrap
java Copia DaUnFile.txt AUnAltroFile.txt
class Copia {
...
public static void
main(String[] args) {
if (args.length < 2) {
System.out.println(
”Uso: Copia <from> <to>”
System.exit(0);
}
else {
copia(args[0], args[1]);
}
...
Copia.class
CLASSPATH
Copia.class
Macchina
virtuale
}
Fondamenti di java
38
Roberto Vergallo
19
PARTE 3
Introduzione alla sintassi Java
Come si scrive un metodo
■  In prima approssimazione, un metodo Java è molto simile
ad una funzione C:
–  dichiarazione formale: nome del metodo, tipo di valore
ritornato, nome e tipo dei parametri formali;
–  gli operatori sono quelli del C (e.g. +, *, =, +=, ==, !=, ...);
–  le istruzioni di controllo sono quelle del C (i.e., if, else,
switch, for, while, do);
–  l’istruzione di ritorno è return.
class Aritmetica {
long fattoriale(long arg) {
if (arg == 0) {
return 1L;
}
else {
long temp;
}
Fondamenti di java
}
}
temp = arg * this.fattoriale(arg - 1);
return temp;
40
Roberto Vergallo
20
Elementi fondamentali dell’ambiente Java (cont.)
■  Requisiti per programmare in ambiente Java (JDK):
–  PC con processore Pentium 2 266MHz o superiore e 128 Mb di
RAM.
–  245 Mb di spazio libero sull’hd.
–  Java Development Kit (JDK). (http://www.oracle.com/it/technologies/java/index.html)
•  Java Runtime Environment (JRE) (\jre)
– 
Permette di eseguire applicazioni scritte in Java e consiste della Java Virtual Machine
(JVM), classi Java comprese le Java API e alcuni files di supporto ma non contiene
strumenti di sviluppo come compilatori e debugger.
•  Development Tools (\bin).
•  Demo Applets and Applications (\demo).
•  Source Code (\include).
•  Additional libraries (\lib).
Fondamenti di java
41
Roberto Vergallo
Introduzione alle applicazioni Java (cont.)
Il mio primo programma
class Welcome1 {
// linea
public static void main (String args[]) {
// linea
System.out.println (“Welcome to Java Programming"); // linea
}
// linea
}
// linea
1
2
3
4
5
Un programma è composto da un insieme di dichiarazioni di classi. Nel nostro esempio
abbiamo la classe Welcome1 la cui dichiarazione inizia a linea 1 e termina a linea 5.
Una classe non può contenere direttamente delle istruzioni ma può contenere la
dichiarazione di metodi che a loro volta contengono le istruzioni. La nostra classe
contiene la dichiarazione di un solo metodo che inizia a linea 2.
Un metodo è identificato da un nome, nel nostro caso main, e racchiude tutte le
istruzioni e dichiarazioni tra una parentesi graffa aperta e una chiusa, dunque il nostro
metodo termina a linea 4.
Il Java è case sensitive: Welcome1<> welcome1
Fondamenti di java
42
Roberto Vergallo
21
Introduzione alle applicazioni Java (cont.)
Il mio primo programma
class Welcome1 {
// linea
public static void main (String args[]) {
// linea
System.out.println ("Welcome to Java Programming"); // linea
}
// linea
}
// linea
1
2
3
4
5
Un metodo può essere attivato solo dall’interno di un altro metodo. Al momento
dell’attivazione è possibile fornire al metodo invocato dei parametri racchiusi tra
parentesi tonde e separati da virgole e ricevere da questo un valore di ritorno.
La linea 3 contiene l’unica istruzione eseguibile di tutto il programma e consiste
nell’invocazione del metodo println, contenuto in una classe fornita con il
linguaggio, che visualizza il parametro passato tra parentesi tonde seguito da un
carattere di ritorno a capo.
Commenti:
// su singola linea
/* e */ su più linee
/** e */ commento di documentazione per l’utility JAVADOC
Ogni istruzione DEVE terminare con il punto e virgola (;)
Fondamenti di java
43
Roberto Vergallo
Introduzione alle applicazioni Java (cont.)
■  Il programma deve essere contenuto in un file il cui nome deve corrispondere al nome della classe
seguito dal postfisso .java e deve essere compilato. Supponendo di disporre dell’ambiente di
sviluppo JDK, la compilazione si ottiene con il comando javac seguito dal nome della classe con
estensione.
javac Welcome1.java
■  Il compilatore produce un file il cui nome corrisponde a quello della classe seguito dal
postfisso .class.
■  Per eseguire il nostro programma Welcome1.class è necessario richiamare l’interprete, che
nell’ambiente JDK è java, seguito dal nome del file senza estensione.
java Welcome1
Fondamenti di java
44
Roberto Vergallo
22