Università degli Studi di Ferrara
Dipartimento di Ingegneria
Fondamenti di Informatica
modulo B
Corso di Laurea triennale
in Ingegneria Elettronica e Informatica
Prof. Evelina Lamma
Anno Accademico 2012/13
1
OBIETTIVI (modulo B)
• Approfondire l’uso del linguaggio C rispetto a quanto noto
dal modulo A (propedeutico)
• Presentare le principali strutture di dato utilizzate per
applicazioni informatiche e gli algoritmi associati
(discutendone la complessità)
• Introdurre il concetto di componente software (modulo,
tipo di dato astratto, classe e oggetto)
• Presentare i principi della programmazione a oggetti e il
linguaggio Java
• Sperimentare librerie di componenti Java per le strutture
di dato (JCF)
2
OBIETTIVO: SUPERARE
L’ESAME A GIUGNO-LUGLIO
3
E’ NOSTRO OBIETTIVO CHE
ACQUISIATE CFU!
• Fondamenti di Informatica
vale 12 CFU
• Lezioni e ricevimento
• Tutorato (esercizi, passo
passo)
4
LEZIONI e RICEVIMENTO
• Mercoledì, h. 11-13.30 Aula 1 (no il 27/2-vedi orario)
• Giovedì, h. 11-13.30 Aula 1 (no il 7/3 – vedi orario)
alcune lezioni si terranno in Laboratorio di
Informatica Grande (vedi orario lezioni,
settimanalmente)
• Ricevimento, nel II semestre:
– Ogni mercoledì, h. 10-11 e su richiesta h. 14-15
– Dip. di Ingegneria, III piano – tel. interno 4894
5
SITO DEL MODULO B
http://www.unife.it/ing/informazione/fond-info-modulo-b
Riferimento per:
• materiale didattico (lucidi delle lezioni, esercizi,
programmi svolti)
• struttura e modalità d’esame
• testi dei compiti d’esame e loro soluzione
• Avvisi su lezioni che si svolgeranno in Laboratorio
(ma anche sito orario lezioni, settimanale)
6
TUTORATO
• Attività di esercitazione assistita da
tutore
• Esercizi proposti a lezione e risolti
individualmente, con il supporto dei
tutori
• Due turni, almeno inizialmente,
mercoledi’ alle ore 8.45 oppure alle
ore 14
• Iscriversi alla Lista creata
come appello in data 27
Febbrario, nel turno
preferito, entro oggi!!!!
Grazie!
7
KUNERANGO
• www.kunerango.com
• Piattaforma sociale per preparazione esami, sviluppata
da nostri studenti magistrali di Ingegneria Informatica
• Scambio di info, appunti, etc. / ricevimenti a
distanza / avvisi
8
ESAME
• In due parti (A e B separati), alla fine di ogni
modulo
• Voto finale = media delle prove parziali
• Solo per chi ha già superato il parziale modulo A
(entro il 2013 occorre superare la parte B!)
• In un'unica parte (A+B), alla fine di tutto il corso
9
ESAME – parziale B [o A+B]
• Una prova Java di programmazione in laboratorio
(on/off)
• Scrittura di un programma in linguaggio Java
• Occorre dimostrare di saper effettivamente produrre un
programma eseguibile
• Una prova C (in laboratorio)
• Sintesi di un programma C che verte sulle strutture dati (liste,
alberi, tavole), compilato ed eseguito correttamente [A+B ha
una funzione in più, solitamente su vettori]
• Una prova di teoria (scritta)
• Esercizi (teoria della parte B: analisi di complessità, risposte
a domande aperte su OOP e Java, [+ teoria della parte A se
non già superato il parziale])
10
Esame: organizzazione
45 min
lab, Java
2-2,5 h
lab, C
<=1h
scritto, teoria
E’ facoltativo richiedere un esame orale
Non è possibile consultare appunti o testi durante le prove
(sia scritte sia pratiche).
11
APPELLI D’ESAME
• Date e liste d’esame pubblicate prossimamente sul
portale:
http://studiare.unife.it
• Indicativamente 2-3 prove tra Giugno e Luglio
• Ore 8.45-9 prova pratica in Lab. di Informatica, a
seguire prova C e scritto nel pomeriggio)
12
PREREQUISITI...
• Modulo A (almeno studiato
e assimilato se non
superato il parziale …)
• per affronatre e superare
l’esame è indispensabile
fare costantemente esercizi
al calcolatore
Esercizi al
studio
calcolatore
LABORATORIO/TUTORATO
• Attività di esercitazione assistita da tutore
• Attività di esercitazione libera
13
INFORMAZIONI UTILI
• Orario di Ricevimento
• Mercoledì h. 10-11 c/o Dipartimento di Ingegneria, III piano (blu)
ufficio 324.
• Posta elettronica
[email protected]
• Telefono 0532-97-4894
• E inoltre...
• Tutor per il laboratorio:
• Andrea Peano
• Riccardo Zese
[email protected]
14
Modulo A - recap
•
•
•
•
Architettura dei sistemi di elaborazione.
– Struttura generale di un calcolatore elettronico, macchina di Von
Neumann.
Software di base per sistemi di elaborazione: il sistema operativo.
– Il sistema operativo Window, il file system.
Metodi per l'analisi di un problema.
– Algoritmi e programmi.
I linguaggi di programmazione e cenni alla loro evoluzione.
– Ambienti di programmazione: editor, debugger, compilatori ed
interpreti; fasi di sviluppo di un programma. Sviluppo top-down e
bottom-up.
15
Modulo A – recap (2)
•
Il linguaggio C.
– Alfabeto e sintassi del C, Tipi di dato primitivi in C, Tipi di dato scalari e
strutturati (array e struct)
– Espressioni,
– Dichiarazione di costanti, variabili e loro tipo.
– Istruzioni di assegnamento e di ingresso/uscita, composte, condizionali
e cicli.
– Funzioni e procedure, record di attivazione. Ricorsione e ricorsione tail
– Tecniche di passaggio dei parametri, Regole di visibilità e tempo di vita.
– Librerie standard.
– Gestione di file binari e di testo.
– Il preprocessore C, il linker.
– Progetti su più file.
– Argomenti del main
16
PROGRAMMA DEL MODULO B
• Algoritmi e strutture di dati:
– Cenni sulle tecniche per la gestione di tabelle, liste,
alberi e loro realizzazione in C. Algoritmi di ricerca su
tali strutture dati. Complessità degli algoritmi (applicata
alle strutture dato presentate e agli algoritmi per esse).
Algoritmi di ordinamento.
• Approfondimenti sul linguaggio C:
– Funzioni come parametri. Variabili statiche. Altri
costrutti C: switch case. Programmazione “modulare” in
C. File header e file implementazione.
17
PROGRAMMA DEL MODULO B
•
La programmazione a oggetti e il linguaggio
Java:
– Il concetto di componente software. Progettare per
astrazioni. Incapsulamento e protezione. Classi ed
ereditarietà.
– Il linguaggio Java: classe, costruzione e distruzione di
oggetti, oggetti semplici e oggetti composti. Package e
Package di I/O. Ereditarietà, Classi Astratte, Interfacce.
Eccezioni. Le librerie grafiche AWT e Swing.
Realizzazione di Applet. Java e la rete. Strutture dati in
Java: la Java Collections Framework (JCF).
18
Testi e materiale consigliato
•
Per la parte sul linguaggio C:
– Copie dei lucidi mostrati a lezione (sono scaricabili dal
sito del corso)
– A. Ciampolini, E. Lamma. Esercizi di programmazione
– Linguaggio C, Progetto Leonardo, 1999.
– C. Demetrescu, I. Finocchi, G.F. Italiano, Algoritmi e
strutture dati, McGraw-Hill, 2008.
– S. Ceri, D. Mandrioli, L. Sbattella, Informatica
Programmazione, McGraw-Hill, 2° edizione (Cap 10).
19
Testi e materiale consigliato
•
Per la parte sul linguaggio Java, qualsiasi testo
introduttivo a tale linguaggio, tra questi
segnaliamo:
– Cay S. di Horstmann, Concetti di informatica e
fondamenti di Java - 4a ed., Apogeo, Milano.
– H. M. Deitel, P. J. Deitel. Java Fondamenti di
Programmazione, 3a ed., Apogeo, Milano.
– J. Lewis,W. Loftus, Java - Fondamenti di
progettazione software, Addison Wesley Italia.
20
Risorse per la programmazione
• Ambienti di programmazione utilizzati nel
corso disponibili in Laboratorio di Informatica:
– MS VisualStudio
– Eclipse (Jcreator, più semplice, ma …)
21
For foreign students
• It is possible to give the exam in English,
provided that I am asked 1 week in advance
• If you have problems with Italian, you may
consider buying a textbook for Java in your
own language
22
Un po’ di storia sui linguaggi
1957
John Backus e colleghi della IBM rilasciano
la prima versione del compilatore per il
linguaggio di programmazione FORTRAN
(Formula Translator) alla Westinghouse.
1959
Si forma il Comitato per i linguaggi di sistemi di dati
e nasce il COBOL (Common Business Oriented
Language).
1959
John McCarthy sviluppa il linguaggio LISP
(List Processing) per le applicazioni di
Intelligenza Artificiale.
1964
Nasce il linguaggio BASIC (Beginner's Allpurpose Symbolic Instruction Code). E'
sviluppato a Dartmouth da John Kemeny e
Thomas Kurtz. Ne deriveranno molte
varianti.
24
Un po’ di storia sui linguaggi
1967
Ole-Johan Dahl e Kristen Nygaard del Centro
Computer Norvegese, completano una versione
general-purpose del linguaggio SIMULA, il
primo linguaggio object-oriented.
1972
Dennis Ritchie sviluppa il linguaggio "C" ai
laboratori Bell. Così chiamato semplicemente perchè
il suo predecessore era stato battezzato "B".
1995
Nasce il linguaggio di programmazione Java, piattaforma
indipendente per sviluppo di applicazioni.
25
EVOLUZIONE DEI LINGUAGGI
ADA
C++
VISICALC PROLOG
SMALLTALK
FORTRAN77 LISP
PASCAL
SIMULA67
LISP
ALGOL APL
COBOL LISP
ALGOL
LISP
FORTRAN
C
Linguaggi-macchina
PlanKalcul
1945
1950 1960
1970
1980
1990
2000
26
LINGUAGGI DI ALTO LIVELLO
Barriera di astrazione
Fortran
C
Modula-2
Smalltalk
Java
Cobol
Basic Pascal Python
Algol
Simula67
C++
Ada
Lisp
Scheme
Prolog
ML
27
LINGUAGGI DI ALTO LIVELLO
Barriera di astrazione
IMPERATIVI
Fortran
C
Modula-2
Smalltalk
Java
Cobol
Basic Pascal Python
Algol
Lisp
Simula67
C++
A OGGETTI
Ada
Scheme
Prolog
DICHIARATIVI
FUNZIONALI
ML
28
EVOLUZIONE DEI LINGUAGGI
FORTRAN
ALGOL60
BASIC
SIMULA67
PASCAL
ADA
SMALLTALK
C++
29
Quali astrazioni?
• Sui dati: da indirizzi fisici a nomi simbolici per le
variabili (Assembler)
• Sul controllo (programmazione strutturata,
Pascal, C):
– sequenza (;),
– blocco,
– if else, while do, etc.
{ int p=1;
for (i=1 ; i <= n ; ++i)
. . .
}
p *= x;
30
Astrazioni funzionali
• Sulle operazioni (funzioni):
long potenza(int x, int n) /* par. formali */
{ int i;
long p = 1;
/* var. locali */
for (i=1 ; i <= n ; ++i) p *= x;
return p;
}
long Y;
Y=potenza(X,10);
31
Encapsulation
• Coniugare l’astrazione su dati e operazioni
(astrazioni di dato, tipi di dato astratto, classi e
oggetti)
– Incapsulamento (dati e operazioni)
– Protezione
– Coesione
– Riuso
– … (Ereditarietà)
32
OOP e Java
public class Counter {
private int x;
public void reset() { x = 0; }
public void inc()
{ x++; }
public int getValue() { return x;}
}
Counter Y;
Y = new Counter();
Y.reset();
Y.inc();
33
Programmazione Orientata agli Oggetti
(OOP)
• Astrazione: separazione fra interfaccia e implementazione
• Incapsulamento: insieme di meccanismi che consentono di
proteggere lo stato di un oggetto e in generale di
nascondere gli aspetti che non si vogliono rendere pubblici
– Linguaggi object-based
• Ereditarietà: consente di creare un componente (classe)
che riusa metodi e attributi di un componente (classe) già
esistente
─ Linguaggi object-oriented
public class BiCounter extends Counter {
public void dec()
{ x--; }
}
35
Ereditarietà
public class Counter {
private int x;
public void reset() { x = 0; }
public void inc()
{ x++; }
public int getValue() { return x;}
}
public class BiCounter extends Counter {
public void dec()
{ x--; }
}
Counter Y; Y = new BiCounter();
Y.reset(); Y.inc(); Y.dec();
36