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