Upload
buidiep
View
223
Download
0
Embed Size (px)
Citation preview
20/04/2005 LP2-04/05 - Intro 1
Laboratorio di Programmazione 2Docente: Luca ForlizziOrario: 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 2
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 3
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 4
Modalità di esame
1. Prova intermedia: scritta2. Prova finale: scritta e/o al calcolatore3. 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 5
LP2 e gli Altri
LP2
Lab. Prog. 1 Architetture 1 Lab. Arch. 1
Sist. OperativiLab. Algoritmi
Fond. Prog.
20/04/2005 LP2-04/05 - Intro 6
Libri di testoTesti di riferimento1. 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 approfondimenti3. 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 7
Libri di testo1. La presentazione è un'introduzione alla programmazione
attraverso il C. Particolarmente indicato per il programmatore inesperto in quanto introduce alla programmazione strutturata. Ipunti 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 8
Libri di testo3. 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. Proponemoltissimi esercizi ma senza soluzione.
20/04/2005 LP2-04/05 - Intro 9
Libri di testo5. 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 diingegneria del software, della Libreria Standard, la descrizionedello standard C99 chiaramente differenziata da quella del C89, la trattazione della gestione dei files, della programmazione inambiente 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 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
Stili di programmazione
• assembly• imperativo• ad oggetti• funzionale• logico
20/04/2005 LP2-04/05 - Intro 18
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 19
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 20
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 21
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 22
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 23
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 24
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 25
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 26
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 27
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 28
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 29
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