Modularizzazione del software

Похожие документы
Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Linguaggio C: introduzione

Linguaggio C: le funzioni. Introduzione e sintassi

UD 3.2b: Programmazione in Pascal (1)

Primi passi col linguaggio C

Operazioni di input e output in Fortran 90

UML I diagrammi implementativi

Linguaggio C - sezione dichiarativa: costanti e variabili

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Fortran in pillole : prima parte

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

PROMEMORIA: Come creare, compilare ed eseguire programmi in Fortran 95

STRUTTURA DI UN PROGRAMMA

II Esercitazione: S.O. & Fortran 77

Programmazione Procedurale in Linguaggio C++

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Definizione di metodi in Java

Linguaggi di alto livello, compilatori e interpreti

Linguaggi di Programmazione

Programmazione Orientata agli Oggetti in Linguaggio Java

Costrutti condizionali e iterativi

Metodologie di programmazione in Fortran 90

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

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

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Gestione delle eccezioni in Java

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

Lab 01 Introduzione a Codelite

Argomenti Corso SAP Online ABAP Completo

Istruzioni iterative (o cicliche)

VISUAL BASIC FOR APPLICATION

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Percorso Formativo SAP Online ABAP/4 Completo

Argomenti Corso SAP Online ABAP/4 Completo

LINGUAGGI DI ALTO LIVELLO

Fortran per Ingegneri

Algoritmi e basi del C Struttura di un programma

Esercizi Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Unità Didattica 2 I Linguaggi di Programmazione

Informatica! Appunti dal laboratorio 1!

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

APPUNTI DEL CORSO DI LABORATORIO DI CALCOLO AVANZATO

Programmazione di INFORMATICA e Laboratorio

Laboratorio di Python (con Linux)

Fasi di un Compilatore

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Gestione di files Motivazioni

Esercitazioni di Informatica 3

IL VHDL. Perché si usa un linguaggio di descrizione dell'hardware? Permette di formalizzare il progetto di sistemi digitali complessi

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Programmazione C Massimo Callisto De Donato

perror: individuare l errore quando una system call restituisce -1

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Struttura dei programmi C

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Come ragiona il computer. Problemi e algoritmi

POWER POINT Uso del programma, sue applicazioni e strumenti di lavoro.

La programmazione nel linguaggio C

Input/Output di numeri

Mobile Programming. Prova scritta del 22/01/2016. Prof. De Prisco. Corso di laurea in Informatica

Laboratorio di programmazione

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

Stringhe e allocazione dinamica della memoria

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

IL PRIMO PROGRAMMA IN C

Individuazione di sottoproblemi

Транскрипт:

Modularizzazione del software Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 1 / 24

Cosa vedremo in questa lezione 1 Modularizzazione 2 Subroutine e moduli 3 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 2 / 24

Modularizzazione Modularizzazione del software La modularizzazione è un esigenza generale dell Ingegneria: Utile a chi usa moduli realizzati da altri Utile a chi progetta moduli per farli usare da altri Un modulo è una scatola nera. Per utilizzarlo: Basta conoscere cosa fa Non serve conoscere come lo fa Data hiding In questo corso IMPARIAMO A PROGETTARE semplici moduli software, chiamati sottoprogrammi Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 3 / 24

Sottoprogrammi Modularizzazione È ragionevole scrivere un sottoprogramma in almeno due casi: uno stesso compito deve essere ripetuto più volte, in contesti diversi Esempio: visualizzazione di uno screen saver uno stesso compito è parametrico Esempio: calcolo della deviazione standard per un insieme di valori Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 4 / 24

Modularizzazione Vantaggi della modularizzazione Semplificazione della verifica della correttezza semantica e nella correzione di errori In generale, è più facile isolare un errore in un programma modularizzato È possibile testare i diversi moduli indipendentemente l uno dall altro Riusabilità del software: Se un modulo è ben progettato, può essere riusato (da parte di noi stessi o di altri) in altri programmi È possibile costruire librerie di moduli riusabili Leggibilità del codice Possibilità di realizzazione di prototipi Semplificazione dell attività di manutenzione Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 5 / 24

Modularizzazione Sottoprogrammi e moduli in Fortran 90 In Fortran 90 esistono due tipi di unità di programma: SUBROUTINE FUNCTION Le unità di programma Fortran 90 sono solitamente contenute apposite librerie denominate moduli (MODULE) Contiene una o più unità di programma (SUBROUTINE e/o FUNCTION). Può essere scritto in un file.f90 a sé stante. (tipicamente quando abbiamo intenzione di RIUSARLO). Se è in un file a sé stante: deve essere compilato deve essere collegato con il programma principale Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 6 / 24

Modularizzazione Esempio di compilazione e collegamento File sorgenti: MIOMOD.F90 (contiene il MODULE M) PRINC.F90 (contiene il PROGRAM P) Compilazione del file contenente il modulo: C:\MIEIPROG>elf90 MIOMOD.F90 Risultato: file M.LIB e M.MOD A questo punto, non serve più il file MIOMOD.F90 Compilazione del file contenente il programma principale e collegamento: C:\MIEIPROG>elf90 PRINC.F90 Risultato: file PRINC.EXE e altri Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 7 / 24

Modularizzazione Situazione tipica in un progetto SW In un progetto software (industriale o accademico), anche di piccole dimensioni, la situazione tipica prevede: Un file sorgente (.F90 ) contenente il PROGRAM (programma principale); vari file sorgente, ognuno contenente un MODULE; ogni MODULE può contenere varie SUBROUTINE e/o FUNCTION; vari file di libreria (.MOD,.LIB,.OBJ ), prodotti durante altri progetti della stessa impresa e/o acquistati da ditte specializzate. Applicazione in grande del meccanismo di scomposizione e raffinamento dei problemi Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 8 / 24

Subroutine e moduli Subroutine in Fortran 90 Caratteristiche di una subroutine Unità di programma indipendente Può essere utilizzata all interno di altri programmi Fortran 90 Ammette sia parametri di input che di output Sintassi dichiarazione subroutine: SUBROUTINE nome subroutine ( lista argomenti FITTIZI ) sezione dichiarativa sezione esecutiva RETURN END SUBROUTINE identificatore Per invocare una subroutine è necessario utilizzare l istruzione CALL CALL nome subroutine(lista argomenti) L istruzione RETURN a fine procedura è opzionale; tuttavia alcuni compilatori la richiedono obbligatoriamente Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 9 / 24

Subroutine e moduli Moduli Caratteristiche di un modulo Unità di programma che consente di includere subroutine e funzioni al suo interno Consente di attribuire una interfaccia esplicita ai sottoprogrammi Sintassi dichiarazione modulo: MODULE nome modulo CONTAINS dichiarazioni di unità di programma END MODULE nome modulo Per invocare i sottoprogrammi contenuti nel modulo, è necessario importare il modulo attraverso l istruzione USE PROGRAM nome programma USE nome modulo IMPLICIT NONE Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 10 / 24

Soluzione di un problema mediante modularizzazione Problema Progettare un programma per la stampa di figure geometriche (programma didattico, ad es. per la scuola materna), in cui l utente può scegliere, mediante un menu: La figura da stampare (quadrato o triangolo) La dimensione della figura Il carattere con cui riempire la figura Di quanto spostare la figura verso destra Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 11 / 24

Struttura del programma 1. Programma principale (PROGRAM): si occupa dell interfaccia utente (menu) attiva i sottoprogrammi 2. Modulo (MODULE) si occupa delle stampe vere e proprie contiene i vari sottoprogrammi (SUBROUTINE) Nota: è ragionevole strutturare il programma in due parti perché: è possibile riusare il modulo delle stampe in altri programmi è più semplice migliorare l interfaccia utente (ad es., con finestre) è più semplice trovare gli errori (debugging) tutte le stampe sono in un solo modulo (coesione);... Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 12 / 24

Le diverse versioni del programma Vedremo quattro versioni distinte, di complessità crescente. Le versioni sono caratterizzate da un astrazione CRESCENTE del concetto di figura. Ci sarà un livello CRESCENTE di PARAMETRIZZAZIONE delle subroutine di stampa delle figure: Versione 1: NON parametrico, stampa messaggi, non figure; Versione 2: NON parametrico, stampa figure; Versione 3: parametrico rispetto alla sola DIMENSIONE; Versione 4: parametrico anche rispetto allo SPOSTAMENTO e al CARATTERE di riempimento. Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 13 / 24

Algoritmo per le versioni 1/2 CICLO stampa un messaggio all utente; leggi un carattere; SE il carattere letto è T oppure t : stampa un triangolo; Q oppure q : stampa un quadrato; F oppure f : stampa un messaggio di saluto; NEGLI ALTRI CASI : stampa un messaggio di avvertimento SE il carattere letto è F oppure f ALLORA esci dal ciclo FINE CICLO Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 14 / 24

Stampa delle figure: versione 1 8 MODULE modulo stampe 1 9! Questo modulo c o n t i e n e l a d e f i n i z i o n e d i p r o c e d u r e p e r l a stampa 10! d i f i g u r e e m e s s a g g i 11 CONTAINS 12! DEFINIZIONE d e l l a SUBROUTINE stampa triangolo ( ) 13 SUBROUTINE s t a m p a t r i a n g o l o ( ) 14 WRITE (, ) QUESTO E UN TRIANGOLO 15 RETURN 16 END SUBROUTINE s t a m p a t r i a n g o l o 17 18! DEFINIZIONE d e l l a SUBROUTINE stampa quadrato ( ) 19 SUBROUTINE stampa quadrato ( ) 20 WRITE (, ) QUESTO E UN QUADRATO 21 RETURN 22 END SUBROUTINE s t a m p a q u a d r a t o 23 24! DEFINIZIONE d e l l a SUBROUTINE stampa saluto ( ) 25 SUBROUTINE stampa saluto ( ) 26 WRITE (, ) CIAO : ) 27 RETURN 28 END SUBROUTINE s t a m p a s a l u t o 29 30! DEFINIZIONE d e l l a SUBROUTINE stampa errore ( ) 31 SUBROUTINE s t a m p a e r r o r e ( ) 32 WRITE (, ) COSA? 33 RETURN 34 END SUBROUTINE s t a m p a e r r o r e 35 END MODULE modulo stampe 1 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 15 / 24

Stampa delle figure: versione 1 37 PROGRAM s t a m p a f i g u r e 1 38! VERSIONE 1 : 39! E p o s s i b i l e s c e g l i e r e s o l a m e n t e l a forma. 40! Non vengono stampate l e forme, ma solamente un messaggio. 41! SEZIONE DICHIARATIVA 42 USE modulo stampe 1! dichiariamo di v o l e r e usare i l modulo 43 IMPLICIT NONE 44 CHARACTER(1) : : ch! s e r v e p e r i l d i a l o g o con l u t e n t e 45! SEZIONE ESECUTIVA 46 DO 47 WRITE (, ) 48 WRITE (, ) IMMETTI UN CARATTERE A SCELTA FRA I SEGUENTI 49 WRITE (, ) T : stampa un t r i a n g o l o 50 WRITE (, ) Q: stampa un quadrato 51 WRITE (, ) F : per terminare i l programma 52 WRITE (, ) 53 READ (, ) ch 54 SELECT CASE ( ch ) 55 CASE ( T, t ) 56 CALL s t a m p a t r i a n g o l o ( )! CHIAMATA d e l l a SUBROUTINE stampa triangolo ( ) 57 CASE ( Q, q ) 58 CALL stampa quadrato ( )! CHIAMATA d e l l a SUBROUTINE stampa quadrato ( ) 59 CASE ( F, f ) 60 CALL stampa saluto ( )! CHIAMATA d e l l a SUBROUTINE stampa saluto ( ) 61 CASE DEFAULT 62 CALL s t a m p a e r r o r e ( )! CHIAMATA d e l l a SUBROUTINE stampa errore ( ) 63 END SELECT 64 IF ( ch == f.or. ch == F ) EXIT 65 END DO 66 STOP 67 END PROGRAM s t a m p a f i g u r e 1 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 16 / 24

Commenti su FIGURE1.F90 Sintassi CHIAMATA (o INVOCAZIONE o ATTIVAZIONE) subroutine USE modulo stampe 1... CALL stampa triangolo() Negli esempi dei file FIGURE1.F90 e FIGURE2.F90, la lista dei parametri di input e di output è vuota. L unità di programma che effettua la chiamata (nell esempio, il PROGRAM stampa figure 1) svolge il ruolo di unità chiamante. L unità di programma oggetto della chiamata (nell esempio, le SUBROUTINE stampa triangolo, SUBROUTINE stampa quadrato,... ) svolge il ruolo di unità chiamata. Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 17 / 24

Stampa delle figure: versione 2 8 MODULE modulo stampe 2 9! Questo modulo c o n t i e n e l a d e f i n i z i o n e d i p r o c e d u r e p e r l a stampa 10! d i f i g u r e e m e s s a g g i 11 CONTAINS 12 SUBROUTINE s t a m p a t r i a n g o l o ( ) 13! SEZIONE DICHIARATIVA 14 IMPLICIT NONE 15 INTEGER, PARAMETER : : l u n g h e z z a = 9! lunghezza del l a t o COSTANTE LOCALE 16 INTEGER : : i! i n d i c e d e l c i c l o VARIABILE LOCALE 17 CHARACTER( lunghezza ) : : l i n e a! l i n e a da stampare VARIABILE LOCALE 18 19! SEZIONE ESECUTIVA 20 DO i = 1, lunghezza 21 l i n e a ( i : i ) = 22 END DO 23 24 DO i = 1, lunghezza 25 l i n e a ( i : i ) = 26 WRITE (, ) l i n e a! l a r i g a e p r o n t a e s i puo stampare 27 END DO 28 29 RETURN 30 END SUBROUTINE s t a m p a t r i a n g o l o Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 18 / 24

Stampa delle figure: versione 2 31 32 SUBROUTINE stampa quadrato ( ) 33! SEZIONE DICHIARATIVA 34 IMPLICIT NONE 35 INTEGER, PARAMETER : : l u n g h e z z a = 9! lunghezza del l a t o COSTANTE LOCALE 36 INTEGER : : i! i n d i c e d e l c i c l o VARIABILE LOCALE 37 CHARACTER( lunghezza ) : : l i n e a! l i n e a da stampare VARIABILE LOCALE 38 39! SEZIONE ESECUTIVA 40 DO i = 1, lunghezza 41 l i n e a ( i : i ) = 42 END DO 43 DO i = 1, lunghezza 44 WRITE (, ) l i n e a 45 END DO 46 47 RETURN 48 END SUBROUTINE s t a m p a q u a d r a t o 49 50 SUBROUTINE stampa saluto ( ) 51 WRITE (, ) CIAO : ) 52 RETURN 53 END SUBROUTINE s t a m p a s a l u t o 54 55 SUBROUTINE s t a m p a e r r o r e ( ) 56 WRITE (, ) COSA? 57 RETURN 58 END SUBROUTINE s t a m p a e r r o r e 59 60 END MODULE modulo stampe 2 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 19 / 24

Stampa delle figure: versione 2 62 PROGRAM s t a m p a f i g u r e 2 63! VERSIONE 2 : 64! E p o s s i b i l e s c e g l i e r e s o l a m e n t e l a forma. 65! SEZIONE DICHIARATIVA 66 USE modulo stampe 2 67 IMPLICIT NONE 68 CHARACTER(1) : : ch! s e r v e p e r i l d i a l o g o con l u t e n t e 69! SEZIONE ESECUTIVA 70 DO 71 WRITE (, ) 72 WRITE (, ) IMMETTI UN CARATTERE A SCELTA FRA I SEGUENTI 73 WRITE (, ) T : stampa un t r i a n g o l o 74 WRITE (, ) Q: stampa un quadrato 75 WRITE (, ) F : per terminare i l programma 76 WRITE (, ) 77 READ (, ) ch 78 SELECT CASE ( ch ) 79 CASE ( T, t ) 80 CALL s t a m p a t r i a n g o l o ( ) 81 CASE ( Q, q ) 82 CALL stampa quadrato ( ) 83 CASE ( F, f ) 84 CALL stampa saluto ( ) 85 CASE DEFAULT 86 CALL s t a m p a e r r o r e ( ) 87 END SELECT 88 IF ( ch == f.or. ch == F ) EXIT 89 END DO 90 STOP 91 END PROGRAM s t a m p a f i g u r e 2 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 20 / 24

Commenti su FIGURE2.F90 Ogni unità di programma può avere una sezione dichiarativa Valgono le stesse regole della sezione dichiarativa di PROGRAM (ad esempio, è possibile dichiarare sia costanti sia variabili). Le costanti/variabili dichiarate in un unità di programma S si chiamano LOCALI ad S Non sono visibili all esterno di S (concetto di scatola nera ). Analogamente, le costanti/variabili dichiarate nel PROGRAM non sono visibili all esterno del PROGRAM stesso. Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 21 / 24

Regole di visibilità in Fortran 90 Regola 1 (già vista) Un identificatore si può definire solamente una volta in un unità di programma (SUBROUTINE, FUNCTION o PROGRAM) Regola 2 Le costanti/variabili dichiarate in un unità di programma (SUBROUTINE, FUNCTION o PROGRAM) S non possono essere usate (non sono visibili ) all esterno di S Di conseguenza: Possiamo dichiarare costanti e/o variabili con lo stesso nome in vari sottoprogrammi (file VISIBIL.F90) Una SUBROUTINE o FUNCTION è veramente una scatola nera. Ad esempio, possiamo usare una SUBROUTINE stampa triangolo scritta da un altro senza preoccuparci di conflitti sui nomi Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 22 / 24

Visibilità delle costanti/variabili: esempio 1! F i l e : v i s i b i l. f 9 0 2! Time stamp : 01/12/19 1 5 : 0 7 : 3 1 c a d o l i 3! Scopo : i l l u s t r a z i o n e r e g o l e d i v i s i b i l i t a i n F o r t r a n 90 4 5 MODULE mio modulo 6 CONTAINS 7 SUBROUTINE sub1 ( ) 8! SEZIONE DICHIARATIVA 9 IMPLICIT NONE 10 INTEGER : : i = 1, j sub1 = 10 11! SEZIONE ESECUTIVA 12 WRITE (, ) i, j sub1 13! WRITE (, ) j m a i n > ERRORE SINTATTICO : j m a i n non e v i s i b i l e 14 RETURN 15 END SUBROUTINE sub1 16 17 SUBROUTINE sub2 ( ) 18! SEZIONE DICHIARATIVA 19 IMPLICIT NONE 20 INTEGER : : i = 2 21! SEZIONE ESECUTIVA 22 WRITE (, ) i 23 RETURN 24 END SUBROUTINE sub2 25 END MODULE mio modulo Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 23 / 24

Visibilità delle costanti/variabili: esempio 27 PROGRAM main 28! SEZIONE DICHIARATIVA 29 USE mio modulo 30 IMPLICIT NONE 31 INTEGER : : i = 3, j main = 30 32! SEZIONE ESECUTIVA 33 WRITE (, ) i, j main! stampa 3, 30 34! WRITE (, ) j s u b 1 > ERRORE SINTATTICO : j s u b 1 non e v i s i b i l e 35 CALL sub1 ( )! stampa 1, 10 36 CALL sub2 ( )! stampa 2 37 STOP 38 END PROGRAM main Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica 24 / 24