15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.

Slides:



Advertisements
Presentazioni simili
if (condizione.) { blocco_istruzioni } else
Advertisements

Costruttori e Distruttori
Selezione A. Ferrari.
If a cascata, switch, operatori logici
16/11/2004Laboratorio di Programmazione - Luca Tesei1 Espressioni booleane, confronti.
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
3/12/2004Laboratorio di Programmazione - Luca Tesei1 Sequenze di lunghezza variabile ArrayList Operazioni Ricerche.
5/11/2004Laboratorio di Programmazione - Luca Tesei1 Esercizi Su Progettazione e Implementazione di classi.
29/10/2004Laboratorio di Programmazione - Luca Tesei1 Metodi e variabili istanza Definizione e chiamata di metodi Uso delle variabili istanza Documentazione.
9/11/2004Laboratorio di Programmazione - Luca Tesei1 Tipi numerici di base - Costanti Interi e decimali Definizione di costanti.
22/10/2004Programmazione e Laboratorio di Programmazione – Luca Tesei1 Laboratorio – Primo Impatto Scrivere un semplice programma I primi concetti.
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
29/11/2004Laboratorio di Programmazione - Luca Tesei1 Ancora sulla progettazione/Pacchetti Concetti di coesione/accoppiamento/coerenza Uso dei package.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
Istruzioni condizionali e blocco
Programmazione Ingegneria TLC
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) dopo ciascuna istruzione del main: public class Up extends Object { public.
PRIMO ESERCIZIO (del ) Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) dopo ciascuna istruzione del main: public.
Programmazione in Java (3)
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) JAVA: i commenti Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Derivazione tra classi
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Selezione (=scelta) con “if-else”
Eccezioni.
Capitolo 3 Realizzare classi
Java base II: Strutture di Controllo
I DATI LE ISTRUZIONI LE STRUTTURE FONDAMENTALI
Introduzione a:. Nella prima parte di questo corso si vedranno i CONCETTI di: CLASSE (programma) METODO (Algoritmi e dati) CONCETTI CLASSICI DI PROGRAMMAZIONE.
Programmazione in Java
Programmazione in Java Claudia Raibulet
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
Diagramma di flusso del problema del Supermercato.
11/11/2004Laboratorio di Programmazione - Luca Tesei1 Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di.
Diagramma di flusso del problema del Calcolo del Bollo di Circolazione
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Esercizio n° 001
Diagramma di flusso del problema dello stipendio del rappresentante.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Lezione n° 07 - Esercitazione
Anno accademico Le istruzioni di controllo in C.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
1 Lezione IX Lu 10-Ott Convertire numeri in stringhe  Si puo’ usare l’operatore di concatenazione; funziona anche con i numeri:  In alternativa.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Gestione dei thread in Java
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
Introduzione a Java. Java Linguaggio Object-Oriented La maggior parte dei dati manipolati dai programmi e’ contenuta in oggetti La principale forma di.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi

15/11/2004Laboratorio di Programmazione - Luca Tesei2 Scelte Fino ad ora il corpo dei metodi che abbiamo scritto aveva solo un modo di essere eseguito: in sequenza dalla prima istruzione all’ultima In applicazioni non banali il comportamento dei metodi deve variare a seconda dei dati di input: il programma deve prendere delle decisioni in base ai dati in suo possesso Vediamo quindi come si fa ad effettuare delle scelte nei programmi

15/11/2004Laboratorio di Programmazione - Luca Tesei3 Il costrutto if Riconsideriamo la classe BankAccount Il metodo withdraw preleva dal conto una cifra qualsiasi In una applicazione reale, invece, il metodo dovrebbe controllare se la cifra richiesta è disponibile e solo in quel caso effettuare il prelievo Per far questo si può usare lo statement (enunciato) if

15/11/2004Laboratorio di Programmazione - Luca Tesei4 Il costrutto if public class BankAccount {... public void withdraw(double amount) { if (amount <= balance) balance = balance – amount; }... }

15/11/2004Laboratorio di Programmazione - Luca Tesei5 Il costrutto if In questo modo l’assegnamento balance = balance – amount ; viene eseguito solo se la condizione tra parentesi tonde è vera. Il significato di (amount <= balance) è un valore di tipo boolean, cioè un valore nell’insieme { true, false } L’espressione è vera ( true ) se il valore della variabile amount (parametro esplicito del metodo) è minore o uguale al valore della variabile istanza balance dell’oggetto si cui si sta eseguendo il metodo

15/11/2004Laboratorio di Programmazione - Luca Tesei6 Rappresentazione con diagramma a blocchi amount <= balance balance = balance - amount Vero Falso

15/11/2004Laboratorio di Programmazione - Luca Tesei7 Il costrutto if Se la condizione risulta falsa l’ if non fa niente e il controllo passa al comando successivo Potremmo pensare, comunque, di avvertire in qualche modo l’utente che il prelievo non è possibile Per far questo è possibile aggiungere all’ if un’alternativa ( else ) che contiene un comando che viene eseguito solo se la condizione è falsa ( false )

15/11/2004Laboratorio di Programmazione - Luca Tesei8 Il costrutto if-else public class BankAccount {... public void withdraw(double amount) { if (amount <= balance) balance = balance – amount; else System.out.println( “Importo Richiesto Non Disponibile”); }... }

15/11/2004Laboratorio di Programmazione - Luca Tesei9 Il costrutto if-else La semantica dell’if-else è la seguente: 1.Viene calcolato il valore dell’espressione di tipo boolean fra parentesi tonde 2.Se l’espressione ha valore true allora viene eseguito il comando che si trova tra l’espressione e la parola riservata else. 3.Se l’espressione ha valore false allora viene eseguito il comando che si trova dopo la parola riservata else 4.In ogni caso, dopo l’esecuzione del comando corrispondente (caso 2 o caso 3), l’esecuzione continua con l’enunciato che segue

15/11/2004Laboratorio di Programmazione - Luca Tesei10 Rappresentazione con diagramma a blocchi amount <= balance balance = balance - amount Vero Falso Importo Richiesto Non Disponibile

15/11/2004Laboratorio di Programmazione - Luca Tesei11 Attenzione: errore! public class BankAccount {... public void withdraw(double amount) { if (amount <= balance) balance = balance – amount; if (amount > balance) System.out.println( “Importo Richiesto Non Disponibile”); }... } Errore! Non è la stessa cosa dell’if-else: dopo l’esecuzione del primo if il valore di balance può essere diverso e l’espressione negata potrebbe diventare vera, mentre all’inizio era falsa!

15/11/2004Laboratorio di Programmazione - Luca Tesei12 Rappresentazione con diagramma a blocchi amount <= balance balance = balance - amount Vero Falso amount > balance Vero Falso Importo Richiesto Non Disponibile Percorso che non esiste nell’if-else

15/11/2004Laboratorio di Programmazione - Luca Tesei13 Blocchi Il costrutto if o if-else prevede che sia inserito un solo comando dopo l’espressione tra parentesi e dopo la parola riservata else Invece potremmo aver bisogno di eseguire più di un comando nel “ramo true” e/o nel “ramo false” Per far questo usiamo la possibilità, offerta dal linguaggio Java, di creare blocchi di comandi

15/11/2004Laboratorio di Programmazione - Luca Tesei14 Blocchi Un blocco inizia con { e finisce con } All’interno delle parentesi graffe possono essere inseriti zero o più enunciati Un blocco può essere inserito in qualunque punto all’interno del corpo di un metodo I blocchi possono essere annidati : un blocco può contenere altri blocchi che a loro volta possono contenere altri blocchi Un blocco viene visto dal compilatore come un unico enunciato

15/11/2004Laboratorio di Programmazione - Luca Tesei15 Blocchi Supponiamo ad esempio che se un utente tenta di prelevare del denaro che non ha, oltre alla stampa del messaggio, venga anche decrementato il saldo di una penale costante Possiamo scrivere così:

15/11/2004Laboratorio di Programmazione - Luca Tesei16 Blocchi public class BankAccount {... public static final double PENALE = 5.0; public void withdraw(double amount) { if (amount <= balance) { double newBalance = balance – amount; balance = newBalance; } else { System.out.println(“Importo Richiesto Non Disponibile”); balance = balance – PENALE; System.out.println(“Penale di “ + PENALE + “ euro applicata”); }... } Blocco del ramo “true” Blocco del ramo “false”

15/11/2004Laboratorio di Programmazione - Luca Tesei17 Blocchi e variabili di frame Nel blocco del ramo “true” dichiariamo una nuova variabile di tipo double che chiamiamo newBalance In Java, quando si apre un nuovo blocco, viene sempre aggiunto un frame nuovo nella pila di frame contenuta nell’attivazione corrente Le variabili dichiarate all’interno del nuovo blocco hanno scope (contesto) limitato ad esso Esse cesseranno di esistere quando l’esecuzione di tutti i comandi del blocco sarà finita e, quindi, il frame verrà buttato via

15/11/2004Laboratorio di Programmazione - Luca Tesei18 Visibilità delle variabili e blocchi Ricordiamoci che quando viene riferita una variabile con un certo nome all’interno di un metodo la macchina astratta Java segue un metodo ben preciso per rintracciarla: 1.Cerca il nome all’interno del frame in testa alla pila di frame dell’attivazione corrente 2.Se lo trova allora quella è la variabile riferita 3.Se non lo trova lo cerca all’interno dei frame sottostanti dal più recente a quello più in basso. 4.Se non lo trova in nessun frame la variabile non è stata dichiarata (è un errore che viene trovato dal compilatore)

15/11/2004Laboratorio di Programmazione - Luca Tesei19 Visibilità delle variabili e blocchi: conflitto Il compilatore non permette, all’interno della stessa attivazione, di ridefinire un nome di variabile, anche se in un blocco interno Facciamo un esempio. Supponiamo di trovarci nella seguente situazione alla chiamata del metodo withdraw su un certo oggetto creato in un main

15/11/2004Laboratorio di Programmazione - Luca Tesei20 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } Posizione attuale

15/11/2004Laboratorio di Programmazione - Luca Tesei21 Visibilità delle variabili e blocchi Attivazione del main (congelata/ non raggiungibile) this amount BankAccount balance 90.0 Heap Attivazione della chiamata di withdraw Primo frame (corrisponde al blocco principale del metodo)

15/11/2004Laboratorio di Programmazione - Luca Tesei22 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // Non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } Posizione attuale

15/11/2004Laboratorio di Programmazione - Luca Tesei23 Visibilità delle variabili e blocchi Attivazione del main (congelata/ non raggiungibile) this amount BankAccount balance 90.0 Heap newBalance

15/11/2004Laboratorio di Programmazione - Luca Tesei24 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } Posizione attuale

15/11/2004Laboratorio di Programmazione - Luca Tesei25 Visibilità delle variabili e blocchi Attivazione del main (congelata/ non raggiungibile) this amount BankAccount balance 90.0 Heap newBalance L’apertura di un nuovo blocco corrisponde alla crazione di un nuovo frame in testa alla pila

15/11/2004Laboratorio di Programmazione - Luca Tesei26 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } Posizione attuale

15/11/2004Laboratorio di Programmazione - Luca Tesei27 Visibilità delle variabili e blocchi Attivazione del main (congelata/ non raggiungibile) BankAccount balance 90.0 Heap this amount newBalance penaltyBalance 85.0 Nuovo frame per il nuovo blocco. La variabile penaltyBalance nasce e muore con il nuovo blocco

15/11/2004Laboratorio di Programmazione - Luca Tesei28 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } Posizione attuale

15/11/2004Laboratorio di Programmazione - Luca Tesei29 Visibilità delle variabili e blocchi Attivazione del main (congelata/ non raggiungibile) BankAccount balance 85.0 Heap this amount newBalance Il frame per il nuovo blocco e la relativa variabile penaltyBalance vengono buttati via

15/11/2004Laboratorio di Programmazione - Luca Tesei30 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newBalance = balance – amount; if (newBalance >= 0) balance = newBalance; else { System.out.println(“Importo Richiesto Non Disponibile”); { // Nuovo Blocco // non posso ridichiarare newBalance double penaltyBalance = balance – PENALE; balance = penaltyBalance; } // penaltyBalance non esiste più! System.out.println(“Penale di “ + PENALE + “ euro applicata”); } Posizione attuale Blocco del ramo “false” chiuso

15/11/2004Laboratorio di Programmazione - Luca Tesei31 Visibilità delle variabili e blocchi Attivazione del main (congelata/ non raggiungibile) BankAccount balance 85.0 Heap this amount newBalance Il frame per il blocco del ramo “false” dell’if viene buttato via (non contiene variabili) alla fine del blocco

15/11/2004Laboratorio di Programmazione - Luca Tesei32 Visibilità delle variabili e blocchi Alla fine dell’esecuzione del blocco principale di withdraw: public void withdraw(double amount) { double newBalance = balance – amount;... } viene cancellato il frame principale, ma anche tutta l’attivazione creata per eseguirlo

15/11/2004Laboratorio di Programmazione - Luca Tesei33 Visibilità delle variabili e blocchi Attivazione del main (di nuovo in esecuzione) BankAccount balance 85.0 Heap