Sviluppo di Software Sicuro - S 3 SPARK – Moduli Corso di Laurea Magistrale in Sicurezza Informatica: Infrastrutture e Applicazioni Università di Pisa.

Slides:



Advertisements
Presentazioni simili
Teoria e Tecniche del Riconoscimento
Advertisements

1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
PROGETTO MODULO B – a.a Possono scegliere questo progetto solo gli studenti che hanno superato la prova del progetto di intercorso. Siano dati.
Interfacce Java.
Lez. 10 (10/11) - PBElementi di Programmazione1 Lezione 10 Funzioni e Moduli Macro Analisi del flusso Esercizi.
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
Capitolo 4 Classi Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
Sequential Statements. – Il VHDL simula lo svolgersi in parallelo di varie operazioni – Loggetto fondamentale e il PROCESS – Un PROCESS contiene una serie.
I TRASFERIMENTI INTERGOVERNATIVI
Un DataBase Management System (DBMS) relazionale client/server.
Asse Matematico 29 Marzo L'ASSE MATEMATICO.
Model – View - Controller
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Sviluppo di Software Sicuro - S 3 Condizioni di verifica in pratica Corso di Laurea Magistrale in Sicurezza Informatica: Infrastrutture e Applicazioni.
Sviluppo di Software Sicuro - S 3 Condizioni di verifica - III Corso di Laurea Magistrale in Sicurezza Informatica: Infrastrutture e Applicazioni Università
1 Ultima Lezione del Corso di Fondamenti di Informatica 1 a.a – 06 Ma 29-Nov-2005.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
JAVA C import java.util.*; #include <stdio.h>
Modello dati LISTA LISTA: LISTA: sequenza finita di 0 o più elementi LISTA di tipo T: lista in cui tutti gli elementi sono dello stesso tipo T. es. lista.
OSReT OSSERVATORIO SOCIO-RELIGIOSO TRIVENETO Lalfabetizzazione religiosa degli studenti che si avvalgono dellInsegnamento della Religione Cattolica.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
1 Meccanismi per la definizione di tipi di dato §la programmazione di applicazioni consiste in gran parte nella definizione di nuovi tipi di dato §un qualunque.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Array Ricerca Ordinamento Fusione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
FONDAMENTI DI INFORMATICA III WfMC-1. FONDAMENTI DI INFORMATICA III WfMC-2 WFMC Cose WfMC Workflow Management Coalition (WfMC), Brussels, è unorganizzazione.
Gestione File System e I/O in Windows 2000 Implementazione del File System FAT-12, FAT-16, FAT-32 NTFS API relative al File System Gestione dei dispositivi.
Il main program Ogni programma in C++, per essere eseguibile, deve contenere una funzione main() da cui l’esecuzione comincerà main() deve avere un tipo.
1 Funzioni e Procedure in C Corso di Informatica A Vito Perrone.
Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
PRODOTTO CARTESIANO Otteniamo un prodotto cartesiano quando: viene omessa la condizione di join una condizione di join non è valida tutte le righe della.
FUNZIONI DI GRUPPO Le funzioni di gruppo operano su un set di record restituendo un risultato per il gruppo. AVG ([DISTINCT|ALL] n) media, ignora i valori.
Componenti dell’architettura Oracle
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Università degli studi di Modena e Reggio Emilia Facoltà di Ingegneria di Modena Corso di Laurea Specialistica in Ingegneria Informatica Analisi e valutazione.
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 4 ARGOMENTI: STRINGHE DI CARATTERI.
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
DISPOSITIVI ASIC Application Specific Integrated Circuit De Faveri Martina Classe 3 BET.
OUTPUT FORMATTATO La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa.
Architettura delle GPU e
Innovazioni versione 4 Bari, 17 ottobre Innovazioni versione 4 Il menù dinamico secondo logica operativa Il ruolo dei Ruoli Facilitare la scelta.
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
L2 Elaborazione di immagini in C/C++
Realizzazione Grammatica non contestuale –no ricorsioni sinistre –LL(1) produzione individuata dal primo token Ogni non-terminale -> funzione –rappresenta.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Collection & Generics in Java
Dynamic SQL.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
FUNZIONI Dichiarazione: Definizione:
FISM di Venezia Area Riservata Scuole del Veneto (ARiS) (agg. dati, agg. AdS) (home page per.
Allievi Elettrici - AA Le funzioni ricorsive in C
ABAP Objects ALV Grid Mantova, 30 dicembre 2018.
Interfacce in Java Superare il meccanismo dell’ereditarietà singola
Transcript della presentazione:

Sviluppo di Software Sicuro - S 3 SPARK – Moduli Corso di Laurea Magistrale in Sicurezza Informatica: Infrastrutture e Applicazioni Università di Pisa – Polo di La Spezia C. Montangero Anno accademico 2009/10

Sommario Preliminari: intervalli e array Oggetti e tipi astratti: Un trito esempio Moduli come oggetti Importazioni Moduli per tipi di dati astratti (ADT) S3: SPARK - C.Montangero - Copyright 20102

INTERVALLI E ARRAY S /10 – SPARK – Moduli 3S3: SPARK - C.Montangero - Copyright 2010

Sottotipi: intervalli S3: SPARK - C.Montangero - Copyright subtype Natural is Integer range 0.. Integer'Last; -- subtype Positive is NaturalT range 1.. Natural'Last; ThisStackSize : constant Integer := 100; subtype PointerT is Natural range Natural'First.. ThisStackSize; Pointer : PointerT; Definibili sui tipi discreti Sugli intervalli sono definiti gli attributi – First e Last, valori del tipo discreto da cui si parte – Range, da usare dove serve un intervallo (loop, aggregati,...): T'Range è come T'First.. T'Last

Cicli for J è una costante (diversa ad ogni ciclo) Il tipo è quello dell'intervallo S3: SPARK - C.Montangero - Copyright iteration_scheme ::= … | for loop_parameter_specification loop_parameter_specification ::= defining_identifier in [reverse] discrete_subtype_definition for J in Buffer'Range loop -- works even with a null range if Buffer(J) /= Space then Put(Buffer(J)); end if; end loop;

Dichiarazione di tipi array Aggregati: espressioni di tipo array – (StackIndexRange => 0) – IntStackT'(0, 0,..., 0) – StackIndexRange volte – IntStackT'(1 => 0, others => 16#0000_0000#) IntVectorT è svincolato, IntStackT vincolato Un oggetto di tipo array svincolato accetta valori su intervalli diversi – ridefinisce i propri attributi First, Last, Range S3: SPARK - C.Montangero - Copyright type IntVectorT is array (Integer range <>) of Integer; subtype StackIndexRange is Positive range 1.. ThisStackSize; subtype IntStackT is IntVectorT(StackIndexRange);

Tipi array vincolati e no IntVectorT è svincolato – gli attributi First, Last, Range non sono definiti IntStackT è vincolato – gli attributi First, Last, Range sono definiti, in base al subtype Gli oggetti di tipo array hanno gli stessi attributi – per tipi array svincolati definiti dinamicamente e possono cambiare durante l'esecuzione per esempio se son parametri di un sottoprogramma – per quelli vincolati sono fissati staticamente e gli assegnamenti devono essere coerenti S3: SPARK - C.Montangero - Copyright type IntVectorT is array (Integer range <>) of Integer; subtype StackIndexRange is Positive range 1.. ThisStackSize; subtype IntStackT is IntVectorT(StackIndexRange);

OGGETTI E TIPI ASTRATTI S /10 – SPARK – Moduli 8S3: SPARK - C.Montangero - Copyright 2010

Esempio: oggetto stack Definizione – di un modulo – allocato e inizializzato a tempo di caricamento (elaborazione, in Ada) No costruttori Ada ha – generic package S3: SPARK - C.Montangero - Copyright package Stack is function Empty return Boolean; procedure Clear; procedure Pop(X : out Integer); procedure Push(X : in Integer); end Stack; Definizione in due parti: specifica: interfaccia body: realizzazione con memoria

Esempio: tipo Stack Definizione – di un tipo – inizializzato a tempo di elaborazione Costruttori – possibili come funzioni – spesso costanti S3: SPARK - C.Montangero - Copyright package IntStack is type IntStackT is private; EmptyIntStack : constant IntStackT; function Empty(S: IntStackT) return Boolean; procedure Clear(S: in out IntStackT); procedure Pop(S: in out Stack; X: out Integer); procedure Push(S: in out Stack; X: in Integer); end Stack; body: realizzazione senza memoria

MODULI COME OGGETTI S /10 – SPARK – Moduli 11S3: SPARK - C.Montangero - Copyright 2010

Approccio ASM: abstract state machine Sistema SPARK ASM interagenti tramite le componenti pubbliche dello stato un solo flusso di controllo S3: SPARK - C.Montangero - Copyright

Moduli come oggetti: specifica Specifica delle operazioni – come sottoprogrammi che modificano lo stato – come denotarlo nelle derives? annotazione per dichiarare le variabili che definiscono lo stato in genere astratto -> una variabile raffinamento nel body Raffinamento: – definizione delle strutture dati concreti rappresentazione del tipo astratto Indipendenza spec/impl S3: SPARK - C.Montangero - Copyright

Esempio: Stack Il risultato di Empty dipende implicitamente da State Lo stato dopo clear non dipende da nulla Pop modifica lo stato, e il valore restituito dipende da State Lo stato dopo Push dipende dal valore inserito e dallo stato precedente own da Algol60 S3: SPARK - C.Montangero - Copyright package Stack --# own State; is function Empty return Boolean; --# global State; procedure Clear; --# global out State; --# derives State from ; procedure Pop(X : out Integer); --# global in out State; --# derives State from * --# & X from State; procedure Push(X : in Integer); --# global in out State; --# derives State from *,X; end Stack;

Moduli come oggetti: realizzazione Corpo delle operazioni – come sottoprogrammi che modificano lo stato concreto Raffinamento: rappresentazione del tipo --# own State is Pointer, Vector; le variabili a destra sono dichiarate nel body (owned): S3: SPARK - C.Montangero - Copyright nel corpo delle operazioni – le derives parlano di Pointer e/o Vector dove, nella specifica, si parla di State Pointer : PointerT; Vector : IntStackT ;

Annotazioni raffinate Sulle singole parti si può restringere il flusso informativo Ma tra tutte si deve render conto del flusso astratto: global in Pointer, Vector; -- errato! Le derives raffinate rendon conto dei nuovi flussi S3: SPARK - C.Montangero - Copyright procedure Pop(X : out Integer) --# global in out Pointer; in Vector; -- era in out State --# derives Pointer from * --# & X from Pointer, Vector; -- era State from * & X from State; is begin X := Vector(Pointer); Pointer := Pointer - 1; end Pop;

Inizializzazioni Lo stato di un package può essere inizializzato – al caricamento (elaborazione ) nelle singole dichiarazioni nella clausola begin (alla fine del package) – più espressivo – dinamicamente (in esecuzione) non accettato per stato usato da un main Esempi – in GPS (IntStack) S3: SPARK - C.Montangero - Copyright

IMPORTAZIONI S /10 – SPARK - Moduli 18S3: SPARK - C.Montangero - Copyright 2010

Accesso ai moduli esterni Clausole with e inherit – la seconda introdotta da SPARK apre la visibilità alle annotazioni – accesso con "." : nome_package.nome_entità Prefisse alla parola chiave "package" – package annidati: no with, sì inherit "with" anche per body – inherit non serve le nuove entità non possono essere nelle annotazioni il main fa eccezione! S3: SPARK - C.Montangero - Copyright

Esempio: IntStack S3: SPARK - C.Montangero - Copyright with Stack; --# inherit Stack; --# main_program; procedure MainInherit --# global Stack.State; --# derives Stack.State --# from *; is I : Integer; begin -- Stack.Clear; -- inizializzazione dinamica -- non accettata Stack.push(25); Stack.pop(I); Stack.Push(I);-- uso di I... end MainInherit;

Esempio: interi su standard IO non cambio SPARK_IO – faccio una "façade" (facciata) S3: SPARK - C.Montangero - Copyright with Spark_IO; --# inherit Spark_IO; package Standard_Spark_IO... procedure Std_Put_Integer (Item : in Integer ); --# global in out Spark_IO.Outputs ; --# derives Spark_IO.Outputs --# from *, Item;

Importazione: transitività? No transitività implicita Da esplicitare, se serve Standard... fornisce solo valori di default a sottoprogrammi di Spark_IO Le annotazioni riguardano lo stato di quest'ultimo S3: SPARK - C.Montangero - Copyright with Stack, Standard_Spark_IO, Spark_IO; --# inherit Stack, --# Standard_Spark_IO, --# Spark_IO; --# main_program; procedure Main -- usa solo Standard_Spark_IO -- ma questo usa Spark_IO -- nelle sue annotazioni...

Stack: c'è un problema, in SPARK? Stack overflow! Si può usare così solo se si dimostra / argomenta che – nessuna pop è fatta su stack vuoto – nessuna push è fatta su stack pieno Altrimenti firme con – parametro esito_OK : Boolean – esaminato al ritorno – lasciato come esercizio S3: SPARK - C.Montangero - Copyright

TIPI DI DATI ASTRATTI S /10 – SPARK - Moduli 24S3: SPARK - C.Montangero - Copyright 2010

Abstract Data Type (ADT) Idea: definire un tipo – definendo le proprietà delle operazioni – piuttosto che in base alla rappresentazione Esempio: push e pop definite implicitamente – emptyStack : Stack -- costante – pop(push(S,x)) = x – empty(emptyStack ) = true – empty(Push(S,x)) = false Information hiding segue naturalmente S3: SPARK - C.Montangero - Copyright

ADT: specifica Nome del tipo dei valori astratti – clausola private Specifica delle operazioni – come sottoprogrammi/funzioni oggetto astratto come parametro: p(a) invece di a.p() – annotazioni derives naturali no --# global per lo stato (portato dal parametro) rappresentazione nella specifica (parte privata) Maggiore dipendenza spec-impl S3: SPARK - C.Montangero - Copyright

Esempio: Stack (parte pubblica) package Stack is type IntStackT is private; -- esiste EmptyIntStack : constant IntStackT; -- pure function Empty(S: IntStackT) return Boolean; -- il valore dipende implicitamente da S procedure Clear(S: out IntStackT); --# derives S from ; procedure Pop(S: in out IntStackT; X : out Integer); --# derives S from * --# & X from S; procedure Push(S: in out IntStackT; X : in Integer); --# derives S from *,X; private -- fine della parte pubblica S3: SPARK - C.Montangero - Copyright

Esempio: Stack (parte privata 1) private StackSize : constant Integer := 100; subtype PointerT is Natural range Natural'First.. StackSize; type IntVectorT is array (Integer range <>) of Integer; subtype StackIndexRange is Positive range 1.. StackSize; subtype IntStackSupportT is IntVectorT(StackIndexRange); S3: SPARK - C.Montangero - Copyright

Esempio: Stack (parte privata 2) Il tipo record è essenziale per "impaccare" la rappresentazione Il compilatore vede la parte privata e può allocare la memoria per gli oggetti di tipo "astratto" Nella documentazione si può nascondere la parte privata S3: SPARK - C.Montangero - Copyright type IntStackT is record -- ecco il tipo Pointer : PointerT; Vector : IntStackSupportT; end record; -- e il valore della costante EmptyIntStack : constant IntStackT := IntStackT'(Pointer => 0, Vector => IntStackSupportT'(StackIndexRange => 0)); end Stack;

ADT: Realizzazione Dal body si vede anche la parte privata Non serve raffinamento – si usa il tipo privato – si devono rispettare comunque le annotazioni S3: SPARK - C.Montangero - Copyright function Empty (S: IntStackT) return Boolean is begin return S.Pointer = 0;-- selezione campo end Empty; procedure Clear (S: out IntStackT) is begin S := EmptyIntStack; end Clear; -- codice completo in IntStackADT

ADT: uso Come si legittima l'uso di Stack? – con with e inherit S3: SPARK - C.Montangero - Copyright Inp,Outp : Integer; Outcome : Boolean; MyStack : Stack.IntStackT := Stack.EmptyIntStack; begin Standard_Spark_IO.Std_Get_Integer(Inp, Outcome); if not Outcome then Standard_Spark_IO.Std_Put_Integer(-1); --errore return; end if; Stack.Push(MyStack, Inp); Stack.Pop(MyStack, Outp); Standard_Spark_IO.Std_Put_Integer(Outp); Stack.Pop(MyStack, Outp);