SlideShare a Scribd company logo
1 of 30
Download to read offline
I linguaggi di
                                                        programmazione

                                                        Andrea Serafini


           I linguaggi di programmazione                Cos’è un
                                                        linguaggio di
                                                        programmazione
               Didactics of Computer Science
                                                        Sviluppo storico
                                                        Macchina
                                                        Assembly
                                                        Alto livello

                        Andrea Serafini                  Il processo di
                                                        programmazione
                                                        Compilazione
                  Università degli Studi di Trento      I paradigmi di
                                                        programmazione
                                                        Imperativo
                        20 Aprile 2012                  Dichiarativo
                                                        Funzionale
                                                        Orientato ad
                                                        oggetti

                                                        Concetti base
                                                        Variabili e tipi di
  Fonti:                                                dati
                                                        Strutture di
◮ J. Glenn Brookshear, Computer Science: An Overview,   controllo
                                                        Procedure e
  11th edition, Addison-Wesley Pearson, 2012            funzioni

                                                        Programmazione
◮ Wikipedia - http://it.wikipedia.org                   orientata ad
                                                        oggetti
Cos’è un linguaggio di programmazione                             I linguaggi di
                                                                programmazione

                                                                Andrea Serafini


                                                                Cos’è un
                                                                linguaggio di
                                                                programmazione

Un linguaggio di programmazione è un linguaggio artificiale e    Sviluppo storico
                                                                Macchina
formale, dotato di un lessico, di una sintassi e di una         Assembly
                                                                Alto livello
semantica ben definiti, utilizzabile per la programmazione di    Il processo di
una macchina attraverso la scrittura di un programma sotto      programmazione
                                                                Compilazione

forma di codice                                                 I paradigmi di
                                                                programmazione
                                                                Imperativo
                                                                Dichiarativo
                                                                Funzionale
La programmazione può essere paragonata all’insegnamento:       Orientato ad
                                                                oggetti
è come se il programmatore insegnasse˝al computer come         Concetti base
                                                                Variabili e tipi di
svolgere un determinato compito, più o meno complesso           dati
                                                                Strutture di
                                                                controllo
                                                                Procedure e
                                                - Wikipedia -   funzioni

                                                                Programmazione
                                                                orientata ad
                                                                oggetti
Sviluppo storico                                                  I linguaggi di
                                                                programmazione

Linguaggi di prima generazione: linguaggio macchina             Andrea Serafini


                                                                Cos’è un
                                                                linguaggio di
                                                                programmazione

                                                                Sviluppo storico
 I primi programmi consistevano in una sequenza di istruzioni   Macchina

 codificate come cifre binarie attraverso un linguaggio          Assembly
                                                                Alto livello

 macchina, un linguaggio di prima generazione                   Il processo di
                                                                programmazione
                                                                Compilazione


 Scrivere programmi in linguaggio macchina risultava            I paradigmi di
                                                                programmazione
 complesso e spesso conduceva ad errori. Da qui la necessità    Imperativo
                                                                Dichiarativo
 di sviluppare linguaggi più vicini alla sensibilità umana e    Funzionale
                                                                Orientato ad
                                                                oggetti
 facilmente convertibili in istruzioni macchina:
                                                                Concetti base
   ◮   linguaggi di seconda generazione                         Variabili e tipi di
                                                                dati
                                                                Strutture di
   ◮   linguaggi di terza generazione                           controllo
                                                                Procedure e
                                                                funzioni

                                                                Programmazione
                                                                orientata ad
                                                                oggetti
Sviluppo storico                                                      I linguaggi di
                                                                    programmazione

Linguaggi di seconda generazione: linguaggio assembly               Andrea Serafini


 Negli anni ′ 40 furono sviluppati sistemi notazionali in cui le    Cos’è un
                                                                    linguaggio di
 istruzioni venivano rappresentate in una forma mnemonica           programmazione

 piuttosto che numerica: il linguaggio assembly                     Sviluppo storico
                                                                    Macchina
                                                                    Assembly

 Es: Sposta il contenuto del registro 5 nel registro 6˝            Alto livello

                                                                    Il processo di
   ◮   linguaggio macchina: 4056                                    programmazione
                                                                    Compilazione
   ◮   linguaggio assembly: MOV R5, R6 (identificatore)              I paradigmi di
                                                                    programmazione
                                                                    Imperativo
 Furono creati programmi in grado di convertire le espressioni      Dichiarativo
                                                                    Funzionale

 mnemoniche in istruzioni binarie di linguaggio macchina:           Orientato ad
                                                                    oggetti

 assembler                                                          Concetti base
                                                                    Variabili e tipi di
                                                                    dati
 Svantaggi:                                                         Strutture di
                                                                    controllo
                                                                    Procedure e
   ◮   dipendenza dalla macchina                                    funzioni

                                                                    Programmazione
   ◮   primitive di basso livello (istruzioni espresse in piccoli   orientata ad
                                                                    oggetti
       passi)
Sviluppo storico                                                                I linguaggi di
                                                                              programmazione

Linguaggi di terza generazione: linguaggi di programmazione ad alto livello   Andrea Serafini


                                                                              Cos’è un
                                                                              linguaggio di
                                                                              programmazione

                                                                              Sviluppo storico
 A partire dagli anni ′ 50 furono sviluppati linguaggi di                     Macchina
                                                                              Assembly
 programmazione ad alto livello, che rispetto alle precedenti                 Alto livello

 generazioni avevano il vantaggio di:                                         Il processo di
                                                                              programmazione
    ◮   essere indipendenti dalla macchina (istruzioni non                    Compilazione

                                                                              I paradigmi di
        dipendono dalle caratteristiche di una macchina                       programmazione
        particolare)                                                          Imperativo
                                                                              Dichiarativo
                                                                              Funzionale
    ◮   contenere primitive di alto livello (istruzioni espresse              Orientato ad
                                                                              oggetti
        come successione di primitive di basso livello), da cui la            Concetti base
        possibilità di introdurre anche strutture più generali e              Variabili e tipi di
                                                                              dati

        più simili al linguaggio naturale                                     Strutture di
                                                                              controllo
                                                                              Procedure e
                                                                              funzioni

                                                                              Programmazione
                                                                              orientata ad
                                                                              oggetti
Il processo di programmazione                                       I linguaggi di
                                                                  programmazione

                                                                  Andrea Serafini


                                                                  Cos’è un
                                                                  linguaggio di
Programmare significa scrivere uno o più file di testo,             programmazione

chiamato codice sorgente, tramite un editor                       Sviluppo storico
                                                                  Macchina
                                                                  Assembly
                                                                  Alto livello
Il codice sorgente viene eseguito tramite                         Il processo di
  ◮   Compilazione o traduzione, ovvero il processo per cui il    programmazione
                                                                  Compilazione

      codice sorgente viene tradotto in un codice binario         I paradigmi di
                                                                  programmazione
      eseguibile (in linguaggio macchina) per mezzo di un         Imperativo

      programma detto compilatore                                 Dichiarativo
                                                                  Funzionale
                                                                  Orientato ad
oppure tramite                                                    oggetti

                                                                  Concetti base
  ◮   Interpretazione, ovvero il processo per cui il programma    Variabili e tipi di
                                                                  dati
      viene eseguito da un interprete, traducendo in linguaggio   Strutture di
                                                                  controllo

      macchina un’istruzione alla volta                           Procedure e
                                                                  funzioni

                                                                  Programmazione
                                                                  orientata ad
                                                                  oggetti
Il processo di compilazione                              I linguaggi di
                                                       programmazione

                                                       Andrea Serafini


                                                       Cos’è un
                                                       linguaggio di
                                                       programmazione

 Il processo di compilazione consiste di 3 attività:   Sviluppo storico
                                                       Macchina
                                                       Assembly
   ◮   analisi lessicale                               Alto livello

                                                       Il processo di
   ◮   analisi sintattica                              programmazione
                                                       Compilazione
   ◮   generazione del codice                          I paradigmi di
                                                       programmazione
                                                       Imperativo
                                                       Dichiarativo
                                                       Funzionale
                                                       Orientato ad
                                                       oggetti

                                                       Concetti base
                                                       Variabili e tipi di
                                                       dati
                                                       Strutture di
                                                       controllo
                                                       Procedure e
                                                       funzioni

                                                       Programmazione
                                                       orientata ad
                                                       oggetti
Il processo di compilazione                                        I linguaggi di
                                                                 programmazione

Analisi lessicale                                                Andrea Serafini


                                                                 Cos’è un
                                                                 linguaggio di
                                                                 programmazione

                                                                 Sviluppo storico

 L’analisi lessicale è il processo di divisione del programma    Macchina
                                                                 Assembly
                                                                 Alto livello
 sorgente in piccole entità, i token, che rappresentano gli
                                                                 Il processo di
 elementi minimi del linguaggio, non ulteriormente divisibili    programmazione
                                                                 Compilazione

                                                                 I paradigmi di
 L’analizzatore lessicale:                                       programmazione
                                                                 Imperativo
    ◮   legge il codice sorgente simbolo per simbolo,            Dichiarativo
                                                                 Funzionale
        identificando quali gruppi di simboli rappresentano dei   Orientato ad
                                                                 oggetti
        token, classificandoli in base alla loro natura           Concetti base
                                                                 Variabili e tipi di
    ◮   codifica i token e li consegna al parser                  dati
                                                                 Strutture di
                                                                 controllo
                                                                 Procedure e
                                                                 funzioni

                                                                 Programmazione
                                                                 orientata ad
                                                                 oggetti
Il processo di compilazione                                            I linguaggi di
                                                                     programmazione

Analisi sintattica                                                   Andrea Serafini


                                                                     Cos’è un
                                                                     linguaggio di
                                                                     programmazione

                                                                     Sviluppo storico
 L’analisi sintattica o parsing è il processo di identificazione      Macchina
                                                                     Assembly

 della struttura grammaticale del programma e di                     Alto livello

                                                                     Il processo di
 riconoscimento del ruolo dei token. Si basa su un insieme di        programmazione

 regole che definiscono la sintassi del linguaggio di                 Compilazione

                                                                     I paradigmi di
 programmazione, chiamato grammatica. Tali regole vengono            programmazione
                                                                     Imperativo
 espresse e rappresentate tramite diagrammi di sintassi              Dichiarativo
                                                                     Funzionale
                                                                     Orientato ad
                                                                     oggetti
 Il risultato di questa fase è un albero di sintassi (parse tree),
                                                                     Concetti base
 che rappresenta l’interpretazione della composizione                Variabili e tipi di
                                                                     dati
 grammaticale del programma                                          Strutture di
                                                                     controllo
                                                                     Procedure e
                                                                     funzioni

                                                                     Programmazione
                                                                     orientata ad
                                                                     oggetti
Il processo di compilazione                                        I linguaggi di
                                                                 programmazione

Generazione del codice                                           Andrea Serafini


 La generazione del codice è l’attività finale di costruzione     Cos’è un
                                                                 linguaggio di
 delle istruzioni in linguaggio macchina per implementare i      programmazione

 comandi riconosciuti dal parser. Un compito importante del      Sviluppo storico
                                                                 Macchina
 generatore è l’ottimizzazione del codice                        Assembly
                                                                 Alto livello

                                                                 Il processo di
                                                                 programmazione
 Le 3 attività del processo di traduzione non vengono eseguite   Compilazione


 secondo un rigido ordine sequenziale, ma interagiscono fra      I paradigmi di
                                                                 programmazione
 loro                                                            Imperativo
                                                                 Dichiarativo
                                                                 Funzionale
                                                                 Orientato ad
                                                                 oggetti

                                                                 Concetti base
                                                                 Variabili e tipi di
                                                                 dati
                                                                 Strutture di
                                                                 controllo
                                                                 Procedure e
                                                                 funzioni

                                                                 Programmazione
                                                                 orientata ad
                                                                 oggetti
I paradigmi di programmazione                                       I linguaggi di
                                                                  programmazione

                                                                  Andrea Serafini

I linguaggi di programmazione vengono classificati in base al      Cos’è un
                                                                  linguaggio di
paradigma di programmazione, ovvero l’approccio con cui           programmazione

viene concepito il programma e l’insieme degli strumenti          Sviluppo storico
                                                                  Macchina
concettuali forniti dal linguaggio per la stesura dello stesso:   Assembly
                                                                  Alto livello
  ◮   paradigma imperativo o procedurale                          Il processo di
                                                                  programmazione
  ◮   paradigma dichiarativo                                      Compilazione

  ◮   paradigma funzionale                                        I paradigmi di
                                                                  programmazione
                                                                  Imperativo
  ◮   paradigma orientato ad oggetti                              Dichiarativo
                                                                  Funzionale
                                                                  Orientato ad
                                                                  oggetti

                                                                  Concetti base
                                                                  Variabili e tipi di
                                                                  dati
                                                                  Strutture di
                                                                  controllo
                                                                  Procedure e
                                                                  funzioni

                                                                  Programmazione
                                                                  orientata ad
                                                                  oggetti
I paradigmi di programmazione                                     I linguaggi di
                                                                programmazione

Paradigma imperativo                                            Andrea Serafini


                                                                Cos’è un
                                                                linguaggio di
                                                                programmazione

                                                                Sviluppo storico
                                                                Macchina
                                                                Assembly
                                                                Alto livello
 Il paradigma imperativo rappresenta l’approccio tradizionale   Il processo di
 al processo di programmazione, definendolo come lo sviluppo     programmazione
                                                                Compilazione
 di una successione di comandi che manipolano i dati per        I paradigmi di
 produrre il risultato desiderato                               programmazione
                                                                Imperativo
                                                                Dichiarativo
                                                                Funzionale
 L’obiettivo è quindi cercare un algoritmo per risolvere il     Orientato ad
                                                                oggetti
 problema ed esprimerlo con opportuni comandi                   Concetti base
                                                                Variabili e tipi di
                                                                dati
                                                                Strutture di
                                                                controllo
                                                                Procedure e
                                                                funzioni

                                                                Programmazione
                                                                orientata ad
                                                                oggetti
I paradigmi di programmazione                                          I linguaggi di
                                                                     programmazione

Paradigma imperativo                                                 Andrea Serafini


                                                                     Cos’è un
                                                                     linguaggio di
   ◮   C: creato da Dennis Ritchie nei primi anni ′ 70               programmazione

       originariamente come linguaggio per sviluppare software       Sviluppo storico

       di sistema, trovò presto popolarità fra la comunità di        Macchina
                                                                     Assembly
                                                                     Alto livello
       programmatori per il suo minimalismo
                                                                     Il processo di
   ◮   FORTRAN (FORmula TRANslator): uno dei primi                   programmazione
                                                                     Compilazione
       linguaggi ad alto livello (1957), diffuso soprattutto in       I paradigmi di
       ambito scientifico e ingegneristico                            programmazione
                                                                     Imperativo
                                                                     Dichiarativo
   ◮   COBOL (COmmon Business-Oriented Language):                    Funzionale
                                                                     Orientato ad
       sviluppato agli inizi degli anni ′ 60 dalla U.S.Navy per      oggetti


       applicazioni commerciali                                      Concetti base
                                                                     Variabili e tipi di
                                                                     dati
   ◮   Ada: linguaggio general-purpose, sviluppato verso la fine      Strutture di
                                                                     controllo
       degli anni ′ 70 su iniziativa del Dipartimento della Difesa   Procedure e
                                                                     funzioni

       degli USA                                                     Programmazione
                                                                     orientata ad
   ◮   Pascal: molto diffuso a livello scolastico                     oggetti
I paradigmi di programmazione                                            I linguaggi di
                                                                       programmazione

Paradigma dichiarativo                                                 Andrea Serafini


                                                                       Cos’è un
                                                                       linguaggio di
                                                                       programmazione
 Compito del programmatore è dare una formulazione precisa             Sviluppo storico
 del problema, piuttosto che sviluppare un algoritmo per               Macchina
                                                                       Assembly
 risolverlo. Sarà il sistema di programmazione dichiarativa ad         Alto livello

 applicare un algoritmo prestabilito                                   Il processo di
                                                                       programmazione
                                                                       Compilazione

 Si basa sul fatto che la logica formale matematica fornisce           I paradigmi di
                                                                       programmazione
 algoritmi risolutivi, adatti per i sistemi di programmazione          Imperativo
                                                                       Dichiarativo
 dichiarativa. Da qui lo sviluppo della programmazione logica          Funzionale
                                                                       Orientato ad
                                                                       oggetti
   ◮   Prolog (PROgramming in LOGic): un programma                     Concetti base
       consiste in una collezione di istruzioni iniziali (predicati)   Variabili e tipi di
                                                                       dati

       a partire dalle quali l’algoritmo applica il ragionamento       Strutture di
                                                                       controllo
                                                                       Procedure e
       deduttivo (regole inferenziali)                                 funzioni

                                                                       Programmazione
                                                                       orientata ad
                                                                       oggetti
I paradigmi di programmazione                                      I linguaggi di
                                                                 programmazione

Paradigma funzionale                                             Andrea Serafini


                                                                 Cos’è un
                                                                 linguaggio di
                                                                 programmazione
 Un programma è visto come un’entità che accetta input e         Sviluppo storico
 produce output, come una funzione matematica. É costruito       Macchina
                                                                 Assembly
 connettendo unità di programma predefinite più piccole, tali     Alto livello

 che gli output di ogni unità siano input di un’altra unità,     Il processo di
                                                                 programmazione
 ottenendo la relazione complessiva di input-output              Compilazione

 desiderata. Il processo di programmazione funzionale consiste   I paradigmi di
                                                                 programmazione
 pertanto nella costruzione di funzioni come composizione di     Imperativo
                                                                 Dichiarativo
 funzioni più semplici                                           Funzionale
                                                                 Orientato ad
                                                                 oggetti
   ◮   LISP (LISt Processor): ideato nel 1958 da John            Concetti base

       McCarthy come linguaggio formale per studiare le          Variabili e tipi di
                                                                 dati
                                                                 Strutture di
       equazioni di ricorsione in un modello computazionale,     controllo
                                                                 Procedure e
       molto usato nei progetti di intelligenza artificiale       funzioni

                                                                 Programmazione
                                                                 orientata ad
                                                                 oggetti
I paradigmi di programmazione                                         I linguaggi di
                                                                    programmazione

Paradigma orientato ad oggetti                                      Andrea Serafini


                                                                    Cos’è un
 Un programma è visto come una collezione di unità,                 linguaggio di
                                                                    programmazione
 chiamate oggetti, caratterizzate da un insieme di attributi e      Sviluppo storico
 di procedure, chiamate metodi, che descrivono le attività          Macchina
                                                                    Assembly
 eseguibili e il comportamento dell’oggetto al verificarsi di vari   Alto livello

                                                                    Il processo di
 eventi. Ogni oggetto è in grado di comunicare con gli altri e      programmazione
 tale interazione è alla base della risoluzione dei problemi        Compilazione

                                                                    I paradigmi di
                                                                    programmazione
                                                                    Imperativo

 L’approccio orientato ad oggetti consiste nell’identificare gli     Dichiarativo
                                                                    Funzionale

 oggetti coinvolti nel programma e nel descriverli come unità       Orientato ad
                                                                    oggetti

 autosufficienti                                                      Concetti base
                                                                    Variabili e tipi di
                                                                    dati
 La modellizzazione astratta di un oggetto con i suoi attributi     Strutture di
                                                                    controllo

 e i suoi metodi prende il nome di classe. Un oggetto è creato      Procedure e
                                                                    funzioni

 a partire da una particolare classe e si chiama istanza di         Programmazione
                                                                    orientata ad
 quella classe                                                      oggetti
I paradigmi di programmazione                                        I linguaggi di
                                                                   programmazione

Paradigma orientato ad oggetti                                     Andrea Serafini


                                                                   Cos’è un
 La struttura di un programma orientato ad oggetti contiene        linguaggio di
                                                                   programmazione
 la descrizione delle classi, che modellizzano uno o più oggetti
                                                                   Sviluppo storico
 utilizzati nel programma. Esiste inoltre una parte imperativa     Macchina
                                                                   Assembly
 di programma, il main, contenente la sequenza di passi da         Alto livello

 eseguire quando il programma viene compilato                      Il processo di
                                                                   programmazione
                                                                   Compilazione

                                                                   I paradigmi di
                                                                   programmazione
                                                                   Imperativo
                                                                   Dichiarativo
                                                                   Funzionale
                                                                   Orientato ad
                                                                   oggetti

                                                                   Concetti base
                                                                   Variabili e tipi di
                                                                   dati
                                                                   Strutture di
                                                                   controllo
                                                                   Procedure e
                                                                   funzioni

                                                                   Programmazione
                                                                   orientata ad
                                                                   oggetti
I paradigmi di programmazione                                     I linguaggi di
                                                                programmazione

Paradigma orientato ad oggetti                                  Andrea Serafini


                                                                Cos’è un
                                                                linguaggio di
   ◮   C++: sviluppato nel 1983 come versione avanzata del      programmazione

       linguaggio C, modificando il suo paradigma imperativo     Sviluppo storico
                                                                Macchina

       con caratteristiche orientate ad oggetti                 Assembly
                                                                Alto livello

   ◮   Java: sviluppato da Sun Microsystems agli inizi degli    Il processo di
                                                                programmazione
       anni ′ 90 a partire dal C++, apprezzato per i numerosi   Compilazione

       modelli predefiniti                                       I paradigmi di
                                                                programmazione
   ◮   C# (C sharp): introdotto da Microsoft all’interno del    Imperativo
                                                                Dichiarativo
                                                                Funzionale
       Framework .NET, molto simile al C++ e al Java,           Orientato ad
                                                                oggetti
       promette di diventare preminente nel mondo dello         Concetti base
       sviluppo del software                                    Variabili e tipi di
                                                                dati
                                                                Strutture di
   ◮   Visual Basic: creato da Microsoft per permettere agli    controllo
                                                                Procedure e
       utenti del sistema operativo Windows di sviluppare       funzioni

                                                                Programmazione
       applicazioni GUI (Graphical User Interface)              orientata ad
                                                                oggetti
Concetti base                                                      I linguaggi di
                                                                 programmazione

Struttura di un programma                                        Andrea Serafini


                                                                 Cos’è un
 Un programma consiste in una collezione di istruzioni, divise   linguaggio di
                                                                 programmazione
 in 3 categorie:                                                 Sviluppo storico
   ◮   istruzioni dichiarative: descrivono i dati utilizzati     Macchina
                                                                 Assembly

       all’interno del programma                                 Alto livello

                                                                 Il processo di
   ◮   istruzioni imperative: descrivono i passaggi              programmazione
                                                                 Compilazione
       dell’algoritmo da eseguire                                I paradigmi di
                                                                 programmazione
   ◮   commenti: spiegano il programma, migliorandone la         Imperativo
                                                                 Dichiarativo
       leggibilità (/*. . . /* oppure // . . . )                 Funzionale
                                                                 Orientato ad
                                                                 oggetti

                                                                 Concetti base
                                                                 Variabili e tipi di
                                                                 dati
                                                                 Strutture di
                                                                 controllo
                                                                 Procedure e
                                                                 funzioni

                                                                 Programmazione
                                                                 orientata ad
                                                                 oggetti
Concetti base                                                      I linguaggi di
                                                                 programmazione

Variabili e tipi di dati                                         Andrea Serafini


                                                                 Cos’è un
 Una variabile identifica una locazione in memoria destinata a    linguaggio di
 contenere dei dati, che possono essere modificati nel corso      programmazione

                                                                 Sviluppo storico
 dell’esecuzione del programma. Per questo motivo ogni           Macchina

 variabile è caratterizzata da un tipo di dato, che indica       Assembly
                                                                 Alto livello

 l’insieme di valori che essa può assumere e le operazioni che   Il processo di
                                                                 programmazione
 si possono effettuare su di essi. Una volta dichiarate, è        Compilazione

 possibile assegnare alle variabili un valore iniziale           I paradigmi di
                                                                 programmazione
   ◮   tipi primitivi                                            Imperativo
                                                                 Dichiarativo
                                       int Costo = 100;          Funzionale
         ◮   numerici: integer, float                             Orientato ad
                                                                 oggetti
         ◮   caratteri: char, string
                                                                 Concetti base
         ◮   booleani                                            Variabili e tipi di
                                                                 dati
   ◮   tipi derivati                                             Strutture di
                                                                 controllo
                                       struct {char Nome[25];    Procedure e
         ◮   strutture dati: array                               funzioni

             (omogenea) e record               int Età;          Programmazione
             (eterogenea)                      float Peso;}      orientata ad
                                                                 oggetti
         ◮   classi                            Atleta;
Concetti base                                                            I linguaggi di
                                                                       programmazione

Variabili e costanti                                                   Andrea Serafini


 Una caratteristica importante di una variabile è la sua               Cos’è un
                                                                       linguaggio di
 visibilità (o scope), ovvero la porzione di programma in cui è        programmazione

 possibile richiamarla e fare riferimento ad essa. Possiamo            Sviluppo storico
                                                                       Macchina
 distinguere 2 categorie:                                              Assembly
                                                                       Alto livello
    ◮ variabili globali: visibili da qualunque punto del               Il processo di
                                                                       programmazione
       programma                                                       Compilazione

    ◮ variabili locali: visibili solo all’interno di una determinata   I paradigmi di
                                                                       programmazione
       parte di programma                                              Imperativo
                                                                       Dichiarativo
                                                                       Funzionale
                                                                       Orientato ad
                                                                       oggetti
 A differenza della variabile, una costante è una posizione di          Concetti base

 memoria che mantiene lo stesso valore per tutta la durata             Variabili e tipi di
                                                                       dati
                                                                       Strutture di
 dell’esecuzione del programma                                         controllo
                                                                       Procedure e
 Es:                                                                   funzioni

                                                                       Programmazione
                                                                       orientata ad
                       cost float pi = 3.14;                           oggetti
Concetti base                                                         I linguaggi di
                                                                    programmazione

Strutture di controllo                                              Andrea Serafini


                                                                    Cos’è un
                                                                    linguaggio di
                                                                    programmazione

                                                                    Sviluppo storico
 Le strutture di controllo permettono di governare il flusso di      Macchina

 esecuzione del programma, alterandolo in base al risultato o       Assembly
                                                                    Alto livello

 valutazione di una espressione                                     Il processo di
                                                                    programmazione
                                                                    Compilazione

 Il goto è la struttura di controllo più semplice, il cui           I paradigmi di
                                                                    programmazione
 significato generale è quello di indirizzare il controllo ad una    Imperativo

 istruzione specificata, che può trovarsi in un punto qualsiasi      Dichiarativo
                                                                    Funzionale

 del programma                                                      Orientato ad
                                                                    oggetti

 A partire dagli anni ′ 70, il goto è stato fortemente criticato,   Concetti base
                                                                    Variabili e tipi di
 in quanto favorisce lo sviluppo di programmi poco leggibili e      dati
                                                                    Strutture di
 modificabili, e sostituito da strutture più efficienti                controllo
                                                                    Procedure e
                                                                    funzioni

                                                                    Programmazione
                                                                    orientata ad
                                                                    oggetti
Concetti base                                                      I linguaggi di
                                                                 programmazione

Strutture di controllo                                           Andrea Serafini


                                                                 Cos’è un
                                                                 linguaggio di
                                                                 programmazione

                                                                 Sviluppo storico
                                                                 Macchina

    ◮   Cicli iterativi: ripetizione di una sequenza di azioni   Assembly
                                                                 Alto livello

        fintanto che una certa condizione viene verificata         Il processo di
                                                                 programmazione
                                                                 Compilazione
          ◮   while                                              I paradigmi di
                                                                 programmazione
              while (condizione)                                 Imperativo
                  {corpo del ciclo}                              Dichiarativo
                                                                 Funzionale
          ◮   for                                                Orientato ad
                                                                 oggetti

              for (int i=1; i<n; i++)                            Concetti base
                                                                 Variabili e tipi di
                  {corpo del ciclo}                              dati
                                                                 Strutture di
                                                                 controllo
                                                                 Procedure e
                                                                 funzioni

                                                                 Programmazione
                                                                 orientata ad
                                                                 oggetti
Concetti base                                                          I linguaggi di
                                                                     programmazione

Strutture di controllo                                               Andrea Serafini


                                                                     Cos’è un
                                                                     linguaggio di
                                                                     programmazione

    ◮   Strutture condizionali: esecuzione di un blocco di           Sviluppo storico
                                                                     Macchina
        istruzioni se vale una certa condizione                      Assembly
                                                                     Alto livello

                                                                     Il processo di
          ◮   if-then-else                                           programmazione
                                                                     Compilazione
              if (condizione) then {istruzione A}
                                                                     I paradigmi di
                 else {istruzione B}                                 programmazione
          ◮   switch-case: permette di scegliere un’istruzione tra   Imperativo
                                                                     Dichiarativo
              diverse opzioni                                        Funzionale
                                                                     Orientato ad
                                                                     oggetti
              switch (variabile) {
                                                                     Concetti base
                 case ’A’: istruzione A; break;                      Variabili e tipi di
                                                                     dati
                 case ’B’: istruzione B; break;                      Strutture di
                                                                     controllo
                 case ’C’: istruzione C; break;                      Procedure e
                                                                     funzioni
                 default: istruzione D}
                                                                     Programmazione
                                                                     orientata ad
                                                                     oggetti
Concetti base                                                        I linguaggi di
                                                                   programmazione

Procedure                                                          Andrea Serafini


                                                                   Cos’è un
                                                                   linguaggio di
 Una procedura è un costrutto che permette di raggruppare,         programmazione

 in un unico blocco, una sequenza di istruzioni utili a svolgere   Sviluppo storico
                                                                   Macchina
 un determinato compito. É importante perché può essere            Assembly
                                                                   Alto livello
 chiamata˝(o invocata˝) ogni volta in cui si ha la necessità,    Il processo di
 come se fosse una singola istruzione                              programmazione
                                                                   Compilazione

                                                                   I paradigmi di
                                                                   programmazione
                                                                   Imperativo
                                                                   Dichiarativo
                                                                   Funzionale
                                                                   Orientato ad
                                                                   oggetti

                                                                   Concetti base
                                                                   Variabili e tipi di
                                                                   dati
                                                                   Strutture di
                                                                   controllo
                                                                   Procedure e
                                                                   funzioni

                                                                   Programmazione
                                                                   orientata ad
                                                                   oggetti
Concetti base                                                   I linguaggi di
                                                              programmazione

Procedure                                                     Andrea Serafini


 Una procedura si scrive come una singola unità di            Cos’è un
                                                              linguaggio di
 programma:                                                   programmazione

   ◮ nome della procedura - header (parametri)                Sviluppo storico
                                                              Macchina
   ◮ corpo della procedura: parte dichiarativa e imperativa   Assembly
                                                              Alto livello

                                                              Il processo di
                                                              programmazione
                                                              Compilazione

                                                              I paradigmi di
                                                              programmazione
                                                              Imperativo
                                                              Dichiarativo
                                                              Funzionale
                                                              Orientato ad
                                                              oggetti

                                                              Concetti base
                                                              Variabili e tipi di
                                                              dati
                                                              Strutture di
                                                              controllo
                                                              Procedure e
                                                              funzioni

                                                              Programmazione
                                                              orientata ad
                                                              oggetti
               ProjectPopulation(0.03)
Concetti base                                                       I linguaggi di
                                                                  programmazione

Funzioni                                                          Andrea Serafini


                                                                  Cos’è un
 Una funzione è una procedura il cui scopo è quello di            linguaggio di
                                                                  programmazione
 restituire un valore, piuttosto che di svolgere un’azione.       Sviluppo storico
 Come conseguenza dell’esecuzione di una funzione, viene          Macchina
                                                                  Assembly
 calcolato un valore e rispedito indietro al programma che l’ha   Alto livello

 invocata                                                         Il processo di
                                                                  programmazione
                                                                  Compilazione

                                                                  I paradigmi di
 É definita allo stesso modo                                       programmazione
                                                                  Imperativo
 di una procedura, con la                                         Dichiarativo
                                                                  Funzionale

 differenza che l’header di                                        Orientato ad
                                                                  oggetti

 solito inizia specificando il                                     Concetti base
                                                                  Variabili e tipi di
 tipo del valore da restituire                                    dati
                                                                  Strutture di
 e termina con un’istruzione                                      controllo
                                                                  Procedure e
                                                                  funzioni
 (return) in cui è indicato
                                                                  Programmazione
 il valore                        CylinderVolume(1.5,4)           orientata ad
                                                                  oggetti
                                  = 28.26
Programmazione orientata ad oggetti                           I linguaggi di
                                                            programmazione

Esempio di programma                                        Andrea Serafini


 Es: Gioco del laser: proteggere la Terra dai meteoriti˝   Cos’è un
                                                            linguaggio di
                                                            programmazione

                                                            Sviluppo storico
                                                            Macchina
                                                            Assembly
                                                            Alto livello

                                                            Il processo di
                                                            programmazione
                                                            Compilazione

                                                            I paradigmi di
                                                            programmazione
                                                            Imperativo
                                                            Dichiarativo
 Una volta descritta la classe LaserClass, possiamo         Funzionale
                                                            Orientato ad
 dichiarare variabili di tale tipo e creare oggetti         oggetti

                                                            Concetti base
                                                            Variabili e tipi di
 C++:     LaserClass Laser1;                                dati
                                                            Strutture di
 Java:    LaserClass Laser1 = new LaserClass();             controllo
                                                            Procedure e
                                                            funzioni

 Possiamo richiamare metodi di tali oggetti                 Programmazione
                                                            orientata ad
                                                            oggetti
 Laser1.fire();        Laser1.turnLeft();
Programmazione orientata ad oggetti                           I linguaggi di
                                                            programmazione

Costruttori                                                 Andrea Serafini


                                                            Cos’è un
                                                            linguaggio di
                                                            programmazione
 Esistono metodi speciali
                                                            Sviluppo storico
 associati alle classi che                                  Macchina

 hanno lo scopo di creare le                                Assembly
                                                            Alto livello

 istanze e di inizializzarle                                Il processo di
                                                            programmazione
 durante il processo di                                     Compilazione

 creazione: i costruttori                                   I paradigmi di
                                                            programmazione
                                                            Imperativo
                                                            Dichiarativo
                                                            Funzionale
 I costruttori vengono eseguiti automaticamente quando un   Orientato ad
                                                            oggetti
 oggetto è costruito a partire da una classe, passando i    Concetti base
 parametri in entrata                                       Variabili e tipi di
                                                            dati
                                                            Strutture di
                                                            controllo
                                                            Procedure e
 C++: LaserClass Laser1(50);                                funzioni

 Java: LaserClass Laser1 = new LaserClass(50);              Programmazione
                                                            orientata ad
                                                            oggetti
Programmazione orientata ad oggetti                                     I linguaggi di
                                                                      programmazione

Altre proprietà                                                       Andrea Serafini


 L’ereditarietà è una tecnica che consiste nel derivare una           Cos’è un
                                                                      linguaggio di
 classe a partire da un’altra già definita (extends). Una              programmazione

 classe derivata, detta sottoclasse, mantiene i metodi e gli          Sviluppo storico
                                                                      Macchina
 attributi della classe da cui deriva, chiamata superclasse;          Assembly
                                                                      Alto livello
 inoltre, può definirne di propri. Si tratta di una relazione di       Il processo di
 generalizzazione-specificazione: la superclasse definisce un           programmazione
                                                                      Compilazione

 concetto generale e la sottoclasse ne rappresenta una                I paradigmi di
                                                                      programmazione
 variante specifica                                                    Imperativo
                                                                      Dichiarativo
                                                                      Funzionale
                                                                      Orientato ad
                                                                      oggetti

                                                                      Concetti base
                                                                      Variabili e tipi di
                                                                      dati
                                                                      Strutture di
                                                                      controllo
                                                                      Procedure e
                                                                      funzioni
 L’incapsulamento si riferisce all’accesso ristretto alle proprietà   Programmazione
 interne di un oggetto: solo l’oggetto stesso può accedervi           orientata ad
                                                                      oggetti
 (private vs public)

More Related Content

Similar to Linguaggidiprogrammazione

Coding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecodingCoding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecodingAlessandro Bogliolo
 
Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...
Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...
Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...ICL - Image Communication Laboratory
 
Fdg2017 presentazione corso
Fdg2017 presentazione corsoFdg2017 presentazione corso
Fdg2017 presentazione corsoStudiabo
 
Processing -guida_introduttiva_alla_pro
Processing  -guida_introduttiva_alla_proProcessing  -guida_introduttiva_alla_pro
Processing -guida_introduttiva_alla_proAlberto Cecchi
 
Software Re Engineering
Software Re EngineeringSoftware Re Engineering
Software Re Engineeringpantifabr
 
Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains Federico Tomassetti
 
Cognitive Services
Cognitive ServicesCognitive Services
Cognitive ServicesLuca Congiu
 
Corso di OCR
Corso di OCRCorso di OCR
Corso di OCRQabiria
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai ProgrammiMajong DevJfu
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Daniele Falamesca
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming LanguagePasquale Paola
 
Stefano Penge - Open labor, opendata for visible and trasparent European job ...
Stefano Penge - Open labor, opendata for visible and trasparent European job ...Stefano Penge - Open labor, opendata for visible and trasparent European job ...
Stefano Penge - Open labor, opendata for visible and trasparent European job ...International Open Data Day Italia
 
Ribesdesign interfacce
Ribesdesign interfacceRibesdesign interfacce
Ribesdesign interfacceRibesdesign
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Commit University
 

Similar to Linguaggidiprogrammazione (16)

Coding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecodingCoding: dai diagrammi di flusso al pipecoding
Coding: dai diagrammi di flusso al pipecoding
 
Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...
Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...
Sviluppo di un componente java-bean che inplementi funzionalità di parsing xm...
 
Fdg2017 presentazione corso
Fdg2017 presentazione corsoFdg2017 presentazione corso
Fdg2017 presentazione corso
 
Processing -guida_introduttiva_alla_pro
Processing  -guida_introduttiva_alla_proProcessing  -guida_introduttiva_alla_pro
Processing -guida_introduttiva_alla_pro
 
Software Re Engineering
Software Re EngineeringSoftware Re Engineering
Software Re Engineering
 
Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains
 
Cognitive Services
Cognitive ServicesCognitive Services
Cognitive Services
 
Corso di OCR
Corso di OCRCorso di OCR
Corso di OCR
 
01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi01 - Programmazione: Dai Problemi ai Programmi
01 - Programmazione: Dai Problemi ai Programmi
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming Language
 
Stefano Penge - Open labor, opendata for visible and trasparent European job ...
Stefano Penge - Open labor, opendata for visible and trasparent European job ...Stefano Penge - Open labor, opendata for visible and trasparent European job ...
Stefano Penge - Open labor, opendata for visible and trasparent European job ...
 
Ribesdesign interfacce
Ribesdesign interfacceRibesdesign interfacce
Ribesdesign interfacce
 
Presentazione
PresentazionePresentazione
Presentazione
 
T1 introduzione
T1 introduzioneT1 introduzione
T1 introduzione
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
 

Linguaggidiprogrammazione

  • 1. I linguaggi di programmazione Andrea Serafini I linguaggi di programmazione Cos’è un linguaggio di programmazione Didactics of Computer Science Sviluppo storico Macchina Assembly Alto livello Andrea Serafini Il processo di programmazione Compilazione Università degli Studi di Trento I paradigmi di programmazione Imperativo 20 Aprile 2012 Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di Fonti: dati Strutture di ◮ J. Glenn Brookshear, Computer Science: An Overview, controllo Procedure e 11th edition, Addison-Wesley Pearson, 2012 funzioni Programmazione ◮ Wikipedia - http://it.wikipedia.org orientata ad oggetti
  • 2. Cos’è un linguaggio di programmazione I linguaggi di programmazione Andrea Serafini Cos’è un linguaggio di programmazione Un linguaggio di programmazione è un linguaggio artificiale e Sviluppo storico Macchina formale, dotato di un lessico, di una sintassi e di una Assembly Alto livello semantica ben definiti, utilizzabile per la programmazione di Il processo di una macchina attraverso la scrittura di un programma sotto programmazione Compilazione forma di codice I paradigmi di programmazione Imperativo Dichiarativo Funzionale La programmazione può essere paragonata all’insegnamento: Orientato ad oggetti è come se il programmatore insegnasse˝al computer come Concetti base Variabili e tipi di svolgere un determinato compito, più o meno complesso dati Strutture di controllo Procedure e - Wikipedia - funzioni Programmazione orientata ad oggetti
  • 3. Sviluppo storico I linguaggi di programmazione Linguaggi di prima generazione: linguaggio macchina Andrea Serafini Cos’è un linguaggio di programmazione Sviluppo storico I primi programmi consistevano in una sequenza di istruzioni Macchina codificate come cifre binarie attraverso un linguaggio Assembly Alto livello macchina, un linguaggio di prima generazione Il processo di programmazione Compilazione Scrivere programmi in linguaggio macchina risultava I paradigmi di programmazione complesso e spesso conduceva ad errori. Da qui la necessità Imperativo Dichiarativo di sviluppare linguaggi più vicini alla sensibilità umana e Funzionale Orientato ad oggetti facilmente convertibili in istruzioni macchina: Concetti base ◮ linguaggi di seconda generazione Variabili e tipi di dati Strutture di ◮ linguaggi di terza generazione controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 4. Sviluppo storico I linguaggi di programmazione Linguaggi di seconda generazione: linguaggio assembly Andrea Serafini Negli anni ′ 40 furono sviluppati sistemi notazionali in cui le Cos’è un linguaggio di istruzioni venivano rappresentate in una forma mnemonica programmazione piuttosto che numerica: il linguaggio assembly Sviluppo storico Macchina Assembly Es: Sposta il contenuto del registro 5 nel registro 6˝ Alto livello Il processo di ◮ linguaggio macchina: 4056 programmazione Compilazione ◮ linguaggio assembly: MOV R5, R6 (identificatore) I paradigmi di programmazione Imperativo Furono creati programmi in grado di convertire le espressioni Dichiarativo Funzionale mnemoniche in istruzioni binarie di linguaggio macchina: Orientato ad oggetti assembler Concetti base Variabili e tipi di dati Svantaggi: Strutture di controllo Procedure e ◮ dipendenza dalla macchina funzioni Programmazione ◮ primitive di basso livello (istruzioni espresse in piccoli orientata ad oggetti passi)
  • 5. Sviluppo storico I linguaggi di programmazione Linguaggi di terza generazione: linguaggi di programmazione ad alto livello Andrea Serafini Cos’è un linguaggio di programmazione Sviluppo storico A partire dagli anni ′ 50 furono sviluppati linguaggi di Macchina Assembly programmazione ad alto livello, che rispetto alle precedenti Alto livello generazioni avevano il vantaggio di: Il processo di programmazione ◮ essere indipendenti dalla macchina (istruzioni non Compilazione I paradigmi di dipendono dalle caratteristiche di una macchina programmazione particolare) Imperativo Dichiarativo Funzionale ◮ contenere primitive di alto livello (istruzioni espresse Orientato ad oggetti come successione di primitive di basso livello), da cui la Concetti base possibilità di introdurre anche strutture più generali e Variabili e tipi di dati più simili al linguaggio naturale Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 6. Il processo di programmazione I linguaggi di programmazione Andrea Serafini Cos’è un linguaggio di Programmare significa scrivere uno o più file di testo, programmazione chiamato codice sorgente, tramite un editor Sviluppo storico Macchina Assembly Alto livello Il codice sorgente viene eseguito tramite Il processo di ◮ Compilazione o traduzione, ovvero il processo per cui il programmazione Compilazione codice sorgente viene tradotto in un codice binario I paradigmi di programmazione eseguibile (in linguaggio macchina) per mezzo di un Imperativo programma detto compilatore Dichiarativo Funzionale Orientato ad oppure tramite oggetti Concetti base ◮ Interpretazione, ovvero il processo per cui il programma Variabili e tipi di dati viene eseguito da un interprete, traducendo in linguaggio Strutture di controllo macchina un’istruzione alla volta Procedure e funzioni Programmazione orientata ad oggetti
  • 7. Il processo di compilazione I linguaggi di programmazione Andrea Serafini Cos’è un linguaggio di programmazione Il processo di compilazione consiste di 3 attività: Sviluppo storico Macchina Assembly ◮ analisi lessicale Alto livello Il processo di ◮ analisi sintattica programmazione Compilazione ◮ generazione del codice I paradigmi di programmazione Imperativo Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 8. Il processo di compilazione I linguaggi di programmazione Analisi lessicale Andrea Serafini Cos’è un linguaggio di programmazione Sviluppo storico L’analisi lessicale è il processo di divisione del programma Macchina Assembly Alto livello sorgente in piccole entità, i token, che rappresentano gli Il processo di elementi minimi del linguaggio, non ulteriormente divisibili programmazione Compilazione I paradigmi di L’analizzatore lessicale: programmazione Imperativo ◮ legge il codice sorgente simbolo per simbolo, Dichiarativo Funzionale identificando quali gruppi di simboli rappresentano dei Orientato ad oggetti token, classificandoli in base alla loro natura Concetti base Variabili e tipi di ◮ codifica i token e li consegna al parser dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 9. Il processo di compilazione I linguaggi di programmazione Analisi sintattica Andrea Serafini Cos’è un linguaggio di programmazione Sviluppo storico L’analisi sintattica o parsing è il processo di identificazione Macchina Assembly della struttura grammaticale del programma e di Alto livello Il processo di riconoscimento del ruolo dei token. Si basa su un insieme di programmazione regole che definiscono la sintassi del linguaggio di Compilazione I paradigmi di programmazione, chiamato grammatica. Tali regole vengono programmazione Imperativo espresse e rappresentate tramite diagrammi di sintassi Dichiarativo Funzionale Orientato ad oggetti Il risultato di questa fase è un albero di sintassi (parse tree), Concetti base che rappresenta l’interpretazione della composizione Variabili e tipi di dati grammaticale del programma Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 10. Il processo di compilazione I linguaggi di programmazione Generazione del codice Andrea Serafini La generazione del codice è l’attività finale di costruzione Cos’è un linguaggio di delle istruzioni in linguaggio macchina per implementare i programmazione comandi riconosciuti dal parser. Un compito importante del Sviluppo storico Macchina generatore è l’ottimizzazione del codice Assembly Alto livello Il processo di programmazione Le 3 attività del processo di traduzione non vengono eseguite Compilazione secondo un rigido ordine sequenziale, ma interagiscono fra I paradigmi di programmazione loro Imperativo Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 11. I paradigmi di programmazione I linguaggi di programmazione Andrea Serafini I linguaggi di programmazione vengono classificati in base al Cos’è un linguaggio di paradigma di programmazione, ovvero l’approccio con cui programmazione viene concepito il programma e l’insieme degli strumenti Sviluppo storico Macchina concettuali forniti dal linguaggio per la stesura dello stesso: Assembly Alto livello ◮ paradigma imperativo o procedurale Il processo di programmazione ◮ paradigma dichiarativo Compilazione ◮ paradigma funzionale I paradigmi di programmazione Imperativo ◮ paradigma orientato ad oggetti Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 12. I paradigmi di programmazione I linguaggi di programmazione Paradigma imperativo Andrea Serafini Cos’è un linguaggio di programmazione Sviluppo storico Macchina Assembly Alto livello Il paradigma imperativo rappresenta l’approccio tradizionale Il processo di al processo di programmazione, definendolo come lo sviluppo programmazione Compilazione di una successione di comandi che manipolano i dati per I paradigmi di produrre il risultato desiderato programmazione Imperativo Dichiarativo Funzionale L’obiettivo è quindi cercare un algoritmo per risolvere il Orientato ad oggetti problema ed esprimerlo con opportuni comandi Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 13. I paradigmi di programmazione I linguaggi di programmazione Paradigma imperativo Andrea Serafini Cos’è un linguaggio di ◮ C: creato da Dennis Ritchie nei primi anni ′ 70 programmazione originariamente come linguaggio per sviluppare software Sviluppo storico di sistema, trovò presto popolarità fra la comunità di Macchina Assembly Alto livello programmatori per il suo minimalismo Il processo di ◮ FORTRAN (FORmula TRANslator): uno dei primi programmazione Compilazione linguaggi ad alto livello (1957), diffuso soprattutto in I paradigmi di ambito scientifico e ingegneristico programmazione Imperativo Dichiarativo ◮ COBOL (COmmon Business-Oriented Language): Funzionale Orientato ad sviluppato agli inizi degli anni ′ 60 dalla U.S.Navy per oggetti applicazioni commerciali Concetti base Variabili e tipi di dati ◮ Ada: linguaggio general-purpose, sviluppato verso la fine Strutture di controllo degli anni ′ 70 su iniziativa del Dipartimento della Difesa Procedure e funzioni degli USA Programmazione orientata ad ◮ Pascal: molto diffuso a livello scolastico oggetti
  • 14. I paradigmi di programmazione I linguaggi di programmazione Paradigma dichiarativo Andrea Serafini Cos’è un linguaggio di programmazione Compito del programmatore è dare una formulazione precisa Sviluppo storico del problema, piuttosto che sviluppare un algoritmo per Macchina Assembly risolverlo. Sarà il sistema di programmazione dichiarativa ad Alto livello applicare un algoritmo prestabilito Il processo di programmazione Compilazione Si basa sul fatto che la logica formale matematica fornisce I paradigmi di programmazione algoritmi risolutivi, adatti per i sistemi di programmazione Imperativo Dichiarativo dichiarativa. Da qui lo sviluppo della programmazione logica Funzionale Orientato ad oggetti ◮ Prolog (PROgramming in LOGic): un programma Concetti base consiste in una collezione di istruzioni iniziali (predicati) Variabili e tipi di dati a partire dalle quali l’algoritmo applica il ragionamento Strutture di controllo Procedure e deduttivo (regole inferenziali) funzioni Programmazione orientata ad oggetti
  • 15. I paradigmi di programmazione I linguaggi di programmazione Paradigma funzionale Andrea Serafini Cos’è un linguaggio di programmazione Un programma è visto come un’entità che accetta input e Sviluppo storico produce output, come una funzione matematica. É costruito Macchina Assembly connettendo unità di programma predefinite più piccole, tali Alto livello che gli output di ogni unità siano input di un’altra unità, Il processo di programmazione ottenendo la relazione complessiva di input-output Compilazione desiderata. Il processo di programmazione funzionale consiste I paradigmi di programmazione pertanto nella costruzione di funzioni come composizione di Imperativo Dichiarativo funzioni più semplici Funzionale Orientato ad oggetti ◮ LISP (LISt Processor): ideato nel 1958 da John Concetti base McCarthy come linguaggio formale per studiare le Variabili e tipi di dati Strutture di equazioni di ricorsione in un modello computazionale, controllo Procedure e molto usato nei progetti di intelligenza artificiale funzioni Programmazione orientata ad oggetti
  • 16. I paradigmi di programmazione I linguaggi di programmazione Paradigma orientato ad oggetti Andrea Serafini Cos’è un Un programma è visto come una collezione di unità, linguaggio di programmazione chiamate oggetti, caratterizzate da un insieme di attributi e Sviluppo storico di procedure, chiamate metodi, che descrivono le attività Macchina Assembly eseguibili e il comportamento dell’oggetto al verificarsi di vari Alto livello Il processo di eventi. Ogni oggetto è in grado di comunicare con gli altri e programmazione tale interazione è alla base della risoluzione dei problemi Compilazione I paradigmi di programmazione Imperativo L’approccio orientato ad oggetti consiste nell’identificare gli Dichiarativo Funzionale oggetti coinvolti nel programma e nel descriverli come unità Orientato ad oggetti autosufficienti Concetti base Variabili e tipi di dati La modellizzazione astratta di un oggetto con i suoi attributi Strutture di controllo e i suoi metodi prende il nome di classe. Un oggetto è creato Procedure e funzioni a partire da una particolare classe e si chiama istanza di Programmazione orientata ad quella classe oggetti
  • 17. I paradigmi di programmazione I linguaggi di programmazione Paradigma orientato ad oggetti Andrea Serafini Cos’è un La struttura di un programma orientato ad oggetti contiene linguaggio di programmazione la descrizione delle classi, che modellizzano uno o più oggetti Sviluppo storico utilizzati nel programma. Esiste inoltre una parte imperativa Macchina Assembly di programma, il main, contenente la sequenza di passi da Alto livello eseguire quando il programma viene compilato Il processo di programmazione Compilazione I paradigmi di programmazione Imperativo Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 18. I paradigmi di programmazione I linguaggi di programmazione Paradigma orientato ad oggetti Andrea Serafini Cos’è un linguaggio di ◮ C++: sviluppato nel 1983 come versione avanzata del programmazione linguaggio C, modificando il suo paradigma imperativo Sviluppo storico Macchina con caratteristiche orientate ad oggetti Assembly Alto livello ◮ Java: sviluppato da Sun Microsystems agli inizi degli Il processo di programmazione anni ′ 90 a partire dal C++, apprezzato per i numerosi Compilazione modelli predefiniti I paradigmi di programmazione ◮ C# (C sharp): introdotto da Microsoft all’interno del Imperativo Dichiarativo Funzionale Framework .NET, molto simile al C++ e al Java, Orientato ad oggetti promette di diventare preminente nel mondo dello Concetti base sviluppo del software Variabili e tipi di dati Strutture di ◮ Visual Basic: creato da Microsoft per permettere agli controllo Procedure e utenti del sistema operativo Windows di sviluppare funzioni Programmazione applicazioni GUI (Graphical User Interface) orientata ad oggetti
  • 19. Concetti base I linguaggi di programmazione Struttura di un programma Andrea Serafini Cos’è un Un programma consiste in una collezione di istruzioni, divise linguaggio di programmazione in 3 categorie: Sviluppo storico ◮ istruzioni dichiarative: descrivono i dati utilizzati Macchina Assembly all’interno del programma Alto livello Il processo di ◮ istruzioni imperative: descrivono i passaggi programmazione Compilazione dell’algoritmo da eseguire I paradigmi di programmazione ◮ commenti: spiegano il programma, migliorandone la Imperativo Dichiarativo leggibilità (/*. . . /* oppure // . . . ) Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 20. Concetti base I linguaggi di programmazione Variabili e tipi di dati Andrea Serafini Cos’è un Una variabile identifica una locazione in memoria destinata a linguaggio di contenere dei dati, che possono essere modificati nel corso programmazione Sviluppo storico dell’esecuzione del programma. Per questo motivo ogni Macchina variabile è caratterizzata da un tipo di dato, che indica Assembly Alto livello l’insieme di valori che essa può assumere e le operazioni che Il processo di programmazione si possono effettuare su di essi. Una volta dichiarate, è Compilazione possibile assegnare alle variabili un valore iniziale I paradigmi di programmazione ◮ tipi primitivi Imperativo Dichiarativo int Costo = 100; Funzionale ◮ numerici: integer, float Orientato ad oggetti ◮ caratteri: char, string Concetti base ◮ booleani Variabili e tipi di dati ◮ tipi derivati Strutture di controllo struct {char Nome[25]; Procedure e ◮ strutture dati: array funzioni (omogenea) e record int Età; Programmazione (eterogenea) float Peso;} orientata ad oggetti ◮ classi Atleta;
  • 21. Concetti base I linguaggi di programmazione Variabili e costanti Andrea Serafini Una caratteristica importante di una variabile è la sua Cos’è un linguaggio di visibilità (o scope), ovvero la porzione di programma in cui è programmazione possibile richiamarla e fare riferimento ad essa. Possiamo Sviluppo storico Macchina distinguere 2 categorie: Assembly Alto livello ◮ variabili globali: visibili da qualunque punto del Il processo di programmazione programma Compilazione ◮ variabili locali: visibili solo all’interno di una determinata I paradigmi di programmazione parte di programma Imperativo Dichiarativo Funzionale Orientato ad oggetti A differenza della variabile, una costante è una posizione di Concetti base memoria che mantiene lo stesso valore per tutta la durata Variabili e tipi di dati Strutture di dell’esecuzione del programma controllo Procedure e Es: funzioni Programmazione orientata ad cost float pi = 3.14; oggetti
  • 22. Concetti base I linguaggi di programmazione Strutture di controllo Andrea Serafini Cos’è un linguaggio di programmazione Sviluppo storico Le strutture di controllo permettono di governare il flusso di Macchina esecuzione del programma, alterandolo in base al risultato o Assembly Alto livello valutazione di una espressione Il processo di programmazione Compilazione Il goto è la struttura di controllo più semplice, il cui I paradigmi di programmazione significato generale è quello di indirizzare il controllo ad una Imperativo istruzione specificata, che può trovarsi in un punto qualsiasi Dichiarativo Funzionale del programma Orientato ad oggetti A partire dagli anni ′ 70, il goto è stato fortemente criticato, Concetti base Variabili e tipi di in quanto favorisce lo sviluppo di programmi poco leggibili e dati Strutture di modificabili, e sostituito da strutture più efficienti controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 23. Concetti base I linguaggi di programmazione Strutture di controllo Andrea Serafini Cos’è un linguaggio di programmazione Sviluppo storico Macchina ◮ Cicli iterativi: ripetizione di una sequenza di azioni Assembly Alto livello fintanto che una certa condizione viene verificata Il processo di programmazione Compilazione ◮ while I paradigmi di programmazione while (condizione) Imperativo {corpo del ciclo} Dichiarativo Funzionale ◮ for Orientato ad oggetti for (int i=1; i<n; i++) Concetti base Variabili e tipi di {corpo del ciclo} dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 24. Concetti base I linguaggi di programmazione Strutture di controllo Andrea Serafini Cos’è un linguaggio di programmazione ◮ Strutture condizionali: esecuzione di un blocco di Sviluppo storico Macchina istruzioni se vale una certa condizione Assembly Alto livello Il processo di ◮ if-then-else programmazione Compilazione if (condizione) then {istruzione A} I paradigmi di else {istruzione B} programmazione ◮ switch-case: permette di scegliere un’istruzione tra Imperativo Dichiarativo diverse opzioni Funzionale Orientato ad oggetti switch (variabile) { Concetti base case ’A’: istruzione A; break; Variabili e tipi di dati case ’B’: istruzione B; break; Strutture di controllo case ’C’: istruzione C; break; Procedure e funzioni default: istruzione D} Programmazione orientata ad oggetti
  • 25. Concetti base I linguaggi di programmazione Procedure Andrea Serafini Cos’è un linguaggio di Una procedura è un costrutto che permette di raggruppare, programmazione in un unico blocco, una sequenza di istruzioni utili a svolgere Sviluppo storico Macchina un determinato compito. É importante perché può essere Assembly Alto livello chiamata˝(o invocata˝) ogni volta in cui si ha la necessità, Il processo di come se fosse una singola istruzione programmazione Compilazione I paradigmi di programmazione Imperativo Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti
  • 26. Concetti base I linguaggi di programmazione Procedure Andrea Serafini Una procedura si scrive come una singola unità di Cos’è un linguaggio di programma: programmazione ◮ nome della procedura - header (parametri) Sviluppo storico Macchina ◮ corpo della procedura: parte dichiarativa e imperativa Assembly Alto livello Il processo di programmazione Compilazione I paradigmi di programmazione Imperativo Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni Programmazione orientata ad oggetti ProjectPopulation(0.03)
  • 27. Concetti base I linguaggi di programmazione Funzioni Andrea Serafini Cos’è un Una funzione è una procedura il cui scopo è quello di linguaggio di programmazione restituire un valore, piuttosto che di svolgere un’azione. Sviluppo storico Come conseguenza dell’esecuzione di una funzione, viene Macchina Assembly calcolato un valore e rispedito indietro al programma che l’ha Alto livello invocata Il processo di programmazione Compilazione I paradigmi di É definita allo stesso modo programmazione Imperativo di una procedura, con la Dichiarativo Funzionale differenza che l’header di Orientato ad oggetti solito inizia specificando il Concetti base Variabili e tipi di tipo del valore da restituire dati Strutture di e termina con un’istruzione controllo Procedure e funzioni (return) in cui è indicato Programmazione il valore CylinderVolume(1.5,4) orientata ad oggetti = 28.26
  • 28. Programmazione orientata ad oggetti I linguaggi di programmazione Esempio di programma Andrea Serafini Es: Gioco del laser: proteggere la Terra dai meteoriti˝ Cos’è un linguaggio di programmazione Sviluppo storico Macchina Assembly Alto livello Il processo di programmazione Compilazione I paradigmi di programmazione Imperativo Dichiarativo Una volta descritta la classe LaserClass, possiamo Funzionale Orientato ad dichiarare variabili di tale tipo e creare oggetti oggetti Concetti base Variabili e tipi di C++: LaserClass Laser1; dati Strutture di Java: LaserClass Laser1 = new LaserClass(); controllo Procedure e funzioni Possiamo richiamare metodi di tali oggetti Programmazione orientata ad oggetti Laser1.fire(); Laser1.turnLeft();
  • 29. Programmazione orientata ad oggetti I linguaggi di programmazione Costruttori Andrea Serafini Cos’è un linguaggio di programmazione Esistono metodi speciali Sviluppo storico associati alle classi che Macchina hanno lo scopo di creare le Assembly Alto livello istanze e di inizializzarle Il processo di programmazione durante il processo di Compilazione creazione: i costruttori I paradigmi di programmazione Imperativo Dichiarativo Funzionale I costruttori vengono eseguiti automaticamente quando un Orientato ad oggetti oggetto è costruito a partire da una classe, passando i Concetti base parametri in entrata Variabili e tipi di dati Strutture di controllo Procedure e C++: LaserClass Laser1(50); funzioni Java: LaserClass Laser1 = new LaserClass(50); Programmazione orientata ad oggetti
  • 30. Programmazione orientata ad oggetti I linguaggi di programmazione Altre proprietà Andrea Serafini L’ereditarietà è una tecnica che consiste nel derivare una Cos’è un linguaggio di classe a partire da un’altra già definita (extends). Una programmazione classe derivata, detta sottoclasse, mantiene i metodi e gli Sviluppo storico Macchina attributi della classe da cui deriva, chiamata superclasse; Assembly Alto livello inoltre, può definirne di propri. Si tratta di una relazione di Il processo di generalizzazione-specificazione: la superclasse definisce un programmazione Compilazione concetto generale e la sottoclasse ne rappresenta una I paradigmi di programmazione variante specifica Imperativo Dichiarativo Funzionale Orientato ad oggetti Concetti base Variabili e tipi di dati Strutture di controllo Procedure e funzioni L’incapsulamento si riferisce all’accesso ristretto alle proprietà Programmazione interne di un oggetto: solo l’oggetto stesso può accedervi orientata ad oggetti (private vs public)