Concetti Fondamentali sulla Programmazione

17
1 Concetti Fondamentali sulla Concetti Fondamentali sulla Programmazione Programmazione 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

description

Concetti Fondamentali sulla Programmazione. 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. - PowerPoint PPT Presentation

Transcript of Concetti Fondamentali sulla Programmazione

Page 1: 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

Page 2: Concetti Fondamentali sulla Programmazione

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

Page 3: Concetti Fondamentali sulla 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.

Page 4: Concetti Fondamentali sulla Programmazione

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

Page 5: Concetti Fondamentali sulla Programmazione

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.

Page 6: Concetti Fondamentali sulla Programmazione

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#

Page 7: Concetti Fondamentali sulla Programmazione

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

Page 8: Concetti Fondamentali sulla 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

Page 9: Concetti Fondamentali sulla Programmazione

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

Page 10: Concetti Fondamentali sulla Programmazione

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

Page 11: Concetti Fondamentali sulla Programmazione

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)

Page 12: Concetti Fondamentali sulla Programmazione

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

Page 13: Concetti Fondamentali sulla Programmazione

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

Page 14: Concetti Fondamentali sulla Programmazione

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

Page 15: Concetti Fondamentali sulla Programmazione

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

Page 16: Concetti Fondamentali sulla Programmazione

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

Page 17: Concetti Fondamentali sulla Programmazione

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