











































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
programmazione terza superiore
Tipologia: Dispense
1 / 83
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!












































































INTRODUZIONE La programmazione è quell’attività finalizzata alla risoluzione di problemi tramite un elaboratore. Per far ciò il programmatore(*) descrive ad un computer i compiti che deve eseguire per risolvere un determinato problema. I compiti sono descritti tramite un programma, che viene “trasmesso” alla macchina. Il problema principale è riuscire a rappresentare il problema mediante delle strutture dati, rappresentare analogamente la risoluzione del problema e poi trovare “quell’insieme di passi che trasformano i dati del problema nei dati della soluzione del problema”. Tutto il processo può essere schematizzato come segue:
soluzione trovata in un linguaggio di programmazione. In molti casi le due figure coincidono. Proble ma Soluzio ne Processo risolutivo Strutture dati che rappresentano il problema Strutture dati che rappresentano la soluzione Algoritmo
OUTPUT Anche la soluzione di un problema viene schematizzata con delle strutture dati che, alla fine dell’elaborazione, cioè dopo che è stato eseguito l’algoritmo, contengono dei valori che, correttamente interpretati, rappresentano la soluzione del particolare problema (tra la classe dei problemi schematizzati dall’input) rappresentato dei dati di input. A questo punto dovrebbe essere chiara la differenza tra struttura dati e dato. La prima è un “contenitore”, cioè una variabile atta a contenere un particolare dato (istanza) tra tutti quelli che la struttura riesce a gestire; mentre il dato è il valore che in ogni istante è contenuto nella variabile. N.B. Nei programmi visuali è bene gestire l’output, cioè renderlo disponibile (visibile) solo quando la variabile contiene un dato “valido”. Tale concetto verrà ripreso nel secondo incontro completando il primo esempio di programma.
OUTPUT: Insieme di strutture dati che rappresentano la soluzione del problema. OUTPUT: Insieme di strutture dati che rappresentano la soluzione del problema.
ALGORITMO L’algoritmo può essere definito come “ l’insieme di passi mediante i quali si risolvono tutti i problemi di una classe ”. L’algoritmo deve essere generale (deve risolvere tutti i problemi della classe), finito (deve terminare in un tempo finito), non ambiguo (ogni passo deve avere una sola interpretazione) e realizzabile (deve esser traducibile in un linguaggio di programmazione). Se indichiamo “i problemi di una determinata classe” con INPUT e “le loro soluzioni” con OUTPUT, l’algoritmo può essere definito come una funzione dall’INPUT all’OUTPUT f(INPUT) OUTPUT Un PROGRAMMA è l’insieme di operazioni di un linguaggio di programmazione che traducono l’algoritmo. La realizzabilità dell’algoritmo è necessaria per produrre un programma. Esistono diverse tecniche per rappresentare un algoritmo, tra cui FLOW-CHART e PSEUDOCODIFICA.
PSEUDOCODIFICA È un metodo descrittivo a punti basato sul linguaggio naturale.
ESEMPIO SEQUENZA Lo sviluppo di un programma richiede tecniche di produzione del software che standardizzano le procedure e migliorano il prodotto finito per limitare i costi di manutenzione, che possono rappresentare anche il 50% del costo complessivo se il programma è mal organizzato e realizzato. In generale si possono individuare le seguenti fasi: (^) Progettazione e codifica , cioè analisi della struttura dati, sviluppo dell’algoritmo e traduzione (codifica) nel linguaggio di programmazione scelto; (^) Convalida (o testing) , cioè esecuzione del programma con dati opportuni per verificarne i risultati; (^) Debugging , cioè localizzazione, correzione degli errori e nuovo test; (^) Rilascio , cioè distribuzione dell’applicazione su uno o più computer; (^) Mantenimento , cioè adeguamento del programma a nuove esigenze. Tutte le fasi sono ugualmente importanti (l’ultima è sicuramente quelle che richiede più tempo e risorse). Noi ci focalizzeremo sulle prime tre, analizzando in questa presentazione la prima, mentre le altre due saranno affrontate in fase di sviluppo.
PROGETTAZIONE TOP-DOWN Nel modello top-down è formulata una visione generale del sistema senza scendere nel dettaglio di alcuna delle sue parti. Ogni parte del sistema è successivamente rifinita (decomposta) aggiungendo maggiori dettagli della progettazione. Ogni nuova parte così ottenuta può quindi essere nuovamente rifinita, specificando ulteriori dettagli finché la specifica completa è sufficientemente dettagliata. Ad ogni passo vengono specificate le funzioni fondamentali che devono essere realizzate e le interazioni tra esse, in modo da applicare ricorsivamente la stessa tecnica a ciascuna di esse. In pratica si parte immaginando che esista una macchina avente tra le sue istruzioni di base quella che svolge l’intero programma. Nel passo successivo ci si focalizza sulle singole funzioni con la stessa tecnica finché tutte le istruzioni sono realmente traducibili nel linguaggio di programmazione scelto. La complessità della funzione da trattare dipende dal livello di astrazione. Le sue sottofunzioni si immaginano completamente sviluppate e si tiene conto solo delle interfacce. Le interfacce devono essere il più possibile indipendenti dalla struttura interna per garantire la massima flessibilità. Ogni funzioni deve avere dimensioni limitate (20-50 istruzioni), utilizzare solo variabili locali e gestire gli scambi con l’esterno attraverso i parametri, che permettono la generalizzazione del singolo modulo.
Risoluzione triangolo isoscele con tecnica top-Risoluzione triangolo isoscele con tecnica top-
ESEMPIO TOP-DOWN Sviluppiamo un progetto per la risoluzione (perimetro e area) di un triangolo isoscele.
RISOLUZIONE TRIANGOLO ISOSCELE^ RISOLUZIONE TRIANGOLO ISOSCELE INPUT^ INPUT^ ELABORAZIONEELABORAZIONE^ OUTPUTOUTPUT Leggi Base (b) Leggi Base (b) Leggi altezza (h) Leggi altezza (h) CALCOLA PERIMETRO CALCOLA PERIMETRO CALCOLA AREA CALCOLA AREA Visualizza perimetro (p) Visualizza perimetro (p) Visualizza area (a) Visualizza area (a) P = b + 2sqrt(h*^2 + b^2 **/
P = b + 2sqrt(h*^2 + b^2 **/
A = b * h / 2**^ A = b * h / 2 Questa tecnica produce programmi “rigidi”, che devono seguire la sequenza prefissata nel progetto. Ad esempio, in questo caso, il programma chiede nell’ordine la base e l’altezza, svolge i calcoli e visualizza i risultati. Non è possibile inserire gli input in ordine diverso o modificarli prima di avviare il calcolo o …
ESEMPIO BOTTOM-UP Dopo aver analizzato il problema e individuato la struttura dati adatta per rappresentarlo, si realizza l’interfaccia di input.
Si realizza quella di output, che permette di rappresentare i risultati. (Si sovrappone all’input) Perimetro = … Area = … h b h = b = Calcola perimetro e area Calcola perimetro e area Quindi si attivano gli eventi da gestire e si programmano i metodi collegati, come ad esempio il click sul bottone “Calcola perimetro e area” (in questo metodo viene inserito l’algoritmo) per avviare il calcolo e visualizzare i risultati o gli eventi di cambio degli input, i cui metodi rendono l’output non visibile per non creare situazioni di conflitto tra gli input e gli output. I Form^ I Form
VANTAGGI E SVANTAGGI DELLA PROGRAMMAZIONE MODULARE Un programma modulare:
per contro:
Il metodo SHOW (non modale) viene generalmente utilizzato per visualizzare un form di aiuto; in questo modo l’utente può interagire, contemporaneamente, col form chiamante e con quello chiamato. Il metodo SHOWDIALOG (modale) viene generalmente utilizzato per visualizzare un form in cui l’utente deve inserire dei valori o effettuare una scelta necessaria per proseguire nell’elaborazione. A volte può essere necessario aprire un secondo form nascondendo il form chiamante, ma senza chiuderlo, cioè senza usare l’evento CLOSE , per svariati motivi. In questo caso risulta utili il metodo HIDE , che nasconde il form fino alla nuova visualizzazione. Un esempio di codice potrebbe essere il seguente: Dim F2 as new Form … Me.Hide() ‘nasconde form corrente (Me in Visual Basic) F2.Showdialog() ‘visualizza il secondo form, dichiarato come F Me.Show() ‘quando l’utente chiude F2, ripristina il form chiamante … EVENTI FORM
… In C# Form2 F2 = new Form2(); … this.Hide(); //this form corrente in C# F2.ShowDialog(); this.Show();
PRIMI OGGETTI IN UN FORM (1/3) Praticamente tutti i programmi necessitano di dati (rappresentazione del problema, input) sui quali operare per ottenere dei risultati (soluzione, output). Inoltre, per meglio coinvolgere l’utente e facilitarne l’utilizzo, sono necessarie informazioni aggiuntive (figure, descrizione del problema, …) ed entità per avviare le operazioni. Tutti questi elementi sono degli oggetti predefiniti in ogni ambiente grafico, che possono essere inseriti nel form durante la fase di progettazione. Per definire delle entità statiche (descrizione del problema o chiarimenti sull’input o l’output ) vengono utilizzati gli oggetti “ LABEL ”. (N.B. Tutte le proprietà delle Label possono essere modificate da programma, ma su di esse l’utente non può intervenire.) Tali oggetti sono utili anche per presentare gli output che hanno una struttura e una lunghezza predefinita. Gli oggetti TEXTBOX (caselle di testo dinamiche) permettono una interazione con l’utente e sono utilizzate per gli input alfanumerici e per gli output con lunghezza non definita (o comunque molto lunga). Se sono usate per visualizzare risultati impostare la proprietà “ READONLY ” su TRUE per evitare che l’utente possa modificare i valori. Se utilizzate per l’input, la proprietà TEXT deve essere impostata a stringa vuota, mentre per l’I/O col valore iniziale.
CONTROLLI (PRIMO APPROCCIO) Nella gestione dei controlli a posteriori si svolgono le operazioni senza verificare la validità del valore dei campi interessati e, nel caso in cui viene generato un errore, si procede con la sua gestione (comunicazione all’utente, …). Con questa tecnica le istruzioni che possono generare errori devono essere eseguite sotto il controllo dell’istruzione “ TRY…CATCH…WHEN…FINALLY…END TRY ”. La tecnica si presta bene per gestire errori generali (tipo Overflow), che dipendono dal sistema, ma è poco pratica per la gestione di errori logici e la risposta è lenta. Nei casi più semplici la clausola viene utilizzata senza le parole chiavi WHEN … FINALLY. Le istruzioni che possono generare errore devono essere inserite tra le parole chiavi TRY e CATCH; mentre l’errore, gestito tra le parole chiavi CATCH e END TRY, viene generalmente comunicato all’utente tramite la finestra di dialogo MessageBox. Con la strategia di controllo a priori si controllano i valori dei campi prima del loro utilizzo, eliminando a priori le cause d’errore. È una tecnica molto veloce e funzionale. Per la gestione viene utilizzata la selezione, a cui si rimanda.
In C# try { … } catch { … } finally
PRIMI OGGETTI IN UN FORM (3/3) Spesso è utile inserire nell’interfaccia grafica un disegno per meglio chiarire il problema. Per presentare un disegno si utilizza l’oggetto PICTUREBOX. Inserire il file col disegno o foto o gif animata nella proprietà Image e impostare la proprietà SizeMode a StretchImage per adattare l’immagine al controllo. Inoltre, in una applicazione ben realizzata, sono spesso presenti menù e toolbar. Menù, menù di scelta rapida, barre di stato (generalmente in basso) e barre degli strumenti (generalmente in alto sotto il menù principale) rappresentano le diverse modalità di esposizione delle funzionalità agli utenti o di notifica di informazioni all'interno dell'applicazione. Il menù rappresenta una scelta tra “n” opzioni presentate in modo lineare e raggruppate in ordine logico. In genere i menù principali contengono i comandi, raggruppati in base a un argomento comune. I menù di scelta rapida (Context menù) vengono visualizzati quando si fa clic con il pulsante destro del mouse e contengono i comandi più utilizzati per una particolare area dell’applicazione (in genere sono legati ad un oggetto). Le barre degli strumenti utilizzano i pulsanti con icone per esporre i comandi più comuni.
PrecedenPreceden