Introduzione alla programmazione



Documenti analoghi
Il linguaggio di programmazione Python

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Il Software programmabili programma algoritmo

Linguaggi di Programmazione

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

I Linguaggi di Programmazione

Elementi di programmazione

FONDAMENTI DI INFORMATICA

Linguaggi di Programmazione

Introduzione alla programmazione. Walter Didimo

Linguaggi, Traduttori e le Basi della Programmazione

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

FONDAMENTI DI INFORMATICA

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

Programmazione C Massimo Callisto De Donato

Linguaggi e Ambienti di Programmazione

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Unità Didattica 2 I Linguaggi di Programmazione

Linguaggi di programmazione

Lezione 6 Introduzione al C++ Mauro Piccolo

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Le basi del linguaggio Java

Informatica Generale Andrea Corradini I linguaggi di programmazione

Linguaggi di alto livello, compilatori e interpreti

Introduzione alla Programmazione. Giselda De Vita

Linguaggi di Programmazione

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Introduzione a Java. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Modulo 1. Concetti base della Tecnologia dell informazione. Prof. Nicolello Cristiano. Modulo 1

Introduzione alla programmazione

Cosa è un programma. Informatica di Base -- R.Gaeta 18

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Algoritmi e Linguaggi

Primi passi col linguaggio C

Transcript:

Introduzione alla programmazione Informatica Generale 14/15 Scienze della comunicazione cristina gena cgena@di.unito.it http://www.di.unito.it/~cgena/ teaching.html

I calcolatori hanno la caratteristica di essere programmabili: sono in grado di svolgere compiti diversi a seconda delle istruzioni fornite dall utente mediante un programma Tuttavia una programmazione diretta della macchina hardware creerebbe serie difficoltà! 2

Grazie alla definizione di macchine virtuali (software) sopra la macchina hardware l utente riesce ad interagire con la macchina fisica usando un opportuno linguaggio di comandi Il software moderno è organizzato secondo una gerarchia di macchine virtuali Il primo strato di macchina virtuale è rappresentato dall insieme di programmi che costituiscono il sistema operativo 3

Gerarchia di macchine virtuali: Macchina virtuale n Macchina virtuale 1 Macchina hardware Per ogni funzione definita al livello i, viene definita la traduzione nel linguaggio del livello sottostante i-1 Le macchine virtuali non consentono di fare nulla di più di quanto possa essere fatto con la macchina fisica Funzioni sempre più astratte 4

Concetto di gerarchia di macchine virtuali possibilità di definire nuove funzioni astratte, che verranno tradotte per i livelli sottostanti Programmare = definire un nuovo insieme di comandi virtuali che consistono in una sequenza di istruzioni che devono essere eseguite Per scrivere un programma ho bisogno di un linguaggio di programmazione "ad alto livello" cioè che mi permette di definire funzioni (comandi) virtuali in cima alla gerarchia 5

Per eseguire un programma (scritto in un linguaggio di programmazione ad alto livello) devo tradurlo nel linguaggio della macchina virtuale sottostante fino ad arrivare alla traduzione nel linguaggio macchina Per eseguire un programma ho quindi bisogno di: Sistema Operativo (insieme di programmi per la gestione ( dell elaboratore Interpreti e compilatori (programmi che traducono le funzioni dei linguaggi ad alto livello in funzioni appartenenti ai linguaggi sottostanti fino al linguaggio ( macchina 6

Programma scritto dal programmatore = insieme di istruzioni scritte in un linguaggio di programmazione ad alto livello = codice sorgente (generalmente contenuto in un file con un'estensione che indica il ( pippo.c linguaggio usato, per es: pippo.java, o 7

Linguaggio: alfabeto: insieme di simboli con cui si possono costruire i termini ( lessico ) del linguaggio sintassi: definita da una grammatica che fornisce le regole di composizione dei termini in frasi ben formate del linguaggio semantica: definisce il significato delle frasi ben formate del linguaggio Analizzatore sintattico (parser): analizza frasi e decide se sono frasi ben formate del linguaggio o no 8

Sintassi articoli (indicati con ART) nomi (indicati con N) aggettivi (indicati con A) verbi (indicati con V) sintagma nominale (indicato con SN) sintagma verbale (indicato con SV) frase (indicata con F) 9

Codice frase (indicata con F) à SN SV sintagma verbale (indicato con SV) à V SN sintagma nominale (indicato con SN) à ART N 10

Sintassi il cane mangia una mela il cane mangia il cane mentre saranno scorrette frasi del tipo il cane il mela mangia il cane la mela 11

Semantica corretto la ragazza mangia un pollo à scorretto un pollo mangia la ragazza à 12

Linguaggio di programmazione: frasi ben formate = codice del programma semantica = esecuzione del programma Occorre tradurre il programma (scritto in un linguaggio ad alto livello) in istruzioni in linguaggio macchina Durante questa traduzione viene anche effettuato il controllo sintattico! Due tecniche per effettuare questa traduzione: compilazione interpretazione 13

Compilare un programma: tradurre il programma P nel linguaggio macchina della macchina M Pc eseguire Pc sulla macchina M La traduzione viene eseguita da un compilatore. > compila file_sorgente.src file_eseguibile.exe > esegui file_eseguibile.exe Pro: La compilazione è più efficiente, perché l esecuzione del programma compilato, cioè tradotto in linguaggio macchina (il cosiddetto eseguibile ) è molto veloce Contro: Per eseguire il programma su macchine diverse occorre ri-compilare i sorgenti! 14

Interpretare un programma: richiedere l esecuzione del programma P sulla macchina M ogni istruzione di P viene tradotta (interpretata) in un insieme di istruzioni nel linguaggio macchina di M Pi l insieme di istruzioni Pi viene eseguito sulla macchina M La traduzione viene eseguita da un interprete. > interpreta&esegui file_sorgente.src Pro: L interpretazione è più flessibile, perché posso eseguire il programma su macchine diverse Contro: ( ritraduce E meno efficiente (perché ogni volta, prima di eseguire, 15

Approccio misto (per es. Java): tradurre il programma in un linguaggio intermedio (bytecode), indipendente dalla macchina Pb eseguire Pb Il primo passo viene eseguito da un compilatore Il secondo da un interprete > compile file_sorgente.src file_intermedio.obj > interpreta&esegui file_intermedio.obj Somma i vantaggi dei due approcci: è efficiente (perché il linguaggio intermedio è molto vicino al linguaggio macchina e la sua interpretazione - ed esecuzione - è ( veloce è flessibile (perché posso eseguire il programma compilato su ( diverse macchine 16

Linguaggi ad alto livello Linguaggi imperativi Basati sul concetto di assegnamento: le istruzioni sono sostanzialmente operazioni di modifica delle strutture dati [es: Fortran, Cobol (non strutturati); Pascal, C (strutturati)] Linguaggi funzionali Basati sul concetto di funzione: le istruzioni sono funzioni che vengono valutate [es: Lisp] Linguaggi logici Basati sul concetto di dimostrazione: le istruzioni esprimono relazioni logiche tra input e output [es: Prolog] Linguaggi ad oggetti Basati sul concetto di dato come oggetto attivo, in grado di ricevere e inviare messaggi [es: Smalltalk, C++, CLOS, Java] Linguaggi di scripting Linguaggi di programmazione interpretati che sono destinati in genere a compiti di automazione del sistema o delle applicazioni (macro), o ad essere usato all'interno delle pagine web. [es: Javascript, Php, Asp, Jsp, Python] 17

Scopo di un programma è quello di risolvere un problema (un insieme di ( problemi bisogna analizzare il problema ed identificare una procedura di soluzione, ovvero un algoritmo Un algoritmo è insieme ordinato di passi che descrivono i dati che devono essere utilizzati e determinano la sequenza di azioni elementari che devono essere svolte per risolvere un problema (un insieme di problemi) bisogna poi tradurre l algoritmo in un insieme di istruzioni per eseguire quelle azioni sui dati = programma Se il problema è complesso (es: gestione automatizzata di conti correnti ( programmi bancari) occorre un sistema software (= insieme di 18

Nello sviluppo del software, la fase di analisi e progettazione è importantissima Si parte dall analisi del problema e dalla progettazione dell architettura del sistema Si passa poi alla realizzazione delle diverse componenti dell architettura 19

Metodo classico di software design = top-down functional (structured) ( algoritmica ) design = scomposizione gerarchica funzionale paradigma procedurale: algoritmo = procedura ossia sequenza di passi per raggiungere il risultato Per es. gestire un cc = scomposizione in passi via via più semplici, elementari = procedura per la gestione del conto Inserire dati ver. PIN Gestire il cc Versare soldi ins. PIN prelevare Eseguire operazioni PROGRAMMI = ALGORITMI + STRUTTURE-DATI 20

Object-oriented design Ogni cosa è un oggetto Un programma è un insieme di oggetti che si dicono l un l altro che cosa fare inviandosi messaggi Ogni oggetto ha un tipo un oggetto è un istanza di una classe Tutti gli oggetti di un determinato tipo possono ricevere e inviare gli stessi messaggi 21

object-oriented design = si parte dagli oggetti, non dalle funzionalità PROGRAMMI = OGGETTI (DATI + ALGORITMI) + ( INTERFACCE ) COLLABORAZIONE Per es. gestire i conti correnti di una banca = entità coinvolte nell'attività e loro relazioni Riceve PIN Riceve. EstrattoConto cliente verifica PIN autorizz. versasoldi. PIN conto 22

Astrazioni sui dati Dati di base di un calcolatore: Bit Byte Cella di memoria 23

Tipi di dati Necessità di astrarre dal concetto elementare di bit/byte e definire dei tipi di informazione più vicini a quelli che servono della definizione di problemi reali 24

Tipi di dati: Due passi Definizione di tipi elementari di base Definizione di costruttori per aggregare in tipi di dati più complessi 25

Tipi elementari di base Ci possono essere differenze da linguaggio a linguaggio Numerici Int Short Long Real Double 26

Tipi elementari di base Stringhe ( 16 Char (ASCII su 8 bit, e UNICODE su String: qualche linguaggio lo ha come tipo di base 27

Tipi elementari di base Boolean TRUE e FALSE Per le enumerazioni Elenchi di costanti specificate Es. colori: red, blue, white, black,.. 28

Per ogni tipo elementare sono definiti degli operatori Numerici + * - / sqrt Caratteri Succ, prec Stringhe Concact, add, Substring Boolean And, not, or 29

Variabili, espressioni, assegnamento Assegnamento Modo per inserire un valore dentro una variabile int x x = 3 x = 3 + 5 int y = x + 7 x = c errore di tipo di dati 30

Variabili, espressioni, assegnamento Assegnamento variabile = espressione ( side Lato sinistro (left hand Deve essere una variabile ( side Lato destro (right hand Espressione che viene valutata 31

La memoria principale E formata da un insieme di celle Ogni cella ha un indirizzo e un contenuto 3278 a 3279 b 32

Nome simbolico per la cella di memoria: variabile x = a x y a b A x è associato l indirizzo 3278 33

Espressioni, assegnamento Espressione Può essere costruita usando costanti e variabili e usando gli operatori specificati per il tipo di dati costanti e variabili int x x = 2+4 x = y + z 34

Tipi di dati: Due passi Definizione di tipi elementari di base Definizione di costruttori per aggregare in tipi di dati più complessi 35

Costruttori per creare tipi complessi Approccio composizionale per aggregare tipi di dati in nuovi tipi di dati più complessi Il numero e le caratteristiche dei costruttori di tipi complessi può variare da linguaggio a linguaggio, ma i meccanismi fondamentali sono Array Record Set File Puntatori 36

Array: struttura dati (vettore) composta da dati omogenei, aventi lo stesso tipo Array di interi 23 9 5 45 78 0 99 3 52 9 37

Array: struttura dati composta da dati omogenei, aventi lo stesso tipo listadinumeri[0] listadinumeri[1] listadinumeri[2] listadinumeri[3] listadinumeri[4] listadinumeri[5] listadinumeri[6] listadinumeri[7] listadinumeri[8] listadinumeri[9] 23 9 5 45 78 0 99 3 52 9 Il selettore [] permette di accedere alle componenti del vettore attraverso la loro posizione listadinumeri[0] = 23; listadinumeri[1] = 4 + 5; x = 0; listadinumeri[x] = 23; x = x+1; listadinumeri[x] = 4 + 5; 38

Array Si possono definire vettori di qualunque tipo di dati Le dimensioni del vettore possono essere soggette a restrizioni in alcuni linguaggi Devono essere prefissate in alcuni, non in altri Gli indici del vettore possono essere fissi (solo numeri interi) in alcuni linguaggi, o possono essere un qualunque tipo elementare 39

Record Prodotto cartesiano di tipi differenti. Le sue istanze sono gli elementi del prodotto cartesiano Record conto {contatore numero, int denaro, char[] nome} Le istanze di questo record sono delle triple, come ad esempio (1, 2500, ( rossi 40

41

Record Posso definire delle variabili per ottenere delle istanze Es. Conto c c.numero = 1 c.denaro = 2500 c.nome = rossi 42

Ogni riga di una tabella di un database è un record 43

<?xml version="1.0" encoding="iso-8859-1"?> <rubrica> <contatto> <nome>mario</nome> <cognome>rossi</cognome> <telefono>011-555-5678</telefono> <email>mario.rossi@libero.it</email> </contatto> </rubrica> In questo esempio in XML, ogni contatto è un record! 44

Puntatore Meccanismo per utilizzare gli indirizzi dei dati. Astrazione del concetto di indirizzo di memoria: si può definire l indirizzo per un qualunque tipo di dati 45

46

47