elementi di informatica a. a. 2016/2017 -...

45
Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base [email protected]

Upload: ngocong

Post on 25-Feb-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Elementi di InformaticaA. A. 2016/2017

Ing. Nicola Amatucci

Università degli studi di Napoli Federico II

Scuola Politecnica e Delle Scienze di Base

[email protected]

Page 2: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Algoritmi e ProgrammiElementi di Informatica – A.A. 2016/2017

Ing. Nicola Amatucci

Page 3: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Dove Studiare

• Alla scoperta dei Fondamenti dell’Informatica, Capitolo 3• Paragrafo 3.2, 3.3, 3.5

Page 4: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Descrizione degli algoritmi

• Quando si affronta un problema è di fondamentale importanza, qualunque sia l'esecutore (uomo o macchina):1. capire preliminarmente se il problema ammette soluzioni

2. nel caso ne ammetta, individuare un metodo risolutivo (algoritmo)

3. esprimere tale metodo in un linguaggio comprensibile all'esecutore a cui è rivolto.

Page 5: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Scrivere un algoritmo che corregge gli errori lessicali in un testo

Page 6: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Soluzione …

Page 7: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Istruzioni sequenziali e strutture di controllo

• Si usano naturalmente costrutti che fissano l'ordine in cui le diverse azioni devono essere svolte.• Il più semplice tra essi è quello che stabilisce che le azioni devono essere svolte una dopo l'altra. (sequenza)• un altro costrutto stabilisce che alcune azioni devono essere svolte solo se si verificano determinate

condizioni (selezione)• la frase "se la parola è sbagliata, allora correggi, altrimenti non fare niente" prescrive la correzione soltanto in presenza di un

errore.

• un ultimo costrutto dice che alcune azioni devono essere ripetute un numero di volte prestabilito odeterminato dal verificarsi di certe condizioni (iterazione)

• ("per ogni parola del rigo fai")• ("ripeti le azioni da 1) a 4) fino alla terminazione del testo”)

• In tutti gli algoritmi si possono individuare quindi due classi fondamentali di frasi:• quelle che prescrivono la esecuzione di determinate operazioni (istruzioni);• e quelle che indicano all'esecutore l'ordine in cui tali operazioni devono essere eseguite (strutture di

controllo).

Page 8: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Istruzioni elementari e non

• Istruzioni:• elementari quelle istruzioni che l'esecutore è in grado di comprendere ed eseguire;• non elementari quelle non note all'esecutore.

• Perché un'istruzione non elementare possa essere eseguita dall'esecutore acui è rivolta, deve essere specificata in termini più semplici.

• Il procedimento che trasforma una istruzione non elementare in uninsieme di istruzioni elementari, prende il nome di raffinamento ospecificazione dell'istruzione non elementare.

• Il processo di raffinamento è molto importante. Senza di esso si dovrebberoesprimere gli algoritmi direttamente nel linguaggio di programmazione disponibile

Page 9: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Caratteristiche delle operazioni di unalgoritmo• Finitezza

• Le operazioni devono avere termine entro un intervallo di tempo finito dall'inizio della loroesecuzione

• Descrivibilità• Le operazioni devono produrre, se eseguite, degli effetti descrivibili, per esempio

fotografando lo stato degli oggetti coinvolti sia prima che dopo l’esecuzione dell’operazione

• Riproducibilità• Le operazioni devono produrre lo stesso effetto ogni volta che vengono eseguite nelle stesse

condizioni iniziali

• Comprensibilità• Le operazioni devono essere espresse in una forma comprensibile all'esecutore che deve

eseguirle

Page 10: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Sequenza Dinamica

• L'esecuzione di un algoritmo da parte di un esecutore si traduce inuna successione di azioni che vengono effettuate nel tempo.

• Si dice che l'esecuzione di un algoritmo evoca un processo sequenziale, cioèuna serie di eventi che occorrono uno dopo l'altro, ciascuno con un inizio euna fine identificabili.

• Si definisce sequenza di esecuzione la descrizione del processo sequenziale.La sequenza di esecuzione è l'elenco di tutte le istruzioni eseguite, nell'ordinedi esecuzione, e per questo motivo viene anche detta sequenza dinamica.

Page 11: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Dipendenza della sequenza dall’input

• Primo caso semplice con una sola sequenza diesecuzione

• Solitamente un algoritmo evoca più sequenzedi esecuzioni.

• In alcuni casi il numero di sequenze diesecuzione può essere infinito e il programmanon ha una terminazione.

• L’analisi delle sequenze dinamiche serveproprio a capire se un dato algoritmo abbia omeno una terminazione.

• Se si modifica l’algoritmo di calcolo delleradici di una equazione di 2° grado percontrollare la esistenza di radici reali, sicomincia ad osservare come esso generacomportamenti diversi dipendenti dal valoredei dati di input a, b e c.

Page 12: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Più sequenze

• In questo caso il processoevocato non è più fisso, madipende dai dati iniziali daelaborare.

• Sono possibili due sequenze aseconda che i valori assegnati aicoefficienti forniscano undiscriminante positivo o nullo enegativo.

• Uno stesso algoritmo ha quindigenerato due sequenze diesecuzione tra loro diverse.

Page 13: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Solitario del carcerato

Esempio del caso migliore

Algoritmo terminaal secondo tentativo

Page 14: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Solitario del carcerato

Algoritmo non termina mai

• Un algoritmo può prescrivere più di una sequenza di esecuzione.• Se poi l'algoritmo prescrive un processo ciclico, può accadere che il numero di

sequenze sia infinito. In questo caso l'algoritmo prescrive un processo che non hamai termine.

Algoritmo termina all n-esimo tentativo

Page 15: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Sequenza Statica e Dinamica

• In un programma la sequenza lessicografica delle istruzioni descrive unapluralità di sequenze dinamiche differenti.

• sequenza lessicografica è chiamata sequenza statica e descrive l'algoritmo (ovvero leazioni da svolgere) in un linguaggio di programmazione

• Il numero di sequenze dinamiche non è noto a priori e dipende dai dati daelaborare.

• La valutazione sia del tipo che del numero delle sequenze dinamiche è difondamentale importanza per valutare soluzioni diverse dello stessoproblema in modo da poter dire quale di esse presenta un tempo diesecuzione migliore, e per poter affermare se una soluzione haterminazione o meno.

Page 16: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Linguaggio di Programmazione

• Il linguaggio di programmazione è una notazione formale per descrivere algoritmi e, come ognilinguaggio, è dotato di un alfabeto, un lessico, una sintassi ed una semantica.

• L'aspetto formale del linguaggio si manifesta soprattutto nella presenza di regole rigide per lacomposizione di programmi a partire dai semplici caratteri dell'alfabeto.

• L'insieme di queste regole costituisce la grammatica del linguaggio.

• Un limitato insieme di regole definisce la struttura lessicale del programma• .. o unità elementari, cioè le parole del linguaggio.• Il lessico, quindi, permette di strutturare l'insieme limitato dei caratteri dell'alfabeto nel vocabolario.

• L'organizzazione delle parole in frasi è invece guidata da regole che compongono la sintassi dellinguaggio.

• Infine l'attribuzione di un significato alle frasi è oggetto delle regole semantiche.

Page 17: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Dal Linguaggio Macchina …

• Il linguaggio più semplice è quello che è direttamente compreso dalla CPU.• Chiameremo linguaggio macchina tale linguaggio per evidenziare il suo stretto legame con l'hardware.

• È difficile programmare in linguaggio macchina• gran numero di comandi per singole istruzioni• istruzioni espresse sotto forma di sequenze di

• I linguaggi assemblativi• pur mantenendo uno stretto legame con le potenzialità offerte dal linguaggio macchina,

sostituiscono alle sequenze di bit dei codici mnemonici più facili da interpretare e ricordare.

• I linguaggi macchina e assemblativi sono anche comunemente detti linguaggi di basso livello, inquanto si pongono al livello della macchina

Page 18: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

… ai linguaggi ad alto livello

• Linguaggi ad Alto Livello• linguaggi di programmazione che, con istruzioni più sintetiche

• ossia con istruzioni più vicine al tradizionale modo di esprimere i procedimenti di calcoloda parte di un essere umano,

• rendono l'attività di programmazione più semplice;

• Fanno uso di uno pseudo-linguaggio umano, utilizzando per il loro scopoparole-chiave o codici operativi ispirati quasi esclusivamente alla linguainglese.

Page 19: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Programmazione Strutturata

• Il ruolo degli algoritmi è fondamentale se si pensa che essi sonoindipendenti sia dal linguaggio in cui sono espressi sia dal computerche li esegue.

• Si pensi ad una ricetta per una torta alla frutta:• il procedimento è lo stesso indipendentemente dall'idioma usato;

• la torta prodotta è la stessa (dovrebbe essere) indipendentemente dal cuoco.

Page 20: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

La progettazione degli algoritmi

• Il progetto degli algoritmi è una onerosa attività intellettuale che richiedecreatività ed intuito.

• molto più onerosa di quella di esprimere l'algoritmo con un linguaggio diprogrammazione

Non esiste un algoritmo per il progetto degli algoritmi!

• Valutazione della complessità della soluzione individuata:• se ci sono algoritmi diversi per descrivere lo stesso processo:

• la complessità ci dice quale di essi è migliore, ossia quale viene eseguito nel minor tempo conla minima occupazione di memoria, più in generale con il miglior utilizzo di tutte le risorsedisponibili.

• lo studio della correttezza ci consente di valutare l'aderenza della soluzione alle specifiche delproblema.

• Essere sicuri della correttezza è un'attività tanto più complessa quanto più complesso risulta ilprogetto dell'algoritmo.

Page 21: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Progettazione top-down

• L’algoritmo risolutivo viene determinato applicando il principio del "divideet impera"

• Il problema di partenza viene diviso in sottoproblemi più semplici, che aloro volta vengono divisi fino ad ottenere problemi facilmente risolvibili

• Procedimento detto "stepwise refinement": si analizza il problema dapprima al piùalto livello possibile di astrazione ("top" – livello generale) e poi si scende fino araggiungere un livello di scomposizione comprensibile all’esecutore ("down" – livelloparticolare)

• Combinando le soluzioni ottenute ai problemi più semplici si risolve ilproblema originario

Page 22: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Esempio di stepwise refinement

Page 23: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Progettazione top-down:rappresentazione dell’algoritmo risolutivo

• La soluzione al problema puòessere rappresentata come unalbero in cui:

• La radice corrisponde alproblema di partenza

• I nodi rappresentano i punti discomposizione

• Le foglie sono i problemidirettamente risolvibilidall’esecutore

Page 24: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Progettazione bottom-up

• Si individuano i componenti elementaridella soluzione e si specificano neldettaglio

• Tali componenti sono poi connessi traloro a formare componenti più grandi,in grado di compiere operazioni piùcomplesse

• Il procedimento di connessionecontinua fino a quando è stato creatoun modulo che corrisponde proprio allasoluzione del problema

Page 25: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

L’Ingegneria del Software

• Ai fini di una produzione industriale di qualità è necessario evitare diprodurre software in base alle esperienze e/o alle iniziative delprogrammatore:

• il processo di produzione del software non può essere un processo di tipo artigianale• Ad esempio, negli anni '60 il programmatore usava mille trucchi per risparmiare memoria!

deve invece servirsi di metodologie e tecniche sistematiche di progettazione eprogrammazione con fissati parametri di qualità e in maniera standard.

• La "software engineering" (ingegneria del software) è la brancadell'Ingegneria Informatica che raccoglie il patrimonio di metodi e tecnicheper la produzione del software.

Page 26: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Il ciclo di vita del software

Page 27: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

La progettazione dei programmi di piccoledimensioni• Una delle esigenze maggiormente sentita è quella di una separazione

netta, in fase progettuale, tra il "cosa" (analisi dei requisiti especifiche funzionali) e il "come" (progetto a diversi livelli didettaglio).

• In effetti la distinzione tra il "cosa" e il "come" è comune a qualsiasi tipo diprogetto ed è un modo per esprimere con altre parole la separazione fraanalisi e sintesi.

Page 28: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Realizzazione dei programmi di piccoledimensioni• Fasi

• Analisi del problema

• Progettazione della soluzione

• Programmazione (implementazione della soluzione nel linguaggio di programmazione)

• Verifica

Page 29: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Analisi

• Comprensione del "cosa" si deve fare• Prevede l’acquisizione di le informazioni necessarie alla comprensione del problema

• Le informazioni devono essere ricavate ..• dai colloqui con gli utenti di qualsiasi livello, ovvero con coloro che sono coinvolti

nell'uso del programma sia a livello direttivo che esecutivo,• da un esame dell'ambiente in cui il programma sarà utilizzato,

• Il compito dell'analista è quello di trarre, dall'insieme confuso e a voltecontraddittorio di esigenze ed obiettivi, un modello che esprima ilproblema con un formalismo atto ad aumentarne la comprensibilità

Page 30: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Analisi

• In fase di analisi, avviene la cosiddetta "definizione dei requisiti" o"delle specifiche"

• È possibile distinguere tra:• requisiti funzionali

• cosa deve fare il programma e su quali dati deve operare

• è opportuno caratterizzare separatamente le funzionalità da realizzare e i dati su cui si vaad operare

• requisiti non funzionali• quali prestazioni il programma deve offrire

Page 31: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Analisi

• A valle della realizzazione del programma, bisognerà testare lasoddisfazione dei requisiti

• Fase di "verifica" o "test"

• La soddisfazione dei requisiti viene interpretata come "correttofunzionamento"

• È necessario perciò verificare che non vi siano ambiguità oincongruenze nei requisiti collezionati

Page 32: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Analisi

• Al termine della fase di analisi si deve disporre della documentazionesu:

• la definizione dei dati di ingresso al problema;

• la definizione dei dati in uscita dal problema;

• la descrizione di un metodo risolutivo che sulla carta risolva le specifiche delproblema.

Page 33: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Progetto ed implementazione

• La fase di progetto definisce "come" si deve risolvere il problema• Coincide con la definizione dell’algoritmo che dovrà essere implementato

• La fase di progetto può iniziare solo dopo un'accurata fase di analisi• La netta separazione tra progetto ed analisi consente di:

• non inficiare i risultati dell'analisi a causa di scelte anticipate di progetto• rendere indipendente l'analisi dai vincoli di realizzazione

• Nella fase di progettazione, l’approccio top-down è considerato uno dei più "naturali"• Il modo di procedere di tale approccio è una diretta applicazione del metodo analitico deduttivo

che si è rilevato, storicamente, il più adatto alla media degli esseri umani

• La fase di implementazione è quella di traduzione dell’algoritmo nel linguaggio diprogrammazione considerato

Page 34: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

La Documentazione dei Programmi

• La documentazione dei programmi è lo strumento fondamentale perla leggibilità dei programmi.

• La leggibilità di un programma consente:• una più semplice comprensione di quale sia il problema che il programma

risolve e quindi della correttezza del programma stesso;

• una più semplice prosecuzione del progetto ogni qualvolta lo si sia interrotto;

• una più elementare comunicazione delle scelte di progetto;

• una più semplice modificabilità del programma al variare delle specifiche delproblema.

Page 35: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Documentazione esterna

• È il primo livello di documentazione• Va preparata nella fase di analisi dei requisiti

• Deve segnalare dettagli operativi tali da rendere autonomo l'utente delprogramma nell'uso dello stesso:

• funzionalità esterne• cioè offerte all’utente finale

• "cosa" fa il programma

• attivazione del programma

• diagnostiche di errore;

• configurazione richiesta del sistema;

• indicazione sull'installazione del programma;

• versione e data di aggiornamento.

Page 36: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Documentazione interna

• Incrementa la comprensibilità dell’algoritmo codificato nel programma

• Strumenti di documentazione interna:• Documentazione top-down

• Descrizione di come è stato concepito il programma attraverso i vari raffinamenti• Commenti

• Inserimento di frasi esplicative che descrivono le operazioni o le scelte realizzate nei vari punti delprogramma

• Tutti i linguaggi di programmazione sono dotati di una opportuna sintassi per inserire commenti in unprogramma

• Indentazione• indentare un programma significa mettere in evidenza nel testo del programma, mediante opportuni

incolonnamenti, blocchi di istruzioni che svolgono una funzionalità ben precisa• Ciò aiuta a comprendere la struttura del programma

• Uso di nomi di variabili autoesplicativi• ossia tali da spiegare il ruolo da esse svolte nel corpo del programma

Page 37: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Regole della documentazione

• Produrre la documentazione nel corso stesso del progetto• in quanto si può essere certi della efficacia e della completezza della

documentazione soltanto se si documentano le scelte nel momento in cui essevengono fatte

• Inserire la documentazione quanto più possibile all'interno del programmain modo che viva con il programma stesso, cambi e cresca con esso, equindi sia sempre aggiornata

• Code for readability• Always code as if the guy who ends up maintaining your code will be a violent

psychopath who knows where you live

Page 38: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Assemblatori e Compilatori

• Un programma assemblatore (o assembler) è un programma che effettua la traduzione dalla rappresentazione simbolica in linguaggio assembler alla rappresentazione binaria in linguaggio macchina

• Il principio usato nella formulazione degli assemblatori è stato seguito per definire i compilatori di alto livello

• La compilazione può prevedere una traduzione diretta verso il linguaggio macchina oppure richiedere un passo intermedio di generazione di codice assembly

Page 39: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Il linker e il loader

• Dopo il processo di traduzione ad opera del compilatore/assemblatore, che trasforma il programma sorgente in programma oggetto, il linker effettua i collegamenti tra il modulo oggetto prodotto ed eventuali altri moduli e sottoprogrammi di libreria e genera un programma eseguibile (EXE)

• Il programma eseguibile viene caricato in memoria da un programma loader (che fa parte del sistema operativo) e passato in esecuzione

Page 40: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Ciclo di Sviluppo di un programma in C++

discoLibrerie

(object files)

MEMORIA

(RAM)disco

discoEditor

discoPreprocessore

discoCompilatore

Linker

Loader

Programma sorgente

(nome.cpp)

Programma sorgente

(nome.cpp)

Programma sorgente

(nome.obj)

Page 41: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

preparazione del testo originepreparazione del testo origine

… il testo origine viene digitato mediante un editor e

viene memorizzato in un file con estensione cpp

Page 42: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

precompilazioneprecompilazione

… il testo origine (sorgente) contenuto nel file “ .cpp”

viene elaborato da un programma detto

preprocessore (o precompilatore) che

sostanzialmente esegue l’espansione del codice

(inclusioni, macro, etc.)

Page 43: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

compilazione delle unitàcompilazione delle unità

… le unità del programma vengono compilate

mediante l’attivazione del compilatore; il testo origine

verrà trasformato in testo oggetto e memorizzato in

un file con estensione .obj

Page 44: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

collegamento (linkage)collegamento (linkage)

… i diversi moduli oggetto costituenti il programma

eseguibile vengono collazionati fra loro (p1.obj,…,

pn.obj) e con il supporto al tempo di esecuzione

mediante un modulo collegatore (linker). Il tutto viene

memorizzato in un file che costituisce il programma

eseguibile (p.exe)

Page 45: Elementi di Informatica A. A. 2016/2017 - wpage.unina.itwpage.unina.it/nicola.amatucci/elementi_2016/04_b_algoritmi_e... · •Il linguaggio di programmazione è una notazione formale

Ciclo di sviluppo di un programma in C++

@@@ I programmi C++ (compilati) funzionano su tutti i sistemi di una

determinata architettura

Codice C++

Compilatore

C++ SPARC

Solaris OS

Codice Binario

Pentium Win OS

Compilatore

C++ PowerPC

MacOS

Compilatore

C++ Pentium

Win OS

Codice Binario

PowerPC

MacOS

Codice Binario

SPARC Solaris

OS