La programmazione Istruzioni effettive Istruzioni effettive e loro
Transcript
La programmazione Istruzioni effettive Istruzioni effettive e loro
Informatica Giuridica Informatica giuridica. Docente: Giovanni Sartor Istruzioni effettive La programmazione Istruzione effettiva: – il sistema incaricato di eseguirla può interpretarla senza incertezze, e compiere l’operazione corrispondente. Giovanni Sartor © G. Sartor 1 © G. Sartor 2 2 Informatica Giuridica Informatica Giuridica Istruzioni effettive e loro esecutori Istruzioni di Javascript Quali sono le istruzioni effettive? Dipende dal sistema incaricato di eseguirle – – – 3 Visualizza una scritta (prog. 1.0.0 saluti.htm) Visualizza due scritte a video (prog. 1.0.1 secondi saluti.htm) Somma due numeri (prog. 1.0.2. prima somma.htm) Concatenamento di due stringhe (prog. 1.0.3. concatena stringhe.htm) Per una comune calcolatrice tascabile? Per una calcolatrice scientifica? Per l’interprete di Javascript? © G. Sartor © G. Sartor 4 3 4 Informatica Giuridica Informatica Giuridica Un classico esempio: la procedura per il caffe’ Algoritmo (procedura effettiva) Procedura effettiva (algoritmo). Procedimento che soddisfa le seguenti condizioni: 1. comprende solo istruzioni effettive; indica la prima operazione da eseguire; individua per qualsiasi operazione della procedura, l’operazione immediatamente successiva (Si conclude in un tempo finito) 3. – – – – 2. 4. 5. 6. 5 © G. Sartor 5 6 Introdurre una moneta da 500 lire. Inserire il bicchierino nell’apposito spazio. Premere il bottone al di sopra della scritta “caffè”. Se esce il caffè, attendere il segnale sonoro e quindi ritirare il bicchiere. Altrimenti premere il bottone al di sopra della scritta “restituzione” e ritirare la moneta. Ricomincaire da 1 © G. Sartor 6 1 Informatica Giuridica Informatica Giuridica Start La macchina di Turing (I) Introdurre una moneta da 500 lire Inserire il bicchierino nell’apposito spazio. •Premere il bottone al di sopra della scritta “caffè”. No Si’ Esce il caffe’ Premere il pulsante restituzione Attendere il segnale sonoro e ritirare il bicchiere Ritirare la moneta 7 Fine © G. Sartor 7 8 © G. Sartor 8 Informatica Giuridica Informatica Giuridica La macchina di Turing (II) La macchina di Turing (III) La macchina di Turing funziona in questo modo: La macchina di Turing si compone di due elementi: – – un nastro illimitato suddiviso in quadratini, sul quale si possono scrivere i simboli di un alfabeto un’organo di controllo, dotata di una testina di lettura e scrittura, – – L’organo di controllo – – – – 9 Può leggere e scrivere simboli sulla casella sottostante, Può spostarsi sul nastro, a destra o a sinistra, oppure fermarsi Può assume diversi stati Contiene una tabella che gli dice che fare (che scrivere, dove spostarsi, quale stato assumere), quando si trova in un determinato stato, e legge un determinato simbolo © G. Sartor quale simbolo scrivere, se restare fermo, spostarsi a destra o sa sinistra, e quale nuovo stato assumere. finchè non decide di fermarsi 10 9 All’inizio dell’elaborazione sul nastro sono indicati I dati di ingresso L’organo di controllo legge il simbolo registrato nella casella sotto della testina, e in base del suo stato interno e al simbolo letto, determina © G. Sartor 10 Informatica Giuridica Informatica Giuridica La macchina di von Neumann (1) Macchina di Turing e computabilità Unità centrale di elaborazione Tutti i problemi computabili (tali che sia possibile specificare una funzione che collega i dati di ingresso ai dati di uscita, cioè determinare univocamente l’output corrispondente ad ogni possibile input), sono risolvibili da una una macchina di Turing Qualsiasi algoritmo può essere tradotto in una tabella eseguibile da una macchina di Turing 11 © G. Sartor 11 Registri Memoria centrale 12 © G. Sartor 12 2 Informatica Giuridica Informatica Giuridica Macchina di von Neumann e programmazione La macchina di von Neumann (2) Un programma per una macchina di Von Neumann consiste, pertanto: L’elaborazione si svolge come segue: – – – – un’istruzione e i dati che tale istruzione deve manipolare vengono trasferiti o “caricati” dalla memoria nei registri; l’unità centrale esegue l’istruzione; gli eventuali risultati vengono trasferiti dai registri alla memoria; si passa all’istruzione successiva (o a quella specificata dall’istruzione di controllo, se l’istruzione eseguita era di questo tipo). – – nella descrizione/prescrizione di una sequenza di operazioni elementari sui dati, combinate con istruzioni di controllo, che modificano l’ordine nel quale eseguire le operazioni sui dati NB: L’elaborazione è sequenziale: viene eseguita un’istruzione per volta 13 © G. Sartor 14 13 © G. Sartor 14 Informatica Giuridica Informatica Giuridica Dal linguaggio macchina ai linguaggi programmazione Il linguaggio macchina Programma: algoritmo formulato in un linguaggio di programmazione. – – – Il linguaggio comprensibile (eseguibile) da parte dell’hardware. Consiste dei: Linguaggio macchina; Assembler; Linguaggi di altro livello. – – Il linguaggio macchina è Computer + linguaggio di programmazione = – 15 comandi eseguibili dall’hardware; espressi in codici binari – macchina virtuale che esegue i programmi scritti nel linguaggio di programmazione. © G. Sartor – 16 15 Dipendente dall’hardware (un linguaggio macchina può essere usato solo su un computer); Difficile da comprendere per l’uomo © G. Sartor 16 Informatica Giuridica Informatica Giuridica Il linguaggio assembler Assembler: abbreviazione linguaggio macchina. – 17 Un esempio simbolica del Somma i numeri memorizzati agli indirizzi di memoria 8 e 5, e memorizza il risultato all’indirizzo 10. le istruzioni consistono di brevi parole dette "codici mnemonici" (che possono essere ricordate più facilmente dei corrispondenti valori binari). © G. Sartor 17 18 © G. Sartor 18 3 Informatica Giuridica Istruzioni in linguaggio assembler Linguaggio assembler e linguaggio macchina LOAD 8 LOAD 8 = 010100 001000 Prendi il numero registrato all’indirizzo 8 della memoria e caricalo in ALU Aggiungi il numero all’indirizzo 5 a quello in ALU Prendi il numero in ALU e registralo in memoria, all’indirizzo 10 ADD 5 STORE 10 19 Informatica Giuridica © G. Sartor 20 19 LOAD (010100) = codice dell’operazione (opcode) 8 (001000) Indirizzo dell’operando = © G. Sartor 20 Informatica Giuridica Informatica Giuridica In un linguaggio di programmazione di altro livello Linguaggi di alto livello //creazione delle variabili var primoNumero, secondoNumero; //assegnamento di valori alle variabili primoNumero = 3; secondoNumero = 5; //somma dei due numeri somma = primoNumero + secondoNumero Sono più simili al linguaggio umano Fanno astrazione dal funzionamento concreto del computer: – – non parlano di registri, celle di memoria, indirizzi, caricamento o spostamento di bit …, parlano di variabili, costanti, assegnamenti, strutture di controllo, procedure … Sono indipendenti dalla macchina (posso eseguire lo stesso programma su diversi modelli di elaboratore) 21 © G. Sartor 22 21 © G. Sartor 22 Informatica Giuridica Informatica Giuridica Dal linguaggio macchina ai linguaggi di alto livello Inteprete o compilatore Compilatore: Linguaggio macchina: – – puo’ essere eseguito direttamente dall’hardware Linguaggio assembler: – – viene tradotto in linguaggio macchina da un software chiamato assemblatore (assembler) Interprete: Linguaggio di altro livello: – 23 – 23 Finché non è stato eseguito tutto il programma traduce una riga per volta, la esegue immediatamente, passa alla riga successiva viene tradotto nel linguaggio macchina da un interprete o un compilatore. © G. Sartor traduce l’intero programma (il codice sorgente) in un programma in linguaggio macchina (il codice oggetto o codice eseguibile), Il codice oggetto viene memorizzato per essere usato nel seguito. 24 © G. Sartor 24 4 Informatica Giuridica Informatica Giuridica Un linguaggio interpretato: Javascript Compilatore ed inteprete Programma sorgente in linguaggio di alto livello COMPILATORE Singola istruzione in linguaggio di alto livello 25 INTERPRETE Programma oggetto in linguaggio macchina Javascript: creato da Netscape, ma oggi standard per la creazione di pagine web dinamiche Consente di redigere programmi (scripts) all’interno di pagine web, che vengono eseguiti quando la pagina viene caricata dal browser (il programma che visualizza le pagine web) È un linguaggio interpretato È un linguaggio object oriented Traduzione della singola istruzione in linguaggio macchina © G. Sartor 26 25 © G. Sartor 26 Informatica Giuridica Informatica Giuridica Che cosa dice un programma al computer I dati Il programma: – – – Variabile: – Indica come elaborare i dati, Secondo istruzioni, Combinate in strutture di controllo. Ogni variabile ha: – – – 27 © G. Sartor 28 27 locazione di memoria avente un nome, in cui possono essere caricati (copiati) contenuti o valori si un certo tipo Un nome (salarioLordo) Un tipo (integer) Un valore (“5000000”) © G. Sartor 28 Informatica Giuridica Informatica Giuridica Variabili Le istruzioni salarioLordo Dichiarazione di variabile – 5000000 Crea le variabili (predispone le zone di memoria e attribuisce loro dei nomi) var salarioLordo, salarioNetto; Assegnamento – nomeCognome Memorizza un contenuto (a destra) nella variabile (a sinistra) Un valore particolare – Giovanni Sartor – – – 29 © G. Sartor 29 salarioLordo = 1000000; imposta = 350000; Il risultato di un’operazione 30 salarioNetto = salarioLordo – imposta; NB. In Javascript “=“ non indica l’eguaglianza ma l’assegnamento © G. Sartor 30 5 Informatica Giuridica Informatica Giuridica Gli operatori Le istruzioni Nel lato destro delle istruzioni di assegnamento vi possono essere operazioni. La variabile memorizza il risultato dell’operazione. Esempi: Istruzioni di input: acquisiscono informazioni dai disposiviti di input. – Concatenamento nomeCognome = “Giovanni “ + “ Sartor”; - Somma somma = 5 + 8; – + Addizione -, / , *, %, 31 primoNumeroStringa = window.prompt("inserisci il tuo stipendio"); Istruzioni di output – – 5+7 © G. Sartor 32 31 alert(“stipendio = “ + stipendio); document.write (“stipendio = “ + stipendio) © G. Sartor 32 Informatica Giuridica Informatica Giuridica Un programma I diagrammi di flusso (I) Rappresenta il flusso (l'ordine) del diagramma Programma che effettua il calcolo del dell’imposta e del salario netto (1.0.4. salario e imposta .htm) Simbolo terminale Indica l'inizio o la fine di un programma o di un modulo di programma. Esempi: inizio fine Simbolo di elaborazione Rappresenta una elaborazione. Esempi: calcola lo stipendio 33 © G. Sartor 34 33 34 Informatica Giuridica I diagrammi di flusso (II) sì fine del file Simbolo di input/output sì Qualifica = 1 In linguaggio macchina e in assembler (e in alcuni linguaggi di programmazione di alto livello) l’ordine dell’esecuzione delle istruzione è determinato da istruzioni di salto. Istruzione di salto (jump, goto): no Rappresenta un'operazione di input/output. Esempi: scrivi lo stipendio 35 Istruzioni di controllo: I salti Rappresenta una decisione basata su una condizione: se la condizione risulta vera viene scelta l'uscita "sì"; se la condizione risulta falsa, viene scelta l'uscita "no". Esempi: no © G. Sartor 35 ⇐ 30000 © G. Sartor Informatica Giuridica Simbolo di decisione PagaOraria – – write(Nome) 36 Contenuto: prescrive che l’ulteriore elaborazione continui a partire da un certo punto (indirizzo di memoria, riga del programma, posizione nel programma) Effetto: trasferisce il controllo al punto indicato © G. Sartor 36 6 Informatica Giuridica Informatica Giuridica Salti incondizionati e condizionati Salto incondizionato Salto incondizionato X=0 1. X = 0; 2. X = X+1; 3. Goto 2 Problema: Un ciclo infinito (loop)! X = X+1 Soluzione: Salto condizionato 1. X = 0; 2. X = X+1; 3. If X < 10 go to 2 37 © G. Sartor 38 37 © G. Sartor 38 Informatica Giuridica Informatica Giuridica Salto condizionato Condizioni e decisioni Il computer X=0 – – X = X+1 Esegue istruzioni; Effetta scelte (prende decisioni) sulla base di condizioni Condizione – X < 100 – 39 © G. Sartor 40 39 espressione vera o falsa (esprime una proposizione anziché una istruzione) di regola confronto tra numeri o stringhe © G. Sartor 40 Informatica Giuridica Informatica Giuridica Le condizioni Programmazione strutturata Condizioni atomiche: uguale, maggiore, diverso X == 3 X>5 cognome != “Sartor” Le condizioni possono essere combinate mediate gli operatori logici 3 < X && X < 1 nome == “Giovanni” && cognome == “Sartor” 41 © G. Sartor 41 Programmazione strutturata: – – combina le istruzioni mediante strutture di controllo, evita le istruzioni di controllo (i salti). Strutture di controllo: – – – Sequenza Selezione, Ripetizione Le tre strutture consentono di esprimere qualsiasi algoritmo Javascript non utilizza l’istruzione goto 42 © G. Sartor 42 7 Informatica Giuridica Informatica Giuridica La sequenza (I) La sequenza (II) imposta = salarioLordo * aliquota {<istruzione1>; <istruzione2>; …} Le istruzioni vengono eseguite nella sequenza indicata (prima istruzione1, poi istruzione2, ecc.} Esempio : 1.0.4. salario e imposta .htm 43 © G. Sartor salarioNetto = SalarioLordo - imposta 44 43 © G. Sartor 44 Informatica Giuridica Informatica Giuridica La selezione (if …} La selezione (IF … ELSE) (I) If (<condizione> If (<condizione>) {<istruzione>} – – {<istruzione1>} else {<istruzione2>} – Se (if) la condizione è vera allora viene eseguita istruzione1 – 4646 Se (if) la condizione è vera allora viene eseguita l’istruzione Se la condizione e’ falsa, allora l’istruzione seguente non viene eseguita Esempio: 1.1.1 if.htm Esempio 1.1.2 if else.htm, 1.1.3 if else reddito.htm 45 © G. Sartor 46 45 © G. Sartor 46 Informatica Giuridica Informatica Giuridica La selezione (IF … ELSE) (I) sì Reddito > 6000000 document.writeln(“Devi presentare la dichiarazione dei redditi”) 47 © G. Sartor 47 La ripetizione (while) (I) no While (<condizione>) {<istruzione>} L’istruzione viene ripetuta finché la condizione risulta vera. Quando l’espressione risulta falsa la ripetizione cessa e si passa all’istruzione successiva Esempio: 1.1.4. myfirstwhile.htm document.writeln(“Non devi presentare la dichiarazione dei redditi”) 48 © G. Sartor 48 8 Informatica Giuridica Informatica Giuridica La ripetizione (while) (II) Il metodo top-down conta = 0 sì conta < 100 Metodo top-down: scomposizione progressiva del problema e delle azioni (istruzioni) che lo risolvono. Favorisce la divisione del lavoro: no Analisi: definizione della struttura generale del programma, dei moduli principali che lo compongono, e delle operazioni astratte svolte da ciascuno di essi, le cosiddette “specifiche”. Programmazione: realizzazione dei programmi che svolgono le singole operazioni individuate nella fase di analisi. – document.writeln(conta) – conta = conta + 1) © G. Sartor 49 © G. Sartor 50 49 50 Informatica Giuridica Informatica Giuridica Un esempio di applicazione del metodo top-down Primo raffinamento Il problema (descrizione più astratta): – 1. Calcola il voto medio ottenuto dagli studenti del corso Calcola il voto medio ottenuto dagli studenti del corso 1. NB: la descrizione non e’ in linguaggio di programmazione ma e’ una astrazione espressa linguaggio naturale (pseudocodice) © G. Sartor 51 2. 3. 52 51 Inizializza le variabili Inserisci, somma e calcola i voti Calcola e stampa la media © G. Sartor 52 Informatica Giuridica Informatica Giuridica Secondo raffinamento 1. Secondo raffinamento (continua) Inizializza le variabili 3. Calcola e visualizza la media Inizializza il totale a 0 Inizializza il contatore voti a 0 2. Calcola la media dividendo il totale per il contatore voti Visualizza la media Inserisci, somma e calcola i voti Leggi il primo voto Finché l’utente non ha inserito la sentinella, Aggiungi il voto al totale parziale Aggiungi 1 al contatore voti Leggi il prossimo voto 53 © G. Sartor 53 54 © G. Sartor 54 9 Informatica Giuridica Informatica Giuridica Lo pseudocodice Il programma Inizializza il totale parziale a 0 Inizializza il contatore voti a 0 (1.1.5. media.htm) Leggi il primo voto Finché l’utente non ha inserito la sentinella, Aggiungi il voto al totale parzilae Aggiungi un al contatore voti Inserisci il prossimo voto Assegna media = totale diviso per il contatore voti Visualizza la media 55 © G. Sartor 56 55 © G. Sartor 56 Informatica Giuridica Informatica Giuridica Procedure e funzioni Moduli in Javascript È conveniente dividere programmi complessi in moduli La scomposizione e’ favorita dalla programmazione strutturata – 57 I moduli sono funzioni – L’utente può definire proprie funzioni – Esempio: 1.1.6 dadi.htm, 1.1.6 upper_lower.HTM rollDice() 58 57 Vi sono funzioni predefinite (disponibili nel linguaggio, come gli operatori matematici die1 = Math.floor( 1 + Math.random() * 6 ). Ogni modulo comprende una struttura, che al suo interno puo’ comprendere altre struttura (ogni struttura ha un unico punto di ingresso ed uscita) © G. Sartor – © G. Sartor 58 Informatica Giuridica Informatica Giuridica Programmazione ad eventi (eventdriven) Il software non e’ piu’ un unico algoritmo, da eseguirsi in un ordine predefinito, ma: – – 59 In particolare, nelle applicazioni web: – Consiste di un insieme di moduli (funzioni per la trattazione degli eventi – event handler) Ciascuno dei quali può essere attivato in vari modi al verificarsi di determinati eventi © G. Sartor 59 – – 60 Il browser (Explorer, Netscape, etc.) e’ in attesa di eventi (listening for events) L’utente realizza gli eventi interagendo con l’interfaccia grafica (e.g. clicca su un bottone) Il browser, al verificarsi di ogni evento, attiva l’handler (la funzione) corrispondente © G. Sartor 60 10 Informatica Giuridica Informatica Giuridica Un oggetto: il puntatore sullo schermo Gli oggetti Il mondo di appare abitato da oggetti, entit: – – Attributi: Caratteristiche (attributi) Comportamenti (metodi) – – Automobile – – – – Attributi: forma, colore, Metodi: corre quando si accelera, rallenta quando si frena, gira quando si manovra il volanteecc. Metodi: – – 61 © G. Sartor 62 61 forma, grandezza, colore, ecc. si sposta allo spontarsi del mouse cambia forma a seconda del contesto in cui si trova © G. Sartor 62 Informatica Giuridica Informatica Giuridica Oggetti composti e oggetti componenti Un oggetto: un documento web Window Attributi: – – – – – – bgColor fgColor, title url … Esempio 1.1.7. list properties.htm All Anchors Applets Body Forms images … Metodi – – – 63 Document write Open … – – – © G. Sartor 64 63 Frames History Navigator © G. Sartor 64 Informatica Giuridica Informatica Giuridica Caratteristiche degli oggetti I rapporti tra gli oggetti Gli oggetti – – – – 65 Classe: categoria di oggetti Incapsulano le propie caratteristiche e metodi (encapsulation) Nascondono al proprio interno dati che essi contengono (data hiding) Operano secondo I propri metodi (polimorfismo) Comunicano con l’esterno mediante interfaccie © G. Sartor 65 – Ogni oggetto è un’istanza di una certa classe Strutture: relazioni tra classi – – Specializzazione Mereologia (Tutto-parti) Ereditarietà: trasmissione delle caratteristiche del genere alle sue specie. 66 © G. Sartor 66 11 Informatica Giuridica Informatica Giuridica L’interazione con gli oggetti Programmazione ad oggetti Chi interagisce con un oggetto non ha bisogno di conoscerne – – Si riduce la distinzione tra dati e programmi – la struttura interna, le modalità del funzionamento – Tendenziale passaggio da top down a bottom up nello sviluppo di applicazioni Deve conoscerne – – gli oggetti sono dati, ma contengono i metodi (i programmi) Anche le procedure (I programmi) sono oggetti (dati) l’intefaccia I comportamenti Basta sia in grado di comunicare con l’oggetto 67 © G. Sartor 68 67 © G. Sartor 68 Informatica Giuridica Informatica Giuridica Gli agenti La programmazione ad agenti Oggetti dotati di un crescente “autonomia” Non solo agiscono, ma agiscono in modo intelligente – – Lo sviluppo del software come creazione di una società Non c’ è più un piano globale che governi le à relazioni tra gli individui (i programmi): ognuno bada a se stesso Non c’ è un deposito centrale della conoscenza (la base di dati o la mente del programmatore): ogni modulo usa la propria conoscenza per i propri fini Scelgono come comportarsi in base al contesto in cui si trovano, e alle proprie finalità Hanno capacità adattiva Esempi: – – 69 Agenti software per il commercio elettronico Assistenti personali digitali © G. Sartor 70 69 © G. Sartor 70 Informatica Giuridica Informatica Giuridica Prospettive e problemi della programmazione ad agenti (I) Prospettive e problemi della programmazione ad agenti (I) Aumenta la flessibilità del sistema – – – Problema: come governare le interazioni delle componenti autonome Capacità di affrontare situazioni non previste dal programmatore Capacità di evitare il peggio in situazioni critiche Capacità di acquisire conoscenze implicite (e.g. mediante metodi evoluzionistici) – – Un diritto del software come diritto della relazione tra agenti software? Problema: – 71 Il mondo virtuale del software sta sfuggendo di mano ai propri creatori? © G. Sartor 71 Mediante meccanismi di mercato (meccanismi di autoregolamentazione). E.g. come ottimizzare l’uso di risorse limitate (e.g. una stampante)? Mediante regole 72 © G. Sartor 72 12 Informatica Giuridica Informatica Giuridica Nuovi problemi “giuridici” La programmazione dichiarativa Gli agenti software – – – – – – – 73 Programmazione dichiarativa: – Sono soggetti a regole giuridiche? E quali? Hanno capacità giuridica? Hanno capacità d’agire? Possono essere rappresentanti? Hanno una propria volontà giuridicamente rilevante? Hanno stati psicologici (conoscenza, intenzione, buona fede)? Sono responsabili delle proprie azioni? © G. Sartor – Sono dichiarazioni – – sia i fatti elementari (i dati in senso stretto) sia le regole che ne definiscono le relazioni. Il programma è una – – 74 73 sviluppa programmi composti di conoscenze esplicite (dichiarative) il computer utilizza mediante metodi di ragionamento generali. base di dati deduttiva, cioè un sistema di assiomi che fungono da premesse per operazioni inferenziali © G. Sartor 74 Informatica Giuridica Informatica Giuridica Schema di sistema basato sulla conoscenza Sistemi basati sulla conoscenza Base di conoscenza Sistemi informatici che operano utilizzando un insieme di conoscenze dichiarative (base di conoscenza). Essi comprendono – – – il motore inferenziale (il deduttore automatico); le interfacce verso l’utente e verso l’ingegnere della conoscenza (chi crea e aggiorna la base di conoscenza). la base di conoscenza (la base assiomatica) Motore Inferenziale Interfaccia per la consultazione Ingegnere della conoscenza Utente 75 © G. Sartor 75 Interfaccia per l'aggiornamento 76 © G. Sartor 76 13