Capitolo 4 I linguaggi per la formalizzazione dell’informazione Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl I linguaggi per la formalizzazione dei processi di elaborazione Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Alcuni concetti Algoritmo = descrizione di come si risolve un problema Programma = algoritmo scritto in modo che possa essere eseguito da un calcolatore (linguaggio di programmazione) Linguaggio macchina = linguaggio effettivamente “compreso” da un calcolatore, caratterizzato da • istruzioni primitive semplici (e.g. max 2 operandi) • attenzione all’efficienza (costi, complessità, velocità) • difficile e noioso da utilizzare per un programmatore Due aspetti rilevanti: • produrre algoritmi (cioè capire la sequenza di passi che portano alla soluzione di un problema) • codificarli in programmi (cioè renderli comprensibili al calcolatore) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Linguaggio di Programmazione La notazione con cui è possibile descrivere gli algoritmi. Programma: è la rappresentazione di un algoritmo in un particolare linguaggio di programmazione. Ogni linguaggio di programmazione dispone di un insieme di “parole chiave” (keywords) Ogni linguaggio è caratterizzato da una sintassi e da una semantica Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Sintassi e semantica Ogni linguaggio di programmazione è caratterizzato da due componenti, complementari l’una con l’altra: • la sua sintassi, sintassi cioè l’insieme delle regole che specificano come comporre istruzioni ben formate; • la sua semantica, semantica che di ogni istruzione ben formata specifica il significato, e quindi la successione delle operazioni che vengono compiute allorché l’istruzione viene eseguita. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Classificazione In base all’astrazione: • Linguaggi di basso livello (vicini all’hardware): • I generazione: linguaggi macchina (sequenze di bit) • II generazione: linguaggi assemblativi (uso di codici mnemonici per le istruzioni) • Linguaggi di alto livello (vicini all’utente): • III generazione: linguaggi imperativi e procedurali di uso generale • IV generazione: linguaggi per specifici ambiti applicativi • V generazione: linguaggi di descrizione dei problemi orientati alla risoluzione automatica Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Il linguaggio macchina Il linguaggio macchina è direttamente eseguibile dall’elaboratore, senza nessuna traduzione. • Istruzioni ed operandi relativi al programma in esecuzione sono caricati in memoria e quindi sono memorizzati in forma binaria. • Vincolo: conoscenza dei metodi di rappresentazione delle informazioni utilizzati. Istruzione: Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari carica nell’accumulatore 10010000 11001100 Copyright © 2008 – The McGraw-Hill Companies srl Il linguaggio Assembler Le istruzioni corrispondono univocamente a quelle macchina, ma vengono espresse tramite nomi simbolici (parole chiave). Il programma prima di essere eseguito deve essere tradotto in linguaggio macchina (assemblatore). Vincolo: necessità di conoscere in dettaglio le caratteristiche della macchina (registri, dimensione dei dati, set di istruzioni) Anche semplici algoritmi implicano la specifica di molte istruzioni Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl I linguaggi di alto livello Sono i linguaggi di terza generazione. Le istruzioni esprimono una serie di azioni. Il programma prima di essere eseguito deve essere tradotto in linguaggio macchina (traduttore) Il programmatore può astrarre dai dettagli legati all’architettura ed esprimere i propri algoritmi in modo simbolico Sono indipendenti dalla macchina (astrazione) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Linguaggi di II/III generazione Programma in linguaggio macchina (Codice oggetto) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Programma in linguaggio procedurale (Codice sorgente) Traduttore Assemblatore Programma in linguaggio assemblatore (Codice sorgente) Programma in linguaggio macchina (Codice oggetto) Copyright © 2008 – The McGraw-Hill Companies srl Sviluppo di un Programma I traduttori sono programmi particolari che provvedono a convertire il codice di programmi scritti in un dato linguaggio di programmazione (sorgenti), nella corrispondente rappresentazione in linguaggio macchina (eseguibili) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl CPU come interprete del suo linguaggio macchina Unità Unità Centrale Centrale di di Elaborazione Elaborazione (CPU): (CPU): interprete interprete ed ed esecutore esecutore del del linguaggio linguaggio macchina macchina LL Programma P in linguaggio Dati del programma P macchina L Memoria Bus di sistema Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Due tipi di traduttori Compilatori • Accettano in ingresso l’intero programma e producono in uscita la rappresentazione dell'intero programma in linguaggio macchina. Interpreti • Traducono ed eseguono direttamente ciascuna istruzione del programma sorgente, istruzione per istruzione. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Dati del compilatore Compilatore Programma compilatore del linguaggio ad alto livello L Unità Unità Centrale Centrale di di Elaborazione Elaborazione Programma P in un linguaggio ad alto livello L Programma P’ in linguag-gio macchina della CPU Fase 1 Memoria Bus di sistema Unità Unità Centrale Centrale di di Elaborazione Elaborazione Programma P’ in linguaggio macchina della CPU Dati del programma P’ Fase 2 Memoria Bus di sistema Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Interprete Dati dell’interprete Programma interprete del linguaggio ad alto livello L Unità Unità Centrale Centrale di di Elaborazione Elaborazione Programma P in un linguaggio ad alto livello L Dati del programma P Memoria Bus di sistema Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Due tipi di traduttori /2 Compilatori • Per ogni programma da tradurre, lo schema viene percorso una volta sola prima dell’esecuzione. Interpreti • Lo schema viene attraversato tante volte quante sono le istruzioni che compongono il programma; ad ogni attivazione dell'interprete su una particolare istruzione, segue l’esecuzione dell’istruzione stessa. L’esecuzione di un programma compilato è più veloce dell’esecuzione di un programma interpretato. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Interprete vs compilatore Quale delle due soluzioni è la migliore? Compilazione • applicazioni più veloci • maggior lavoro nel processo di messa a punto e manutenzione • OK per i prodotti commerciali a larga diffusione. Interpretazione • consente tempi di sviluppo più contenuti, • produce programmi meno efficienti; • OK in fase di proto-tipazione dei programmi che, una volta ultimati, venivano compilati prima del rilascio commerciale. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Paradigmi di programmazione E’ possibile affrontare il problema della descrizione dei programmi in modi differenti Soluzioni differenti costituiscono paradigmi di programmazione differenti: • Imperativo-procedurale • A oggetti (OO) • Funzionale • Dichiarativo In forma testuale o grafica Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Paradigma imperativo/procedurale Idea generale: descrivere al calcolatore i passi di risoluzione del problema Codifica un algoritmo in un linguaggio formale interpretabile dalla macchina • Passi elementari: indipendenti dal singolo calcolatore (astrazione) • Il linguaggio deve definire istruzioni e strutture dati • Passo di traduzione verso il linguaggio macchina Molto diffuso • Esempi: Fortran, Basic, Pascal, C… Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Prodotto di due numeri naturali Dati a, b interi positivi w, z interi Risoluzione leggi a e b z ← 0 w ← a finché w > 0 ripeti z ← z + b w ← w – 1 fine ciclo scrivi z fine Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Inizio Dichiarazione: a, b, w, z contengono numeri interi Leggi a e b w ← a; z ← 0; Sì w>0? z←z+b w←w–1 No Scrivi z=a×b Fine Copyright © 2008 – The McGraw-Hill Companies srl Prodotto di due numeri naturali Algoritmo Programma in C Dati a, b interi positivi w, z interi Risoluzione leggi a e b z←0 w←a finché w > 0 ripeti z←z+b w←w–1 fine ciclo scrivi z fine main() { /* prodotto C */ unsigned int a, b; int w, z; Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari scanf("%d %d",&a,&b); z = 0; w = a; while (w > 0) { z = z + b; w = w – 1; } printf("%d", z); Programma in BASIC 'prodotto, Basic dim a as integer, b as integer dim w as integer, z as integer input a, b z=0 w=a while w > 0 z=z+b w=w–1 wend print z } Copyright © 2008 – The McGraw-Hill Companies srl Parti fondamentali di un programma Identificazione del programma Dichiarazione delle variabili utilizzate, di cui sono indicati tipo e nome Specificazione della parte esecutiva del programma, detta anche corpo del programma Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Le istruzioni Istruzioni di ingresso/uscita (leggi, print,…) Istruzioni aritmetico–logiche (+,*, and, or, not…) Istruzioni di controllo (if…then…else, while…do…) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Selezione semplice Frammento C … Sì blocco istruzioni condizione condizio ne No … Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari main() /* C */ {… /* selezione semplice */ if (condizione) { /* blocco istruzioni eseguito solo se condizione è true */ … } … } Frammento BASIC ' Basic … if condizione then ' blocco istruzioni ' eseguito solo se ' condizione è true … end if … Copyright © 2008 – The McGraw-Hill Companies srl Selezione a due vie … Sì No condizione condizio ne blocco 1 blocco 2 … Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Frammento C main() /* C */ { … /* selezione a due vie */ if (condizione) { … … /* blocco 1 */ } else { … … /* blocco 2 */ } … } Frammento BASIC ' Basic … ' selezione a due vie if condizione then … … ‘ blocco 1 else … … ‘ blocco 2 end if … Copyright © 2008 – The McGraw-Hill Companies srl Selezione a più vie Frammento C …… Sì cond_1 blocco 1 No cond_2 blocco 2 …… blocco …… cond_n blocco n …… Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari blocco n+1 main() /* C */ { … /* sel a più vie */ if (cond_1) { … /* blocco_1 */ } else if (cond_2) { … /* blocco_2 */ } else if (… …) { … /* blocco_... */ } else if (cond_n) { … /* blocco_n */ } else { … /* blocco_n+1*/ } … } Frammento BASIC ' Basic … ' sel a più vie if cond_1 then … ' blocco_1 elseif cond_2 then … ' blocco_2 elseif … … then … ' blocco_... elseif cond_n then … ' blocco_n else … ' blocco_n+1 end if … Copyright © 2008 – The McGraw-Hill Companies srl Ciclo a condizione iniziale … Sì blocco istruzioni condizione condizio ne No … Frammento C Frammento BASIC main() /* C */ { … … /* ciclo a condizione iniziale */ while (condizione) { … … /* blocco istruzioni */ /* ripetuto finché condizione è true */ } … /* eseguito quando condizione è false */ } ' Basic … … ' ciclo a condizione iniziale while condizione … … ' blocco istruzioni ' ripetuto finché condizione è true wend … … ' eseguito quando condizione è false Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Ciclo a condizione finale Frammento C … blocco istruzioni Sì cond No … main() /* C */ { … /* ciclo a condizione finale */ do { … … /* blocco istruzioni */ /* eseguito una volta e ripetuto se cond è true */ } while (cond) … … /* eseguito se cond è false */ } Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Frammento BASIC ' Basic … ' ciclo a condizione finale do … … ' blocco istruzioni ' eseguito una volta e ' ripetuto se cond è true loop while cond … … ' eseguito se cond è false Copyright © 2008 – The McGraw-Hill Companies srl I dati Ogni variabile è caratterizzata dal suo tipo. • Tipi predefiniti: numeri, caratteri, booleani, … • Altri tipi: stringhe, date, … Variabili strutturate: • Vettori (o array) • Record Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Variabili strutturate Consentono di riferirsi a più valori reciprocamente correlati come se si trattasse di un’unica variabile aggregata: • Vettori (array) • Matrici (o array multidimensionali), • Record (con campi o attributi) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Uso degli array somma degli elementi di un vettore Algoritmo Dati n = 100 intero f[ ] vettore di interi w, z interi positivi Risoluzione ... w←1 z←0 finché (w ≤ n) ripeti z ← z + f[w] w←w+1 fine ciclo scrivi z Introduzione ... ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Programma in C Programma in BASIC main() { /* prodotto C */ int f[100]; int w, z; … w = 0; z = 0; while (w ≤ 99) { z = z + f[w]; w = w + 1; } printf("%d", z); … } dim f(100) as integer dim w as integer dim z as integer … w=1 z=0 while w <= 100 z = z + f(w) w=w+1 wend print z … Copyright © 2008 – The McGraw-Hill Companies srl Un esempio di matrice Esempio: il fatturato mensile di ogni prodotto di una azienda Dati relativi al j-esimo mese Dati relativi al prodotto i-esimo f[1,1] f[1,2] …… f[1,j] …… f[1,12] f[2,1] f[2,2] …… f[2,j] …… f[2,12] …… …… …… …… …… …… f[i,1] f[i,2] …… f[i,j] …… f[i,12] …… …… …… …… …… …… f[n,1] f[n,2] …… f[n,j] …… f[n,12] Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Uso dei record Esempio: definiamo il record PRODOTTO con 2 campi, nome e fatturato Frammento C struct prodotto { /* C */ char nome[DIMNOME]; int fatturato; }; main() main() /* operazioni su prodotti */ { struct prodotto p; …… p.fatturato = … …; /* assegna un valore al fatturato del prodotto p */ } Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Frammento BASIC type prodotto ' Basic nome as string * DIMNOME fatturato as integer end type ' operazioni su prodotti dim p as prodotto …… p.fatturato = … … ' assegna un valore al ' fatturato del prodotto p Copyright © 2008 – The McGraw-Hill Companies srl Array o vettore di record Frammento C Frammento BASIC struct prodotto { /* C */ char nome[DIMNOME]; int fatturato; }; main() /* operazioni su prodotti */ { struct prodotto p[100] ; …… p[5].fatturato = … … ; /* assegna un valore al fatturato del prodotto di indice 5 */ } type prodotto ' Basic nome as string * DIMNOME fatturato as integer end type ' operazioni su prodotti dim p(100) as prodotto …… p(5).fatturato = … … ' assegna un valore al fatturato ' del prodotto di indice 5 Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari PRODOTTI Nome Fatturato 0 1 2 3 4 5 6 7 … 98 99 HT5231 HT5441 NS221 NS321 NS222 NS322 HT5321 HT5442 ……… RX521 RX522 129 000 105 000 144 000 123 000 133 000 136 000 139 000 136 000 ……… 183 000 175 000 Copyright © 2008 – The McGraw-Hill Companies srl Uso dei sottoprogrammi (main) Algoritmo Dati w intero (numero riga) z razionale fine booleano Risoluzione fine ← false finché (non fine) ripeti leggi w se (w > 0) z ← media(w) scrivi z altrimenti fine ← true fine condizione fine ciclo fine Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Programma C main() /* C */ { int w; float z; bool fine; fine = 0; while (!fine) { scanf("%d",&w); if (w > –1) { z = media(w); printf("%d", z); } else { fine = 1; } } Programma BASIC ' Basic dim w as integer dim z as single dim fine as bool fine = 0 while not fine input w if w > 0 then z = media(w) print z else fine = -1 end if wend } Copyright © 2008 – The McGraw-Hill Companies srl Uso dei sottoprogrammi (sub) Esempio: calcolare il fatturato medio mensile di ogni prodotto Programma in C Algoritmo funzione media(w) Dati i, j interi z razionale p[ ] matrice di interi Risoluzione i←1e j←0 finché (i < 13) ripeti j ← j + (p[w, i]) i←i+1 fine ciclo z = j / 12 restituisci z Introduzione ai sistemi informatici 4/ed fine funzione Donatella Sciuto, Giacomo Buonanno, Luca Mari float media(int w) { int i,j; float z; int p[100][12]; i = 0; j = 0; while (i < 12) { j = j + p[w][i]; i = i + 1; } z = j / 12; return (z); } Programma in BASIC function media (w as integer) dim i as integer dim j as integer dim z as single dim p(100, 12) as integer i = 1: j = 0 while i <= 12 j = j + p(w, i) i=i+1 wend z = j / 12 media = z end function Copyright © 2008 – The McGraw-Hill Companies srl Senza sottoprogrammi Inizio Esempio: z=x2+y2 Leggi x e y w←x z←0 Sì w>0? z ← z+x w ← w-1 No x2 ← z w←y z←0 Sì w>0? z ← z+y w ← w-1 No y2 ← z q ← x2+y2 Scrivi x2+y2=q Fine Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari main() main /* q = x2 + y2 */ { int x,y,x2,y2,q,w,z; scanf("%d %d",&x,&y); w = x; z = 0; while (w > 0) { z = z + x; w = w – 1; } x2 = z; w = y; z = 0; while (w > 0) { z = z + y; w = w – 1; } y2 = z; q = x2+y2; printf("%d", q); } Copyright © 2008 – The McGraw-Hill Companies srl Con sottoprogrammi Esempio: z=x2+y2 Inizio funzione quad(a) Leggi x e y w←a z←0 x2 ← quad(x) Sì z ← z+a w ← w-1 w>0? No y2 ← quad(y) q ← x2+y2 return (z) Scrivi x2+y2=q Fine Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari int quad (int a) { /* restituisce a2 / int w, z; w = a; z = 0; while (w > 0) { z = z + a; w = w – 1; } return (z); } main() /* q = x2 + y2 */ { int x,y,x2,y2,q; scanf("%d %d",&x,&y); x2 = quad(x); y2 = quad(y); q = x2+y2; printf("%d", q);} Copyright © 2008 – The McGraw-Hill Companies srl Sottoprogrammi ricorsivi Un sottoprogramma si dice ricorsivo se comprende se stesso nella propria definizione Fattoriale (N!) • • • • 0! = 1 1! = 1 N! = N × (N–1)! Per esempio, 4! = 4×3! = 4×(3×2!) = 4×(3×(2×1!)) = 4×3×2×1 = 24 Esercizio: cercare una soluzione non ricorsiva del problemi proposto. Esistono dei problemi la cui unica soluzione è di tipo ricorsivo. Spesso le strutture di dati che meglio si adattano alla soluzione di un problema ben si prestano a essere gestite tramite procedure ricorsive, che quindi, in questi casi, sono molto utili per migliorare l’efficienza dei programmi. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Paradigma ad oggetti Idea: imitare la realtà • Il programma si definisce come sequenze di interazioni tra oggetti dotati di un comportamento • Gli oggetti reagiscono alle interazioni risolvendo la loro parte di problema • E’ possibile usare oggetti senza conoscere la struttura ed il funzionamento interni • Linguaggi Object Oriented e Object Based Molto diffuso (adatto per progetti ampi) • Simula, Smalltalk, C++, Object Pascal, Java… Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Classi e oggetti Concetto di classe • Una classe modella una entità del problema (ad esempio, la classe Studente e la classe Esame) • Ha i propri metodi, funzioni che ne modificano lo stato interno e permettono di interagire con essa • Ha le proprie proprietà, variabili interne che ne costituiscono lo stato modificate con i metodi • Metodi e proprietà possono essere pubblici o privati (ovvero accessibili o meno dall’esterno) Concetto di oggetto • Una istanza singola di una classe è detta oggetto Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio Classe Automobile • Definisce l’idea astratta di automobile • Metodi: accendi(), spegni(), frena(T), accelera(T), sterza(angolo), apriportiera(quale)… • Proprietà: ruote, livello carburante, velocità, velocità max, targa, numeroporte… • Interfaccia: senza conoscerne i dettagli interni (ovvero come realizza le proprie funzionalità), è sufficiente chiamare i metodi visti per usarla • Al suo interno potrebbe avere una proprietà privata di classe Motore (che fornisce i propri servizi a accelera(T)), oggetti di classe Portiera, oggetti di classe Freno… Oggetto di classe automobile • Un oggetto di classe Automobile rappresenta una singola determinata automobile (con uno specifico valore per targa) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Caratteristiche della OO Ereditarietà • E’ possibile creare nuove classi (figlie) mediante ereditarietà, ovvero estendendo classi esistenti (padri) mediante aggiunta o sostituzione di metodi e proprietà creando una gerarchia di classi Polimorfismo • Ogni oggetto appartenente a una classe figlia appartiene anche a tutte le classi padre Overloading dei metodi • E’ possibile avere un comportamento diverso dei metodi se chiamati con parametri di tipi o numero diversi Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio Automobile • Gerarchia dei mezzi di trasporto: Automobile derivata da Motoveicolo per sfruttarne gli aspetti comuni; Motocicletta derivata da Motoveicolo; Motoveicolo derivato da Veicolo; FiatTipo, OpelAstraSW, RenaultKangoo, FerrariF40 derivate da Automobile per specializzarne i comportamenti standard • Automobile può ereditare frena() e sterza() da Veicolo ed accendi(), spegni() da Motoveicolo ma non apriportiera() che le è proprio (Moto è derivata da Motoveicolo e quindi apriportiera non può essere un metodo di Motoveicolo) • FiatTipo, OpelAstraSW, RenaultKangoo e FerrariF40 ereditano tutto da Automobile ma fissano propri valori per numeroporte e velocitàmax e modificano i comportamenti di accelera() e frena() Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio: interfaccia utente Esempio di interfaccia utente di un programma a oggetti: tutti gli elementi che sono inclusi nella finestra sono oggetti che vengono attivati da eventi generati dall’utente operando con la tastiera o il mouse. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio IU: oggetti e metodi Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Riuso Distinzione tra l’attività di • creazione di classi per esempio programmare per creare una nuova classe “pulsante” (magari con caratteristiche particolari, cioè con specifici metodi o proprietà), • uso di classi esistenti, attraverso la generazione di loro istanze, cioè di oggetti, per esempio programmare per istanziare la classe “pulsante” e creare così dei pulsanti sulla finestra di un’applicazione. Naturalmente queste attività devono essere realizzate in successione: prima si creano le classi, poi si usano per creare oggetti e perciò applicazioni. Uno dei punti di forza della programmazione a oggetti deriva dalla sostanziale autonomia di cui godono le classi, che possono venire create e quindi “impacchettate”, pronte per essere distribuite ai programmatori che ne vorranno fare uso. In questo modo i programmatori applicativi possono operare in ambienti di sviluppo assai ricchi di funzionalità, grazie alla disponibilità di classi che arricchiscono il linguaggio di programmazione impiegato. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Paradigma funzionale Idea generale: unificare dati e istruzioni, considerando un programma come una serie di funzioni innestate Esempi 1 1 kt La.s+Ra • Lisp: un unico costrutto, detto lista • print 12 + 23 diventa (print (+ 12 23)) • LabView, Simulink: linguaggi grafici 1 s k J.s+beta kv B* u 1 s C* u A* u L* u Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Paradigma dichiarativo Idea: descrivere le caratteristiche della soluzione con dichiarazioni che le descrivono piuttosto che il procedimento per ottenerla • Il programma viene eseguito da un risolutore di problemi che determina la strategia migliore • Paradigma utilizzabile in campi specifici Esempi: Prolog, SQL Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl I linguaggi per la descrizione e la manipolazione dei dati Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Descrizione e manipolazione dati I tradizionali linguaggi per la descrizione dei processi di elaborazione trattano i dati in maniera generica • Disponibilità di strutture dati complesse ma necessità di definirle da parte del programmatore caso per caso • Strutture regolari Necessità di linguaggi specifici per la definizione e la manipolazione di dati Esempi: SQL, ER, HTML, XML,… Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl SQL Linguaggio per la definizione e la manipolazione di dati secondo il modello relazionale • La parte di definizione dei dati ne descrive la struttura in termini di relazioni (o tabelle) e vincoli • La parte di manipolazione è un linguaggio dichiarativo Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Tabella Rappresentazione sotto forma di tabella dell’array di record definito e utilizzato nei frammenti di codice riportato precedentemente. Il numero riportato alla sinistra di ogni riga rappresenta l’indice dell’array (in questo caso a partire da 0 e quindi in accordo alla sintassi C) ed è utilizzato per accedere al contenuto del corrispondente record. PRODOTTI Nome Fatturato 0 1 2 3 4 5 6 7 … 98 99 Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari HT5231 HT5441 NS221 NS321 NS222 NS322 HT5321 HT5442 ……… RX521 RX522 129 000 105 000 144 000 123 000 133 000 136 000 139 000 136 000 ……… 183 000 175 000 Copyright © 2008 – The McGraw-Hill Companies srl Il modello relazionale Nelle situazioni in cui la quantità di dati da elaborare e archiviare è molto grande l’accesso diretto diventa di fatto inapplicabile perché inefficiente. In queste condizioni si impiegano dei sistemi per la gestione di basi di dati (Database Management System, DBMS) Tra i modelli di organizzazione ed elaborazione dei dati quello che si è diffuso di più è il modello relazionale Un DataBase Relazionale è costituito da un insieme di tabelle e di vincoli su e tra di esse Ogni tabella è caratterizzata da uno schema (l’insieme dei suoi campi) fisso per ogni record (tupla) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Il modello relazionale STUDENTI Matr Cognome Nome Nato_il 3571 Banfi Alessandro 19/02/1982 999 Bosio Umberto 27/01/1983 2805 Castelnuovo Andrea 06/05/1982 3719 Colpi Marco 15/01/1983 773 Izzo Stefania 08/10/1982 3672 Librandi Silvia 12/03/1983 1539 Longoni Mauro 05/02/1983 3500 Matta Vera 26/04/1982 1886 Merlo Andrea 05/05/1983 1427 Morelli Riccardo 14/04/1982 2608 Ornaghi Gabriele 09/09/1982 3711 Panico Andrea 29/05/1982 1940 Poretti Stefania 20/02/1982 1814 Quaglia Andrea 13/08/1982 1662 Salmoiraghi Veronica 19/09/1982 2744 Sterlocchi Elena 29/06/1982 3024 Tarantola Marcello 17/06/1982 3527 Valentini Samuele 10/07/1982 3615 Venturi Anita 28/07/1982 681 Zaccaretti Carolina 23/02/1983 Nato_a Milano Aosta Torino Genova Firenze Bologna Venezia Roma Trento Trieste Perugia Pescara Ancona Napoli Cagliari Palermo Reggio Calabria Bari Potenza Campobasso ISCRITTI Matr Codice 2805 IG06 3527 BA03 1940 IG10 773 IG11 1539 IG05 1940 IG03 3672 ICT3 681 ICT2 1886 IG05 1940 ICT1 3500 BA08 1886 IG01 3024 BA01 3719 IG10 3672 IG08 773 ICT2 3719 IG06 1814 ICT2 2744 BA09 2744 IG03 2805 IG09 Codice BA01 BA02 BA03 BA04 ICT1 IG01 IG02 ICT2 IG03 … IG04 IG05 BA09 ICT3 IG09 IG10 IG11 IG12 CORSI Titolo Analisi Matematica I Analisi Matematica II Elettromagnetismo Fond. Meccanica Teorica e Applicata Fond. Informatica I (laboratorio) Elettrotecnica Fisica Tecnica Fond. Informatica II Fond. Automatica ……… Economia Organizzazione Aziendale Gestione Produzione Industriale Ricerca Operativa Produzione Assistita Calcolatore Sistemi di Controllo di Gestione Logistica Industriale Gestione Aziendale Gestione della Qualità Settore MAT/05 MAT/05 FIS/01 ING-IND/13 ING-INF/05 ING-IND/31 ING-IND/10 ING-INF/05 ING-INF/04 … ING-IND/35 ING-IND/17 MAT/09 ING-IND/16 ING-IND/35 ING-IND/17 ING-IND/35 ING-IND/17 Tipo Crediti Base 7.5 Base 7.5 Base 5 Affine 5 Affine 4 Affine 5 Affine 5 Base 6 Caratt. 5 … … Caratt. 10 Caratt. 10 Base 5 Caratt. 5 Caratt. 5 Caratt. 5 Caratt. 5 Caratt. 5 Studenti (Matr, Cognome, Nome, Nato_il, Nato_a); Corsi (Codice, Titolo, Settore, Tipo, Crediti); Iscritti (Matr, Codice). Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Vincoli principali Vincolo di dominio: • Impone ad ogni campo un tipo definito ed eventualmente un range di valori valido Vincolo di chiave: • Si definisce chiave di una tabella un campo, o un insieme di campi, il cui contenuto sia garantito unico tra i vari record della tabella Vincolo di chiave esterna: • La chiave primaria viene impiegata anche per mettere in corrispondenza record appartenenti a tabelle diverse, vincolando i valori presenti in un certo campo ad assumere solo valori esistenti nella chiave di un’altra tabella Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl SQL per la definizione dei dati (DDL) SQL prevede specifici costrutti per la creazione e l’eliminazione di tabelle del DB. Esempi • generare tabelle CREATE TABLE Studenti CREATE TABLE Corsi CREATE TABLE Iscritti ( [Matr] integer, ( [Codice] text:4, ( [Matr] integer, [Cognome] text:50, [Titolo] text:50, [Codice] text:4) [Nome] text:50, [Crediti] single, [Nato il] data, [Settore] text:10, [Nato a] text:50) [Tipo] text:10) • rimuovere una tabella dal DB DROP TABLE Studenti Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl SQL per la manipolazione (DML) L’elemento di base di questa parte del linguaggio è il seguente (detto anche “blocco SQL”): SELECT C1, …, Cn FROM T1, …, Tm WHERE P • parte dalle tabelle T1, …, Tm • come risultato della sua esecuzione genera una nuova tabella il cui schema è definito dai campi C1, …, Cn estratti dalle tabelle di partenza • la tabella finale comprende i record che si generano combinando i record compresi nelle tabelle di partenza, partenza con il vincolo che la condizione P sia soddisfatta. • Si noti che vengono definite le caratteristiche della soluzione Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio di query SELECT in SQL SELECT FROM WHERE Matr, Cognome, Nome Studenti Nato_a = 'Milano' genera una nuova tabella il cui schema è (Matr, Cognome, Nome) e che comprende l’elenco degli studenti nati a Milano. SELECT Studenti.Matr, Cognome, Nome FROM Studenti, Iscritti, Corsi WHERE Studenti.Matr = Iscritti.Matr AND Iscritti.Codice = Corsi.Codice AND Corsi.Titolo = “Fondamenti di Informatica II” ORDER BY Cognome genera una tabella con l’elenco, ordinato per cognome, degli studenti iscritti al corso di “Fondamenti di Informatica II”, e per ognuno di essi include il numero di matricola, il cognome e il nome. Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl SQl per la modifica dei dati (DML) I costrutti di manipolazione prevedono la possibilità di inserire, eliminare e modificare il contenuto di record selezionati di una tabella. Esempi • inserisce nella tabella Studenti due nuovi record INSERT INTO Studenti (4321, 'Rossi', 'Paolo', 12.12.1980, 'Milano') (4322, 'Bianchi', 'Luca', 21.08.1980, 'Roma') • cancella dalla tabella Studenti tutti i record che soddisfano la condizione indicata DELETE FROM WHERE Studenti Matr < 1000 • modifica come specificato il contenuto del campo Crediti della tabella Corsi per tutti i record che soddisfano la condizione specificata UPDATE SET WHERE Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Corsi Crediti = 6 Titolo = 'Elettromagnetismo' Copyright © 2008 – The McGraw-Hill Companies srl ER (Entity-Relationship) Linguaggio (grafico) per la definizione di modelli dei dati • Formalismo utilizzato per descrivere la struttura dei dati di un problema e i relativi vincoli • Usato per l’analisi e la progettazione di basi di dati Linguaggio con primitive grafiche • La forma grafica facilita il processo di progettazione e di condivisione dell’informazione strutturata tramite i diagrammi ER • Descrive il modello concettuale dei dati Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Modello concettuale dei dati Modello dei dati è la descrizione (mediante un linguaggio formale) della realtà che si vuole rappresentare. Tipicamente un modello ER dei dati è costituito da: • entità, organizzate in insiemi di entità • attributi, attributi ognuno caratterizzato da un insieme di valori e valutabile su un insieme di entità, nel senso che a ogni entità dell’insieme è associato un valore dell’attributo • relazioni, relazioni particolari attributi caratterizzati da un insieme di valori che è in effetti un insieme di entità Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Modello concettuale dei dati STUDENTE 0:N Matricola Anno di corso Iscritto regolarmente {1,2,3,4} {vero, falso} Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Esami sostenuti CORSO 0:M Codice Denominazione Copyright © 2008 – The McGraw-Hill Companies srl HTML (HyperText Markup Language) Linguaggio per la descrizione di ipertesti • Formalismo utilizzato per descrivere la struttura e i collegamenti di un ipertesto (dati non strutturati) • Arricchisce i contenuti di un documento ipertestuale con tag che descrivono l’organizzazione dello stesso (paragrafi, titoli di vari livelli, liste, tabelle, evidenziazione di parti di testo,…) Limitate capacità di input (form) per l’interazione sul web Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Ipertesto Ipertesto è un documento la cui struttura di consultazione non è lineare • le parti di cui è logicamente costituito sono organizzate non semplicemente in successione, ma secondo una Anchor point struttura più complessa; • ogni nodo può contenere degli anchor point, per relazioni (link o hyperlink) che rimandano ad altre parti (target) Link del documento. Se l’ipertesto è consultato tramite un calcolatore, gli anchor point presenti nella parte visualizzata sono “aree attive” la cui selezione (point-and-click) ha come risultato l’attivazione di un link e quindi la visualizzazione del contenuto della parte relazionata. Se l’ipertesto contiene anche riferimenti a contenuti audio/video è detto ipertesto multimediale Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Target Copyright © 2008 – The McGraw-Hill Companies srl Ipertesto Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl HTML: la struttura del documento Un documento HTML è costituito da 2 parti fondamentali: • HEAD: contiene le informazioni relative, per esempio: • titolo della pagina visualizzato sulla barra di Explorer • informazioni utili per i motori di ricerca (Google, Yahoo, ect…) • BODY: contiene il documento vero e proprio (la pagina) Struttura tipica <HTML> <HEAD> … descrizione delle caratteristiche del documento … </HEAD> <BODY> … documento … </BODY> </HTML> Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl HTML: la struttura dei documenti <HTML> <HEAD> <TITLE> </TITLE> HTML BODY HEAD H1 DIV P TITLE P A Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari BR </HEAD> <BODY> <H1></H1> <DIV> <P> <A> </A> </P> </DIV> <P> <BR> </P> </BODY> </HTML> Copyright © 2008 – The McGraw-Hill Companies srl Un esempio di form <H3>Esempio di un <I>form</I> compilabile da parte dell'utente</H3> <FORM METHOD="post" ACTION="scripts/formman.exe"> Condizione di ricerca: <INPUT TYPE="text" NAME="condizione"> <BR> Riporta i risultati della ricerca in forma: <INPUT TYPE="radio" NAME="modo" VALUE="breve" CHECKED>breve <INPUT TYPE="radio" NAME="modo" VALUE="estesa">estesa <BR> <INPUT TYPE="submit" VALUE="Esegui la ricerca"> </FORM> Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl XML (eXtensible markup language) Linguaggio per la definizione di linguaggi di descrizione dei dati • Metalinguaggio • Permette la definizione di tag personalizzati • Usato per formalizzare linguaggi di descrizione dei dati per problemi specifici • Linguaggio simile a ma “più potente” di HTML Definizione: DTD e XML Schema Manipolazione: XSLT (trasformazione), XQuery (estrazione)… Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio XML <?xml version=“1.0” standalone=“yes” ?> <!-- Esempio di bibliografia --> <BIB> <LIBRO nome=“Info”> <AUTORE id=“dony”> D. Sciuto </AUTORE> <AUTORE id=“jack”> G. Buonanno </AUTORE> <AUTORE id=“luca”> L. Mari </AUTORE> <AUTORE id=“mau” role=“collab”> M. Iacono </AUTORE> <TITOLO> Introduzione ai sistemi informatici </TITOLO> <EDITORE> McGraw-Hill Italia </EDITORE> <ANNO> 2008 </ANNO> </LIBRO> <LIBRO> <AUTORE idref=“luca”/> <TITOLO> Accesso a database via Web </TITOLO> <EDITORE> Apogeo </EDITORE> <ANNO> 2001 </ANNO> </LIBRO> </BIB> Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio DTD e XMLSchema <!DOCTYPE bib [ <!ELEMENT BIB (LIBRO+)> <!ELEMENT LIBRO (AUTORE+, TITOLO, EDITORE?, ANNO?)> <!ATTLIST LIBRO isbn CDATA #IMPLIED nome CDATA #IMPLIED> <!ELEMENT AUTORE (#PCDATA)> <!ATTLIST AUTORE id ID #IMPLIED idref IDREF #IMPLIED> <!ELEMENT TITOLO (#PCDATA)> <!ELEMENT EDITORE (#PCDATA)> <!ELEMENT ANNO (#PCDATA)> ]> (a) Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari <xsd:schema xmlns:xsd=“http://www.w3.org/1999/XMLSchema”> <xsd:element name=“LIBRO” type=“BOOKTYPE”/> <xsd:complexType name=“BOOKTYPE” > <xsd:element name=“AUTORE” type=“xsd:string” minOccurs=“1” maxOccurs=“unbounded”/> <xsd:element name=“TITOLO” type=“xsd:string”/> <xsd:element name=“EDITORE” type=“xsd:string” minOccurs=“0” maxOccurs=“1”/> <xsd:element name=“ANNO” type=“xsd:decimal” minOccurs=“0” maxOccurs=“1”/> <xsd:attribute name=“isbn” type=“xsd:string”/> <xsd:attribute name=“nome” type=“xsd:string”/> </xsd:complexType> </xsd:schema> (b) Copyright © 2008 – The McGraw-Hill Companies srl Esempio XSLT <?xml version="1.0" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <AUTORI> <xsl:apply-templates/> </AUTORI> </xsl:template> <xsl:template match="/BIB/LIBRO"> <xsl:for-each select= "AUTORE"> <xsl:if test="@id"> <AUTORENOTO codename="{@id}"> <xsl:value-of select="text()" /> </AUTORENOTO> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet> Applicando il filtro all’esempio XML visto l’XML risultante è il seguente: <?xml version="1.0" encoding="UTF-8"?> <AUTORI> <AUTORENOTO codename="dony"> D. Sciuto </AUTORENOTO> <AUTORENOTO codename="jack"> G. Buonanno </AUTORENOTO> <AUTORENOTO codename="luca"> L. Mari </AUTORENOTO> <AUTORENOTO codename="mau"> M. Iacono </AUTORENOTO> </AUTORI> Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Copyright © 2008 – The McGraw-Hill Companies srl Esempio XQuery XQuery che genera una risposta in HTML <html><head/><body> { for $libro in doc("bibliografia.xml") //LIBRO order by $libro/ANNO/text() return <span> <h1>{ $libro/TITOLO/text() }</h1> <i>{$libro/EDITORE/text()}</i> {$libro/ANNO/text()} </span> } </body></html> Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari Risposta <html> <head/> <body> <span> <h1> Accesso a database via Web </h1> <i> Apogeo </i> 2001 </span> <span> <h1> Introduzione ai sistemi informatici </h1> <i> McGraw-Hill Italia </i> 2008 </span> </body> </html> Copyright © 2008 – The McGraw-Hill Companies srl