SOFTWARE Il SOFTWARE è l’insieme funzionare l’hardware. dei programmi che fanno Classificazione del software: • Software di base, sistema operativo, programmi di utilità e per la gestione delle periferiche (driver) • Software applicativo, ambienti per la programmazione (Visual Studio, Dev C++), programmi applicativi utilizzati o scritti dall’utente (Office, Browser Chrome, …) Il sistema operativo ha le seguenti funzioni: •offrire l’interfaccia tra l’utente e la macchina (grafica / a riga di comando •gestire le risorse (hardware/software) per ottimizzarne l’uso (CPU, memoria centrale, I/O, memoria di massa, …) 1 Copyright e licenze software Il software è opera dell’ingegno ed è protetto dalla legge sul diritto d’autore (copyright) e la violazione di questa legge è un reato penale punibile anche con il carcere. La licenza d’uso è un contratto legale che stabilisce quale uso l’utente può fare di un programma. 2 Tipi di licenze software Diversi contratti per l’uso del software: software con licenza d’uso soggetto al copyright, con proibizione di vendita e/o distribuzione del programma shareware in prova gratuita per un determinato periodo di tempo, scaduto il quale si può decidere di continuare ad usarlo pagando la licenza d’uso freeware programma eseguibile concesso in libero uso a tutti, senza che nulla sia dovuto all'autore open source software di cui si è reso pubblico il codice eseguibile in linguaggio macchina ma anche il programma sorgente (source) il cui uso è regolato dalla licenza GPL (General Public License). E’ la filosofia di Linux. 3 ALGORITMI e PROGRAMMI Per ALGORITMO si intende un procedimento che risolve un determinato problema attraverso un numero finito di azioni. Un algoritmo si può descrivere con la pseudo-codice oppure con i diagrammi di flusso. Per PROGRAMMA si intende una sequenza di istruzioni che devono essere eseguite dall’elaboratore e sono scritte in un linguaggio di programmazione. Per LINGUAGGIO DI PROGRAMMAZIONE si intende il linguaggio utilizzato per tradurre l’algoritmo in un programma, cioè in una forma comprensibile all’elaboratore. 4 Classificazione dei linguaggi di programmazione • linguaggi ad alto livello, vicini all’uomo e lontani dall’hardware (C, C++, Visual Basic, Java …). • linguaggi a basso livello, vicini all’hardware e lontani dall’uomo (linguaggio macchina) Il linguaggio macchina è il linguaggio eseguito dalla CPU ed è una sequenza binaria (1010100100…) N.B.: Ciò implica che il programma scritto in un linguaggio ad alto livello deve essere tradotto in linguaggio macchina per essere eseguito. 5 Caratteristiche dei linguaggi di programmazione Ogni linguaggio di programmazione ha: • lessico insieme di parole riconosciute dal linguaggio e riservate (if, while, …) • sintassi regole per scrivere istruzioni corrette (es. if (condizione) istr1 else istr2;) • semantica significato delle istruzioni (es. L’istruzione x=10; significa che alla cella di memoria x si assegna il valore 10) 6 Tipi di errori • Errori lessicali e sintattici segnalati dal compilatore/interprete • Warning, avvertimenti (es. variabile non utilizzata) • Error, errori che devono essere corretti (es. variabile non definita) • Errori di logica: errori legati all’algoritmo che si possono correggere con l’uso del debugger che consente l’esecuzione passo passo del programma (es.: scrivere ‘+’ al posto di ‘*’). • Errori di run-time: errori di esecuzione che bloccano l’avanzamento del programma (es.: divisione per 0). 7 Traduzione del programma sorgente in linguaggio macchina Tre tipi di linguaggi: •Compilati (C++, C#, VisualBasic) •Interpretati (JavaScript) •JAVA 8 Linguaggi compilati La traduzione del programma sorgente in un linguaggio ad alto livello in programma eseguibile in linguaggio macchina (.EXE) avviene in due passi: •il COMPILATORE traduce il programma sorgente in programma oggetto (estensione .o) •Il LINKER collega il programma oggetto con le librerie precompilate necessarie per la creazione del programma eseguibile 9 Linguaggio compilati Ogni sistema di elaborazione ha il suo linguaggio macchina. Il porting di un’applicazione da un sistema all’altro richiede: •uno specifico compilatore •modifiche al sorgente Linguaggi interpretati Nei linguaggi interpretati le istruzione del codice sorgente vengono Interpretate ed eseguite dal processore ‘al volo’. Un esempio è il JAVASCRIPT utilizzato nella programmazione web lato client. Un altro esempio è l’uso dei debugger. La potenza di questo genere di linguaggi è, di fatto, l’immediatezza tra quello che scriviamo e quello che viene presentato all’esecuzione del programma, ma il carico di lavoro maggiore per il processore (che ogni volta deve elaborare il codice sorgente), mentre un programma compilato è più veloce. 11 LINGUAGGIO JAVA Un linguaggio che è a metà strada tra queste metodologie è Java che è sia compilato che interpretato. Il codice sorgente viene compilato in un formato intermedio (chiamato BYTECODE), il quale a sua volta viene interpretato dalla Java Virtual Machine (JVM), che ha il compito di interpretare “al volo” le istruzioni bytecode in istruzioni per il processore. Il principale vantaggio è rendere JAVA altamente portabile. Questa metodologia permette di creare programmi relativamente leggeri (il bytecode è un formato che crea file di dimensioni ragionevoli), ma ha la pecca di avere delle prestazioni non proprio soddisfacenti, questo perché il codice viene interpretato dalla JVM. 12 Linguaggio Java Il compilatore JAVA produce il codice intermedio Bytecode: •indipendente dalle piattaforme hardware/software (sistema operativo) •Interpretato da una macchina astratta detta Virtual Machine