Sei sulla pagina 1di 16

Universit degli Studi di Ferrara Facolt di Ingegneria

Fondamenti di Informatica
modulo B d l
Corso di Laurea in Ingegneria dellInformazione

Prof. Evelina Lamma Anno Accademico 2010/11


1

OBIETTIVI (modulo B) ( d l
Approfondire luso del linguaggio C rispetto a quanto noto l uso dal modulo A (propedeutico) P Presentare le principali strutture di dato utilizzate per l i i li d ili applicazioni informatiche e gli algoritmi associati (discutendone la complessit) Introdurre il concetto di componente software (modulo, tipo dato t tt ti di d t astratto, classe e oggetto) l tt ) Presentare i principi della programmazione a oggetti e il linguaggio Java Sperimentare librerie di componenti Java per le strutture di dato (JCF)
2

ORGANIZZAZIONE
Lezioni il luned e marted h 11-13 30 Aula 1 (alcune in marted, h. 11 13.30 Laboratorio di Informatica Grande) Tutorato: esercizi in Laboratorio, complementari alle p p lezioni e di ausilio alla preparazione allesame Parte integrante del corso, vertono sullo sviluppo di semplici programmi C e Java proposti a lezione In Laboratorio il marted, dalle h. 14 Ricevimento nel II semestre: Ogni luned, dalle 15 alle 17 g Dip. di Ingegneria, III piano tel. interno 4894
3

SITO DEL MODULO B


http://www.unife.it/ing/informazione/fond-info-modulo-b http://www.unife.it/ http://www unife it/ing/informazione/fond-info-moduloit/ing

Riferimento per: Rif i t materiale didattico (lucidi delle lezioni, esercizi, programmi svolti) struttura e modalit desame testi dei compiti desame e loro soluzione Avvisi su lezioni che si svolgeranno in Laboratorio
4

Esame: Esame:
In due parti (A e B separati), alla fine di ogni separati), modulo Voto finale = media delle pro e par iali prove parziali Solo per chi ha gi superato il parziale modulo A In un unica parte (A B), alla fine di tutto il corso un'unica (A+B (A B), A+B),

ESAME parziale B [o A B] i l [ A+B]


Una prova di programmazione in laboratorio (on/off)
Scrittura di un programma in linguaggio Java Occorre dimostrare di saper effettivamente produrre un

programma eseguibile

Una prova (in laboratorio) p ( )


Sintesi di un programma C che verte sulle strutture dati (liste,

alberi, tavole), compilato ed eseguito correttamente [A+B una funzione in pi]

Una prova di teoria (scritta) scritta)


Esercizi (teoria d ll parte B analisi di complessit, risposte E i i i della B: li i complessit, i l i

a domande aperte su OOP e Java, [+ teoria della parte A se non gi superato il parziale]) parziale]

Esame: Esame: organizzazione


45 min 2,5 h lab, Java lab, C

<=1h

scritto, teoria

E E facoltativo richiedere un esame orale Non possibile consultare appunti o testi durante le p p pp prove (sia scritte sia pratiche).
7

APPELLI DESAME
Date e liste desame pubblicate prossimamente sul portale: http://studiare.unife.it Indicativamente 22 Giugno e uno a Luglio Ore 8.45-9 prova pratica in Lab. di Informatica, a 8.45Lab. seguire prova C e scritto nel pomeriggio)

PREREQUISITI... PREREQUISITI
Modulo A (almeno studiato (almeno e assimilato se non superato il parziale ) per affronatre e superare lesame indispensabile fare costantemente esercizi f t t t i i al calcolatore
studio

Esercizi al calcolatore

LABORATORIO
Attivit di esercitazione assistita da tutore Attivit di esercitazione libera
9

TUTORATO (LABORATORIO)
Attivit di esercitazione assistita da tutore E Esercizi proposti a l i i i ti lezione e risolti i lti individualmente, con il supporto dei tutori Quando: il marted alle ore 14 in Lab. Informatica Grande Iscriversi alla lista creata come appello (prova parziale 15 Marzo 2011) parziale,

10

INFORMAZIONI UTILI
Orario di Ricevimento
Luned h. 15 -17 c/o Dipartimento di Ingegneria, III piano (blu)

ufficio 324.

Posta elettronica nome.cognome@unife.it Telefono 0532-97-4894 E inoltre...


Approfittare del laboratorio Chiedere ai tutor: Massimiliano Cattafi massimiliano.cattafi@unife.it Denis Ferraretti denis.ferraretti@unife.it

11

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 C. tali strutture dati. Complessit degli algoritmi (applicata alle strutture dato presentate e agli algoritmi per esse). Algoritmi di ordinamento.

Approfondimenti sul linguaggio C: pp g gg


Funzioni come parametri. Variabili statiche. Altri costrutti C: switch case. Programmazione modulare in C. File header e file implementazione.

12

PROGRAMMA DEL CORSO

La programmazione a oggetti e il linguaggio Java:


Il concetto di componente software Progettare per software. astrazioni. Incapsulamento e protezione. Classi ed ereditariet. Il linguaggio Java: classe, costruzione e distruzione di gg gg p gg p g 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 A l t J R li i Applet. Java e l rete. St tt la t Strutture d ti i dati in Java: la Java Collections Framework (JCF).
13

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 A. Ciampolini, E. Lamma. Linguaggio C, Progetto Leonardo, 1999. C. Demetrescu, I. Finocchi, G.F. Italiano, Algoritmi e , , , g strutture dati, McGraw-Hill, 2008. S. Ceri, D. Mandrioli, L. Sbattella, Informatica Programmazione, McGraw-Hill, 2 edizione (Cap 10).

14

Testi e materiale consigliato

Per la parte sul linguaggio Java, qualsiasi testo introduttivo a tale linguaggio linguaggio, tra questi segnaliamo: Cay S di Horstmann Concetti di informatica e S. Horstmann, fondamenti di Java - 4a ed., Apogeo, Milano. H M D it l P J D it l J H. M. Deitel, P. J. Deitel. Java F d Fondamenti di ti Programmazione, 3a ed., Apogeo, Milano. J. Lewis,W. Loftus, Java - Fondamenti di progettazione software, Addison Wesley Italia.
15

Risorse per la programmazione


Ambienti di programmazione utilizzati nel corso disponibili in Laboratorio di Informatica: MS VisualStudio Eclipse (Jcreator, pi semplice, ma )

16

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 b i a textbook f J id buying b k for Java i your in own language

17

Modulo A - recap
Architettura dei sistemi di elaborazione. Struttura generale di un calcolatore elettronico, macchina di Von Neumann. Neumann. Software di base per sistemi di elaborazione: il sistema operativo. Il sistema operativo Window, il file system. Window, Metodi per l'analisi di un problema. Algoritmi e programmi. I linguaggi di programmazione e cenni alla l li i i i ll loro evoluzione. l i Ambienti di programmazione: editor, debugger, compilatori ed editor, debugger, interpreti; fasi di sviluppo di un p g p pp programma. Sviluppo top-down e pp topp bottom-up. bottom-up.

18

Modulo A recap (2)


Il linguaggio C C. Alfabeto e sintassi del C, Tipi di dato primitivi in C, Tipi di dato scalari e strutturati (array e struct) (array struct) Espressioni, Dichiarazione di costanti, variabili e loro tipo. Istr ioni di assegnamento e di ingresso/uscita, composte condi ionali Istruzioni ingresso/ scita 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. linker. Progetti su pi file. file Argomenti del main
19

LINGUAGGI DI ALTO LIVELLO

Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

20

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). g g ) 1959 John McCarthy sviluppa il linguaggio LISP (List Processing) per le applicazioni di Intelligenza Artificiale. 1964 Nasce il linguaggio BASIC (Beginner s All (Beginner's Allpurpose Symbolic Instruction Code). E' sviluppato a Dartmouth da John Kemeny e Thomas Kurtz. Ne deriveranno molte varianti.

21

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. i di d il li i i

22

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
23

LINGUAGGI DI ALTO LIVELLO


Barriera di astrazione
Fortran

Cobol

Basic Pascal Python


Ada Lisp p

Modula-2 Simula67

Algol

Smalltalk Java

Scheme

C++

Prolog g

ML
24

LINGUAGGI DI ALTO LIVELLO


Barriera di astrazione
IMPERATIVI Fortran

Cobol

Basic Pascal Python


Ada Lisp
Scheme

C
Modula-2 Smalltalk Java

Algol

Simula67

FUNZIONALI ML
25

C++

Prolog g
DICHIARATIVI

A OGGETTI

EVOLUZIONE DEI LINGUAGGI


FORTRAN

ALGOL60 BASIC SIMULA67 PASCAL

ADA

SMALLTALK C++

26

Quali astrazioni? astrazioni?


Sui dati: da indirizzi fisici a nomi simbolici per le dati: variabili (Assembler) (Assembler) Sul controllo (programmazione strutturata, S l programma ione strutturata, str tt rata Pascal, C):
sequenza ( ) (;), blocco, blocco, if else, while do, etc. else, do, { int p=1; for (i=1 ; i <= n ; ++i) . . . }

p *= x;

27

Astrazioni funzionali
Sulle operazioni (funzioni): (funzioni):
long potenza(int x, int n) /* par. formali */ potenza( { int i i t i; long p = 1; /* var. locali */ for (i=1 ; i <= n ; ++i) p *= x; return p; } long Y; Y=potenza(X,10); Y=potenza(X,10);
28

Encapsulation
Coniugare lastrazione su dati e operazioni (astrazioni di dato, tipi di dato astratto, classi e oggetti) Incapsulamento (dati e operazioni) Protezione Coesione Riuso (Ereditariet)

29

OOP e Java
public class Counter { private int x; public void reset() { x = 0; } public void inc() { x++; } public int getValue() { return x;} bli i t getValue() tV l t } } Counter Y; Y = new C Counter(); t () Y.reset(); Y.reset(); Y.inc(); Y.inc();
30

OOP e Java
public class Counter { private int x; public void reset() { x = 0; } public void inc() { x++; } public int getValue() { return x;} bli i t getValue() tV l t } } Counter Y; Y = new C Counter(); t () Y.reset(); Y.reset(); Y.inc(); Y.inc();
31

Programmazione Orientata agli Oggetti (OOP)


Astrazione: separazione fra interfaccia e implementazione Incapsulamento: insieme di meccanismi che consentono di p proteggere lo stato di un oggetto e in g gg gg generale di nascondere gli aspetti che non si vogliono rendere pubblici Linguaggi object-based object 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() dec() { x--; } x--; }
32