Concetti Fondamentali sulla Programmazione
description
Transcript of Concetti Fondamentali sulla Programmazione
1
Concetti Fondamentali sulla Concetti Fondamentali sulla ProgrammazioneProgrammazione
Cosa Significa Programmare Linguaggi di Programmazione Lo sviluppo dei programmi: tecniche di programmazione L’esecuzione dei programmi
L’interpretazione La compilazione
Le Librerie Le Fasi di Compilazione e Link Esempio in C
2
Dato un problema INFORMATICO, programmare significa:
Definire l’algoritmo risolutivo, che deve essere finito e realizzabile con le risorse disponibili
Tradurre l’algoritmo nel linguaggio di programmazione scelto, attraverso la particolare tecnica di programmazione scelta, rispettando le regole sintattiche del linguaggio
La ProgrammazioneLa Programmazione
3
Linguaggi di programmazione: Linguaggi di programmazione: Linguaggio MacchinaLinguaggio Macchina
I primi linguaggi di programmazione coincidevano con l'insieme delle istruzioni eseguibili dall'hardware.
Le istruzioni hardware sono codificate in codice binario: ogni informazione è rappresentata, all'interno della macchina, come una sequenza di bit.
LOAD 8 potrà essere rappresentata in una macchina reale come 00110010, dove 0011 è la rappresentazione interna del codice operativo LOAD
Enorme sforzo richiesto per codificare algoritmi semplici.
4
Linguaggi di programmazione: Linguaggi di programmazione: AssemblyAssembly
Dalla nascita dei primi calcolatori, si è cercato di diminuire lo sforzo e aumentare la produttività dell'utente, anche a costo di caricare la macchina di maggiori compiti.
E’ meglio risparmiare il tempo dell'uomo anche a costo di sprecare tempo-macchina (traduzione di programmi e scarsa efficienza del programma).
La prima evoluzione dei linguaggi di programmazione ha portato ad una codifica di tipo simbolico, anziché binaria, dei programmi.
Tali versioni simboliche dei linguaggi hardware sono note come linguaggi assemblyassembly
5
Linguaggi di programmazione: Linguaggi di programmazione: EvoluzioneEvoluzione
Hardware
MicroProgrammi
Macchina/binario
Assembly
Alto Livello Il passo successivo nell’evoluzione dei linguaggi di programmazione tese a rendere la codifica degli algoritmi il più possibile “vicina” al problema da risolvere anziché all'architettura della macchina destinata all'esecuzione del programma.
Non a caso i primi due linguaggi di alto livello, FORTRANFORTRAN e COBOLCOBOL, hanno costrutti fortemente ispirati alla notazione usata per descrivere i problemi di maggior rilievo per il calcolo automatico degli anni '50, cioè l'elaborazione numerica e quella gestionale.
6
Linguaggi di programmazione: Linguaggi di programmazione: EvoluzioneEvoluzione
Gli anni '70 vedono il fiorire dei linguaggi Strutturati:
il SIMULA 67SIMULA 67, l’ALGOL 68ALGOL 68, ma soprattutto il PASCAL e il CPASCAL e il C
Negli anni '80 si ha l'affermarsi dei linguaggi Object-Oriented (OO):
C++C++, Visual BASICVisual BASIC, Java, C#Java, C#
7
Non è legata ad un linguaggio, anche se alcuni linguaggi sono ideali per essere abbinati ad una specifica tecnica di programmazione
Esistono tre tecniche:a) Programmazione NON Strutturata, che produce lo
Spaghetti Codeb) Programmazione Strutturata: Sequenza, Selezione,
Ripetizionec) Programmazione ad Oggetti: Classe, Oggetto,
Metodo
La Tecnica di ProgrammazioneLa Tecnica di Programmazione
8
Il programma scritto in un qualunque linguaggio deve essere tradotto in linguaggio binario
Esistono due soluzioni: Interpretazione Compilazione
L’Esecuzione dei ProgrammiL’Esecuzione dei Programmi
9
Funzionamento di un interprete: Preleva un’istruzione I del programma
P scritto nel linguaggio L Decodifica I Traduce I in una serie di istruzioni in
linguaggio macchina M1, M2, … , Mn
Esegue M1, M2, … , Mn
Passa all’istruzione successiva di P fino a quando non si sia raggiunta una istruzione di terminazione
L’Interpretazione L’Interpretazione
10
I codici sorgente ed oggetto possono essere suddivisi in più file, il codice eseguibile di un programma risiede in un unico file
File oggetto
Libreria/e
File oggettoFile oggetto
File sorgenteFile sorgente File sorgenteFile sorgente
File oggetto
File eseguibile
CompilazioneCompilazione Compilazione Compilazione
Link
Lo sviluppo dei programmi Lo sviluppo dei programmi basato sulla Compilazionebasato sulla Compilazione
11
Le Funzioni di LibreriaLe Funzioni di Libreria
In molti linguaggi (quali il C), molte operazioni vengono delegate a delle librerie
Le funzioni sono divise in gruppi, quali I/O, gestione della memoria, operazioni matematiche e manipolazione di stringhe
Per ogni gruppo di funzioni esiste un file sorgente, chiamato file headerfile header, contenente le informazioni necessarie per utilizzare le funzioni (Dichiarazione costanti, funzioni, parametri delle funzioni, etc.)
I nomi dei file header terminano, per convenzione, con l’estensione “.h” (ad es., stdio.hstdio.h è il file header dello standard I/O nel linguaggio C)
12
Un file sorgente contiene un main e un insieme di routine, chiamate funzionifunzioni, ognuna delle quali risolve una piccola parte del problema di programmazione
Un file sorgente può contenere chiamate a funzioni di libreria e chiamate a funzioni contenute in altri file sorgenti
Il compilatore è esso stesso un programma (o un gruppo di programmi) che deve essere eseguito
Durante la compilazione avviene: Controllo del codice sorgente da parte di un preprocessore: interpretare
speciali direttive di precompilazione, Controllo di eventuali errori sintattici (NON LOGICI), Produzione di un file in codice Assembly, Trasformazione del file in codice Assembly in un altro file in codice
OGGETTO (Macchina): estensione .obj
La compilazione dei file sorgenteLa compilazione dei file sorgente
13
Il linker è generalmente un programma distinto dal compilatore: in alcuni ambienti il programma di link deve essere lanciato separatamente
Il Linker fa in modo che: i riferimenti tra diversi file oggetto e con le librerie
vengano risolti i file oggetto creati dal compilatore vengano trasformati in
un unico file eseguibile, al quale vengano associate le librerie necessarie all’esecuzione
Il risultato prodotto dal Linker è un programma programma eseguibile, che può essere caricato in memoriaeseguibile, che può essere caricato in memoria
Il link Il link
14
Il Caricamento di un programma in memoria, avviene nel momento in cui l’utente richiede la sua esecuzione
Durante la fase di caricamento (o loadingloading ), il programma eseguibile viene caricato nella memoria del calcolatore;
Le Fasi di Compilazione, Linker e Loading sono separate (anche temporalmente) Attenzione: l’uso dei compilatori crea false impressioni !
La Fase di CaricamentoLa Fase di Caricamento
15
Molte idee basilari del C derivano dal linguaggio BCDL e linguaggio B
Nel 1978 Kernighan e Ritchie pubblicano “The C Programming Language”
Nel 1983 l’American National Standards Institute (ANSI) ha iniziato i lavori per la definizione dell’ANSI C
Nel 1988 nasce l’ANSI C
Esempio – Linguaggio CEsempio – Linguaggio C
16
Per includere un file header in un programma in linguaggio C, occorre inserire nel codice sorgente:
include <nomefile.h> La direttiva include è rivolta al preprocessorepreprocessore Si chiama: Direttiva di PrecompilazioneSi chiama: Direttiva di Precompilazione EsempioEsempio: Per utilizzare printf()printf(), che permette di
visualizzare dati su terminale, è necessario inserire nel sorgente la direttiva di precompilazione:
include <stdio.h>
Esempio – Linguaggio CEsempio – Linguaggio C
17
Esempio – Linguaggio CEsempio – Linguaggio C
include<stdio.h>
main()
{
printf(“Salve, mondo\n”);
}
main richiama la funzione di libreria printf per stampare la sequenza di caratteri specificata; \n indica il new line
Include la libreria standard di I/O
Definisce una funzione main che non riceve alcun valore come argomento