RICAPITOLANDO…
Un ALGORITMO rappresenta la successione dei passi da
eseguire per risolvere un PROBLEMA.
L’algoritmo può essere descritto formalmente attraverso un
FLOW-CHART. Algoritmi e flow-chart non sono però
direttamente comprensibili ed eseguibili da un computer.
Per far eseguire l’algoritmo al computer è necessario
scrivere un PROGRAMMA che lo implementi.
Il programma è una sequenza di ISTRUZIONI (che
richiedono al computer l’esecuzione di AZIONI) ed è scritto
in un LINGUAGGIO di programmazione comprensibile al
computer
BIOINFO3 - Lezione 19
1
SCHEMA LOGICO
Possiamo ricapitolare questi concetti in un semplice schema
?
PROBLEMA
ALGORITMO
PROGRAMMA
?
BIOINFO3 - Lezione 19
2
LINGUAGGI DI PROGRAMMAZIONE
L’unico linguaggio di programmazione
comprensibile dal computer è il linguaggio
macchina, formato da sequenze di bit
secondo un determinato codice che è tipico
del processore. Ogni processore ha il suo
linguaggio macchina
La
prima evoluzione verso
una
programmazione più umana si è avuta
negli anni 50 con l’introduzione di un
codice mnemonico per ogni istruzione
macchina e di nomi simbolici per indicare
gli indirizzi di memoria. Nasceva il
linguaggio
chiamato
ASSEMBLER,
anch’esso caratteristico del singolo
processore,in corrispondenza 1:1 con il
linguaggio macchina,
BIOINFO3 - Lezione 19
3
LINGUAGGI DI PROGRAMMAZIONE
Successivamente, a partire dagli anni 60,
nascono i cosiddetti linguaggi ad alto livello,
che utilizzano istruzioni tratte dal linguaggio
naturale (abbiamo visto quanto naturali siano
le istruzioni di SQL).
ANNI 60
ALGOL
FORTRAN
COBOL
ANNI 70-80
BASIC
PASCAL
LISP
PROLOG
C
C++
ALGOrithmic Language (applicazioni matematiche)
FORmula TRANslation (applicazioni scientifiche)
COmmon Business Oriented Language (appl. gestionali)
Beginners All purpose Symbolic Instruction Code (per principianti)
LISt Processing (elaborazioni di liste ed A.I.)
PROgramming LOGic (Logica Matematica)
BIOINFO3 - Lezione 19
(Programmazione ad oggetti)
4
LINGUAGGI DI PROGRAMMAZIONE
ANNI 90
Con l’avvento dei sistemi operativi a finestre (WINDOWS) nascono i linguaggi visuali
che permettono la gestione di interfacce grafiche semplici e user-friendly
VISUAL C++
VISUAL BASIC
JAVA
(dal nome di un caffè in polvere, facilmente trasportabile e solubile, permette
di eseguire dei programmi, installati su pagine WEB direttamente nei browser (e
quindi non sul server ma sul client, eventualmente può interagire con il server)
PERL Practical Extraction and Report Language
Pur se nato negli anni 80, nella seconda metà degli anni 90 assistiamo al
successo incredibile di Perl, che diventa il linguaggio preferito per preparare
degli script per l’amministrazione di sistema nel sistema operativo LINUX e
soprattutto per scrivere programmi cgi-bin da eseguire nei server WEB. Come
dice il nome stesso Perl è vincente per la sua praticità, semplicità, potenza e
compattezza (in un programma Perl di poche righe si possono concentrare
decine e decine di righe di programma scritte in C) soprattutto nell’estrazione
di informazione da file (“PARSERIZZAZIONE”) e nella preparazione di
report
BIOINFO3 - Lezione 19
5
GERARCHIA DEI LINGUAGGI
Come dicevamo, ogni programma scritto in un qualsiasi linguaggio dovrà alla
fin fine essere tradotto in linguaggio macchina per poter essere eseguito dal
computer.
L’ASSEMBLER è tradotto direttamente in linguaggio macchina da un
programma ASSEMBLATORE. I linguaggi ad alto livello dovranno perciò a
loro volta essere preventivamente tradotti in ASSEMBLER da un programma
TRADUTTORE (che vedremo potrà essere di due tipi)
PROGRAMMA IN UN
LINGUAGGIO AD
ALTO LIVELLO
TRADUTTORE
PROGRAMMA IN
ASSEMBLER
BIOINFO3 - Lezione 19
ASSEMBLATORE
PROGRAMMA IN
LINGUAGGIO
MACCHINA
6
COMPILATORI ED INTERPRETI
L’esecuzione di un programma scritto in un linguaggio ad alto livello può
avvenire in due differenti modalità:
Con un COMPILATORE l’intero programma (sorgente) viene tradotto
(compilato) in un programma equivalente in assembler. Si ottiene così un
programma in codice macchina (eseguibile). Quando si vuole eseguire il
programma si chiederà perciò al computer di eseguire direttamente la
versione eseguibile.Ogni modifica del sorgente comporta la ricompilazione del
programma per ottenere una versione aggiornata dell’eseguibile.
Con un INTERPRETE, per eseguire un programma sorgente si chiederà
invece l’esecuzione di un programma interprete il quale leggerà man mano la
singola istruzione del sorgente e solo in quel momento eseguirà delle
corrispondenti istruzioni macchina.
I programmi compilati sono quindi molto più veloci di quelli interpretati, ma
quest’ultimi sono più rapidi da modificare in fase di sviluppo e collaudo. Sia i
compilatori che gli interpreti verificano la correttezza sintattica del
programma.
BIOINFO3 - Lezione 19
7
PERL
L’esecuzione di un programma scritto nel linguaggio PERL avviene tramite un
interprete, quindi questo linguaggio non è il più indicato per programmi in cui
il tempo di esecuzione sia un fattore critico.
Da linea di comando UNIX l’esecuzione di un programma scritto nel
linguaggio perl e contenuto in un file (che indichiamo con nome-file) può
avvenire in due modi:
perl nome-file
nome-file
In entrambi i casi viene attivato l’interprete, però nel secondo caso ciò avviene
solo se la prima riga del file nome-file ha una sintassi particolare
(#!/usr/bin/perl) che a sua volta richiama l’interprete.
BIOINFO3 - Lezione 19
8
PATH DEI PROGRAMMI
Sia l’interprete perl sia il programma da eseguire saranno localizzati in
qualche posto nell’albero delle directory
Normalmente l’interprete Perl si trova nella directory /usr/bin (se non
sappiamo dove si trova possiamo scoprirlo con il comando whereis)
Quindi significa che esiste una directory usr che contiene una directory bin
che contiene il programma perl (l’interprete).
usr
bin
perl
BIOINFO3 - Lezione 19
9
PATH DEI PROGRAMMI
Esiste una variabile d’ambiente chiamata PATH, definita dall’amministratore di
sistema, che specifica in quali directory ricercare un programma da eseguire. Per
verificarne il valore possiamo eseguire il comando UNIX ‘env’ che mostra i valori
correnti di tutte le variabili d’ambiente (che sono settate all’inizio del nostro
collegamento)
BIOINFO3 - Lezione 19
10
PATH DEI PROGRAMMI
Se nel PATH è indicata la directory /usr/local allora potremo
richiamare l’interprete perl da qualunque directory in cui ci
trovassimo. Altrimenti è necessario spostarsi nella directory
/usr/local con un comando di cd (change directory)
Oppure (sempre se /usr/local non fosse definita nel PATH)
specificare il path completo del file da eseguire (l’interprete perl)
BIOINFO3 - Lezione 19
11
PATH DEI PROGRAMMI
Lo stesso discorso vale per il nostro programma, scritto in Perl, che vogliamo
eseguire. Supponiamo che esso si chiami pippo.pl Anch’esso si troverà in una
certa posizione nell’albero delle directory, ad esempio, se sono l’utente
bioinfo3-01, nella mia home directory, ovvero in /home/bioinfo3-01/
home
bioinfo3-01
pippo.pl
usr
bin
perl
BIOINFO3 - Lezione 19
12
PATH DEI PROGRAMMI
Se ci troviamo nella stessa directory dove si trova il file da far eseguire
all’interprete possiamo riferirci ad esso semplicemente con il suo nome.
Altrimenti, se siamo in un’altra directory dobbiamo specificare il suo path
completo
In questo esempio mi trovavo nella mia directory chiamata b. Posso quindi far
eseguire direttamente il programma pgmm.pl residente proprio in b
N.B. E’ comunque necessario dire che il programma si trova nella directory
corrente usando ./ in quanto la mia directory /b non si trovava nel PATH.
Se invece mi trovavo in un’altra directory avrei dovuto specificare il path
(assoluto o relativo del programma)
BIOINFO3 - Lezione 19
13
DIRITTO DI ESECUZIONE
E’ importante verificare che l’utente che vuol eseguire il programma ne abbia
effettivamente il diritto. Uno degli errori più comuni, quando si prepara un
programma cgi-bin da far eseguire al server web httpd, è quello di dimenticarsi di
concedere il diritto di eseguire il nostro programma all’utente del sistema deputato
all’esecuzione del server web. Si può usare ls –al per verificare i diritti sui programmi
di una certa directory
Nell’esempio tutti gli utenti del sistema hanno il diritto di eseguire (x) il programma
pgmm.pl. La prima tripletta rwx assegna all’utente nicola il diritto di leggere (r),
scrivere (w) ed eseguire il file; gli utenti del gruppo lab potranno solo leggere ed
eseguire (x) il file ma non scriverlo (modificarlo o cancellarlo), manca w; gli altri utenti
(e quindi anche quello che esegue httpd) possono analogamente leggerlo o eseguirlo
BIOINFO3 - Lezione 19
14
CHMOD
Se desideriamo cambiare i diritti sui file possiamo eseguire il
comando CHMOD. Di solito, come nell’esempio appena visto, va
bene assegnare come diritti il valore 755
user
group5 =
7 =
r
4
r
-
other5 =
r
-
2
w
x
x
1
x
Esempio:
chmod 755 pgmm.pl
BIOINFO3 - Lezione 19
15
PARAMETRI DEL PROGRAMMA
A questo punto il programma è effettivamente eseguibile.
Possiamo passare dei parametri al programma elencandoli
separati da spazio nella stessa riga del comando di esecuzione,
dopo il nome del programma
nome-file
parametro1 parametro2
oppure
perl nome-file
parametro1 parametro2
parametron
parametron
Vedremo come, dall’interno del programma Perl, sarà possibile
recuperare questi parametri
BIOINFO3 - Lezione 19
16
RE-DIREZIONE INPUT E OUTPUT
Se non specificato diversamente il programma prende il suo input dallo standard
input, indicato con il simbolo STDIN (la tastiera) e produce il suo output sullo
standard output, indicato con il simbolo STDOUT (il video).
Come abbiamo già visto con il comando mysqldump, usando i simboli < o > è
possibile re-direzionare input ed output. Ad esempio si potrà leggere l’input da un
file o stampare l’output su un altro file (ovviamente anche entrambi
contemporaneamente)
./pippo.pl <prova >risultati
Nell’esempio si chiede l’esecuzione del file pippo.pl, posto nella directory corrente
(in realtà ad essere eseguito è l’interprete Perl se pippo.pl è scritto in PERL e
contiene nella prima riga #!/usr/bin/perl). L’input è preso dal file “prova” della
directory corrente, anziché da tastiera, e l’output scritto sul file risultati anziché a
video. Il file risultati se non esiste già nella directory corrente (in questo caso viene
sovrascritto!) viene creato ex-novo per l’occasione.
BIOINFO3 - Lezione 19
17
RIEPILOGO
•Linguaggi di programmazione
•Compilatori ed interpreti
•Esecuzione di un programma (Perl): Path del programma,
diritti, parametri, input e output
BIOINFO3 - Lezione 19
18
Scarica

Document