fondamenti di informatica -...

27
1 1 10110 10110 01100 01100 01011 01011 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Prof. Angela Bonifati [email protected] A.A. 2005-2006 Facoltà di Ingegneria UNICAL 2 10110 10110 01100 01100 01011 01011 Fondamenti di Informatica -Obiettivi L’obiettivo del corso e' lo studio delle metodologie di base della programmazione dei calcolatori e della loro applicazione nello sviluppo di moduli software in Java che utilizzino tipi di dati semplici ed array. Il corso introduce alle tematiche relative alla programmazione ad oggetti. Crediti : 4 CFU.

Upload: others

Post on 28-Jan-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

  • 1

    1

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica

    FONDAMENTI DI INFORMATICA

    Prof. Angela [email protected]

    A.A. 2005-2006Facoltà di IngegneriaUNICAL

    2

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica -Obiettivi

    L’obiettivo del corso e' lo studio delle metodologie di base della programmazione dei calcolatori e della loro applicazione nello sviluppo di moduli software in Java che utilizzino tipi di dati semplici ed array.

    Il corso introduce alle tematiche relative alla programmazione ad oggetti.

    Crediti : 4 CFU.

  • 2

    3

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Orario

    Periodo: 16 Gennaio 2006 – 9 Marzo 2006.

    Ogni settimana 3 ore di lezione e 2 di esercitazione.

    In totale 25 ore di lezione e 12 ore di esercitazioni.Ore aggiuntive di tutoraggio (opzionali)

    Ricevimento Docente: Venerdi 10:30-12:30DEIS, cubo 41c,1° piano.

    4

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Programma

    Introduzione alla programmazione e all’organizzazione dei calcolatori

    Risoluzione algoritmica dei problemi. Correttezza ed altre

    proprietà degli algoritmi.

    Algoritmi e programmi. Livelli di astrazione e linguaggi.

  • 3

    5

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Programma

    Programmazione su tipi semplici

    Introduzione alla programmazione orientata agli oggetti. Codifica di algoritmi in programmi Java. Struttura di un programma: costanti, variabili, tipi, classi, oggetti, costruttori.

    Istruzioni semplici e tipi predefiniti. Compatibilità di tipo nella assegnazione.

    Operazioni di ingresso/uscita. Istruzioni per il controllo del flusso di elaborazione. Sviluppo incrementale di programmi.

    6

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Programma

    Metodi e programmazione con array

    Concetto di funzione e procedura.

    Metodi in Java.

    Esecuzione di metodi e passaggio dei parametri.

    Il costruttore di tipo array.

    Tipi array monodimensionali,

    Tipi array multidimensionali, manipolazione di array.

    Gestione di vettori e matrici.

  • 4

    7

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Programma

    Tecniche di programmazione

    Proprietà delle classi e degli oggetti.

    Semplici algoritmi di ricerca.

    Tecniche di ordinamento di vettori.

    CENNI di

    Gerarchia di classi.

    Classi per la gestione di file.

    Classi per la gestione di vettori e stringhe.

    8

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica – Materiale didattico

    Lucidi delle lezioni e programmi svolti nelle esercitazioni.

    Sito web :

    http://www.icar.cnr.it/angela/teaching/fond/IndexFond0506.html

    con i lucidi in formato PDF.

    CD-ROM

    L’ambiente JDK, esempi di programmazione, libreria di input e

    altro materiale.

  • 5

    9

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica – Testi

    Libri su JavaL.Cabibbo, Fondamenti di Informatica: Oggetti e Java, McGraw-Hill,

    2003 (consigliato ma non obbligatorio).

    M. Bertacca, A. Guidi, Introduzione a Java, McGraw-Hill.

    K. Arnold, J. Gosling, Java – Didattica e Programmazione, Addison-

    Wesley.

    J. Hubbard, Programmare in Java, McGraw-Hill Libri Italia.

    L. Lemay, R. Cadanhead, Java 2 – Guida Completa, Apogeo.

    C.S. Horstmann, Concetti di Informatica e Fondamenti di Java 2,

    Apogeo.

    C.T. Wu, Introduzione alla Programmazione a Oggetti in JAVA,

    McGraw-Hill, 2000.

    10

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica – Libri

    Consultazione e approfondimenti

    D. Sciuto, ed altri, Introduzione ai sistemi informatici, McGraw-Hill.

    S. Ceri, D. Mandrioli, L. Sbattella: Istituzioni di informatica, McGraw-

    Hill.

    S. Ceri, D. Mandrioli, L. Sbattella: Informatica: arte e mestiere,

    McGraw-Hill.

  • 6

    11

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica – Modalità di esame

    Propedeuticità : l’esame può essere sostenuto da chi ha

    superato l’esame di Introduzione all’ Informatica.

    L’esame prevede lo svolgimento di

    Una prova scritta di programmazione Java in aula con

    possibilità del voto massimo.

    Una prova orale facoltativa sugli argomenti del programma con

    la possibilità di miglioramento del voto dello scritto.

    La prova orale è obbligatoria per chi riporta un voto allo scritto

    compreso nell'intervallo chiuso (15,17) e per gli studenti del

    vecchio ordinamento.

    12

    1011010110

    01100 01100

    0101101011

    Richiami di concetti di base: Calcolatore

    Calcolatore Elettronico - Computer:

    Strumento per la rappresentazione e l'elaborazione

    dell'informazione oppure

    Esecutore di algoritmi.

    Il Calcolatore

    è uno strumento in grado di eseguire insiemi di azioni

    (“mosse”) elementari

    le azioni vengono eseguite su oggetti (dati) per produrre altri oggetti (risultati)

    l’esecuzione di azioni viene richiesta all’elaboratore attraverso

    frasi scritte in un qualche linguaggio (istruzioni).

  • 7

    13

    1011010110

    01100 01100

    0101101011

    Richiami di concetti di base: Algoritmo

    Concetto di Algoritmo

    Sequenza finita e non ambigua di passi che portano alla

    realizzazione di un compito in tempo finito.

    Proprietà fondamentali

    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.

    14

    1011010110

    01100 01100

    0101101011

    Richiami di concetti di base: Algoritmo

    Quindi un algoritmo deve:

    Essere applicabile a qualsiasi insieme di dati di ingresso

    appartenenti al dominio di definizione dell’algoritmo;

    Essere costituito da operazioni appartenenti ad un determinato

    insieme di operazioni fondamentali;

    Essere costituito da regole non ambigue, cioè interpretabili in

    modo univoco qualunque sia l’esecutore (persona o

    “macchina”) che le legge.

    Altre proprietà desiderabili:

    Correttezza, Efficienza, Leggibilità, modificabilità,

    modularità, riusabilità.

  • 8

    15

    1011010110

    01100 01100

    0101101011

    Programmi e Programmazione

    Programmazione

    È l'attività con cui definiscono le operazioni che servono a

    predisporre l'elaboratore ad eseguire un particolare insieme di

    azioni su particolari dati, allo scopo di risolvere un problema.

    Programma

    Sequenza di istruzioni di un linguaggio di programmazione

    comprensibile al calcolatore che realizzano un compito o

    risolvono un problema.

    16

    1011010110

    01100 01100

    0101101011

    Cosa è la Programmazione

    La programmazione è l’attività di progettare e realizzare una programma, cioè definire le istruzioni che indicano ad un calcolatore i passi da eseguire per risolvere un problema.

    Usare un computer non necessariamente richiede una attività di programmazione.

    Tuttavia imparare a programmare un computer è una delle attività principali in informatica ed è utile a progettare e realizzare soluzioni a problemi in numerosi settori.

  • 9

    17

    1011010110

    01100 01100

    0101101011

    Programmi e Programmazione

    METODO DI RISOLUZIONE LINGUAGGIO

    18

    1011010110

    01100 01100

    0101101011

    Programmi e Programmazione

    PROGRAMMA : È la descrizione di un algoritmo in un particolare linguaggio di programmazione.

    Quali “parole chiave” ?

    Quali dati ?

    Quali operazioni elementari ?

    Quali meccanismi di combinazione ?

    Un linguaggio di programmazione è una notazione formale

    per descrivere algoritmi che è comprensibile ad un calcolatore.

  • 10

    19

    1011010110

    01100 01100

    0101101011

    Programmi e Programmazione

    SINTASSI e SEMANTICAOgni linguaggio è caratterizzato da:

    sintassi: l’insieme di regole formali per la scrittura di programmi in quel linguaggio, che dettano le modalità per costruire frasi corrette nel linguaggio stesso.semantica: l’insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio.

    Una frase può essere sintatticamente corretta e tuttavia non aver alcun significato!Lo stesso può accadere per una istruzione.

    20

    1011010110

    01100 01100

    0101101011

    Programmi e Programmazione

    Tipi di Linguaggi di ProgrammazioneLinguaggi macchina e linguaggi assemblerogni azione è indicata in codice binario o con operazioni molto semplici e “rudimentali” : ADD X, Y oppure STORE A

    Linguaggi imperativi (PASCAL, FORTRAN, C, BASIC, …)le azioni da compiere sono indicate in una sequenza che partendo dai dati si completa calcolando i risultati : if a > 0 print (“valore positivo”)else print (“valore negativo”);

    Linguaggi dichiarativi (logici - PROLOG, funzionali - LISP)un programma è la definizione di una funzione o l’elenco delle regole logiche che portano a verificare una condizione.

  • 11

    21

    1011010110

    01100 01100

    0101101011

    Programmi e Programmazione

    Linguaggi orientati agli oggetti (C++, Java, Smalltalk, ….)

    Sono basati sul concetto di oggetto software che rappresenta un oggetto del mondo reale (un numero, un archivio, un testo, una matrice).

    I dati sono rappresentati come oggetti e 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.

    22

    1011010110

    01100 01100

    0101101011

    Programmi e Programmazione

    Per far eseguire un programma ad un calcolatore occorre tradurlo dal linguaggio usato nel linguaggio macchina.

    La traduzione avviene secondo due modalità principali:

    CompilazioneIl compilatore controlla che tutte le istruzioni del programma siano corrette e alla fine di questo controllo se non ci sono errorigenera il programma eseguibile che verrà eseguito dall’esecutore.

    InterpretazioneL’interprete controlla una per volta ogni singola istruzione delprogramma e se questa è corretta la traduce e la esegue. Al primo errore termina l’esecuzione del programma.

  • 12

    23

    1011010110

    01100 01100

    0101101011

    Compilazione ed esecuzione di programmi Java

    Java usa un approccio misto alla compilazione dei programmi

    il codice sorgente Java viene compilato in bytecode Javail programma nella forma di bytecode Java può essere eseguito da un interprete, la macchina virtuale Java (JVM)

    la JVM rende il calcolatore una macchina virtuale che sa eseguire programmi in bytecode Java

    24

    1011010110

    01100 01100

    0101101011

    Editing, compilazione ed esecuzione di programmi Java

    calcolatore dotato di macchina virtuale Java

    codice sorgente

    ... getstatic #6 ...

    bytecode Java

    interpretazione

    compilazione

    editing

    /* Applicazione che visualizza una frase sullo schermo. */ class ScrittoreSulloSchermo {

    public static void main(String[] args) { System.out.println("ciao a tutti"); System.out.println("questo testo introduce"); System.out.println("i fondamenti dell’informatica");

    } }

    ciao a tutti questo testo introduce i fondamenti dell’informatica

  • 13

    25

    1011010110

    01100 01100

    0101101011

    Write once, run everywhere

    calcolatori dotati di

    macchina virtuale Java

    ... getstatic #6 ...

    bytecode Java

    esecuzione

    PC IntelWindows

    Sun UltraSolaris

    Power MacintoshSystem 8

    ciao a tutti questo testo introduce i fondamenti dell’informatica

    ciao a tutti questo testo introduce i fondamenti dell’informatica

    ciao a tutti questo testo introduce i fondamenti dell’informatica

    26

    1011010110

    01100 01100

    0101101011

    Java 2 Software Development Kit

    JavaTM 2 Software Development Kit (Java 2 SDK) è un ambiente di sviluppo per la programmazione in Java

    http://java.sun.com/j2se/

    Java 2 SDK comprende i seguenti strumenti di programmazione

    compilatore Java — javacmacchina virtuale Java — javaAPI (Application Programming Interface) di Java applet viewer — appletviewerdebugger — jdbgeneratore di documentazione — javadoc

  • 14

    27

    1011010110

    01100 01100

    0101101011

    Che cosa fare in pratica

    Le tre attività da svolgere nello sviluppo di programmi Java

    editingeditor

    compilazione javac

    esecuzione java

    Vengono mostrate due modalitàuso di alcuni strumenti semplici (primitivi) uso di un ambiente integrato di sviluppo

    In quanto segue, si assume che il software di sviluppo necessario sia installato e configurato correttamente nel calcolatore in uso

    28

    1011010110

    01100 01100

    0101101011

    Che cosa fare in pratica — editing

    Un editor che può essere utilizzato è Blocco note di Windows

    Il codice sorgente di ciascuna classe deve essere memorizzato in un diverso file di testo

    il file di testo per una classe deve avere come nome il nome della classe seguito dall’estensione .java

    ad esempio, la classe ScrittoreSulloSchermo va memorizzata nel file ScrittoreSulloSchermo.java

  • 15

    29

    1011010110

    01100 01100

    0101101011

    Che cosa fare in pratica — compilazione

    Il codice sorgente Java deve essere compilato in bytecode Java usando il comando javac

    ad esempio, compilazione della classe ScrittoreSulloSchermo

    javac ScrittoreSulloSchermo.java

    l’esecuzione di questo comando produce il bytecode di ScrittoreSulloSchermo

    nel file ScrittoreSulloSchermo.class

    30

    1011010110

    01100 01100

    0101101011

    Che cosa fare in pratica — esecuzione

    Per eseguire una applicazione si deve usare il comando java

    ad esempio, esecuzione della classe ScrittoreSulloSchermo

    java ScrittoreSulloSchermo

  • 16

    31

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica

    PROBLEMI E ALGORITMILINGUAGGIO MACCHINA

    Prof. Angela [email protected]

    32

    1011010110

    01100 01100

    0101101011

    Problemi e algoritmi

    Il problema dell’attraversamento di un labirinto semplice

    una soluzione

    in out

    robbie

    1: avanza()2: avanza()3: avanza()

  • 17

    33

    1011010110

    01100 01100

    0101101011

    Comprensione del problema

    I problemi sono descritti dalla loro specificaProblema

    attraversamento di un labirinto semplice

    Insieme di ingressoil robot robbie

    Pre-condizioneil robot robbie si trova all’ingresso di un labirinto semplice, nella direzione di ingresso

    Insieme di uscitavuoto

    Post-condizioneil robot robbie si trova all’uscita del labirinto semplice

    in out

    34

    1011010110

    01100 01100

    0101101011

    Specifica di un problema

    La specifica di un problemainsieme di ingresso o parametri

    i parametri del problema dati di ingresso e oggetti di ingresso

    pre-condizionecondizione relativa all’insieme di ingresso

    insieme di uscita o risultatidati di uscita e oggetti di uscita

    post-condizionecondizione relativa all’insieme di uscita

  • 18

    35

    1011010110

    01100 01100

    0101101011

    Identificazione di un algoritmo per il problema

    Un algoritmo per un problema una sequenza di istruzioni che permette di far evolvere gli oggetti di interesse da uno stato iniziale che soddisfa la pre-condizione a uno stato finale che soddisfa la post-condizione

    sulla base di ulteriori dati di ingresso calcolando eventuali dati in uscita

    espressa in termini delle istruzioni di un esecutore automatico

    36

    1011010110

    01100 01100

    0101101011

    ESEMPIO: Equazione di secondo grado

    Problema: Calcolare le radici dell’equazioneax2+bx+c = 0

    Specifica del problemaDati di ingresso: tre numeri reali a, b, c.Pre-condizione: nessunaDati di uscita: le radici x1 e x2, se esistono.Post-condizione:

    ax12+bx1+c = 0 e ax22+bx2+c = 0

  • 19

    37

    1011010110

    01100 01100

    0101101011

    ESEMPIO: Equazione di secondo grado

    Specifica dell’algoritmo:

    delta ← b2 – 4acse (delta >≥ 0)

    sqrtdelta ← radice quadrata (delta)x1 ← (-b +sqrtdelta) /2ax2 ←(-b –sqrtdelta) / 2a

    altrimentinon esistono radici realidelta

    38

    1011010110

    01100 01100

    0101101011

    ESEMPIO: Prodotto di N numeri

    Problema: Calcolare il prodotto di N numeri.

    Specifica del problema:

    Dati di ingresso: N numeri {x1, x2, ..., xn}

    Pre-condizione: nessuna

    Dati di uscita: un numero P

    Post-condizione: P = Πi=1,n xi

  • 20

    39

    1011010110

    01100 01100

    0101101011

    ESEMPIO: Prodotto di N numeri

    Specifica dell’algoritmo:

    P ← 1i ← 1Finchè (1

  • 21

    41

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Linguaggio Macchina

    Le istruzioni elementari eseguite dalla CPU di un computer si chiamano istruzioni macchina.

    L’insieme delle istruzioni macchina (instruction set ) costituiscono il linguaggio macchina.

    Un linguaggio macchinaconsente la programmazione della Macchina di von Neumann,è direttamente eseguibile da un calcolatore senza nessuna traduzione,naturalmente cambia da macchina a macchina (ad es., quello del Pentium è diverso da quello dello AMD).

    42

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Linguaggio Macchina

    Le istruzioni sono codificate in formato binarioe sono composte da

    CODICE OPERATIVO : indica l’istruzione da eseguireOPERANDI : indicano gli operandi (indirizzi o valore)

    Per semplicità ipotizziamo di avere istruzioni con solo operando.

    Lunghezza delle istruzioni : I = m + n

    m: num bit del codice operativo, n: num bit dell’operando.

    m n

    I

    C o d ic e -o p O p e r a n d o

  • 22

    43

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica - Linguaggio Macchina

    Set di istruzioniinsieme delle operazioni del linguaggio macchina (

  • 23

    45

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica – Linguaggio Assembler

    Linguaggi Assemblatori (ASSEMBLER)Linguaggi le cui istruzioni corrispondono univocamente a quelle del linguaggio macchina, ma sono espresse tramite nomi simbolici (parole chiave) invece che in binario.

    Ad esempio :READ X ; MULT X, Y; LOAD Z;

    AssemblatoreStrumento automatico (programma) che traduce le istruzioni da formato simbolico al formato binario.

    0100 1001 READ X.

    46

    1011010110

    01100 01100

    0101101011

    Fondamenti di Informatica – Linguaggio Assembler

    In un linguaggio Assembler Le istruzioni vengono specificate con nomi simbolici (parole chiave).

    I riferimenti alle celle di memoria (dati) sono fatti mediante nomi simbolici (identificatori).

    I modi di indirizzamento vengono indicati tramite simboli.

    Il programma prima di essere eseguito deve essere tradottoin linguaggio macchina dall’ Assemblatore.

    1010 1000

    1010 0101

    1110 0111

    READ X

    READ Y

    SUB X, Y

  • 24

    47

    1011010110

    01100 01100

    0101101011

    Prodotto di due numeri – Linguaggio Macchina

    EsempioProgramma assembler che calcola il prodotto di due numeri con il corrispondente programma in linguaggio macchina

    ASSEMBLER LINGUAGGIO MACCHINAREAD X 0 0100 1000

    READ Y 1 0100 1001

    LOADA X 2 0000 1000

    LOADB Y 3 0000 1001

    MUL 4 1000

    STOREA X 5 0010 1000

    WRITE X 6 0101 1000

    HALT 7 1101 0000

    X INT 8 0000 0000

    Y INT 9 0000 0000

    48

    1011010110

    01100 01100

    0101101011

    VERSO LINGUAGGI DI ALTO LIVELLO

    Linguaggio MacchinaConoscenza precisa dei metodi di rappresentazione e manipolazione delle informazioni utilizzate.

    Linguaggio Macchina ed AssemblerNecessità di conoscere dettagliatamente le caratteristiche della macchina (registri, dimensioni dati, set di istruzioni).Semplici algoritmi richiedono l'uso di molte istruzioni.

    Linguaggi di Alto LivelloIl programmatore può astrarre dai dettagli legati all’architettura e può esprimere i propri algoritmi in modo simbolico. I linguaggi di alto livello sono indipendenti dalla macchina fisica (astrazione).

  • 25

    49

    1011010110

    01100 01100

    0101101011

    VERSO LINGUAGGI DI ALTO LIVELLO

    COME ESEGUIRE UN PROGRAMMA SCRITTO IN UN LINGUAGGIO DI ALTO LIVELLO ?

    Occorre tradurlo nel linguaggio macchina dello specifico processore che si sta usando.

    Due possibili modi:Compilazione (es. C, FORTRAN, Pascal, C++, COBOL, ...)Interpretazione (es. Basic, Perl, JavaScript, …)

    50

    1011010110

    01100 01100

    0101101011

    COMPILATORI

    I compilatori traducono un intero programma dal linguaggio L1 al linguaggio macchina L0 della macchina prescelta:

    traduzione e esecuzione procedono separatamente,al termine della compilazione è disponibile la versione tradotta del programma,la versione tradotta è però specifica di quella macchina; per eseguire il programma basta avere disponibile la versione tradotta (non serve il programma originale!).

    L1 L0

  • 26

    51

    1011010110

    01100 01100

    0101101011

    INTERPRETI

    Gli interpreti invece traducono e immediatamenteeseguono il programma istruzione per istruzione

    traduzione ed esecuzione procedono insieme,

    al termine non vi è alcuna versione tradotta del

    programma originale,

    se si vuole ri-eseguire il programma occorre anche ri-

    tradurlo.

    52

    1011010110

    01100 01100

    0101101011

    FASI DI SVILUPPO DI UN PROGRAMMA

    Qualunque sia il linguaggio di programmazione scelto occorre:

    1. Scrivere il testo del programma e memorizzarlo su supporti di memoria permanenti (editing);

    2. Se il linguaggio è compilato:Tradurre il linguaggio in linguaggio macchina (compilazione);Eseguire il programma tradotto.

    3. Se il linguaggio è interpretato:Usare l’interprete per eseguire il programma.

  • 27

    53

    1011010110

    01100 01100

    0101101011

    Prodotto di due numeri – Linguaggio Java

    Programma Java che calcola il prodotto di due numeri:

    class prodotto {public static void main(String args[]){

    int x=3;int y=5;int p;p = x * y;System.out.println("Prodotto = " + p);

    }}

    54

    1011010110

    01100 01100

    0101101011

    Specifica di un algoritmo

    Primo approccio, scrittura diretta del programma: la soluzione coincide con la codifica

    Causa errori difficilmente individuabiliNon garantisce che non esistano soluzioni chiaramentemigliori,

    Non funziona con programmi grandiRende difficile cambiare linguaggio di programmazione

    Perciò, è conveniente concentrarsi sulla specificadel problema e dell’algoritmo (cosiddettoPSEUDOCODICE); la codifica dovrebbe essere solo un passo implementativo.