Laboratorio di Programmazione 2 Docente: Luca Forlizzi Orario: lun. 15:00-17:00, mar. 17:00-19:00, gio. 17:00-19:00 Ricevimento: lun. 17:00-18:00, mar. 16:00-17:00 Contatti: ricevimento (Coppito 2, stanza A-1-11) forum del corso (http://informatica.univaq.it/forum/) 20/04/2005 LP2-04/05 - Intro 1
Obiettivi di apprendimento Conoscenze: nozioni di base della programmazione in linguaggio C. Capacità: essere in grado di implementare semplici algoritmi in linguaggio C; essere in grado di progettare e sviluppare programmi di complessità non banale Comportamenti attesi: interesse per l'attività di formalizzazione di problemi, dati e soluzioni in un linguaggio di programmazione, ed una costante attività di programmazione al calcolatore. 20/04/2005 LP2-04/05 - Intro 2
Prerequisiti del Corso Conoscenze: nozioni di base della programmazione imperativa in linguaggio Java e della architetture dei sistemi di elaborazione, lettura e comprensione in lingua inglese, rudimenti di sistemi operativi Capacità: essere in grado di risolvere problemi semplici, saper implementare i relativi algoritmi correttamente in linguaggio Java, essere in grado di utilizzare il calcolatore per eseguire semplici programmi. 20/04/2005 LP2-04/05 - Intro 3
Modalità di esame 1. Prova intermedia: scritta 2. Prova finale: scritta e/o al calcolatore 3. Prova finale: Sviluppo progetto (per chi ha superato l esame di Laboratorio di Programmazione 1) Orale (per gli altri) 20/04/2005 LP2-04/05 - Intro 4
LP2 e gli Altri Lab. Algoritmi Sist. Operativi LP2 Lab. Prog. 1 Fond. Prog. Architetture 1 Lab. Arch. 1 20/04/2005 LP2-04/05 - Intro 5
Libri di testo Testi di riferimento 1. H.M.Deitel, P.J.Deitel, C Corso Completo di Programmazione, Apogeo, seconda edizione, ISBN 88-503-2254-2 2. B.W.Kernighan, D.M.Ritchie, Il Linguaggio C, Pearson Education Italia, seconda edizione, ISBN 88-7192-200- X Testi consigliati per approfondimenti 3. A.Bellini, A.Guidi, Linguaggio C, McGraw-Hill, seconda edizione, ISBN 88-386-6103-0 4. A.Kelley, I.Pohl, C Didattica e Programmazione, Pearson Education Italia, quarta edizione, ISBN 88-7192-219-0 5. H.Schildt, C la Guida Completa, McGraw-Hill, terza edizione, ISBN 88-386-4152-8 20/04/2005 LP2-04/05 - Intro 6
Libri di testo 1. La presentazione è un'introduzione alla programmazione attraverso il C. Particolarmente indicato per il programmatore inesperto in quanto introduce alla programmazione strutturata. I punti di forza sono la trattazione della gestione dei files, dello standard C99, degli strumenti di sviluppo, delle tecniche di programmazione strutturata e di elementi di ingegneria del software. Ha molti esercizi, parecchi dei quali con soluzione. 2. La presentazione del linguaggio è eccellente e opta per un approccio sistematico. Molto completo e allo stesso tempo sintetico ed elegante, è più adatta per chi già conosca i fondamenti della programmazione in altri linguaggi. Punti di forza sono la descrizione completa della Libreria Standard, e dell'interazione dei programmi con il sistema operativo. 20/04/2005 LP2-04/05 - Intro 7
Libri di testo 3. La presentazione è un'introduzione alla programmazione attraverso il C. Particolarmente indicato per il programmatore inesperto in quanto introduce alla programmazione strutturata. Rispetto agli altri testi, è leggermente più portato ad approfondimenti teorici. In generale tratta con meno dettaglio aspetti tecnologici, ma presenta in dettaglio un'applicazione avanzata, ovvero la programmazione di un Web Server. Ha molti esercizi, parecchi dei quali con soluzione. 4. La presentazione è un compromesso tra introduzione alla programmazione e esposizione sistematica, rivolgendosi sia al principiante che all'esperto. Alcuni approfondimenti teorici. I punti di forza sono l'esauriente descrizione degli strumenti di sviluppo e dell'interazione dei programmi con il sistema operativo. Propone moltissimi esercizi ma senza soluzione. 20/04/2005 LP2-04/05 - Intro 8
Libri di testo 5. Il testo fa un esposizione sistematica e molto esauriente, che lo rende adatto al programmatore esperto e al professionista che vuole essere in grado di programmare applicazioni reali velocemente. I punti di forza sono la trattazione di elementi di ingegneria del software, della Libreria Standard, la descrizione dello standard C99 chiaramente differenziata da quella del C89, la trattazione della gestione dei files, della programmazione in ambiente Windows e la costruzione di un Interprete C. Aspetti negativi sono lo scarso approfondimento della programmazione in ambiente Unix e la mancanza di esercizi. 20/04/2005 LP2-04/05 - Intro 9
Libri di testo Consigli: Principiante: 1,3,4 Esperto:2,4,5 Interessi teorici: 3,4 Presentazione sintetica ( il succo del discorso ): 1,2,3 Presentazione completa: 2,4,5 Enciclopedia del C: 5 Aspetti applicativi: 1,4,5 20/04/2005 LP2-04/05 - Intro 10
Perché il C? (C vs. all) è piccolo,poche parole chiave (ma non meno potente di altri), facile da imparare è il linguaggio nativo di Unix, è lo standard in molti ambienti operativi è abbastanza portatile (libreria standard, supporto al codice dipendente) 20/04/2005 LP2-04/05 - Intro 11
Perché il C? (C vs. all) combina eleganza e potenza, produttività supporta la programmazione struttrata è efficiente in molte architetture è alla base di C++ e Java 20/04/2005 LP2-04/05 - Intro 12
Caratteristiche del linguaggio stile imperativo non creato da specifica formale ma in modo pragmatico, per risolvere problemi reali (programmazione di Unix) si è diffuso con Unix 20/04/2005 LP2-04/05 - Intro 13
Caratteristiche è semplice e piccolo, dunque può essere compilato con poche risorse di calcolo operazioni e tipi vicine a quelle dei calcolatori reali, dunque favorisce la creazione di programmi efficienti allo stesso tempo è sufficientemente astratto da garantire un buon grado di portabilità 20/04/2005 LP2-04/05 - Intro 14
Caratteristiche C e la sua libreria di supporto sono bene integrati in un ambiente operativo reale è stato realizzato cercando di coprire i bisogni essenziali per ogni programmatore senza aggiungere troppo (perdendo efficienza) nonostante la diffusione in molti ambienti operativi, è rimasto stabile e unificato (penso grazie alla diffusione di molte varianti Unix) 20/04/2005 LP2-04/05 - Intro 15
Caratteristiche del C sintassi complicata, non usuale di non facile apprendimento poco leggibile molto compatta, elegante vicina alle operazioni dei calcolatori reali favorisce produzione codice efficiente manca controllo sui limiti degli array manca gestione automatica della memoria non abbastanza modulare per grandi progetti 20/04/2005 LP2-04/05 - Intro 16
Stili di programmazione assembly imperativo ad oggetti funzionale logico 20/04/2005 LP2-04/05 - Intro 17
Funzionamento di un Elaboratore CPU e memoria La memoria è una sequenza finita di bit, suddivisi in gruppi di lunghezza finita (tipicamente 8, 16, 32, 64, 128) chiamati genericamente parole Ogni parola ha un indirizzo, costituito da un numero 20/04/2005 LP2-04/05 - Intro 18
Funzionamento di un Elaboratore Parole consecutive hanno indirizzi consecutivi La memoria può essere vista come una sequenza di parole aventi indirizzi compresi tra 0 e Max Tipicamente Max=2^K, K=16,32,64 20/04/2005 LP2-04/05 - Intro 19
Funzionamento di un Elaboratore L indirizzo di una parola funge da chiave di accesso per la CPU la CPU può accedere con un unica operazione ad una qualunque parola, immettendo l indirizzo della parola richiesta nel bus indirizzi che collega CPU e memoria 20/04/2005 LP2-04/05 - Intro 20
Funzionamento di un Elaboratore La CPU legge bit dalla memoria e li utilizza in vari modi: codifica di istruzioni numeri (vari formati, es. interi/floating point, con/senza segno, binari/decimali) caratteri campi di bit 20/04/2005 LP2-04/05 - Intro 21
Linguaggio Macchina/Assembly Ogni istruzione è un numero (stringa binaria) lunga un numero finito di bit e memorizzata nella RAM Le istruzioni vengono prelevate dalla memoria ed eseguite una alla volta Dopo l esecuzione di un istruzione la CPU automaticamente legge la prossima istruzione 20/04/2005 LP2-04/05 - Intro 22
Linguaggio Macchina/Assembly Normalmente dopo un istruzione viene eseguita quella che la segue immediatamente nella memoria Le istruzioni di salto inducono la CPU a proseguire l esecuzione con un istruzione memorizzata in una cella non consecutiva Rif. materiale corsi Arch. e Lab. Arch. 20/04/2005 LP2-04/05 - Intro 23
Linguaggi imperativi a medio/alto livello Astrazione della memoria (da organizzazione reale a organizzazione logica dei dati e delle istruzioni) variabili (e altre strutture dati) astraggono sequenze di bit che rappresentano dati istruzioni astraggono istruzioni strutture controllo astraggono istruzioni di salto 20/04/2005 LP2-04/05 - Intro 24
Ling. imperativi vs. assembly Variabile vs. locazioni di memoria Label invece che indirizzo Maschera struttura loc. memoria: comodo e portatile Struttura vs. insiemi di locazioni Una struttura identifica una correlazione tra parole Tipo di dato: assembly vs. ling. Imperativo In asm èmassociato all istruzione In ling. è associato alla variabile: controllo 20/04/2005 LP2-04/05 - Intro 25
Ling. imperativi vs. assembly Le operazioni di un linguaggio: sono più comode da usare (sintassi matematica) sono più simili alle operazioni matematiche (es. arrotondamento) non dipendono da caratteristiche dell hardware (es. overflow nella divisione) sono più potenti (es. elevamento a potenza) 20/04/2005 LP2-04/05 - Intro 26
Ling. imperativi vs. assembly le strutture di controllo e il concetto di funzione astraggono gli usi più frequenti/più logici delle istruzioni di salto, incoraggiando a limitarsi solo tali usi 20/04/2005 LP2-04/05 - Intro 27
Linguaggi ad oggetti Astraggono la differenza tra dati e istruzioni e il concetto di sequenza di istruzioni attraverso il concetto di oggetti in comunicazione reciproca 20/04/2005 LP2-04/05 - Intro 28
C vs. Java Java ha studiato la lezione del C (ed anche altre) adotta sintassi e strutture di controllo del C oggetti vs. strutture oggetti vs. flusso di esecuzione sequenziale macchina virtuale vs. portatilità del C macchina virtuale vs. efficienza 20/04/2005 LP2-04/05 - Intro 29