Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main...

37
Struttura del Struttura del programma programma • Intestazione • Lista di istruzioni • Esempio: public class Hello { Hello { public static void main (String [] args){ main (String [] args){ System.out.println System.out.println(”Ciao come stai?");

Transcript of Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main...

Page 1: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Struttura del programmaStruttura del programma

• Intestazione

• Lista di istruzioni

• Esempio:public class Hello { Hello {

public static void main (String [] args){ main (String [] args){

System.out.printlnSystem.out.println(”Ciao come stai?");

Page 2: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

La grammatica di Java La grammatica di Java (non completa)(non completa)

Program::= [Imports] public class Ide MainDef

Imports::= Import ; Imports | Import

Import::= import java.ide.(ide | * )

MethodList::=MainDef

MainDef::= {public static main ([String [ ] args]) {StatementList}

Page 3: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

La grammatica di Java La grammatica di Java (non completa)(non completa)

StatementList::=Statement StatementList | Statement::= Command | Declaration

Command::= System.out.print[ln](Exp)

Exp::= Exp + Exp | (Exp) | Ide | Literal | ....

Literal::= StringLiteral |

IntegerLiteral |

FloatingLiteral |

CharacterLiteral |

BooleanLiteral |

NullLiteral

Page 4: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

La grammatica di Java La grammatica di Java (non completa)(non completa)

Ide::= Char CharSeq

StringLiteral::= “CharSeq”

CharSeq::= Char CharSeq | Char::= a | b | ... z | A | ... | Z | 0 | ... | 9 | ...

IntegerLiteral ::= (+ | -) Integer | 0

Integer ::= Digit DigitSeq

Digit ::= 0 | 1 | 2 | ... | 9

DigitSeq ::= Digit DigitSeq |

Page 5: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Stampa di dati in JavaStampa di dati in Java(Output)

• Si stampano sequenze di caratteri (String). Sia s una stringa

System.out.print(s); stampa la stringa s

System.out.println(s); stampa s e va a capo

La stringa s può essere:

1. una sequenza di caratteri racchiusi tra “ ”

2. stringhe concatenate s1+s2 (+ operatore di concatenazione)

3. qualunque valore che puo` essere convertito in stringa ad es. i numeri (attenzione al + vedi es.)

Page 6: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Tipi di dati primitivi in JavaTipi di dati primitivi in Java

• numeri:

– interi 1,+22,-133, int, long, short

– razionali 0.345, 56.54, 9, float, double

• booleani: (true,false) boolean

• caratteri: ‘a’, ... ‘A’ char

Page 7: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

public class volume{ public static void main (String[] args)//calcolo della quantita` totale di bibite { final double bottVol =2.0; final double lattVol = 0.355; int bottNum = 4; int lattNum = 10; double totale = bottVol * bottNum + lattVol * lattNum; System.out.println(“volume totale ” + totale + “ litri” ); }}

Un altro esempioUn altro esempio

Page 8: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

La sintassi di Java La sintassi di Java (le dichiarazioni)

Declaration ::=[DescSeq] Type Ide [= Exp];

DescSeq ::= Desc DescSeq |

Desc ::= public | private | static | final

Command::= System.out.print[ln](Exp)

Type ::= int | boolean | double | float | char | Ide

Page 9: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

CostantiCostanti final Type Ide=Exp;

Ide è una costante cioè un nome a cui è associato un valore (analogamente alle variabili) di tipo T, a cui però può essere assegnato un valore una sola volta.

Vantaggi:

Aumentano la leggibilità

Se cambia il valore della costante devo modificarlo solo nell’inizializzazione

Page 10: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

CommentiCommenti

Aumentano la leggibilita` se usati con criterio.

In Java ci sono due modi di inserire commenti:

• commenti su una sola riga //:

//calcolo della quantita` totale di bibite

• commenti su piu` righe /* */:

/* Commenti racchiusi tra parentesi */

Page 11: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Comandi Linux per JavaComandi Linux per Java

• Per eseguire abbiamo visto:

java nomeClasse

• Per compilare :

javac nomeClasse.java

dove nomeClasse.java è il nome del file contenente il (sorgente del) programma Java, editato usando emacs o un altro editor di testi.

Page 12: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Per eseguire un programma:Per eseguire un programma:• Occorre:

– scrivere il programma in un file (usando ad esempio emacs) dandogli come nome il nome della classe che ha come metodo statico main con aggiunto il suffisso “.java”

– compilare il programma con il comando javac

– eseguire il programma con il comando java

Page 13: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Lettura di dati in JavaLettura di dati in Java(Input)

• Non useremo la lettura standard perchè un po’ troppo complessa, esempio:

– c e` una variabile che: va dichiarata come segue: ConsoleReader c=new ConsoleReader (System.in)

– i comandi a disposizione sono

• readInt: c.readInt

• readLine: c.readLine()

• readDouble: c.readDouble()

• readChar: c.readChar()

Page 14: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

La sintassi di Java La sintassi di Java ((non completa))

Exp::= Exp + Exp | (Exp) | Ide | Literal |

new ConsoleReader (System.in); |

c.readLine(); |

c.readDouble(); |

c.readInt(); |

c.readChar();

Page 15: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Astrazione sui valoriAstrazione sui valori• Introduzione di nomi con associati dei valori

• Esempio:

public class Hello { Hello {

public static void main (String [] args){ main (String [] args){

System.out.printlnSystem.out.println(”Come ti chiami ");

ConsoleReader c=new ConsoleReader (System.in);

String nome=c.readLine();

System.out.printlnSystem.out.println(”Ciao "+nome);}}

Page 16: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Altri tipi predefiniti :double, e Altri tipi predefiniti :double, e float per i razionalifloat per i razionali

• Costanti 0.0, 1.2, 5.89 ecc.

• Tutte le operazioni sugli interi:+.-.*,/

• È possibile anche fare operazioni miste (operandi int e double) il risultato è un double 3*1.2=3.6

• Assegnamento: int float double

– int x=7; double y; y=x; y ora vale 7.0 (esempio)

– x=y/2 errore x=(int)y cast

Page 17: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Composizione di istruzioniComposizione di istruzioniSequenzializzazione: le istruzioni vengono eseguite in

sequenza:

S1

S2

...

Sk

Lo stato in cui viene eseguita S2 è lo stato risultante dopo l’esecuzioni di S1 nello stato di partenza, ecc. lo stato in cui viene eseguita Si è lo stato risultante dopo l’esecuzioni di Si-1.Sintassi della sequenzializzazione:

StatementList::=Statement StatementList |

Page 18: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Composizione di istruzioniComposizione di istruzioniCondizionale: le istruzioni eseguite dipendono dal verificarsi o meno di una condizione. Due forme:Sintassi

1. if (Cond) C1 else C2

2. if (Cond) C1 Semantica informaleNello stato di partenza viene verificata la condizione (Cond) che è un’espressione boolena. Se la condizione è verificata viene eseguito S1 altrimenti nella forma 1 si esegue S2, nella forma 2 si prosegue con l’istruzione successiva. S1 ed S2 sono comandi

Page 19: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Esempio di condizionale:Esempio di condizionale:massimo di due numerimassimo di due numeri

publicpublic classclass CalcolaMassimo2 { CalcolaMassimo2 {

publicpublic staticstatic voidvoid main (String [] args) main (String [] args)

{ ...{ ...

intint n1=console.readInt(); n1=console.readInt();

intint n2=console.readInt(); n2=console.readInt();

ifif (n1>n2) System.out.println( (n1>n2) System.out.println(”Massimo "”Massimo "+n1); +n1);

elseelse System.out.println( System.out.println(”Massimo "”Massimo "+n2); +n2);

}}}}

Page 20: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

AssegnamentoAssegnamentoModifica di variabile: Sintassi

1. Ide = Exp

2.Semantica informaleNello stato di partenza viene valutata l’espressione Exp, ottenendo il valore v espressione che deve essere dello stesso tipo (o compatibile) con il tipo di Ide. Ide deve essere dichiarata nello stato di partenza. Lo stato risultante è lo stato di partenza in cui Ide ha come valore v

Page 21: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Esempio di condizionale:Esempio di condizionale:massimo di tre numerimassimo di tre numeri

publicpublic classclass CalcolaMassimo3 { CalcolaMassimo3 {

publicpublic staticstatic voidvoid main (String [] args){ main (String [] args){

intint max=console.readInt(); max=console.readInt();

intint n1=console.readInt(); n1=console.readInt();

intint n2=console.readInt(); n2=console.readInt();

ifif (n1>max) max=n1; (n1>max) max=n1;

ifif (n2>max) max=n2; (n2>max) max=n2;

System.out.println(System.out.println("Numero massimo e` ""Numero massimo e` "+max);}}+max);}}

Page 22: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Composizione di istruzioniComposizione di istruzioniIteratori: le istruzioni del corpo dell’iteratore vengono eseguite ripetutamente. La ripetizione è avviene se è verificata una condizione. Esistono tre forme di iterazione in Java:

1. while2. do - while 3. for

Gli iteratori in Java sono tutti equivalenti (si può sempre sostituire un iteratore con un altro di diversa forma. Forme diverse si adattano diversamente alle varie situazioni. Il risultato è che se si sceglie la giusta forma il programma è più leggibile.

Page 23: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

whilewhileIl corpo S dell’iteratore viene eseguito finchè la condizione (cond) è vera.

•Sintassi:

while (cond) S

•Semantica informale: Si valuta la condizione (cond) nello stato di partenza, se è vera si esegue il corpo S, nello stato risultante dall’esecuzione di S si rivaluta l’intero while.

Page 24: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Esempio while: massimo di k numeriEsempio while: massimo di k numeripublicpublic classclass CalcolaMassimoKWhile { CalcolaMassimoKWhile {publicpublic staticstatic voidvoid main (String [] args){ main (String [] args){

finalfinal intint k= k=1010; ; System.out.print(System.out.print("Scrivi il primo numero > ""Scrivi il primo numero > "); ); intint max=c.readInt(); max=c.readInt();intint n; n;intint i= i=22; ; whilewhile(i<=k) { (i<=k) {

System.out.print(System.out.print("Scrivi il ""Scrivi il "+i++i+" numero> "" numero> "); );

n=c.readInt(); n=c.readInt(); ifif(n>max) max=n; (n>max) max=n; i++; } i++; }

System.out.println(System.out.println("Il valore massimo e` ""Il valore massimo e` "+max);}}+max);}}

Page 25: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

While con variabili booleaneWhile con variabili booleane

• La definizione di variabili booleane inizializzate true utilizzate nella condizione di un while permettono di terminare quando la condizione diventa falsa (dimostrazione per assurdo).

• Vedi esempio LeggiFinoAlPunto.

Page 26: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Un altro iteratore il forUn altro iteratore il for

Com::= ... | forfor ([T] Ide ([T] Ide =Exp1; BE ; Ide=Exp2) C |...=Exp1; BE ; Ide=Exp2) C |...

contatore4 corpo

1) Inizializzazione del contatore. Dichiarazione o assegnamento

3 aggiornamento del contatore

2) condizione

Il for in Java è equivalente al while (vedi semantica) cambia solo la sintassi.

Page 27: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

La sintassi di Java: La sintassi di Java: comandicomandi

Command::= Ide= Exp;

| {StatementList}

| if (Exp) C1 else C2;

| if (Exp) C;

| while (Exp) C;

| do C while (Exp);

| for([Type] Ide = Exp; Exp; Ide=Exp)

C;

| System.out.print[ln](Exp);

Page 28: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

public class FigureGeometriche{public static void main (String[] args){System.out.println(“Scrivi C per Cerchio”); System.out.println(“Scrivi R per Rettangolo”); System.out.println(“Scrivi T per Triangolo”); char c =Leggi(); if(c==‘C’) faiCerchio; //Blocco per Cerchio else if(c==‘R’) faiRettangolo; /*Blocco per

Rettangolo*/ else if(c==‘T’) faiTriangolo; //Blocco per

Triangolo else System.out.println(“Errore figura sconosciuta”);}}

Esempio Figure geometricheEsempio Figure geometriche

Page 29: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

faiCerchio: {System.out.println(“Dammi il raggio del cerchio”); final double pigreco=3.14; double raggio=leggi(); double area=raggio*raggio*pigreco; System.out.println(“Area del cerchio di raggio “+raggio+”e` ”+ area) }

Esempio - Figure geometriche CerchioEsempio - Figure geometriche Cerchio

Page 30: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

faiRettangolo:{System.out.println(“Dammi la base del rettangolo”); double base=leggi(); System.out.println(“Dammi l’altezza del

rettangolo”); double altezza=leggi(); System.out.println(“Area del rettangolo di base “ +base+” e altezza “+altezza+ “ e` ”+ base*altezza}

Esempio Figure geometriche:RettangoloEsempio Figure geometriche:Rettangolo

Page 31: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

faiTriangolo:{System.out.println(“Dammi la base del triangolo”); double base=leggi(); System.out.println(“Dammi l’altezza del

triangolo”); double altezza=leggi(); System.out.println(“Area del triangolo di base “ +base+” e altezza “+altezza+ “ e` ”+ base*altezza/2}

Esempio Figure geometriche:TriangoloEsempio Figure geometriche:Triangolo

Page 32: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Programmazione strutturataProgrammazione strutturata• Problemi complessi si risolvono suddividendo il

problema in problemi più semplici ciascuno risolto da un programma– es: faiCerchio, faiRettangolo e faiTriangolo sono pezzi

di programma che assolvono un compito, in questo caso quello di leggere e calcolare per una data fig. geometrica.

• I programmi definiti dentro un programma più generale si chiamano procedure o funzioni nei linguaggi o-o (Java): metodi.

Page 33: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

““Sottoprogrammi”Sottoprogrammi”• Trasferimento del controllo (cambia il flusso delle istruzioni)

• Concetti di programma chiamante e programma invocato

• Scambio di dati tra programma invocato e programma chiamante

– parametri formali e

– parametri attuali

– risultato del programma invocato

– ambiente del programma invocato

Page 34: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

public static Type Ide (Type Ide1, Type Ide2)

{StmtList }

... Ide(Val1,Val2)....

DefinizioneDefinizione e e invocazioneinvocazione di di “sottoprogrammi”“sottoprogrammi”

nome metodo

parametri formali

parametri attuali

corpo del metodotipo del risultato

corrispondenza formali attuali

Page 35: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Le classi in JavaLe classi in Java

• Le classi rappresentano insiemi di entità con le stesse caratteristiche.

• Nei linguaggi object-oriented il modello privilegia la rappresentazione delle entità.

• Ogni programma Java prevede la definizione di almeno una classe.

• In questa fase la classe è vista come un contenitore di metodi (“sottoprogrammi”)

Page 36: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Astrazione procedurale in Java: Astrazione procedurale in Java: Metodi statici (static)Metodi statici (static)

• Permettono di definire funzioni di uso comune non legate a specifiche entità che sono rappresentate nel programma

• Sono sempre definiti in una classe

• Anche il main (programma principale) è un metodo statico della classe che viene passata come argomento al comando Linux:

java nomeClasse che provoca l’esecuzione del programma

Page 37: Struttura del programma Intestazione Lista di istruzioni Esempio: Hello { public class Hello { main (String [] args){ public static void main (String []

Strutturazione del programma Strutturazione del programma definendo più classidefinendo più classi

• Invece di aggiungere i metodi alla classe in cui è definito il main è possibile definire i metodi in una classe diversa.

• In questo modi possono raggruppare metodi che svolgono funzioni analoghe (es. Geometria e Num)

• L’invocazione diventa: IdeClass.Ide(Val1,..Valk)