Principi di Progettazione del Software a.a. 2017-2018 - Università del Salento
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Principi di Progettazione del Software
a.a. 2017-2018
Fondamenti di Java (pt. 1)
ing. Roberto Vergallo
Contatti
■ Ing. Roberto Vergallo
■ Laboratorio GSA Lab
– http://gsalab.unisalento.it
■ Mail
– roberto.vergallo@unisalento.it
■ Ricevimento
– Mandare mail
Fondamenti di java 2 Roberto Vergallo
1Contatti
■ Twitter
– https://twitter.com/RVergallo
■ Telegram Channel (PPS UniSalento)
– https://t.me/joinchat/AAAAAEMzTjUVN6EcP6qBag
Fondamenti di java 3 Roberto Vergallo
Chi sono
■ Ph.D. in Ingegneria dell’Informazione @ UniSalento
– Tesi su Internet of Things (IoT)
■ 10 anni di esperienza presso GSA-Lab
■ Esperienza all’estero presso UCLA (Los Angeles, USA)
– Modalità innovative di ricarica di Electric Vehicles (EV)
■ Attualmente assegnista di ricerca sulle tematiche IoT ed
Education
■ Socio fondatore start-up Vidyasoft s.r.l. (www.vidyasoft.it)
– IoT e mobile apps nel settore FinTech
■ Altre cose…
Fondamenti di java 4 Roberto Vergallo
2Obiettivi della lezione
■ Introduzione alla programmazione Object Oriented
– Paradigma Procedurale
– Paradigma Object Oriented
– Classi e Oggetti
■ Introduzione al Linguaggio Java
– Caratteristiche Principali di Java
– Java Development Kit (JDK)
■ Introduzione alla Sintassi di Java
– Variabili, Operatori, Regole sintattiche di Java, ecc.
Fondamenti di java 5 Roberto Vergallo
Testi per esercitazione consigliati
■ Cay S. Horstmann “Concetti
di Informatica e Fondamenti
di Java” Quinta Edizione,
Apogeo
Fondamenti di java 6 Roberto Vergallo
3Risorse
■ Pagina del prof. Mainetti (area materiale didattico):
– http://www.ingegneria.unisalento.it/scheda_personale/-
/people/luca.mainetti/materiale
Fondamenti di java 7 Roberto Vergallo
Risorse e strumenti
■ Tutorial Java
– http://docs.oracle.com/javase/tutorial/?frontpage-spotlight
– http://www.roseindia.net/java/
■ Java 2 Platform Standard Edition
– http://www.oracle.com/technetwork/java/javase/downloads/index.ht
ml
– Versioni 7.0 oppure 8.0
■ IntelliJ IDEA
– https://www.jetbrains.com/idea/download/
■ Alternativa: Eclipse IDE for Java Developers
– http://www.eclipse.org/downloads/
Fondamenti di java 8 Roberto Vergallo
4http://docs.oracle.com/javase/7/docs/api/
Fondamenti di java 9 Roberto Vergallo
Evoluzione del modello di programmazione
■ Un tempo i programmi erano scritti in assembler in cui ogni dato era
globale e le funzioni andavano disegnate a basso livello.
■ 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.
– L’attenzione del programmatore è accentrata sul problema
– 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 ritorno di valori.
– Le applicazioni basate su modelli procedurali sono difficili da aggiornare e
controllare con meccanismi di debug.
Fondamenti di java 10 Roberto Vergallo
5Evoluzione del modello di programmazione (cont.)
Linguaggio C Java
Macchina Pascal C++
Assembler Fortran …
Approccio Paradigma Paradigma Tempo
a basso livello Procedurale Object Oriented
Fondamenti di java 11 Roberto Vergallo
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 12 Roberto Vergallo
6Nascita 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 13 Roberto Vergallo
Il linguaggio Java
■ Semplice
■ Sicuro
■ Indipendente dalla piattaforma
– "write once, run anywhere"
■ Libreria molto ricca
– packages
■ Pensato per Internet
– applet
Fondamenti di java 14 Roberto Vergallo
7Linguaggi e traduzione
■ I programmi sono scritti in un Linguaggio di
Programmazione
Linguaggio macchina
Linguaggio simbolico
Traduzione
Fondamenti di java 15 Roberto Vergallo
Linguaggi compilati e interpretati
Il compilatore produce un eseguibile in
codice macchina. L’esecuzione sarà
linguaggio molto veloce ma lo stesso eseguibile
compilato non può essere usato su piattaforme
diverse.
Il codice é indipendente dalla
linguaggio piattaforma, ma deve essere eseguito
attraverso un interprete che in genere
interpretato
è molto poco efficiente.
Fondamenti di java 16 Roberto Vergallo
8Creare un programma in C x Windows
Codice sorgente cc
#include
... Compilatore Binario
main(int argc, char **argv) {
(windows) Binario
(windows)
...
initialize(argv[0]);
run(argv[1], argv[2]); Programma
Linker
eseguibile
if (!errno)
printf(”Done.\n”); (windows)
else (windows)
exit(errno);
}
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 17 Roberto Vergallo
Creare un programma in C x Linux
Codice sorgente cc
#include
... Compilatore Binario
main(int argc, char **argv) {
(Linux) Binario
(Linux)
...
initialize(argv[0]);
run(argv[1], argv[2]); Programma
Linker
eseguibile
if (!errno)
printf(”Done.\n”); (Linux)
else (Linux)
exit(errno);
}
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 18 Roberto Vergallo
9Traduzione Java
■ Sfrutta sia la compilazione che l’interpretazione
■ Java Byte Code
– Il linguaggio macchina di una macchina virtuale
– Java Virtual Machine
– NON leggibile dall’uomo
– Conservato in class files
Fondamenti di java 19 Roberto Vergallo
Traduzione Java
Codice sorgente java
public class esempio2 {
Compilatore Bytecode
Binario
public static void
main(String[] args) {
System.out.println(“Seco Programma
ndo Programma Java”); Interprete in
System.out.println(“Fond esecuzione
amenti di informatica”);
…
}
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 20 Roberto Vergallo
10Traduzione Java
Fondamenti di java 21 Roberto Vergallo
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
Fondamenti di java 22 Roberto Vergallo
11Primo programma
class Welcome1 { // linea 1
public static void main (String args[]) { // linea 2
System.out.println (“Welcome to Java Programming"); // linea 3
} // linea 4
} // linea 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 23 Roberto Vergallo
Primo programma
class Welcome1 { // linea 1
public static void main (String args[]) { // linea 2
System.out.println ("Welcome to Java Programming"); // linea 3
} // linea 4
}
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 24 Roberto Vergallo
12Primo programma
■ 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 25 Roberto Vergallo
Il modello astratto di Java:
rappresentazione ad oggetti
Fondamenti di java 26 Roberto Vergallo
13Dominio del problema e dominio della soluzione
■ I linguaggi imperativi definiscono un “dominio della
soluzione” che “astrae” la macchina sottostante
– Es.
1. read i
2. print i
3. goto 1
■ 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 27 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 28 Roberto Vergallo
14Cos’è 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.
Fondamenti di java 29 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 30 Roberto Vergallo
15Linguaggi 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 31 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 32 Roberto Vergallo
16Un modello a oggetti
■ L’idea informale:
rappresentare le entità della programmazione
come aggregazioni di variabili e metodi
Esempio: ContoCorrente
comportamento saldoAttuale
deposita
codice ritira
titolare
struttura saldo
interesse
fido
variabili modificaFido
modificaInteresse
metodi
Fondamenti di java 33 Roberto Vergallo
Rappresentazione di un oggetto
Attributo
Attributo
Attributo
Fondamenti di java 34 Roberto Vergallo
17Messaggi
■ 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 35 Roberto Vergallo
Scambio di messaggi
■ Il flusso dell’esecuzione viene visto come
un flusso di messaggi
Esempio:
Oggetto A Ciclista
ricevente.nomeMetodo(parametri) bici.cambiaRapporto(2)
bici
Oggetto B Bicicletta
messaggio
■ Componenti di un messaggio:
– un riferimento al ricevente;
– il nome del metodo;
– i parametri.
Fondamenti di java 36 Roberto Vergallo
18Classi
■ 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
Fondamenti di java 37 Roberto Vergallo
Classi e istanze: ContoCorrente
class ContoCorrente {
String codice; ContoCorrente
String titolare;
float saldo; ritira
...
void deposita(float somma) { codice istanza di
saldo += somma; N58AB
titolare
} Gino
saldo
1.350
void preleva(float somma) { deposita
saldo -= somma;
istanza di
}
}
c1.deposita(31)
istanza di
AA54Z
Pino
7.823
N58AB
Lino
2.500 c2.preleva(275)
Operatore
c3.deposita(50)
Fondamenti di java 38 Roberto Vergallo
19Tipo delle variabili
■ In Java 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 ad oggetti (i.e. Object o sottoclasse).
class Ciclista { “Tom Sawyer”
valore int mediaKmAlGiorno;
Bicicletta bici;
riferimento ... 70
void allenamento() { riferimento
int rapporto; Bicicletta
...
bici.cambiaRapporto(rapporto);
}
}
Fondamenti di java 39 Roberto Vergallo
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;
temp = arg * this.fattoriale(arg - 1);
return temp;
}
}
}
Fondamenti di java 40 Roberto Vergallo
20Bootstrap 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 {
...
static void main(String[] args)
{
if (args.length < 2) {
System.out.println( Copia.class
”Uso: Copia ”
System.exit(0);
}
else {
copia(args[0], args[1]);
}
CLASSPATH Copia.class Macchina
... virtuale
}
Fondamenti di java 41 Roberto Vergallo
Elementi fondamentali dell’ambiente Java
Il programma viene creato dall’editor e salvato su disco
Fase 1 Editor Disco
Fase 2 Compilatore Disco Il compilatore (javac) crea i bytecode e li memorizza su
disco
Memoria primaria
Fase 3 Caricatore Il caricatore delle classi mette i bytecode in memoria
Disco
Memoria primaria
Analizzatore L’analizzatore di bytecode conferma che tutti i bytecode
Fase 4
bytecode siano validi e rispettino le regole di Java
Memoria primaria
Fase 5 Interprete L’interprete legge i bytecode e li traduce in un linguaggio
che il computer è in grado di comprendere.
Fondamenti di java 42 Roberto Vergallo
21Elementi 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 43 Roberto Vergallo
22Puoi anche leggere