Corso di Laurea Ingegneria Civile Fondamenti di...

41
Le basi del linguaggio Java 1 Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010

Transcript of Corso di Laurea Ingegneria Civile Fondamenti di...

Le basi del linguaggio Java 1

Corso di Laurea Ingegneria Civile

Fondamenti di Informatica

Dispensa 10

Le basi del linguaggio Java

Aprile 2010

Prerequisiti

Nozioni generali sulla sintassi e semantica

del linguaggio naturale

Conoscenza delle varie fasi della scrittura di

un programma, fino alla sua esecuzione

Introduzione alla programmazione

strutturata

Concetto di variabile

Le basi del linguaggio Java 2

Contenuti

Sintassi e semantica

Introduzione alla sintassi di Java

Introduzione alla semantica di Java • semantica delle espressioni

• semantica delle istruzioni

Sintassi, semantica ed errori

Introduzione alle istruzioni di Java

Le basi del linguaggio Java 3

Obiettivi (competenze da acquisire)

Al termine dell’unità didattica lo studente sarà in grado di

Individuare gli errori presenti in un programma

Leggere le informazioni sugli errori, che si hanno in fase di

compilazione

Distinguere gli errori sintattici dagli errori semantici

Le basi del linguaggio Java 4

Linguaggi naturali . . .

Per definire un linguaggio naturale si parte dalla definizione di un alfabeto in italiano ci sono 21 lettere, in inglese 26, ...

Con i caratteri dell’alfabeto possiamo formare un

insieme di sequenze, dette parole

Non tutte le sequenze sono parole del linguaggio naturale

La grammatica del linguaggio fornisce le regole per decidere quali sequenze sono parole del linguaggio parole corrette grammaticalmente

Le basi del linguaggio Java 5

. . . Linguaggi naturali

Con le lettere dell’alfabeto italiano possiamo costruire

alcune sequenze

ad esempio abcdef, ghil, rst - che non sono parole della

lingua italiana

ad esempio andare, aula, corso, acqua, soqquadro, - che

sono parole della lingua italiana, cioè corrette

grammaticalmente

Le basi del linguaggio Java 6

. . . Linguaggi naturali

Con le parole, corrette, possiamo formare un insieme

di parole, dette frasi

Non tutte le sequenze sono frasi del linguaggio

naturale

La sintassi del linguaggio fornisce le regole per

decidere quali sequenze sono frasi del linguaggio

frasi corrette sintatticamente, o sintatticamente ben formate

Le basi del linguaggio Java 7

. . . Linguaggi naturali

In italiano la regola base della sintassi dice che le frasi sono costruite con sequenze di parole che

seguono la struttura

soggetto verbo complemento

soggetto, verbo e complemento non sono altro che dei nomi, cioè denotano, alcuni particolari e ben precisi sottoinsiemidell’insieme di tutte le parole del linguaggio.

Ad esempio la sequenza di parole il lo la non è quindi una frase della lingua italiana

ad esempio la sequenza di parole gatto mangia topo è una frase della lingua italiana, ovvero è sintatticamente ben formata

Le basi del linguaggio Java 8

. . . Linguaggi naturali

Solo alcune delle frasi del linguaggio, cioè di quelle

ben formate sono anche valide, cioè hanno un

significato

La semantica del linguaggio stabilisce quali tra le frasi

ben formate sono anche valide e quindi si occupa

dell’interpretazione (del significato) delle frasi

ad esempio la frase il gatto mangia il topo è una ben formata

ma è anche valida, cioè ha un significato

Le basi del linguaggio Java 9

Sintassi

La sintassi di un linguaggio si occupa della forma delle frasi del linguaggio, ovvero delle regole che permettono di costruire frasi ben formate del linguaggio

Esempio di frase in italiano

il gatto mangia il topo

Frammento della sintassi della lingua italiana

frase soggetto verbo complemento

soggetto articolo nome

verbo mangia, beve

complemento articolo nome

articolo il, lo, la

nome gatto, monte, topoLe basi del linguaggio Java 10

Semantica

La semantica di un linguaggio si occupa

dell’interpretazione del linguaggio, ovvero del

significato delle frasi corrette sintatticamente

Esempio di frasi corrette sintatticamente in italiano, ma

non tutte valide

il gatto mangia il topo

il topo mangia il monte

il cane mangia il topo

il monte beve il cane

Le basi del linguaggio Java 11

Regole sintattiche . . .

Le regole della sintassi sono chiamate regole di

produzione, come nell’esempio precedente

Nelle regole di produzione compaiono elementi (simboli)

terminali, come - mangia, beve, il, lo, la, gatto, monte,

topo - ed elementi (simboli) non-terminali, come – frase,

soggetto, verbo, …. – che sono ―categorie sintattiche‖

cioè nomi che denotano insiemi di simboli terminali

Una fissata categoria sintattica, detta assioma, è quella

dalla quale deve partire il processo di produzione

Nel caso della lingua italiana l’assioma è frase

Le basi del linguaggio Java 12

. . . Regole sintattiche

frase soggetto verbo complemento

soggetto articolo nome

verbo mangia, beve

complemento articolo nome

articolo il, lo, la

nome gatto, monte, topo

Una fissata categoria sintattica, detta assioma, è quella

dalla quale deve partire il processo di produzione

Nel caso della lingua italiana l’assioma è frase

Le basi del linguaggio Java 13

Sintassi, semantica e linguaggi

Un programma è un insieme di frasi in un

linguaggio di programmazione• quali sono le frasi valide in un linguaggio di programmazione?

• qual è il significato delle frasi valide?

Nello studio dei linguaggi (linguaggi naturali e

linguaggi di programmazione) vengono distinte

due componenti• la sintassi del linguaggio

– si occupa della forma delle frasi del linguaggio, per formare le frasi ―ben

formate‖

• la semantica del linguaggio

– stabilisce quali tra le frasi ―ben formate‖ sono anche valide

– si occupa dell’interpretazione (del significato) delle frasi valide

Le basi del linguaggio Java 14

Introduzione alla sintassi di Java

La sintassi di Java si occupa della formazione di frasi valide in Java, mediante la formalizzazione delle ―regole sintattiche‖

• la definizione di una classe è formata dalla parola class, seguita dal nome della classe e dal corpo della classe

• il nome di una classe è un identificatore • un identificatore è una sequenza non vuota di caratteri

alfanumerici, iniziante per un carattere alfabetico • il corpo di una classe è formato da un elenco di dichiarazioni

della classe, racchiuso tra parentesi graffe { e }• possibili dichiarazioni di una classe sono: la definizione di un

metodo, la definizione di un costruttore, la dichiarazione di una variabile

• la definizione di un metodo è formata dall’intestazione del metodo seguita dal corpo del metodo

• il corpo di un metodo è un blocco • un blocco è una sequenza di istruzioni e dichiarazioni

racchiusa tra parentesi graffe { e }

Le basi del linguaggio Java 15

Sintassi e grammatiche

La sintassi di Java è descritta da una grammatica

composta da • elementi terminali — le parole e i simboli che possono

comparire nei programmi

– class public . , ; { } a b c d ... 0 1 2 ...

• elementi non terminali — le categorie sintattiche, utilizzate

per la descrizione dei programmi — ma che non compaiono

nei programmi

– definizione-classe identificatore corpo-classe definizione-metodo blocco

sequenza-istruzioni-blocco istruzione

• produzioni (o regole sintattiche) — le regole che specificano

come sia possibile derivare frasi da ciascun non terminale

• assioma — l’elemento non terminale che guida la scrittura di

un intero programma o classe

Le basi del linguaggio Java 16

Esempi di produzioni

definizione-classe: class identificatore-classe corpo-classe

corpo-classe: { dichiarazioni-corpo-classeopt }

dichiarazioni-corpo-classe:dichiarazione-corpo-classedichiarazione-corpo-classe dichiarazioni-corpo-classe

dichiarazione-corpo-classe: definizione-metododefinizione-costruttoredichiarazione-variabile

definizione-metodo: intestazione-metodo corpo-metodo

corpo-metodo: blocco

blocco: { sequenza-istruzioni-bloccoopt }

Le basi del linguaggio Java 17

Produzioni

definizione-classe:

class identificatore-classe corpo-classe

• la prima riga di una produzione contiene un non terminale

– la produzione ha lo scopo di descrivere le possibili forme per questo non

terminale

• nelle righe successive alla prima vengono descritti i possibili

modi per espandere il non terminale

– questa produzione afferma che una definizione-classe è formata dal

terminale class, seguito da un identificatore-classe e da un corpo-classe

– le forme per identificatore-classe e corpo-classe sono descritte dalle

rispettive produzioni

Le basi del linguaggio Java 18

Alcuni elementi sintattici nella

definizione di una classe

/* Applicazione che visualizza una frase sullo schermo. */

class ScrittoreSulloSchermo {

public static void main(String[] args) {

System.out.println("ciao a tutti");

System.out.println("questo testo introduce");

System.out.println("i fondamenti dell'informatica");

}

}

definizione-classeidentificatore-classe

corpo-classe definizione-metodo

Le basi del linguaggio Java 19

Alcuni elementi sintattici nella

definizione di un metodo

public static void main(String[] args) {

System.out.println("ciao a tutti");

System.out.println("questo testo introduce");

System.out.println("i fondamenti dell'informatica");

}

definizione-metodointestazione-metodo

corpo-metodo — blocco istruzione-blocco — istruzione

sequenza-istruzioni-blocco

Le basi del linguaggio Java 20

Esempio — identificatori

I nomi delle classi, dei metodi e delle variabili appartengono alla categoria grammaticale degli identificatori

• alcuni esempi di identificatori

– Math, println, frase, sqrt, RadiceQuadrata

– System.out non è un identificatore

La regola (informale) per la formazione degli identificatori è

• un identificatore è una sequenza non vuota di caratteri alfanumerici (alfabetici e numerici), iniziante con un carattere alfabetico

– in realtà, sono ammessi anche alcuni caratteri speciali, come il carattere

―underscore‖ _

– alcune sequenze di caratteri sono riservate — come ad esempio class e

public — non sono identificatori

• l’uso dei caratteri minuscoli e maiuscoli è significativo – ad esempio, alfa e Alfa sono identificatori diversi

Le basi del linguaggio Java 21

Sintassi per gli identificatori

identificatore: sequenza-caratteri ma non parola-chiave

sequenza-caratteri: carattere-alfabeticosequenza-caratteri carattere-alfanumerico

carattere-alfanumerico: carattere-alfabeticocifra

carattere-alfabetico: uno di a à b c ... x y z A À B C ... X Y Z

cifra: uno di 0 1 2 ... 8 9

parola-chiave: uno di abstract boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static super switch synchronized this throw throws transient try void volatile while

Le basi del linguaggio Java 22

Introduzione alla semantica di Java

La semantica di un linguaggio • stabilisce quali sono le frasi valide tra quelle ben formate

– la sintassi è uno strumento troppo povero

• si occupa dell’interpretazione (del significato) delle frasi valide

– legame stretto tra sintassi e semantica

Le basi del linguaggio Java 23

Frasi ben formate e frasi valide

Una istruzione valida

System.out.println("ciao a tutti");

Una istruzione ben formata – ma non valida

System.out.stampa("ciao a tutti");

Una istruzione che non è ben formata

System.out.println("ciao a tutti";

• la sintassi caratterizza le frasi ben formate

• le frasi valide sono un sottoinsieme delle frasi ben formate

• i tipi rivestono un ruolo importante nel discriminare tra frasi valide e no

Le basi del linguaggio Java 24

Semantica di una frase

La semantica di una frase dipende anche dal tipo

della frase • la semantica di una espressione viene data in termini di un tipo

e di un valore

• la semantica di una istruzione viene data in termini dell’effetto

dell’esecuzione dell’istruzione

– in modo diverso per istruzioni semplici e istruzioni strutturate

Le basi del linguaggio Java 25

Semantica delle espressioni

a + b

• è una espressione ben formata

• è anche valida se (ad esempio)

– a e b sono variabili di tipo int

– alle variabili a e b è stato già assegnato un valore

– in questo caso è una espressione di tipo int

Semantica statica• controllata durante l’analisi statica del codice (dal compilatore)

– assegna un tipo a ogni espressione

Semantica dinamica• valutata durante l’esecuzione dinamica del codice

– assegna un valore a ogni espressione

• il valore di a+b è dato dal valore di a sommato a quello di b

– è noto solo durante l’esecuzione Le basi del linguaggio Java 26

Semantica delle istruzioni

somma = a + b;

• è una istruzione ben formata

• è anche valida se (ad esempio)

– a, b e somma sono variabili di tipo int

– alle variabili a e b è stato già assegnato un valore

Semantica statica • principalmente compatibilità tra tipi

Semantica dinamica • in questo caso

– valuta l’espressione a+b

– memorizza il valore calcolato nella variabile somma

Le basi del linguaggio Java 27

Semantica delle istruzioni semplici

System.out.println("ciao a tutti");

Semantica statica • esiste l’oggetto System.out?

• qual è il tipo dell’oggetto System.out?

• per il tipo dell’oggetto System.out esiste una operazione di

nome println che ha come parametro una stringa?

Semantica dinamica • invia il messaggio println("ciao a tutti") all’oggetto

System.out

– poi System.out sa che cosa fare...

Le basi del linguaggio Java 28

Semantica delle istruzioni strutturate

La semantica di Java si occupa anche della

semantica delle istruzioni strutturate (istruzioni

che al loro interno contengono altre istruzioni)

while (i<=n) {

somma = somma + i;

i = i + 1;

}

la semantica delle istruzioni strutturate viene data in

termini di – esecuzioni delle istruzioni contenute

– valutazioni delle condizioni di controllo

Le basi del linguaggio Java 29

Sintassi, semantica ed errori

Possibili errori di programmazione• la frase non è ben formata

– errori sintattici o grammaticali

• la frase è ben formata ma non è valida

– errori semantici

– errori di semantica statica ed errori di semantica dinamica

• la frase è valida – ma il suo significato è diverso da quello

voluto

– errori logici

Le basi del linguaggio Java 30

Errori sintattici

System.out.println(ciao a tutti);

// ERRORE: mancano le virgolette

System.out println("ciao a tutti");

// ERRORE: manca un punto

a = 10,

// ERRORE: virgola al posto di

punto e virgola

Gli errori sintattici sono riconosciuti e segnalati dal

compilatore

Le basi del linguaggio Java 31

Errori semantici

System.out.stampa("ciao a tutti");

// ERRORE: il metodo stampa non è definito

system.out.println("ciao a tutti");

// ERRORE: system.out non è un

// riferimento valido

Gli errori semantici sono di due tipi • errori di semantica statica

– riconosciuti e segnalati dal compilatore (come i due errori mostrati qui sopra)

• errori di semantica dinamica

– possono verificarsi durante l’esecuzione del programma (non sono

riconosciuti dal compilatore)

Le basi del linguaggio Java 32

Errori logici

System.out.print("ciao a tutti");

// ERRORE: andava usato il metodo println

doppiodin = n+2;

// ERRORE: + anziché *

Gli errori logici non sono riconosciuti dal

compilatore, e possono verificarsi durante

l’esecuzione del programma

Le basi del linguaggio Java 33

Introduzione alle istruzioni di Java

Una applicazione Java, nella sua forma più

semplice

• il corpo del metodo main è una sequenza di istruzioni e

dichiarazioni

/* Applicazione che visualizza una frase sullo schermo. */

class ScrittoreSulloSchermo {

public static void main(String[] args) {

System.out.println("ciao a tutti");

System.out.println("questo testo introduce");

System.out.println("i fondamenti dell'informatica");

}

}

eventuale clausola di importazione commento sull’applicazione

nome dell’applicazione sequenza di istruzioni e dichiarazioni

Le basi del linguaggio Java 34

Una classificazione delle principali

istruzioni di Javaistruzione o

dichiarazione

dichiarazionevariabile locale

istruzione

istruzionesemplice

istruzionestrutturata

istruzioneespressione

istruzionereturn

istruzioneassegnazione

istruzioneinvocazionedi metodo

istruzionedi incrementoo decremento

istruzionecreazionedi oggetto

istruzioneripetitiva

istruzionecondizionale

blocco

istruzioneif-else

istruzioneif

istruzionefor

istruzionewhile

istruzionedo-while

istruzionebreak

istruzionecontinue

istruzionevuota

Le basi del linguaggio Java 35

Una classificazione delle principali

istruzioni di Java

Dichiarazioni • di variabili, locali a un metodo

Istruzioni • istruzioni semplici

– invocazione di metodo, assegnazione, ...

– istruzioni atomiche

• istruzioni strutturate

– blocco, istruzioni condizionali, istruzioni ripetitive

– istruzioni non atomiche, ― molecolari‖

– sono istruzioni di controllo

Le basi del linguaggio Java 36

Riepilogo della dispensa

Le basi del linguaggio Java 37

Conoscenze acquisite

Analogia tra il linguaggio naturale e il

linguaggio di programmazione

Modalita’ di generazione delle regole

grammaticali in un linguaggio

Le basi del linguaggio Java 38

Competenze acquisite

Saper individuare gli errori presenti in un programma

Saper leggere le informazioni sugli errori, che si hanno in

fase di compilazione

Saper distinguere gli errori sintattici dagli errori semantici

Le basi del linguaggio Java 39

Parole chiave

Alfabeto, grammatica, frase, sintassi, semanticaFrase ben formata, frase validaCategoria sintattica, produzioni, assioma, parole chiaveErrori sintattici, semantici, logici

Le basi del linguaggio Java 40

Rifermimenti al libro di testo

Capitolo 6

Le basi del linguaggio Java 41