Ing. Stefano Cadei -- Java

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Lezione 8 Anno accademico Titolare corso: Prof. Costanza Torricelli
1 Introduzione ai calcolatori Parte II Software di base.
Il Software.
Interazione Uomo - Macchina
Recupero debito quarto anno Primo incontro
PROGRAMMARE IN PASCAL (le basi)
PHP.
I linguaggi di programmazione
Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi.
Elementi di Programmazione
EP 10/11 - PBLezione 2-21 Elementi di Programmazione Tipi di Dati Conversioni Istruzioni di controllo del flusso.
EP 11/12 - PBLezione 31 Elementi di Programmazione Tipi di Dati e Conversioni Istruzioni di controllo del flusso.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Moduli 1 In Access è possibile automatizzare diverse operazioni mediante l’utilizzo del linguaggio VBA (Visual Basic for Applications). Le istruzioni.
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
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.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Introduzione alla programmazione lll
Informatica? Scienza della rappresentazione e dell’elaborazione dell’informazione ovvero Studio degli algoritmi che descrivono e trasformano l’informazione.
Somma = A + B start Stampa Somma Leggi A,B stop Sub SOMMA( ) Dim A, B as Integer A = InputBox("Immetti un numero") B = InputBox(Immetti un secondo numero)
Introduzione al VISUAL BASIC
O.O.P. Costruiamo la prima classe in VISUAL BASIC Corso abilitante riservato ad abilitati in altra classe classe di concorso A042 - INFORMATICA.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Unità Didattica 2 I Linguaggi di Programmazione
Strutture di controllo in C -- Flow Chart --
Lezione 2 Programmare in ASP
I SISTEMI OPERATIVI.
DBMS ( Database Management System)
C# LE BASI 2007 Prima lezione - Introduzione.
Excel Avanzato Personalizzare Excel.
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Programmare in Visual Basic
Lo sviluppo del software e i linguaggi di programmazione
Il Sistema Operativo (1)
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Complessità di un algoritmo
ASP.NET. …un po’ di ASP ASP (Active Server Pages) è una tecnologia Microsoft che consente di scrivere codice eseguibile (script) lato server, inserendo.
RISOLUZIONE DI EQUAZIONI
LABVIEW Sommario Che cosa è uno strumento virtuale (VI) creato con LABVIEW Parti di un VI: pannello frontale diagramma a blocchi Confronto tra il principio.
Dal problema all’ algoritmo
Il ciclo while.  Permette di ripetere un blocco di istruzioni fino a quando non si verifica un determinato evento  Il ciclo while può essere realizzato.
Introduzione a Javascript
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
Lez 4 (13/14)Elementi di Programmazione1 Strutture di controllo 2.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
Lez. 12 (13/14)Elementi di Programmazione1 Lezione 12 Esercizi.
Microsoft Access Chiavi, struttura delle tabelle.
Interpreti e compilatori
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Laboratorio Informatico
Informatica e Informatica di Base
Stringhe In linguaggio C. Stringhe  Un insieme di caratteri in sequenza forma una stringa.  Alcuni linguaggi definiscono per le stringhe uno specifico.
Programmazione orientata agli Oggetti Introduzione a Java.
Transcript della presentazione:

Ing. Stefano Cadei -- Java Visual Basic Introduzione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Origini “antiche” 1964: BASIC (Beginner’s All Purpose Symbolic Instruction Code) (+) General Purpose (+) Semplicità (+) Third Generation (--) Poca potenza espressiva (--) Non ottimizzato per HW/SO (--) Non orientato agli oggetti (+) Bill Gates ne costruisce un interprete Pascal (1969) C (1972) C++ (1983) Utilizzato prevalentemente per scopi didattici Ing. Stefano Cadei -- Java

Le Graphical User Interfaces 70’s: Sistemi Unix / 1982: MS-DOS 1.0 : NO GUI 1984: Macintosh 1984: X Window System (MIT, ambito Unix) 1985: Windows 1.0 Ambienti operativi basati su GUI Linea Comando Ambiente grafico Ambienti operativi basati su EVENTI Programmazione Modale Programmazione “Event Driven” Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le GUI (2) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Da console a GUI Non cambia le strutture di controllo (cicli, ecc) Cambia profondamente il modo di gestire l’input/output da e verso il mondo esterno Input: passaggio alla programmazione “EVENT DRIVEN” Viene meno il concetto di “istruzione di lettura” Scrittura di “Routine di risposta ad eventi” (no readline(stringa)) Una complessa gestione dei messaggi è gestita dall’ ambiente Output: invocazione di opportune API Grafiche writeln(“Hello World”) MsgBox(“Hello World”) Ing. Stefano Cadei -- Java

Programmazione con Console Immagine tratta da “Programmare Windows 3.1” – 1993) Ing. Stefano Cadei -- Java

Programmazione con GUI Immagine tratta da “Programmare Windows 3.1” – 1993) Ing. Stefano Cadei -- Java

Programmazione con GUI (2) Programmazione diretta con API grafiche ed eventi relativamente complessa (--) Difficoltà per i programmatori provenienti da MSDOS e Unix (--) Necessità di una dettagliata comprensione dei meccanismi di generazione ed inoltro di eventi (--) Di fatto solo il C/C++ si rivela inizialmente facilmente adattabile alla nuova situazione Necessità di semplificazione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Visual Basic (1991?- 94): Visual Basic Linguaggio derivato dal BASIC Fortemente integrato con Windows Supporto (parziale) alla progr. ad oggetti Introduce la programmazione visuale Parte dell’interfaccia grafica del programma viene disegnata e non più codificata (IDE) Il controllo sintattico (e quando possibile semantico) delle istruzioni viene eseguito all’istante Introdotta anche con altri linguaggi (Visual C++) Ing. Stefano Cadei -- Java

Integrated Devel. Environment Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Visual Basic (3) (--) Il linguaggio eredita i limiti del BASIC (poca potenza espressiva, non ottimizzato per l’HW) (+) Eredita la semplicità del BASIC (+) L’ambiente di sviluppo per la programmazione visuale lo rende un prodotto di successo (??) L’ambiente evita (impedisce?) al programmatore di conoscere i dettagli sulla gestione degli eventi Perché proprio BASIC? ….(Bill Gates?) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Visual Basic (4) La “definizione” di Visual Basic. Visual Basic (VB) is the third-generation (1) event-driven (2) programming language and integrated development environment (IDE) […]. VB is also considered a relatively easy to learn and use programming language, because of its graphical development (3) features and BASIC heritage (4)” (Wikipedia) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Altri Visual Basic 1995: Visual Basic for Application (VBA) Integrazione di Visual Basic in altre applicazioni Word Excel Access Power Point Concetto di programma “embedded” (MACRO) Programmazione visuale diversa rispetto a VB Presenza di nuovi oggetti (fogli di lavoro) IDE più limitato Linguaggio di fatto identico a VB tradizionale Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Altri Visual Basic (2) 2001: Microsoft introduce .NET Modello completamente ad oggetti Accesso diverso alle API di sistema 2002: Visual Basic .NET Nuova versione del linguaggio che opera su .NET (+) Approccio ad oggetti “pulito” (--) Non compatibile con Visual Basic tradizionale Ing. Stefano Cadei -- Java

Visual Basic: 3 linguaggi La situazione oggi (2009) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Contenuto del corso Parte 1 IDE Visual Basic (comune per VB e VB.NET) Programmazione base in VB 6.0 Elementi del linguaggio e primi programmi Strutture di controllo : If / For /While / Do-Loop Array e Funzioni Finestre multiple, nuovi eventi e nuovi componenti Parte 2 IDE VBA Programmazione base in VBA Interazione con fogli Excel Interazione con il sistema operativo Parte 3 Cenni di VB.NET Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Introduzione In sintesi Fino a 1984-1985 input/output console Introduzione GUI => rivoluzione nell’ I/O Eventi API Grafiche Disegno dell’interfaccia (IDE Grafico) Programmazione event driven Visual Basic / VBA / VB.NET Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Come un corso di nuoto? La teoria da sola non basta (manuali, corsi, …) Anzi, spesso la pratica permette di trovare soluzioni empiriche ai problemi Molti “praticoni” non sanno giustificare ciò che fanno Ma sono estremamente efficaci Analogia con il nuoto Chi “impara da solo” non ha uno stile corretto, però sta a galla e non ha paura Impossibile imparare a nuotare senza entrare in piscina Anche il solo bagnarsi o giocare aiuta a prendere confidenza L’esperienza diretta è fondamentale Avere confidenza con l’ambiente è fondamentale Ing. Stefano Cadei -- Java

Visual Basic (classico) Ambiente di lavoro (IDE) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’ IDE Compiti Fornitura strumenti progettazione visuale Compilazione Linking Generazione codice eseguibile Dipendenze con il SO (Windows only) Descrizione GUI Linguaggio “macchina” eseguibile Compilazione Linking Codice Sorgente Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Ambiente di lavoro (2) Avvio : scelta del tipo di applicazione Nel corso useremo EXE standard Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Ambiente di lavoro (3) Parti dell’ambiente di lavoro: Barra degli strumenti (toolbox) Barra dei menù (menubar) Area disegno Form Finestra proprietà del progetto Finestra proprietà dell’oggetto attuale Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le parti dell’ IDE Ing. Stefano Cadei -- Java

Compilazione ed esecuzione Il bottone Play (compila ed esegui) Senza scrivere nulla viene mostrata una finestra vuota Ing. Stefano Cadei -- Java

Un prog. realmente vuoto? In realtà il programma generato reagisce all’input dell’utente Finestra spostabile Finestra ridimensionabile Finestra riducibile a icona L’ IDE nasconde molti dettagli di basso livello per Gestione grafica Gestione eventi basilari Senza un adeguato IDE risultato difficile da ottenere Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il primo programma Creazione (visuale) di “Hello World” Dalla barra degli strumenti selezionare un componente Label Nella finestra di disegno form posizionare la label Modificare la proprietà “Caption” della label creata con “Hello World” Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il primo programma (2) L’esecuzione di “Hello World” Ing. Stefano Cadei -- Java

Una piccola miglioria… Modifica delle proprietà di un elemento visuale Ing. Stefano Cadei -- Java

Un Hello World più articolato… Primo esempio di programmazione event driven Gestione dell’evento click Inserire un pulsante nel form Doppio click sul pulsante Compare una nuova finestra: l’editor di codice Visual Basic Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’editor di codice Generatore dell’evento Tipo di evento Codice dell’evento Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’editor di codice (2) Il programmatore inserisce a questo punto le istruzioni da compiere in seguito al click (scrive la routine di risposta ad evento) Nessuna necessità di gestire esplicitamente messaggi L’ IDE nasconde tutti i dettagli su come fa ad arrivare in quel punto il flusso del programma Il sistema operativo inoltra le coordinate e gli estremi dell’evento e richiama la routine di risposta associata al componente generatore Ing. Stefano Cadei -- Java

Le routine di risposta ad eventi L’ IDE scrive automaticamente l’intestazione e la chiusura della routine di risposta: Parole chiave: “Sub” e “End Sub” Specificatore di visibilità (“Private” o “Public”) Nome della routine: oggettoGeneratore_evento(parametri) Esempio Private Sub Command1_Click() End Sub Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il secondo programma Invocazione da codice di API grafica: MsgBox “Hello world from button” Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Ambiente di lavoro In sintesi: IDE composto da diverse parti Toolbox e Form Area per disegnare l’interfaccia dell’applicazione Codice formato da routine di risposta ad eventi (event driven programming) Possibilità di chiamare “da codice” API grafiche Ing. Stefano Cadei -- Java

Elementi del linguaggio e primi programmi Visual Basic Elementi del linguaggio e primi programmi Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Variabili Dichiarazione di una variabile Parole chiave “Dim” e “as” Tipo di una variabile Tipo semplice Istanza di un oggetto Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Variabili (2) Esempi dichiarazione tipo semplice Dim variabile1 as Integer Dim variabile2 as Long Dim variabile3 as String Esempi dichiarazione oggetto Dim variabile1 As Cell Dim variabile2 as Row Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Variabili(3) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Un primo esempio “=“ operatore di assegnamento Private Sub Command1_Click() Dim a As Integer Dim b As Integer a = 100 b = 200 MsgBox a + b End Sub Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Un secondo esempio Private Sub Command1_Click() Dim a As Integer Dim b As Integer a = InputBox("Inserisci a") b = InputBox("Inserisci b") MsgBox a + b End Sub Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Analisi dei due esempi Mostrano l’uso di variabili intere Utilizzano due API di Windows per l’ I/O: MsgBox per l’output InputBox per l’input Approccio NON EVENT DRIVEN Concettualmente non differiscono da writeln e readln (o istruzioni analoghe) L’input blocca l’esecuzione Unica differenza: finestra invece di caratteri Ing. Stefano Cadei -- Java

Analisi dei due esempi (2) Abbandono dell’idea di richiedere un input in un determinato momento L’utente inserisci gli input in ordine sparso Al verificarsi di un determinato evento viene eseguita l’elaborazione Come accedere al contenuto inserito? Dove sono memorizzati i valori? Ing. Stefano Cadei -- Java

I componenti e le proprietà In generale, ogni componente grafico (bottone, textbox o altro) dispone di un certo numero di proprietà Modificabili dall’ IDE Leggibili e scrivibili da codice In generale, le routine di risposta ad eventi leggono il valore di certe proprietà e ne impostano altre Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il componente TextBox Modificando la proprietà Name si modifica il nome dell’oggetto grafico Tale nome è utilizzabile da codice Inseriamo due TextBox: Text1 e Text2 Ing. Stefano Cadei -- Java

Il componente TextBox (2) Accesso da codice all’oggetto Il nome dell’oggetto è accessibile nel codice come qualunque altra variabile Accesso da codice alle proprietà OGGETTO.PROPRIETA’ Es. Text1.Text Es. Text1.BackColor Proprietà Text Contiene il contenuto “attuale” del campo di testo Utilizzabile come variabile contenente il valore dell’input Ing. Stefano Cadei -- Java

Un esempio event driven Private Sub Command1_Click() Dim a As Integer Dim b As Integer a = Text1.text b = Text2.text MsgBox a + b End Sub Accesso alla proprietà text dell’oggetto textbox Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java I commenti Il carattere ‘ (apice) introduce un commento Private Sub Command1_Click() Dim a As Integer Dim b As Integer a = Text1.text b = Text2.text MsgBox a + b End Sub ‘ Accesso alla proprietà text dell’oggetto textbox Ing. Stefano Cadei -- Java

Ancora sulle routine di risposta Le routine di risposta ad un evento DEVONO essere veloci in esecuzione Non è pensabile scrivere molte istruzioni che tengano impegnata la macchina a lungo Il sistema operativo è in grado (entro certi limiti) di interrompere un esecuzione troppo lunga, oppure addirittura bloccata (PREEMPTION) Tuttavia, questa interruzione ad opera del sistema operativo, pur impedendo alla macchina di bloccarsi, non permette una corretta ripresa dell’elaborazione degli eventi Esistono meccanismi più sofisticati (thread, timer) per gestire casi di lunghe sequenze di istruzioni Nei casi basilari (come quelli di questo corso) le routine di risposta agli eventi DEVONO ESSERE BREVI Ing. Stefano Cadei -- Java

Esercizio: area rettangolo L’interfaccia richiesta Ing. Stefano Cadei -- Java

Esercizio: area rettangolo (2) Il codice Private Sub Command1_Click() 'dichiarazione variabili Dim base As Integer Dim altezza As Integer Dim area As Integer 'accesso alle proprietà dei campi di input base = textBase.Text altezza = textAltezza.Text 'calcolo dell'area area = base * altezza 'scrittura a video dell'output MsgBox "L'area vale " & Str(area) End Sub NON SONO ISTRUZIONI DI INPUT, MA DI LETTURA PROPRIETA’ NON SONO ISTRUZIONI DI INPUT, MA DI LETTURA PROPRIETA’ Ing. Stefano Cadei -- Java

El. ling. e primi programmi In sintesi: Struttura Dim-As per dichiarazione variabili Accesso alle proprietà dei componenti grafici in sostituzione delle istr. di input Il componente TextBox Commenti con ‘ (apice) Ing. Stefano Cadei -- Java

Strutture di controllo: If / For / While / Do Visual Basic Strutture di controllo: If / For / While / Do Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If - Else Sintassi If condizione Then istruzioni Else End If Esempio If Text1.Text > Text2.Text Then textEsito.Text = "Primo maggiore di secondo" Else textEsito.Text = "Secondo maggiore di primo" End If Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else (2) Operatori di confronto: >,<,=,>=,<= Operatore di uguaglianza Identico all’operatore di assegnamento In controtendenza rispetto agli altri linguaggi Pascal: ass. “:=“, uguaglianza “=“ C, C++, Java, JavaScript : ass. “=“, uguaglianza “==“ a = 10 If a = 10 then Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else : esercizio Soluzione di un equazione di 2° grado (in campo reale) a coefficienti interi Controllo del DELTA Se DELTA > 0 => due soluzioni Se DELTA = 0 => una soluzione (due uguali) Se DELTA < 0 => nessuna soluzione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else : esercizio (2) Preparazione dell’ interfaccia con IDE Obiettivo Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else : esercizio (3) Sei TextBox: tre di input e due di output TextA TextB TextC TextEquazione TextRisultato } Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else : esercizio (4) Private Sub Command1_Click() 'dichiarazione delle variabili Dim a As Integer Dim b As Integer Dim c As Integer Dim delta As Integer Dim x1 As Double Dim x2 As Double 'acquisizione dei valori dell'input (non bloccante, già inseriti) a = textA.Text b = textB.Text c = textC.Text 'scrittura a video dell'equazione textEquazione.Text = Str(a) + "x^2 +" + Str(b) + "x +" + Str(c) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else : esercizio (5) 'calcolo del delta delta = b * b - 4 * a * c 'controllo del delta, calcolo e scrittura del risultato If delta > 0 Then x1 = (-b + Sqr(delta)) / (2 * a) x2 = (-b - Sqr(delta)) / (2 * a) textRisultato.Text = "x1 = " + Str(x1) + "x2 = " + Str(x2) Else If delta = 0 Then x2 = x1 textRisultato.Text = "x1 = " & x1 + "x2 = " & x2 textRisultato.Text = "Nessuna soluzione reale" End If End Sub Ing. Stefano Cadei -- Java

Il controllo sugli input Necessità di impedire il calcolo con input non previsti La proprietà Textbox.Text accede ad un testo Se il testo rappresenta un valore numerico naturale, la stringa viene automaticamente convertita in numero Altrimenti viene segnalato un errore RunTime Ing. Stefano Cadei -- Java

Il controllo sugli input (2) Istruzione Val(Stringa) Converte un testo in valore numerico In caso di caratteri alfabetici restituisce 0 'acquisizione dei valori dell'input (non bloccante, già inseriti) a = Val(textA.Text) b = Val(textB.Text) c = Val(textC.Text) Possibile un controllo preliminare If Val(textA.Text) = 0 then … Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java For Permette di eseguire un blocco di istruzioni un numero noto di volte Sintassi For contantore=valoreIniziale To valoreFinale istruzioni Next contatore Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java For (2) Esempio Private Sub Command1_Click() 'dichiarazione variabili Dim i As Integer Dim somma As Integer ‘calcolo della somma dei primi 10 numeri For i = 1 To 10 somma = somma + i Next i MsgBox "La somma dei primi 10 numeri vale " & somma End Sub Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java For : esercizio Calcolo del fattoriale di un numero Metodo iterativo (esiste anche soluzione ricorsiva) Interfaccia richiesta Ing. Stefano Cadei -- Java

Ciclo a contatore decrescente For : esercizio (2) Private Sub Command1_Click() 'dichiarazione variabili Dim i As Integer Dim n As Integer Dim fattoriale As Integer 'lettura degli input dai campi di testo n = Val(textNumero.Text) fattoriale = 1 'calcolo del fattoriale For i = 1 To n fattoriale = fattoriale * i Next i 'scrittura del risultato textValore.Text = fattoriale End Sub Ciclo a contatore decrescente For i = n To 1 Step -1 fattoriale = fattoriale * i Next i Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java While / Do-Loop Permettono di eseguire un blocco di istruzioni fino a quando una condizione è rispettata While: Ciclo a CONDIZIONE INIZIALE Do-Loop: Ciclo a CONDIZIONE FINALE Sintassi While Inizializzazione variabili While condizione istruzioni Wend Sintassi Do-Loop Do istruzioni Loop While|Until condizione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java While / Do-Loop (2) Esempio While i = 1 While i <= n fattoriale = fattoriale * i i = i + 1 Wend Esempi Do-Loop (1) Esempi Do-Loop (2) i = 1 Do fattoriale = fattoriale * i i = i + 1 Loop While i <= n i = 1 Do fattoriale = fattoriale * i i = i + 1 Loop Until i > n Ing. Stefano Cadei -- Java

Strutture di controllo In sintesi: If-Else For Tradizionale Contatore decrescente While Do-Loop Condizione di rimanenza (Do-Loop While) Condizione di uscita (Do-Loop Until) Esercizi Equazione di secondo grado Fattoriale Ing. Stefano Cadei -- Java

Attenzione all’uso dei cicli! Come già detto, le routine di risposta ad un evento devono essere veloci in esecuzione per non bloccare l’elaborazione degli altri eventi L’uso dei cicli può diventare pericoloso Cicli troppo lunghi Cicli INFINITI Errore tipico: nei cicli While e Do ci si dimentica di incrementare il contatore Per usare cicli lunghi occorre inserire esplicitamente istruzioni avanzate di gestione del flusso del programma Operazione non sempre agevole: Visual Basic fornisce un ambiente molto semplice da utilizzare in modo standard, ma abbastanza restio a modifiche al funzionamento predefinito Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Visual Basic Array e Funzioni Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Array Array: sequenza ordinata di variabili dello stesso tipo (sia semplice che strutturato) Singoli elementi accessibili tramite indicizzazione Array monodimensionale : vettore Array n-dimensionale : matrice Sintassi dim nomeArray(dimensione) as tipo Esempio Dim vettore(10) As Integer Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Indici degli array In VB gli indici di un array partono dal valore 0 e arrivano ad n-1 Un array di 10 elementi ha indici da 0 – 9 Esempio Private Sub Form_Load() Dim a(10) As Integer Dim i As Integer For i = 0 To 10 a(i) = i Next i End Sub Sforamento non segnalato ?????? (11 posizioni assegnate) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Indici degli array(2) VB, durante le interpretazioni di debug, esegue run time il controllo sul valore degli indici degli array Tuttavia, la dichiarazione di un array alloca un valore in più rispetto al parametro “dimensione” Significati corretti della sintassi: Dim array(indice_ultimoElemento) as tipo Dim array(numeroElementi - 1) as tipo Spesso si considera (in modo non esatto) come semantica della sintassi la prima esposta, perdendo quindi un elemento dell’array Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Indici degli array(3) L’istruzione UBound (upper-bound) permette di conoscere l’ultimo indice di un vettore, e quindi corrisponde alla dimensione di un array meno uno Sintassi UBound(vettore) Esempio Dim vettore(10) As Integer MsgBox UBound(vettore) Ing. Stefano Cadei -- Java

Array di dimensione variabile Situazioni in cui la dimensione dell’array non è nota a priori Dichiarazione iniziale di un array con dimensione non precisata Utilizzo dell’istruzione Redim per dimensionamento runtime Sintassi ReDim nomeArray(dimensione) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Redim (esempio) Private Sub Form_Load() ‘dichiarazione vettore con dimensione non speficata Dim vettore() As Integer ‘impostazione della dimensione del vettore ReDim vettore(10) MsgBox UBound(vettore) ‘redimensionamento del vettore ReDim vettore(100) End Sub Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Matrici Array bidimensionale: vettore di vettori Sintassi Dim matrice (righe-1)(colonne-1) as tipo Stesso problema della dichiarazione degli array (i parametri sono in realtà i valori degli ultimi indici) Esempio 'dichiarazione matrice 2X2 Dim matrice(1, 1) As Double Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esempio Calcolo del determinante di una matrice quadrata 'dichiarazione matrice 2X2 Dim determinante, matrice(1, 1) As Double matrice(0, 0) = 1 matrice(0, 1) = 2 matrice(1, 0) = 3 matrice(1, 1) = 4 determinante = matrice(0, 0) * matrice(1, 1) - matrice(1, 0) * matrice(0, 1) MsgBox determinante Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esercizio Soluzione di un sistema lineare di due equazioni in due incognite con metodo di Cramer Interfaccia richiesta Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esempio: soluzione Private Sub Command1_Click() Dim matriceX(1, 1) as Double, matriceY(1, 1) as Double, matriceD(1, 1) as Double Dim detX, detY, detD As Double Dim x, y As Double 'popolamento matrice D matriceD(0, 0) = textA1.Text matriceD(0, 1) = textB1.Text matriceD(1, 0) = textA2.Text matriceD(1, 1) = textB2.Text 'popolamento matrice X matriceX(0, 0) = textC1.Text matriceX(0, 1) = textB1.Text matriceX(1, 0) = textC2.Text matriceX(1, 1) = textB2.Text Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esempio: soluzione (2) 'popolamento matrice y matriceY(0, 0) = textA1.Text matriceY(0, 1) = textC1.Text matriceY(1, 0) = textA2.Text matriceY(1, 1) = textC2.Text 'calcolo determinanti detX = matriceX(0, 0) * matriceX(1, 1) - matriceX(1, 0) * matriceX(0, 1) detY = matriceY(0, 0) * matriceY(1, 1) - matriceY(1, 0) * matriceY(0, 1) detD = matriceD(0, 0) * matriceD(1, 1) - matriceD(1, 0) * matriceD(0, 1) 'calcolo di X e Y x = detX / detD y = detY / detD labelRisultatoX.Caption = "X=" & x labelRisultatoY.Caption = "Y=" & y End Sub Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Subroutine e Function Modularizzazione del codice in sottoprogrammi La gestione eventi vista sino ad ora fa ampiamente uso di questo approccio Subroutine (sub): sottoprogramma che non restituisce nulla al chiamante Function: sottoprogramma che restituisce un valore al chiamante Ing. Stefano Cadei -- Java

Subroutine e Function (2) Sintassi SubRoutine Public/Private Sub Nome (parametri) Esempio Sintassi Function Public/Private Function Nome (parametri) as tipoRitornato Private Sub Prova (a As Integer, b As Integer) Private Function Somma (a As Integer, b As Integer) as Integer Ing. Stefano Cadei -- Java

Subroutine e Function (3) Invocazione subroutine nomeSubRoutine [SPAZIO] parametri Esempio Invocazione function Variabile = nomeFunction (parametri) nomeFunction [SPAZIO] parametri Prova 3, 4 Variabile = Somma(3, 4) Ing. Stefano Cadei -- Java

Function: valore di ritorno Per ritornare un valore al chiamante, una function utilizza una sintassi simile ad un assegnamento Esempio: Private Function Pari(numero As Integer) As Boolean Dim esito As Boolean If (numero Mod 2 = 0) Then esito = True Else esito = False End If ‘assegnamento del valore di ritorno Pari = esito End Function Ing. Stefano Cadei -- Java

Function: valore di ritorno (2) Non è necessario assegnare il valore di ritorno al termine della function In realtà, non esiste alcuna istruzione esplicita di ritorno L’istruzione di assegnamento del valore di ritorno è un vero assegnamento ad una variabile di tipo funzione In sostanza, il nome della function è visto (anche) come una variabile a cui assegnare il valore di ritorno Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Passaggio di array I vettori vengono implicitamente passati per riferimento Qualunque siano le dimensioni dell’ array coinvolto, una sub/function che deve ricevere tale array come parametro segue la seguente sintassi Private/Public Sub (vettore() as tipo) Private/Public Function (vettore() as tipo) as tipoRest. Le parentesi tonde indicano che si sta passando un array di dimensione imprecisata Ing. Stefano Cadei -- Java

Il passaggio dei parametri I parametri di una subroutine o di una function possono essere passati per valore o per riferimento Passaggio per valore: ByVal Passaggio per riferimento : ByRef Private Sub NomeSub(ByVal a As Integer, ByVal b As Integer) Private Sub NomeSub(ByVal a As Integer, ByVal b As Integer) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Passaggio per valore Con il passaggio per valore, il valore passato alla subroutine o function dal programma invocante è copiato nella parte di memoria occupata dalla funzione Ogni modifica sul parametro effettuata dalla funzione ha un effetto solo locale, in quanto le scritture vengono effettuate su una copia della variabile originale Ing. Stefano Cadei -- Java

Passaggio per riferimento Con il passaggio per riferimento, il chiamante passa implicitamente alla subroutine/function l’indirizzo di memoria della variabile da processare In questo caso, il sottoprogramma invocato può modificare direttamente l’area di memoria del codice chiamante Ing. Stefano Cadei -- Java

Passaggio parametri: esempio Si supponga di voler utilizzare una subroutine di scambio fra due valori all’interno del seguente programma Private Sub Command1_Click() Dim n1 As Integer Dim n2 As Integer n1 = 4 n2 = 2 Scambia n1, n2 MsgBox n1 MsgBox n2 End Sub Ing. Stefano Cadei -- Java

Passaggio parametri: es. (2) Se si utilizza ByVal lo scambio non avviene Vengono scambiate solo le copie locali Codice corretto con ByRef Private Sub Scambia(ByRef a As Integer, ByRef b As Integer) Dim temp As Integer temp = a a = b b = temp End Sub Ing. Stefano Cadei -- Java

Il passaggio di parametri (2) Se non viene utilizzata alcuna specifica sul tipo di passaggio dei parametri, di default VB6 utilizza ByRef Tuttavia, quando la sub/function invocata può scrivere sui parametri, è fortemente consigliato che il programmatore specifichi consapevolmente il tipo di passaggio Differenze tra VB e VB.NET (default ByVal) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Passaggio di array I vettori vengono implicitamente passati per riferimento Qualunque siano le dimensioni dell’ array coinvolto, una sub/function che deve ricevere tale array come parametro segue la seguente sintassi Private/Public Sub (vettore() as tipo) Private/Public Function (vettore() as tipo) as tipoRest. Le parentesi tonde indicano che si sta passando un array di dimensione imprecisata Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esercizio 1 Scrivere una funzione che calcola il valore massimo di un vettore Private Function Massimo(vettore() As Integer) As Integer Dim i As Integer max = vettore(0) For i = 1 To UBound(vettore) If vettore(i) > max Then max = vettore(i) End If Next i Massimo = max End Function Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esercizio (2) Scrivere una funzione per il calcolo del determinante ed utilizzarla all’interno del programma per il calcolo del determinante Private Function Det(m() As Double) As Double Dim valore As Double valore = m(0, 0) * m(1, 1) - m(1, 0) * m(0, 1) Det = valore End Function Ing. Stefano Cadei -- Java

Fineste multiple, nuovi eventi e nuovi componenti Visual Basic Fineste multiple, nuovi eventi e nuovi componenti Ing. Stefano Cadei -- Java

I programmi visti fino ad ora TextBox, Label e Bottoni Reazione al solo click su un pulsante Un solo Form (le MsgBox non sono form) La finestra “Proprietà del progetto” non è stata mai utilizzata Ing. Stefano Cadei -- Java

Aggiunta di un nuovo Form Proprietà del progetto Pulsante destro su cartella “Form” Inserisci Form Ing. Stefano Cadei -- Java

Aggiunta di un nuovo Form(2) Il nuovo form ha uno spazio dei nomi separato rispetto a quello precedente E’ possibile dare nomi ai componenti grafici anche se questi sono uguali a quelli di un altro form Il form che viene visualizzato per primo è comunque quello precedente (salvo modifiche alle impostazioni del progetto) Per aprire il nuovo Form nomeNuovoForm.Show Ing. Stefano Cadei -- Java

Il componente ComboBox Permette di selezionare un valore da una lista I vari elementi sono visualizzati in un menù a tendina Problemi da affrontare: Come popolare la lista? Quando popolare la lista? Qual è il valore corrente? Ing. Stefano Cadei -- Java

Metodo per il caricamento Metodo di un oggetto Funzione che è “incapsulata” dentro un oggetto Permette di far eseguire qualcosa all’oggetto Ogni variabile associata ad un componente grafico è in realtà un oggetto formato da proprietà e metodi Metodo addItem dell’oggetto combo Esempio di caricamento Dove inserire il codice di caricamento? Combo1.AddItem "Rettangolo" Combo1.AddItem "Triangolo" Combo1.AddItem "Cerchio" Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’evento Form_Load E’ un evento che viene attivato quando un form è stato caricato e PRIMA di essere visualizzato Normalmente contiene tutte le inizializzazioni della finestra Il codice che popola la lista del componente ComboBox va inserito qui Doppio click sulla superficie del form per accedere al codice Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Caricamento e accesso Caricamento (dentro Form_Load) Private Sub Form_Load() 'popolamento della lista Combo1.AddItem "Rettangolo" Combo1.AddItem "Triangolo" Combo1.AddItem "Cerchio" 'impostazione del valore di default Combo1.ListIndex = 0 End Sub Indici che partono da 0 Accesso (dove occorre…) MsgBox Combo1.Text Ing. Stefano Cadei -- Java

Diramazione dell’esecuzione A seconda del valore selezionato si eseguono azioni diverse Soluzione con If-Annidati If combo1.ListIndex = 0 then Else If combo1.ListIndex = 1 then If combo1.ListIndex = 2 then End If End if Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Select-Case Una nuova struttura di controllo permette di evitare gli If Annidati Sintassi Esempio Select Case elementoDaControllare Case 0: istruzioni Case 1 …. End Select Select Case Combo1.ListIndex Case 0 ‘istruzioni caso 0 Case 1 ‘istruzioni caso 1 Case 2 ‘istruzioni caso 2 End Select Ing. Stefano Cadei -- Java

Il componente PictureBox Caricamento dinamico Picture1.Picture = LoadPicture("C:\image.jpg") Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esercizio: Geometria Calcolare l’area di Rettangolo Quadrato Parallelogramma Rombo in base ad una scelta fatta con un comboBox, visualizzando al volo l’immagine della figura geometrica scelta. Ing. Stefano Cadei -- Java

Esercizio: Geometria (2) Cambio dell’immagine Routine eseguita ad ogni click sul combo Private Sub Combo1_Click() Select Case Combo1.ListIndex Case 0 Picture1.Picture = LoadPicture("c:\rettangolo.jpg") Case 1 Picture1.Picture = LoadPicture("c:\triangolo.jpg") Case 2 Picture1.Picture = LoadPicture("c:\cerchio.jpg") End Select End Sub Ing. Stefano Cadei -- Java

Finestra multiple, nuovi eventi e nuovi componenti In sintesi: Form multipli Evento Form_Load Componente ComboBox Struttura Select-Case Componente PictureBox Esercizio “Geometria” Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java VBA Introduzione Ing. Stefano Cadei -- Java

Differenza concettuale con VB Visual Basic Descrizione GUI Programma in esecuzione Binario eseguibile Compilazione Linking Loading Codice Sorgente VBA Office (Excel) in esecuzione Istruzioni VB Binario Eseguibile Office Loading Interpretazione File Office VBA Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Applicazioni VBA Un’ applicazione VBA viene interpretata da Office Un’ applicazione VBA viene spesso chiamata MACRO Caratteristiche delle macro Esecuzione lenta (interpretazione di un P-Code intermedio) Accesso diretto agli oggetti del file di dati che contiene l’applicazione VBA Capacità di eseguire codice maligno (essendo un’applicazione a tutti gli effetti) VIRUS informatici contenuti dentro file Word o Excel VIRUS che vengono eseguiti quando si avvia l’applicazione ospitante Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il linguaggio Elementi del linguaggio completamente identici a Visual Basic tradizionale Oggetti e componenti grafici standard molto simili (un sottoinsieme di VB) Oggetti nuovi per l’interazione con le applicazioni ospitanti Excel (fogli, celle, grafici) In sostanza, chi sa programmare in VB standard programma anche in VBA Lo stesso non vale per VB .NET Ing. Stefano Cadei -- Java

VBA: l’ambiente di lavoro L’ambiente di lavoro diventa Office Considereremo come applicazione ospitante di riferimento Excel (2003) Visualizzazione della Toolbar Ing. Stefano Cadei -- Java

VBA: l’ambiente di lavoro (2) Inserimento di un bottone Strumenti di controllo Strumenti di controllo Nessun Form utilizzato Il foglio stesso contiene gli oggetti Ing. Stefano Cadei -- Java

VBA: l’ IDE Visual Basic Doppio click sul pulsante per aprire un IDE molto simile a quello di VB Non c’è la toolbar (si trova nel foglio) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java VBA: Hello World All’ interno della routine di risposta all’evento click invochiamo l’API MsgBox Stesse API di Visual Basic Il titolo della finestra mostrata è “Microsoft Excel” perché l’applicazione che il sistema operativo sta eseguendo non è l’applicazione VBA, ma quella ospitante Ing. Stefano Cadei -- Java

La modalità progettazione Quando si fa doppio click su di un pulsante l’ambiente apre l’ IDE VB e passa alla modalità di progettazione Il click su qualunque elemento fa riaprire l’ IDE VB Per tornare alla modalità d’esecuzione occorre selezionare “Esci da Modalità Progettazione” nella barra degli strumenti VB Ing. Stefano Cadei -- Java

L’abilitazione delle macro Normalmente le macro sono disabilitate Prevenzione da virus (primi anni 2000) Possibili diversi livelli di protezione Ing. Stefano Cadei -- Java

L’abilitazione delle macro (2) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java VBA: Introduzione In sintesi Macro VBA eseguite in applicazione Office ospitante Codice interpretato Linguaggio identico a Visual Basic Necessità di visualizzare barra strumenti VB Il foglio di calcolo contiene gli oggetti grafici Modalità progettazione ed esecuzione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java VBA Interazione con Excel Ing. Stefano Cadei -- Java

Accesso al foglio di lavoro Ogni foglio di excel è un oggetto identificato da un nome Attributi Metodi Il tipo di oggetto è WorkSheet Una eventuale dichiarazione di oggetto è del tipo “dim mioFoglio as WorkSheet” In questo corso useremo solamente gli worksheet predefiniti Di default esiste sempre l’oggetto “foglio1” Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java La matrice “cells” Proprietà cells di un oggetto WorkSheets Permette di “vedere” un foglio di calcolo come una matrice bidimensionale Sintassi: nomeFoglio.cells(indiceRiga, indiceColonna) La matrice è utilizzabile sia in lettura che in scrittura Lettura : variabile = foglio1.cells(1,1) Scrittura: foglio1.cells(2,2) = 50 Ing. Stefano Cadei -- Java

Esempio: inserire dati Con la proprietà cells è possibile popolare dinamicamente le celle di un foglio Esempio: inserimento 10 numeri nella prima riga Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 10 Foglio1.Cells(1, i) = Math.rnd(1) Next I End Sub Ing. Stefano Cadei -- Java

Esempio: inserire dati (2) E’ possibile associare un grafico che visualizza i valori delle celle selezionate Quando si aggiornano i dati delle celle da codice anche il grafico si aggiorna automaticamente (+) Meccanismo molto potente: si ottengono rappresentazioni grafiche di vario tipo senza sforzo programmativo (grafica complessa direttamente) (--) Meccanismo inefficiente: il rendering dei grafici è molto lento rispetto a soluzioni programmate esplicitamente Inefficienza aggravata dal fatto che VBA è interpretato Ing. Stefano Cadei -- Java

Grafico dinamico dei dati E’ possibile associare un grafico che visualizza i valori delle celle selezionate Quando si aggiornano i dati delle celle da codice anche il grafico si aggiorna automaticamente Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Esercizio: sinusoide Obiettivo: disegnare una sinusoide, e alla pressione di un bottone traslarla (a destra) di un valore configurabile Interfaccia richiesta Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’evento Activate Le inizializzazioni necessarie alla corretta esecuzione di una macro vanno fatte nella routine di risposta all’evento Activate Simile a FormLoad nel caso di VB classico Ing. Stefano Cadei -- Java

VBA: Interazione con Excel In sintesi Accesso al foglio di lavoro La matrice cells L’evento Activate Ing. Stefano Cadei -- Java

Interazione con il SO: DoEvents e API (cenni) Visual Basic / VBA Interazione con il SO: DoEvents e API (cenni) Ing. Stefano Cadei -- Java

Routine di risposta lunghe? Si è detto che “…le routine di risposta ad un evento DEVONO essere veloci in esecuzione” Requisito dovuto al fatto che mentre è in esecuzione una routine di risposta ad un evento, normalmente nessun altro evento viene elaborato Cosa fare nel caso in cui la routine di risposta è intrinsecamente lunga? Cosa fare nel caso in cui una routine di risposta sia ricorsiva (con molte chiamate ricorsive)? Ing. Stefano Cadei -- Java

L’elaborazione degli eventi Ciò che conta è che la routine di risposta non blocchi l’elaborazione di altri eventi L’elaborazione di eventi avviene in seguito alla comunicazione data dal sistema operativo Se la routine è breve, allora al termine della sua esecuzione l’evento viene elaborato Se la routine contiene istruzioni esplicite di input (come InputBox), durante l’attesa gli altri eventi vengono elaborati Altrimenti, è necessario inserire all’interno della routine una esplicita istruzione per controllare la presenza di altri eventi e avviarne l’elaborazione La nuova elaborazione si affianca a quella corrente Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java DoEvents L’istruzione per forzare il controllo di eventi e l’avvio della loro elaborazione è DoEvents L’istruzione può essere tradotta con le seguenti pseudo-istruzioni Controlla se è presente qualche messaggio segnalante un evento Se si, avvia la corrispondente routine di risposta Alterna nell’avanzamento la routine corrente e quella appena caricata Ing. Stefano Cadei -- Java

Accesso alle API di sistema Un sistema operativo come Windows mette a disposizione molte funzioni richiamabili all’interno dei linguaggi di programmazione Tali funzioni formano la Application Programming Interface (API) di sistema L’accesso alle API normalmente non avviene esplicitamente Il compilatore traduce le istruzioni in chiamate ad opportuni moduli del sistema operativo Esempio tipico: MsgBox “Hello World” Ing. Stefano Cadei -- Java

Accesso alle API di sistema (2) L’accesso esplicito alle API di sistema permette di eseguire istruzioni che non sono presenti nel linguaggio utilizzato Utilizzo delle API concettualmente simile all’invocazione dei comandi DOS/Unix, anche se con architettura software di basso livello radicalmente diversa Le API di Windows sono contenute all’interno di alcuni file con estensione “DLL” Kernel32.dll : funzioni a basso livello (es. timer) Gdi32.dll : funzioni grafiche User.dll : funzioni a livello utente Ing. Stefano Cadei -- Java

Uso di API di sistema con VB Uso delle API non banale Necessità di conoscerne l’interfaccia Necessità di conoscerne l’ubicazione (file DLL) Direttiva Declare Sintassi Declare Sub NomeAPI Lib NomeDLL (parametri) Esempio Una volta dichiarata, la funzione è utilizzabile come un elemento del linguaggio Public Declare Sub Sleep Lib "kernel32.dll" (ByVal s As Long) Ing. Stefano Cadei -- Java

Es.: grafico in movimento Obiettivo: simulare la traslazione continua di un onda sinusoidale Pulsanti Start/Stop Grafico con Excel (VBA) Ing. Stefano Cadei -- Java

Es.: grafico in movimento ‘dichiarazione di utilizzo dell’API Sleep contenuta in Kernel32.dll Private Declare Sub Sleep Lib "kernel32" (ByVal millisecs As Long) Dim ferma As Boolean Private Sub CommandButton2_Click() ferma = True End Sub ‘evento di attivazione del foglio di calcolo Private Sub Worksheet_Activate() ferma = False Ing. Stefano Cadei -- Java

Es.: grafico in movimento Private Sub CommandButton1_Click() Dim i As Integer Dim fase As Integer ferma = False ‘accesso al valore della fase fase = Foglio1.Cells(1, 2) ‘calcolo dei valori della funzione sinusoidale For j = 1 To 10 For i = 1 To 63 Foglio1.Cells(i, 1) = Math.Sin(i / 10 - fase / 50) Next i Next j Ing. Stefano Cadei -- Java

Es.: grafico in movimento ‘aggiornamento della fase (traslazione) Foglio1.Cells(1, 2) = fase + 1 ‘invocazione dell’API di sistema per lo sleep di 100 ms Sleep 100 ‘invocazione di DoEvents per far avanzare gli altri eventi DoEvents ‘reinvocazione condizionata della funzione di animazione If ferma = False Then CommandButton1_Click End If End Sub Ing. Stefano Cadei -- Java

VB/VBA: Interazione con il SO In sintesi Meccanismo base elaborazione eventi DoEvents Direttiva Declare per API sistema operativo Esempio Sinusoide in movimento Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Visual Basic Timer e API GDI Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il controllo Timer Componente che genera un evento di tipo Timer regolarmente allo scadere di un intervallo di tempo impostabile Componente grafico visibile solo in fase di progettazione (non visibile a runtime) Molto utile per animazioni grafiche e simulazioni di movimento Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il controllo Timer (2) Proprietà Interval Contiene il valore in millisecondi dell’intervallo di tempo tra un evento ed il successivo Il valore è in realtà un valore minimo e non è da considerarsi esatto (sistema operativo non real time) Non utilizzare Timer, Visual Basic o Windows per applicazioni in cui la precisione degli intervalli di tempo è un requisito indispensabile Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il controllo Timer (3) Ai fini pratici è possibile considerare il controllo Timer come un generatore di evento ad intervalli regolari Il programmatore deve solamente scrivere la routine di risposta all’evento Possibile utilizzo contemporaneo di più timer Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le API GDI Tra le varie API di Windows sono particolarmente utili le Graphic Device Interfaces API (GDI) Tali API permettono di disegnare liberamente sulle finestre NB. In questo corso vedremo una trattazione semplificata delle API GDI, trascurando alcuni aspetti troppo tecnici Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le API GDI (2) API contenute nella libreria dinamica “gdi32.dll” Necessario dichiarare i prototipi delle funzioni da utilizzare Aspetto scomodo di VB Di ogni funzione va dichiarato il prototipo Consigliabile raggruppare i prototipi in opportuni moduli riutilizzabili Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le API GDI (3) Le API GDI non sono istruzioni Visual Basic, ma funzioni messe a disposizione dal sistema operativo La documentazione relativa alle funzioni da utilizzare va cercata nella documentazione di sistema Un link molto utile: http://custom.programming-in.net/articles/art9-2.asp?lib=gdi32.dll Ing. Stefano Cadei -- Java

Esempio d’uso di API GDI Function LineTo: permette di disegnare una linea partendo dalla posizione precedente (quale?) e con le impostazioni precedenti (quali?) Prototipo (da dichiarare!!!) Private Declare Function LineTo Lib "gdi32.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long Esempio LineTo hdc, 100, 100 Ing. Stefano Cadei -- Java

Esempio d’uso di API GDI (2) Il primo parametro “hdc” è un HANDLE, cioè un numero intero (long) associato ad un elemento del sistema operativo Nel caso particolare è un handle ad un Device Context (DC) In questo corso useremo sempre hdc Ing. Stefano Cadei -- Java

Il ridisegno della finestra Se si prova a trascinare la finestra con la linea disegnata fuori dallo schermo, al rientro la linea è sparita Il motivo del mancato ridisegno risiede nel fatto che nessuno ha istruito la finestra (il form) di ridisegnare la linea Nei controlli predefiniti (Label, TextBox, ecc) il ridisegno è gestito in automatico Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’evento Form_Paint Quando una finestra deve essere ridisegnata sullo schermo, viene generato un evento di tipo Form_Paint Prima viene gestito il disegno nel modo di default previsto dal sistema operativo (disegno dei componenti grafici standard) Al termine della gestione di base viene lanciato Form_Paint, lasciando al programmatore la gestione di altri disegni Ing. Stefano Cadei -- Java

L’evento Form_Paint: esempio Nell’esempio di disegno di una linea, affinchè sia gestito correttamente il ridisegno è sufficiente inserire l’invocazione di LineTo all’interno della routine di risposta a Form_Paint Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le API principali LineTo hdc, x, y Permette di disegnare una linea MoveToEx hdc, x, y, point Permette di posizionare il cursore virtuale in un punto SelectObject hdc, object Permette di applicare un oggetto al contesto grafico CreatePen hdc, style, width, color Permette di creare un oggetto “penna” per scrivere Textout hdc, x, y, string, ncount Permette di disegnare una stringa di testo Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le API principali (2) CreatePen e SelectObject vengono di solito applicate in sequenza Viene creato un nuovo tipo di cursore (pen) Viene applicato il cursore al contesto voluto Esempio ‘dichiarazione dell’ handle alla pen Dim hPen as Long ‘creazione della pen e applicazione al contesto grafico hPen = CreatePen(PS_SOLID, 15, RGB(255, 0, 0)) SelectObject hdc, hPen Ing. Stefano Cadei -- Java

Esercizio: moto parabolico Scrivere un programma in Visual Basic che permetta di simulare il moto parabolico di un punto materiale sfruttando le API GDI di Windows Ing. Stefano Cadei -- Java

Introduzione: una strana storia JAVA Introduzione: una strana storia Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java La nascita di Java 1995: La situazione C / C++ Sviluppo professionale Sviluppo di software di base Interazione con dispositivi elettronici Visual Basic Sviluppo applicazioni semplici sotto Windows Pascal / Fortran Ambiente accademico Sviluppo didattico RPG / COBOL Ambito software gestionale/contabile Ing. Stefano Cadei -- Java

Perchè un nuovo linguaggio? Il progetto JAVA nasce nel 1991 (nome originale OAK) e richiede quattro anni di sviluppo Spinta iniziale: cambiare approccio alla progettazione di programmi per i microcomputer dell’elettronica di consumo Portabilità Limitatezza delle risorse Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’idea del ByteCode Obiettivo: rendere i programmi portabili fra diverse piattaforme Due soluzioni note: Fornire il compilatore per ogni piattaforma (--) Necessario ricompilare / rilinkare Usare un interprete (--) Lentezza L’idea di JAVA: Compilazione in codice binario di una macchina virtuale (JVM, Java Virtual Machine) Interprete delle istruzioni “macchina” della JVM Quindi, compilazione + interpretazione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’idea del ByteCode (2) Slogan: “Write once, run anywhere” Di fatto la portabilità da raggiungere attraverso l’uso di un interprete L’interprete è però relativamente efficiente, perché esegue “quasi” del codice macchina JVM in esecuzione Programma in esecuzione JVM Loading Interpretazione ByteCode Codice Sorgente Compilazione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Un C++ più semplice? L’idea della compilazione intermedia poteva essere applicata anche ai linguaggi esistenti Tra i linguaggi esistenti il più adatto era il C++ Usato per tutto il software di base Orientato agli oggetti Compatibile con il C Il C usato spessissimo per programmare l’elettronica Il C++ non era gradito al 100%: E’ un linguaggio relativamente complesso Alcune caratteristiche del C++ sono davvero utili? Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il World Wide Web Progetto iniziale di JAVA: Nuovo C++ semplificato e “pulito” Linguaggio semi-compilato con ByteCode JVM per elettronica di consumo Nel primi anni 90 nuova rivoluzione: nasce il World Wide Web Problema della compatibilità tra piattaforme diverse Stesso concetto della compatibilità fra diversi dipositivi hardware Il team di sviluppo decide di “cogliere la palla al balzo” Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Finalmente JAVA Sintassi molto simile a C/C++ Programmazione ad oggetti pura Eliminazione aspetti complessi (puntatori, allocazioni dinamiche, ecc) del C++ Linguaggio semi-compilato (ByteCode) Sviluppo guidato dal World Wide Web Intento di fornire tramite internet veri e propri programmi e non solo dati formattati Ing. Stefano Cadei -- Java

Un’infanzia difficile L’idea iniziale di JAVA nei confronti del WEB aveva precorso i tempi Mondo informatico non pronto Windows “da casa” diffuso in modo massiccio Microsoft non crede inizialmente (o non vuol credere?) nel WEB Linee dati a bassa velocità (56 Kbps) Impossibile scaricare al volo un programma JAVA NetScape crea JAVAScript (DIVERSO!!!!) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Cambio di target L’idea dei programmi per Internet (Applet) non decolla Java è però molto apprezzato Dal mondo accademico: pulito, elegante, portabile Dal mondo professionistico: simile al C++ JAVA si sposta sempre più verso lo sviluppo di applicazioni gestionali Grandi progetti Grandi risorse (RAM) (ndr. curioso vista l’intento iniziale) Interazione con DataBase Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Java oggi Tre versioni Java EE (Enterprise Edition) Java ME (Mobile Edition) Java SE JSP: Java Server Page Programmazione lato server per il Web Mondo molto vasto Oggetti binari precompilati Ambienti di sviluppo Altro… Ing. Stefano Cadei -- Java

(Un) Ambiente di sviluppo JAVA (Un) Ambiente di sviluppo Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Più di un ambiente Situazione radicalmente diversa rispetto a Visual Basic Ambiente di sviluppo non legato al linguaggio Possibile sviluppare con qualsiasi editor Diverse versioni di JAVA Considereremo le versioni successive alla 1.2 Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java JRE e JDK Java Runtime Environment (JRE) Macchina virtuale Java (interprete) Codice di libreria in bytecode Launcher di applicazioni Java Development KIT Compilatore JAVA (da sorgente a bytecode) Debugger JDK include spesso JRE, non viceversa Ing. Stefano Cadei -- Java

JDK e ambienti di sviluppo Differenti versioni di JDK (e di corrispondenti JRE) La versione del JDK può essere considerata equivalente al concetto di versione del linguaggio JDK non è un ambiente di sviluppo in senso stretto Nessun editor predefinito Mancanza di IDE Ing. Stefano Cadei -- Java

JDK e ambienti di sviluppo (2) Diversi sviluppatori hanno proposto ambienti di sviluppo basati su JDK Ambiente di sviluppo SUN: NetBeans Ambiente “ufficiale” Molti strumenti avanzati di sviluppo Molto oneroso in termini di risorse Eclipse Ambiente relativamente snello (non troppo) Ing. Stefano Cadei -- Java

Introduzione e primi programmi JAVA Introduzione e primi programmi Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Una nota preliminare… Java è un linguaggio ad oggetti (quasi) puro Tutto è un oggetto Anche il programma stesso è un oggetto, che appartiene ad una determinata classe Java è relativamente restrittivo Nome del file sorgente vincolato (cfr. più avanti) Java consente sia la programmazione event driven che la programmazione procedurale classica Ing. Stefano Cadei -- Java

Tre diversi “Hello World” Java può essere utilizzato in tre diverse modalità Linea di comando Interfaccia grafica stand alone Applet eseguita all’interno di un browser Con Java esiste quindi un “Hello World” diverso per ognuna delle tre modalità Ing. Stefano Cadei -- Java

“Hello World” a linea comando public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } Il file sorgente contenente il codice deve chiamarsi HelloWorld.java (vincolo obbligatorio) Il file contenente il bytecode si chiamerà HelloWorld.class Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java “Hello World” con GUI import javax.swing.*; public class HelloWorld { public static void main(String[] args) { JFrame frame = new JFrame(); JLabel label = new JLabel("Hello World"); label.setBounds(40,40,100,40); frame.setLayout(null); frame.add(label); frame.setBounds(10, 10, 200, 200); frame.setVisible(true); } Ing. Stefano Cadei -- Java

L’ applet “Hello World” import java.applet.*; import java.awt.*; public class Prova extends Applet{ public void paint(Graphics g){ g.drawString("Hello World", 10, 10); } <head> </head> <body> <applet code="Prova" width=100 height=100></applet> </body> Ing. Stefano Cadei -- Java

Analisi dei tre Hello World Tutti e tre i programmi contengono la dichiarazione di una classe pubblica Il motivo di questa sintassi è che ogni programma è esso stesso un oggetto Il primo ed il secondo programma contengono una funzione main(), mentre il terzo (l’applet) non ha un punto di entrata Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il metodo main Nella nomenclatura JAVA la funzione main viene chiamata “metodo main” I metodi sono funzioni appartenenti ad oggetti che permettono di eseguire operazioni sugli stessi o accedere ad alcune proprietà Essendo il programma stesso un oggetto, main è perciò chiamato “metodo” Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Il metodo main (2) Il metodo main dei primi due esempi riceve come parametro un vettore di stringhe (normalmente chiamato args) Tale vettore contiene le stringhe testuali passate al programma java dal programma invocante Tipicamente rappresentano le opzioni passate da linea di comando Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’istruzione import Negli esempi 2 e 3, nelle prime righe sono presenti delle istruzioni “import” L’istruzione import serve a rendere visibili delle funzioni e delle classi di libreria all’interno del programma corrente Non è indispensabile usare import Possibile referenziare esplicitamente ogni volta la classe o la funzione voluta Di fatto import viene sempre utilizzato Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le Applet L’applet dell’esempio numero 3 è sostanzialmente un insieme di funzioni di risposta ad eventi In questo senso, vista la mancanza di punti d’entrata, può essere considerata simile all’approccio Visual Basic Tuttavia, un’applet Java necessita di essere “ospitata” all’interno di un altro programma, tipicamente un browser web Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Variabili Dichiarazione di una variabile Tipo nome Tipo di una variabile Tipo semplice Istanza di un oggetto Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Variabili (2) Esempi dichiarazione tipo semplice int a; Char b; Esempi dichiarazione oggetto String stringa; Object oggetto; JFrame frame; Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Perché “quasi” puro? Java è uno dei linguaggi che più si avvicina al paradigma OOP (object oriented programming) puro Ciò che non lo rende OOP puro è la presenza dei tipi di dati semplici, che NON SONO OGGETTI Interi Float Ecc. La scelta è dovuta a motivi di efficienza (gli oggetti richiedono molto più codice di lavoro per essere trattati) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Tipi di dati semplici Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Le classi Wrapper Se il programmatore lo desidera, può rendere il codice completamente ad oggetti attraverso l’utilizzo delle Classi Wrapper In sostanza, ogni tipo semplice è incapsulabile in un oggetto (nel vero senso del termine) che lo contiene Ing. Stefano Cadei -- Java

Dichiarazione e istanziazione Nel caso di variabili di tipo oggetto esiste una netta differenza fra dichiarazione e istanziazione Dichiarazione: viene dichiarato che si userà un oggetto di un certo tipo Lo spazio per contenere l’oggetto NON È ALLOCATO IN MEMORIA Istanziazione: effettiva allocazione in memoria di un oggetto Ing. Stefano Cadei -- Java

Dichiarazione e istanziazione (2) L’istanziazione di un oggetto avviene attraverso l’utilizzo dell’operatore new Esempio: Nota: le righe che iniziano con // sono dei commenti //dichiarazione stringa String stringa; //istanziazione della stringa in memoria stringa = new String(“Stringa di prova”); Ing. Stefano Cadei -- Java

Dichiarazione e istanziazione (3) È fondamentale capire la differenza semantica fra dichiarazione di un tipo semplice e di un tipo oggetto Tipo semplice: viene riservata in memoria un’area destinata a contenere il dato (semantica classica della dichiarazione) Istanza oggetto: la sola dichiarazione non comporta l’assegnazione di alcuna memoria riservata a contenere l’oggetto Ing. Stefano Cadei -- Java

Dichiarazione e istanziazione (4) Cosa succede quando si dichiara un oggetto? Viene allocata in memoria una piccolissima zona destinata a contenere l’indirizzo dell’oggetto che verrà creato Quando l’oggetto viene istanziato tramite l’operatore new, il suo contenuto viene messo in memoria e l’indirizzo di tale memoria è assegnato alla variabile dichiarata Ing. Stefano Cadei -- Java

Dichiarazione e istanziazione (5) Ing. Stefano Cadei -- Java

Dichiarazione e istanziazione (6) La parte di memoria destinata a contenere l’indirizzo dell’oggetto è chiamata “riferimento” all’oggetto Per chi conoscesse C++, il concetto è simile (ma non uguale) all’utilizzo di puntatori Un reference non è però un puntatore Aritmetica degli indirizzi non permessa Allocazione dinamica gestita dalla JVM Ing. Stefano Cadei -- Java

Confrontare due oggetti Il confronto di due tipi semplici non equivale al confronto di due oggetti a == b ? NO!!! Ing. Stefano Cadei -- Java

Confrontare due oggetti (2) Per confrontare l’uguaglianza tra due oggetti diversi è necessario invocare opportuni metodi degli stessi a.equals(b) ? SI!!! Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Copia di oggetti Assegnare un riferimento (tipo semplice) ad un altro non provoca la copia del contenuto dell’oggetto referenziato a == b ? SI!!! Ing. Stefano Cadei -- Java

Input/Output da linea di comando: cenni JAVA Input/Output da linea di comando: cenni Ing. Stefano Cadei -- Java

Istruzioni di I/O modali Istruzioni di input/output esplicite per la linea di comando Output: System.out.println(stringa) Input : System.in.read() In generale l’I/O da linea di comando in JAVA è caratterizzato da una organizzazione complessa che non approfondiremo Ing. Stefano Cadei -- Java

Istruzioni di I/O modali (2) Le istruzioni di input di System.in sono troppo elementari (trattano byte) Esempio: int a = System.in.read() Per effettuare l’ input (ma anche l’output) è necessario includere il package java.io import java.io.*; Il pacchetto di input è utile anche per programmi grafici (es. lettura da rete) Ing. Stefano Cadei -- Java

Il meccanismo “a cipolla” Istanziazione di oggetti che incapsulano al loro interno altri oggetti Usatissimo nell’ IO di JAVA (contestato) Esempio: import java.io.*; …. BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); … Input.readLine(); Ing. Stefano Cadei -- Java

Le eccezioni nell’ io (cenni) Un’istruzione come quella di read dall’input può generare un comportamento imprevisto (eccezione) L’istruzione di input deve obbligatoriamente essere inserita in un blocco di gestione delle eccezioni Coppia di istruzioni try-catch Ing. Stefano Cadei -- Java

Le eccezioni nell ‘io: esempio import java.io.*; class a{ public static void main(String args[]){ System.out.println(“Hello"); try{ BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); String stringa = input.readLine(); System.out.println("inserito:"+stringa); }catch(Exception e){} } Ing. Stefano Cadei -- Java

Lettura di numeri interi Lettura di una stringa e successiva conversione in numero con Integer.parseInt(stringa) Anche questo metodo genera eccezioni Esempio: BufferedReader(new InputStreamReader(System.in)); … numero = Integer.parseInt(Input.readLine()); Ing. Stefano Cadei -- Java

Strutture di controllo: If/For/While/Do/Switch JAVA Strutture di controllo: If/For/While/Do/Switch Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If - Else Sintassi if (condizione) if (condizione) istruzione { else istruzioni istruzione } else { istruzioni } Esempio If (a>1) System.out.println(“a maggiore 1”); Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else (2) Operatori di confronto: >,<,==,>=,<= Operatore di uguaglianza diverso dall’operatore di assegnamento == uguaglianza = assegnamento L’utilizzo dell’operatore di assegnamento in una condizione NON E’ UN ERRORE SINTATTICO Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java L’uso di {} I caratteri { e } servono rispettivamente ad aprire e chiudere un blocco di istruzioni Un blocco di istruzioni può essere considerato come un blocco di codice trattato in modo unico all’interno delle istruzioni condizionali Tutte le variabili dichiarate all’interno di un blocco racchiuso fra { e } sono visibili SOLO ALL’INTERNO DEL BLOCCO (scope locale) La posizione dei caratteri { e } non conta Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java If – Else : esercizio Soluzione di un equazione di 2° grado (in campo reale) a coefficienti interi Utilizzo dell’interfaccia a linea di comando (no event driven) Controllo del DELTA Se DELTA > 0 => due soluzioni Se DELTA = 0 => una soluzione (due uguali) Se DELTA < 0 => nessuna soluzione Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java For Permette di eseguire un blocco di istruzioni un numero noto di volte Utilizzabile facilmente anche per implementare cicli equivalenti a while Possibili for senza variabile contatore Sintassi For (istruzioni di inizializzazione; condizione di iterazione; incremento){ istruzioni } Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java For: esempio Scrittura su una riga delle cifre da 0 a 9 public class Prova{ public static void main(String args[]){ int i=0; for (i=0; i<10; i= i +1){ System.out.print(i + " "); } Dichiarazione nel ciclo for (int i=0; i<10; i= i +1){ Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Gli operatori ++ e -- Java (come anche JavaScript, C e C++) dispone di due operatore di incremento/decremento compatti: “++” e “- -” L’applicazione di questi operatore ad una variabile permette di incrementare o decrementare una variabile di una unità L’operatore assegna già la variabile con il nuovo valore incrementato Molto usati nei cicli for for (int i=0; i<10; i++) Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Gli operatori ++ e -- (2) Gli operatori “++” e “--” possono essere sia prefissi che postfissi “i++” e “++i” hanno lo stesso effetto La differenza fra i due tipi di applicazione (prefissa e postfissa) riguarda l’istante in cui l’operatore è applicato all’interno di una espressione complessa Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Gli operatori ++ e -- (3) Gli operatori prefissi eseguono l’incremento prima di ogni altra operazione riguardante la variabile (priorità massima) Gli operatori postfissi eseguono l’incremento dopo ogni altra operazione riguardante la variabile (priorità minima) Esempio int a=0; If (a++ == 0) // true a =0; If (++a == 0) // false , a è uguale a 1 Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java For: esercizio Calcolo del fattoriale in modo iterativo da linea di comando Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java While / Do While Permettono di eseguire un blocco di istruzioni fino a quando una condizione è rispettata Entrambi sono cicli con condizione di iterazione e non di uscita Sintassi Do-While Do{ istruzioni }while(condizione); Sintassi While Inizializzazione variabili While (condizione){ istruzioni } punto e virgola Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Break Permette una USCITA ANTICIPATA dal ciclo Esce dal ciclo saltando tutto le altre istruzioni Esempio public class Prova{ public static void main(String args[]){ int i = 0; while(true){ System.out.println(i); i = i + 1; if (i == 10) break; } Ing. Stefano Cadei -- Java

Ing. Stefano Cadei -- Java Continue Permette una ITERAZIONE ANTICIPATA del cliclo Riparte dall’inizio del ciclo saltando tutto le altre istruzioni (controllando la condizione di iterazione) Esempio public class Prova{ public static void main(String args[]){ int i=0; for (i=1; i<10; i++){ System.out.print(i + " "); if (i%2 == 0) continue; System.out.print("\n"); } Ing. Stefano Cadei -- Java

Un semplice template di Applet JAVA Un semplice template di Applet Ing. Stefano Cadei -- Java 221

Ing. Stefano Cadei -- Java Le Applet Le Applet sono programmi eseguiti all’interno di un browser web Non dispongono di un punto di ingresso (non c’è il metodo main) Utilizzabili per eseguire piccole simulazioni grafiche Penseremo un’applet come un insieme di routine di risposta ad eventi Ing. Stefano Cadei -- Java 222

Lo scheletro di un’applet import java.applet.*; import java.awt.*; public class Prova extends Applet implements Runnable{ //metodo equiparabile all’ OnLoad di Visual Basic public void init(){ Thread t = new Thread(this); t.start(); } //metodo equiparabile alla sub Form_Paint di Visual Basic public void paint(Graphics g){ //…istruzioni //metodo contenenti le istruzioni del programma public void run(){ 223 Ing. Stefano Cadei -- Java 223

Lo scheletro di un’applet Lo scheletro proposto non è in realtà quello minimo Presenza di Thread Presenza delle parole chiave “extends” e “runnable” Concetti di ereditarietà e polimorfismo Esempio proposto con l’intento di fornire un template per esigenze specifiche Ing. Stefano Cadei -- Java 224

Ing. Stefano Cadei -- Java Simulazione pendolo import java.applet.*; import java.awt.*; public class Prova extends Applet implements Runnable{ int x=100,y=100; int l = 100; public void init(){ Thread t = new Thread(this); t.start(); } public void paint(Graphics g){ g.drawLine(100,0,x,y); g.setColor(Color.RED); g.fillOva(x-5, y-5, 10, 10); Ing. Stefano Cadei -- Java 225 225

Simulazione pendolo (2) public void run(){ int t = 0; while(true){ double teta = Math.PI/4 * Math.cos(Math.sqrt(9.81/l)*0.5*t) * Math.exp(-0.005*t); x = 100 + (int)(l*Math.sin(teta)); y = (int)(l*Math.cos(teta)); repaint(); try{ Thread.sleep(20); }catch(Exception e){} t++; } Ing. Stefano Cadei -- Java