LA PROGRAMMAZIONE AD ALTO LIVELLO 4 I linguaggi I linguaggi naturali, come per esempio l’italiano o l’inglese, vengono usati dagli esseri umani per comunicare. Sono nati spontaneamente e consentono una grande ricchezza espressiva, ma possono introdurre ambiguità nelle affermazioni. Perfino la presenza, o l’assenza, di un segno di punteggiatura come una virgola può modificare il senso della frase.   Video – Le macchine programmabili esempio La frase “La piccola pesca” in italiano può significare  1. sia una bambina che sta “catturando” pesci, sia un  frutto estivo non grande. La posizione della punteggiatura cambia completamente  2. il significato di una frase. “Mentre la ruota panoramica gira con tanti bambini,  un uomo si avvicina alla cassa”. “Mentre la ruota panoramica gira, con tanti bambini  un uomo si avvicina alla cassa”. I sono linguaggi che seguono delle . Sono esempi di linguaggi formali quello della matematica, della logica e anche i linguaggi di programmazione usati in informatica. Le regole per la loro compilazione sono state create “a tavolino”, quindi questi linguaggi sono e perciò sono . linguaggi formali artificiali regole prestabilite privi di eccezioni non ambigui I vengono usati dai programmatori per “parlare” con il computer e si dividono in: linguaggi di programmazione : usano parole in una lingua (per esempio inglese) che è più “vicina” (comprensibile) all’uomo rispetto al computer. Sono esempi di linguaggi ad alto livello il C, C++, Java, Python, Visual Basic, PHP ecc. Un’importante caratteristica dei linguaggi ad alto livello è quella di su cui viene eseguito. Un codice sorgente scritto in linguaggio C può funzionare su qualunque computer: è compito del compilatore renderlo comprensibile al processore, traducendolo nel linguaggio macchina di quel processore specifico; linguaggi ad alto livello rendere il codice del programma indipendente dalla macchina : i computer non sono in grado di comprendere direttamente i linguaggi ad alto livello che devono quindi essere tradotti in linguaggio a basso livello ( ), direttamente . Scrivere un programma in linguaggio macchina, per un uomo, non è banale. Un’importante caratteristica dei linguaggi a basso livello è quella di essere . linguaggi a basso livello linguaggio macchina comprensibile al processore totalmente dipendenti dalla macchina su cui viene eseguito il codice  >> pagina 413  Gli errori Quando un programma sorgente viene compilato, il compilatore potrebbe la presenza di , cioè di errori lessicali o sintattici (parole o sintassi sbagliate) che possono essere di due tipi: trovare e segnalare errori formali 1.   warning : si tratta di avvertimenti segnalati dal compilatore . Consentono la creazione del programma oggetto, ma potrebbero creare problemi in fase di esecuzione al verificarsi di particolari condizioni. Il programmatore può decidere se ignorarli o correggerli. Per esempio il compilatore potrebbe segnalare che è stato dichiarato che esiste una variabile, ma nel programma non è mai stata usata; 2.   error : sono errori veri e propri, che non consentono la creazione del programma oggetto: bloccano il lavoro di traduzione in fase di compilazione e devono essere corretti. Per esempio se nel programma sorgente una parentesi viene aperta ma non viene chiusa, il programma non viene compilato; il computer evidenzia l’errore impedendo la generazione del codice eseguibile. Per , il programmatore deve passare all’editor di testo, correggere l’errore e ricompilare il codice sorgente. correggere gli errori formali Gli sono quelli segnalati . Non sono segnalati durante la compilazione e sono (cioè introdotti da un algoritmo errato) che in esecuzione. Il viene , il computer non evidenzia alcun errore e non impedisce la generazione del codice eseguibile perché dal punto di vista formale, il programma è accettabile. errori di run-time durante l’esecuzione di un programma errori logici bloccano l’avanzamento del processo programma compilato normalmente esempio I seguenti sono esempi di errori logici. Durante l’esecuzione del programma viene richiesto di effettuare una divisione per zero, l’esecuzione viene bloccata e viene segnalato un errore. Le parentesi graffe vengono tutte aperte e chiuse, ma vengono messe in una posizione sbagliata. Un errore di questo tipo potrebbe non essere notato dal programmatore, ma il significato e il risultato ottenuti non sarebbero quelli che erano stati prefissati.  >> pagina 414  Il confronto tra compilatore e interprete Un compilatore è un software che traduce il codice sorgente (cioè le istruzioni scritte in un linguaggio di programmazione) in codice oggetto (cioè in istruzioni in linguaggio macchina). Il processo di “traduzione” si chiama compilazione. In generale il compilatore è in grado di presenti nel programma e, in alcuni casi, di . riconoscere alcune classi di errori suggerire come correggerli Un interprete è un software che esegue un programma scritto in linguaggio di alto livello senza passare attraverso la compilazione (codice oggetto), ma eseguendo le istruzioni partendo direttamente dal codice sorgente, traducendole di volta in volta in istruzioni in linguaggio macchina. Utilizzare un (invece di un compilatore) comporta durante l’ del programma (run-time). La quantità di memoria richiesta è maggiore e l’esecuzione viene delle istruzioni eseguite dall’interprete. D’altro canto, però, l’interpretazione di un programma . Se si utilizza un compilatore non è possibile eseguire il programma finché non è completamente corretto. Gli interpreti, invece, sono in grado di eseguire anche i programmi che contengono istruzioni non interpretabili. Se l’interprete non è in grado di eseguire un’istruzione, la salta e passa a quella successiva. interprete minore efficienza esecuzione rallentata dalle continue attività di interpretazione velocizza la fase di sviluppo del codice I programmi hanno il vantaggio di poter essere considerati più sicuri, rispetto a quelli interpretati, perché i programmi eseguibili e installati su macchine specifiche. compilati possono essere testati I programmi , essendo tradotti nello stesso momento in cui vengono eseguiti, hanno il vantaggio di risultare maggiormente . interpretati indipendenti dalla piattaforma utilizzata Il debugger Quando viene commesso un (per esempio una soluzione sbagliata, ma scritta correttamente), il non se ne accorge. È compito del trovare questi errori durante la fase di . errore logico computer programmatore validazione del codice Il ▶  debugger è un software che aiuta il programmatore a individuare gli errori logici consentendo di eseguire un’istruzione per volta o di stabilire dei ▶  breakpoint , per permettere al programmatore di controllare i valori assunti dalle variabili in determinati punti del programma.   / “spulciatore” debugger / punto di interruzione  breakpoint dell’esecuzione attenzione   L’attività di   consente di individuare ed eliminare i  , cioè gli errori che sono presenti in un programma. Nella successiva fase di testing il programma viene provato utilizzando dati concreti. debugging bug attenzione  >> pagina 415  La documentazione La documentazione del software è costituita da un insieme di testi che spiegano come funziona il programma o come si utilizza . La documentazione può essere destinata a: : viene prodotta dal programmatore durante la fase di codifica e . È utile sia al programmatore che ha scritto il codice sorgente, che potrebbe aver bisogno di modificare, ampliare o migliorare il programma a distanza di tempo, sia ad altri programmatori, che potranno fare riferimento alla documentazione per “avere un’idea” del codice sorgente su cui dovranno lavorare, in modo da non dover partire completamente da zero. programmatori aiuta a capire che cosa c’è scritto nel programma La documentazione destinata ai programmatori può essere scritta sotto forma di: : all’interno del codice sorgente, il programmatore può inserire delle frasi che “commentano” e spiegano come funziona il codice stesso. I commenti vengono , ma sono molto ; commenti ignorati dal compilatore utili per coloro che mettono mano al codice sorgente : il programmatore può , sia in formato cartaceo sia in formato elettronico, che forniscono informazioni sul programma ai programmatori. Per documentare i grandi progetti spesso vengono utilizzati dei software wiki, cioè dei software “collaborativi” che consentono di creare e modificare intere pagine web utilizzando semplicemente un browser. Le pagine web generate vengono condivise tra i vari programmatori; documenti di testo scrivere dei manuali : è destinata agli utenti finali del programma e, all’interno dei grandi progetti, dai programmatori, che il programma e soprattutto la sua . La documentazione destinata agli utenti finali e può essere presentata sotto forma di: utenti viene scritta da persone diverse conoscono interfaccia utente descrive come utilizzare il programma e : guidano l’utente (soprattutto alle “prime armi”) alla conoscenza del programma, passo dopo passo; tutorial videotutorial : utile all’utente intermedio per concentrarsi su una particolare area di interesse; manuale : valida per l’utente esperto che conosce quali informazioni cercare. guida in linea prova tu   Rispondi alle domande. Quali tipi di linguaggio conosci? Quali caratteristiche hanno? Qual è la differenza tra un errore formale e un errore di run-time? Che cosa comprende la documentazione del software?  >> pagina 416  Le regole per una buona programmazione Lo di un software può richiedere , ma la sua può durare anche per . sviluppo qualche anno manutenzione decenni Dopo che un programma è stato consegnato all’utente finale, infatti, è necessario che possono verificarsi, apportare le che consentono di o aggiungere e adattare il programma ai sistemi informatici che, per loro natura, sono in . continuare a correggere gli errori modifiche migliorarne le prestazioni funzionalità continua evoluzione Per contenere i costi di manutenzione, in fase di codifica è fondamentale realizzare una seguendo alcuni accorgimenti, spesso piuttosto semplici, come: buona programmazione per le variabili (per esempio “nome” invece di “n”); usare nomi significativi previsti per i dati di input e di output (interi, reali ecc.); esplicitare i tipi scrivere i programmi utilizzando le tre e quelle derivate; strutture di controllo fondamentali , quindi suddividere i programmi in moduli che svolgano determinate funzioni all’interno del programma complessivo; utilizzare i sottoprogrammi frequenti ; inserire commenti provare l’esecuzione con dati verosimili per , testando tutte le diramazioni del codice; validare la correttezza del programma , con le istruzioni per l’uso del programma. fornire il manuale per l’utente Scrivere un programma funzionante non è sufficiente. In base al paradigma della programmazione strutturata, un programma è strutturato se: 1.   non ha salti incondizionati : non usa le istruzioni di goto, tipiche dei vecchi linguaggi; 2.   è indentato : le sue righe di codice rientrano in base al principio di annidamento delle istruzioni; 3.   è documentato : è commentato e corredato dalla documentazione del software. ApprofondiMENTO   LE STRUTTURE DERIVATE Le strutture di controllo sequenza, selezione e iterazione si dicono   perché, combinate fra loro, sono sufficienti a descrivere ogni algoritmo. Per rendere più comoda la codifica di alcuni algoritmi si possono usare anche le strutture derivate che sono un’estensione di quelle fondamentali. In linguaggio C sono molto usate le strutture derivate do...while, for e switch...case. strutture fondamentali SCHEDA CLIL   C-hildren So, you learnt C language. Now you feel comfortable with main () function. With variables and input/output commands. Well... sorry if I ruin your dreams, but you cannot sign as “expert C programmer” if you never heard about evolutions of C. C language is the father of a big family of programming languages. Because needs change over time. So, new tools and features had to be added to the initial language. New languages added functionalities not always fully compatible with original C. For example, C++ has more powerful constructs to define o redefine data types. So, “child” languages added such important programming paradigm. Funny jokes are hidden in the name of two languages. C++ is an evolution of C. But, in C, “++” means increment by 1. So, someone might read it as: C++ is a step forward than C. Or, if you are nerd and comedian, you can say that you are programming in D (since C++ = D). C# (pronounced “C sharp”) sounds familiar to musicians, too. C is the first musical note. C# also means the note between C and D (a semitone above C). So, if you write listings in C, you’re programming in Italian “do”; if you edit a source in C#, you’re programming in Italian “do diesis”.