Elementi di programmazione Algoritmi Flow Chart, Fasi della programmazione Linguaggi Elementi di programmazione ad oggetti ELEMENTI DI INFORMATICA UFC_05 1
Algoritmi Un algoritmo è una serie finita di operazioni elementari che porta alla risoluzione in un tempo finito una classe di problemi. Eseguibilità: ogni azione deve essere eseguibile da parte dell esecutore dell algoritmo in un tempo finito Non-ambiguità: ogni azione deve essere univocamente interpretabile dall'esecutore Finitezza: il numero totale di azioni da eseguire, per ogni insieme di dati di ingresso, deve essere finito. ELEMENTI DI INFORMATICA UFC_05 2
Algoritmi e programmi Algoritmo Sequenza finita di passi che risolve in tempo finito un problema. Codifica Fase di scrittura di un algoritmo in un qualche linguaggio di programmazione, che specificano le azioni da compiere. Programma Testo scritto in accordo con la sintassi e la semantica di un linguaggio di programmazione. ALGORITMO PROBLEMA PROGRAMMA ELEMENTI DI INFORMATICA UFC_05 3
Diagrammi di flusso (Flow Chart) Per descrivere un algoritmo è possibile ricorrere a uno schema grafico che fa uso dei seguenti simboli ISTRUZIONE: DEFINISCE UNA ISTRUZIONE ESEGUIBILE INPUT/OUTPUT: INDICA UNA OPERAZIONE DI IMMISSIONE (INPUT) O DI COMUNICAZIONE ALL ESTERNO (OUTPUT) DI DATI DECISIONE: TEST LOGICO CHE PUO ESSERE VERO O FALSO IN CUI SI DECIDE COME PROSEGUIRE NEL PERCORSO DEL FC START/STOP: INDICA IL PUNTO DI INIZIO O FINE DELL ALGORITMO SOTTOPROGRAMMA: USATO PER LA CHIAMATA A UN SOTTOPROGRAMMA (SUBROUTINE) CON PASSAGGIO DI PARAMETRI. HA SOLO UNA FRECCIA IN USCITA ELEMENTI DI INFORMATICA UFC_05 4
Un esempio: calcolo della media di numeri inseriti da tastiera start Totale=0 NumeroVoti=0 Leggi un voto Totale=Totale+Voto NumeroVoti= NumeroVoti+1 NO Voti finiti? SI Media=Totale/ NumeroVoti Stampa la media stop ELEMENTI DI INFORMATICA UFC_05 5
Strutture di controllo SEQUENZA SELEZIONE ISTRUZIONE1 TEST FALSO TEST FALSO VERO VERO ISTRUZIONE2 ISTRUZIONI ISTRUZIONI 1 ISTRUZIONI 2 ISTRUZIONE N if(test) { istruzioni } if(test) { istruzioni 1} else { istruzioni 2} ELEMENTI DI INFORMATICA UFC_05 6
Strutture di controllo ITERAZIONE (CICLO FOR) INIZIALIZZAZIONE CONTATORE TEST VERO ISTRUZIONI FALSO for(init,test,update) { istruzioni } ITERAZIONE (CICLO WHILE) TEST ISTRUZIONI AGGIORNAMENTO CONTATORE while(test) { istruzioni } ELEMENTI DI INFORMATICA UFC_05 7
Esercizio Problema: dato un numero intero x (input) determinare la prima potenza del 2 maggiore di x. In pratica comunicare (output) l esponente n tale che 2 n > x ELEMENTI DI INFORMATICA UFC_05 8
Il linguaggio del calcolatore Il calcolatore esegue programmi scritti in un opportuno linguaggio: il linguaggio macchina Tale linguaggio differisce nei suoi dettagli da calcolatore a calcolatore Da processore a processore ELEMENTI DI INFORMATICA UFC_05 9
Le istruzioni macchina Un programma scritto in linguaggio macchina è formato da una sequenza di istruzioni appartenenti al set di istruzioni del particolare processore Ogni istruzione è formata da: Un codice operativo Zero o più operandi codice operativo operando(i) Tanto il codice operativo quanto gli operandi sono rappresentati nella memoria del calcolatore sotto forma di numeri binari Data la difficoltà per l uomo di interpretare numeri binari si usa l assembler al posto del linguaggio macchina ELEMENTI DI INFORMATICA UFC_05 10
I programmi Un programma consiste di due parti La parte istruzioni contenente il codice del programma La parte dati costituita dalle celle di memoria destinate a contenere i dati sui quali il programma opera Il processore esegue un programma dalla prima istruzione fino all istruzione halt ELEMENTI DI INFORMATICA UFC_05 11
Programma assembly e rappresentazione in memoria 0 1 2 3 4 5 LOAD 4, R1 LOAD 5, R2 SUB R1, R2 STORE R1, 7 50 40 istruzioni dati ELEMENTI DI INFORMATICA UFC_05 12
Il linguaggio Assembly La programmazione in linguaggio macchina è troppo complessa e noiosa per i programmatori Al posto delle sequenze di numeri, è più comodo usare delle abbreviazioni simili all inglese per rappresentare le operazioni elementari: Nasce il linguaggio Assembly È necessario un programma (assembler) che traduca in linguaggio macchina i programmi scritti in linguaggio assembly ELEMENTI DI INFORMATICA UFC_05 13
Programmi vs. processi Un programma è un entità statica Descrive semplicemente un algoritmo Con il termine processo si indica un programma in esecuzione Caratterizzato dal codice in esecuzione e da uno stato Esso è quindi un'entità dinamica, che dipende dai dati che vengono elaborati, e dalle operazioni eseguite su di essi ELEMENTI DI INFORMATICA UFC_05 14
I linguaggi di alto livello La programmazione in linguaggio macchina è improponibile per programmi di una certa complessità...... e l assembly oltre un certo limite non aiuta I linguaggi di alto livello facilitano la programmazione dei calcolatori Alto livello = Vicino al programmatore Ovviamente è necessario un programma (compilatore) che converta il programma scritto nel linguaggio di alto livello in linguaggio macchina ELEMENTI DI INFORMATICA UFC_05 15
Fasi della programmazione La preparazione di un programma scritto in un linguaggio ad alto livello, passa tra diverse fasi: editazione compilazione linking (collegamento) caricamento esecuzione ELEMENTI DI INFORMATICA UFC_05 16
Editazione Consiste nella scrittura del codice (testo del programma) in un file Si esegue tramite un programma chiamato editor o Ambiente di sviluppo Genera il programma sorgente ELEMENTI DI INFORMATICA UFC_05 17
Compilazione Il codice sorgente viene passato al compilatore che si occuperà di tradurre il programma nel codice in linguaggio macchina Genera il programma oggetto ELEMENTI DI INFORMATICA UFC_05 18
Linking (collegamento) I programmi scritti in linguaggio ad alto livello, contengono dei riferimenti a funzioni definite altrove Nelle librerie del linguaggio e/o del sistema operativo Il codice oggetto prodotto dal compilatore conterrà dei buchi (riferimenti alle funzioni di libreria) Il linker si occupa di collegare il codice oggetto con quello delle funzioni mancanti Genera il programma eseguibile ELEMENTI DI INFORMATICA UFC_05 19
Caricamento/Esecuzione Fase di caricamento Prima che possa essere eseguito, un programma dovrà essere caricato in memoria Il programma loader (parte del sistema operativo) si occupa di questa operazione Fase di esecuzione Il computer esegue il programma, una istruzione per volta ELEMENTI DI INFORMATICA UFC_05 20
Fasi della programmazione Librerie Programmatore (Programma sorgente) Compilatore (Programma Oggetto) Linker (Programma eseguibile) Caricamento/Esecuzi one ELEMENTI DI INFORMATICA UFC_05 21
L esercizio (frammento) in C void main () { int x, y, n; do { printf( Introdurre un intero positivo\n ); scanf( %d, &x);} while (x<0); n=0; y=1; while (y<x) { y=y*2; n=n+1;} printf( %d minore o uguale2 ^ %d\n, x, n); return 0; }printf("ecco il risultato %d", totale); ELEMENTI DI INFORMATICA UFC_05 22
Linguaggi compilati e interpretati Il calcolatore capisce solo il linguaggio macchina I programmi scritti in linguaggi di alto livello devono essere tradotti in linguaggio macchina prima di essere eseguiti Di ciò si occupa il compilatore In alternativa alcuni linguaggi di alto livello hanno associato un interprete Si tratta di un programma capace di capire quel particolare linguaggio e di eseguirne i programmi Un istruzione per volta ELEMENTI DI INFORMATICA UFC_05 23
Paradigmi di programmazione Imperativo un programma è composto di istruzioni che specificano operazioni (comandi) da eseguire; Funzionale un programma è la specifica di una funzione (che a sua volta può contenere la specifica di altre funzioni) Logico / Dichiarativo un programma è la descrizione delle proprietà dei risultati del programma, basata sulla logica matematica; Strutturato Parte dalla critica nei confronti della programmazione che fa uso del salto incondizionato e afferma che qualsiasi programma scritto usando il goto può essere riscritto senza, a patto di avere a disposizione tre tipi di strutture di controllo: sequenza, ripetizione e alternativa. Orientato agli oggetti Un programma è la specifica di un insieme di classi di oggetti, ognuna definita per mezzo di struttura e operazioni ELEMENTI DI INFORMATICA UFC_05 24
Linguaggi Imperativi Caratteristiche: di utilizzo più semplice indipendenti dall'elaboratore i programmi sono una sequenza di istruzioni; l'evoluzione del calcolo è costituita da una variazione dello stato della memoria Eseguono 3 tipi di operazioni: trasferimento dati operazioni aritmetiche alterazione del flusso del programmi Tra i linguaggi imperativi ricordiamo il Basic, Fortran, Cobol ELEMENTI DI INFORMATICA UFC_05 25
Linguaggi Funzionali il flusso di esecuzione del programma assume la forma di una serie di valutazioni di funzioni matematiche. Solitamente questo approccio viene usato maggiormente in ambiti accademici piuttosto che industriali Il primo linguaggio funzionale: Lisp (List Processing), fine anni '50 Altri linguaggi conosciuti sono: scheme, logo Differenze con i linguaggi imperativi: il calcolo è basato sul calcolo di valori e non sull'assegnamento di valori a variabili basato su valori e non su effetti il risultato è il risultato di una funzione, non l'effetto causato dalla esecuzione di una sequenza di operazioni ELEMENTI DI INFORMATICA UFC_05 26
Linguaggi logico/dichiarativi Basati sulla logica obiettivo: formalizzare il ragionamento caratterizzati da meccanismi deduttivi Programmare significa: descrivere il problema con formule del linguaggio interrogare il sistema, che effettua deduzioni sulla base delle definizioni Tra i linguaggi logico/dichiarativi ricordiamo il ProLog ELEMENTI DI INFORMATICA UFC_05 27
Linguaggi strutturati Le strutture di controllo ammesse dai linguaggi strutturati, e le regole sintattiche e semantiche del loro uso, possono variare nei dettagli specifici; tuttavia, devono essere rispettati un insieme di requisiti fondamentali: completezza. Un linguaggio strutturato deve fornire la sequenza, almeno una struttura di tipo alternativa, e almeno una struttura di tipo iterativa; singolo punto di ingresso e di uscita. Idealmente, ogni struttura di controllo, completa delle istruzioni controllate, deve poter essere considerata come una singola macro-istruzione dal punto di vista del controllo complessivo, con un ben identificato punto di ingresso e un ben identificato punto di uscita. componibilità. Ogni struttura di controllo può avere fra le sue istruzioni controllate, ricorsivamente, altre strutture di controllo (senza limiti). ELEMENTI DI INFORMATICA UFC_05 28
Linguaggi orientati agli oggetti Sono basati sul concetto di oggetto software Un oggetto software rappresenta un oggetto del mondo reale un numero, un archivio, un testo, una matrice, una persona... I dati sono rappresentati come oggetti Le azioni da compiere come operazioni da effettuare sugli oggetti. Di solito sono realizzati come estensione dei linguaggi imperativi. Un programma modella un problema reale come una collezione di oggetti software che interagiscono. Tra i più famosi ricordiamo Java, C++, Python,.NET, php ELEMENTI DI INFORMATICA UFC_05 29
Programmazione orientata agli oggetti Un linguaggio di programmazione è definito ad oggetti quando permette di implementare tre meccanismi usando la sintassi nativa del linguaggio: Incapsulamento consiste nella separazione della cosiddetta interfaccia di una classe dalla corrispondente implementazione, in modo che i client di un oggetto di quella classe possano utilizzare la prima, ma non la seconda Ereditarietà L'ereditarietà permette essenzialmente di definire delle classi a partire da altre già definite. Polimorfismo permette di scrivere un client che può servirsi di oggetti di classi diverse, ma dotati di una stessa interfaccia comune; a tempo di esecuzione, quel client attiverà comportamenti diversi senza conoscere a priori il tipo specifico dell'oggetto che gli viene passato. ELEMENTI DI INFORMATICA UFC_05 30
Oggetti Per capire cos è un oggetto prendiamo spunto dalla vita reale: un oggetto può essere un automobile, un computer, una casa, Un oggetto può essere definito elencando sia le sue caratteristiche sia i suoi comportamenti, cioè le funzioni che mette a disposizione Elencando le caratteristiche e i comportamenti, diamo una definizione generica Un oggetto però è un entità particolare, con le sue caratteristiche specifiche. ELEMENTI DI INFORMATICA UFC_05 31
Oggetti:un esempio Consideriamo ad esempio un oggetto automobile con gli attributi: Colore Posizione (immaginando l auto sul piano debbiamo fornire le coordinate x e y) Velocità Quindi l oggetto auto1 potrà essere così descritto: Colore = rosso PosizioneX=50 Velocità=10 PosizioneY=60 60 50 10 ELEMENTI DI INFORMATICA UFC_05 32
Oggetti:un esempio Lo stesso modo possiamo creare un altro oggetto dello stesso tipo cambindo gli attributi Per esempio l oggetto auto2 potrà essere così descritto: Colore = blu PosizioneX=50 PosizioneY=10 Velocità=5 50 60 10 60 5 10 ELEMENTI DI INFORMATICA UFC_05 33
Attributi e metodi Nella terminologia OOP le caratteristiche di un oggetto vengono chiamate attributi, i comportamenti vengono chiamati metodi I metodi sono le operazioni che un oggetto è in grado di compiere Un oggetto è quindi formato da attributi e metodi ELEMENTI DI INFORMATICA UFC_05 34
Classi Quindi gli oggetti sono diversi a seconda del valore assunto dalle loro caratteristiche, ma condividono la stessa struttura Questa struttura si chiama Classe Un oggetto è una istanza di una classe. Esso è dotato di tutti gli attributi e i metodi definiti dalla classe. ELEMENTI DI INFORMATICA UFC_05 35
Classi La struttura di una classe è la seguente: <nome classe> <attributo1> <attributo2> <metodo1> <metodo2> Diagramma delle classi ELEMENTI DI INFORMATICA UFC_05 36
Costruttori e distruttori Dal punto di vista del calcolatore, ogni oggetto è identificato da una certa zona di memoria, nella quale sono memorizzati gli attributi, e il valore di questi ultimi determina lo stato interno dell'oggetto. Istanziare un oggetto vuol dire allocare memoria ed eventualmente inizializzarla secondo le specifiche definite dalla classe. Molti linguaggi forniscono un supporto per l'inizializzazione automatica di un oggetto, con uno o più metodi speciali, detti costruttori. Analogamente, la fine della vita di un oggetto può essere gestita con un metodo detto distruttore. ELEMENTI DI INFORMATICA UFC_05 37
Processing Processing è un linguaggio di programmazione basato su Java, che consente di sviluppare diverse applicazioni come giochi, animazioni e contenuti interattivi. Da Java eredita completamente la sintassi, i comandi e il paradigma di programmazione orientata agli oggetti, ma in più mette a disposizione numerose funzioni ad alto livello per gestire facilmente l'aspetto grafico e multimediale. È distribuito sotto licenza Open Source, ed è supportato dai sistemi operativi GNU/Linux, Mac OS X e Windows. Processing può interagire con la scheda hardware Arduino. ELEMENTI DI INFORMATICA UFC_05 38
L esempio in processing ELEMENTI DI INFORMATICA UFC_05 39
Car mycar1; Car mycar2; // Two objects! void setup() { size(200,200); // Parameters go inside the parentheses when the object is constructed. mycar1 = n TECNICO SUPERIORE PER L AUTOMAZIONE INDUSTRIALE L esempio in processing Car mycar1; Car mycar2; // Definiti 2 oggetti di classe Car void setup() { size(200,200); mycar1 = new Car(color(255,0,0),0,100,2); mycar2 = new Car(color(0,0,255),0,10,1); } void draw() { background(255); mycar1.drive(); mycar1.display(); mycar2.drive(); mycar2.display(); } class Car { color c; float xpos; float ypos; float xspeed; // Il costruttore è definito con gli argomenti. Car(color tempc, float tempxpos, float tempypos, float tempxspeed) { c = tempc; xpos = tempxpos; ypos = tempypos; xspeed = tempxspeed; } void display() { stroke(0); fill(c); rectmode(center); rect(xpos,ypos,20,10); } void drive() { xpos = xpos + xspeed; if (xpos > width) { xpos = 0; } } } ELEMENTI DI INFORMATICA UFC_05 40
Fonti Wikipedia Informatica Arena, Borchia, Bruno, Messina Petrini ed. Il Sistema Operativo. Rappresentazione dell Informazione. Cenni di Programmazione Politecnico di Milano Prof. Gianluca Palermo Introduzione alla programmazione ad oggetti. Prof.ssa Samantha D antico Processing.org ELEMENTI DI INFORMATICA UFC_05 41