PROGETTAZIONE TOP-DOWN E BOTTOM-UP
|
|
|
- Pietro Gigli
- 9 anni fa
- Visualizzazioni
Transcript
1 PROGETTAZIONE TOP-DOWN E BOTTOM-UP Top-down e bottom-up sono strategie di elaborazione dell'informazione e di gestione delle conoscenze, riguardanti principalmente il software e, per estensione, altre teorie umanistiche e le teorie dei sistemi. Nel modello top-down è formulata una visione generale del sistema senza scendere nel dettaglio di alcuna delle sue parti. Poi ogni parte può essere nuovamente rifinita, specificando ulteriori dettagli finché la specifica completa è sufficientemente dettagliata da validare il modello. In contrasto con il modello top-down c'è la progettazione bottom-up, nella quale parti individuali del sistema sono specificate in dettaglio. Queste parti vengono poi connesse tra loro in modo da formare componenti più grandi, che vengono a loro volta interconnessi fino a realizzare un sistema completo. Resta tuttavia aperta una questione: come facciamo a suddividere un problema grosso in sotto-problemi di dimensioni inferiori? Esistono delle pratiche che facilitino l'analisi e la formalizzazione di problemi? Queste pratiche esistono, e sono oggetto di studio di una scienza, detta "Ingegneria del Software". Noi ci limitiamo ad analizzare i due approcci più in uso nella programmazione strutturata: Top Down e Bottom Up. Il principio fondante della programmazione strutturata è che sono sufficienti appena tre strutture di controllo per realizzare qualunque tipo di programma: la sequenza, l'iterazione e la selezione. Le istruzioni possibili appartengono a loro volta a tre sole categorie: input, output ed assegnamento. È possibile applicare i costrutti fondamentali di sequenza, iterazione e selezione in ciascun sottoprogramma accessibile da un programma. La programmazione top-down è uno stile di programmazione, fondamento dei tradizionali linguaggi procedurali, nel quale la progettazione inizia specificando parti complesse e suddividendole successivamente in parti più piccole. Eventualmente, i componenti sono specificati quanto basta per la codifica ed il programma viene anche scritto. Si segue quindi una scomposizione iterativa di un problema in sottoproblemi: si parte dall alto (problema nella sua interezza) e si arriva in basso (problema visto come insieme di sottoproblemi elementari). La tecnica per la scrittura di un programma mediante l'utilizzo dei metodi top-down indica di scrivere una procedura principale che indica dei nomi per le principali funzioni di cui avrà bisogno. In seguito, il gruppo di programmazione esaminerà i requisiti di ognuna di queste funzioni ed il processo verrà ripetuto. Queste sotto-procedure a comparto eseguiranno eventualmente azioni così elementari che porteranno ad una codifica semplice e concisa. Quando tutte le varie sotto-procedure sono state codificate, il programma è realizzato. Questo è l'esatto opposto della programmazione bottom-up che è comune nei linguaggi orientati agli oggetti come C++ o Java. Essa ha l'obiettivo di individuare algoritmi utili e di generalizzarli in modo da creare un insieme di funzioni di libreria. Ogni linguaggio che si rispetti comprende per default un buon numero funzioni di libreria, che coprono le esigenze più svariate. Nonostante la dimensione di tali librerie, esistono ancora oggi delle circostanze in cui ha un senso realizzare librerie per uso personale. La particolarità di una funzione di libreria è la sua versatilità: essa non si deve limitare a risolvere un particolare problema, ma una intera classe di problemi. Un tipico esempio di funzioni riutilizzabili sono le librerie di funzioni matematiche: il loro uso spazia dal calcolo scientifico a quello commerciale, dalla grafica 3D ai videogames. Vantaggi della programmazione Top-down permette di concentrarsi in ogni momento del progetto sugli aspetti più significativi, rimandando a momenti successivi gli aspetti di maggior dettaglio; consente di dare una descrizione dell'algoritmo risolutivo piu' leggibile; essendo ciascun sottoproblema indipendente dagli altri, la sua risoluzione puo' essere modificata, se necessario, senza che si modifichi la struttura generale dell'algoritmo risolutivo (migliore manutenzione dei programmi ); si puo' suddividere il compito di risolvere il problema tra piu' persone o gruppi di lavoro; la risoluzione di sottoproblemi puo' essere riutilizzata in altri problemi (riduzione dei costi di realizzazione di un programma)
2 Svantaggi La programmazione top-down può complicare la fase di test, dato che non esisterà un eseguibile finché non si arriverà quasi alla fine del progetto. La programmazione bottom-up agevola il test di unità, ma finché il sistema non si unisce non può essere testato nella sua interezza, e ciò causa spesso complicazioni verso la fine del progetto "Individualmente ci siamo, insieme falliamo." Limiti della programmazione Top Down Un tempo si pensava che l'approccio Top Down fosse la chiave per affrontare qualunque problema di programmazione. Ma a partire dagli anni '80 emersero almeno due grossi problemi: in primo luogo, l'approccio Top Down è ideale per problemi di dimensioni contenute, risolvibili con programmi da poche migliaia di righe di codice. Di contro, diventa quasi impraticabile su programmi di milioni di righe, sempre più comuni ai giorni nostri. In secondo luogo, la programmazione strutturata non offre un valido supporto alla progettazione di strutture di dati, uno degli aspetti più importanti della programmazione. La progettazione di strutture dati con linguaggi procedurali è un tema talmente complesso da scoraggiarne la trattazione anche solo in forma superficiale. I linguaggi ad oggetti offrono un approccio molto più intuitivo e naturale all'argomento in quanto la programmazione ad oggetti è basata largamente sul principio della composizione e dell'astrazione delle strutture dati. TECNICHE DEI SOTTOPROGRAMMI (METODOLOGIA TOP-DOWN) La scomposizione di un problema P in sottoproblemi, che possono essere risolti in modo indipendente all'interno di P, permette di costruire programmi con strumenti informatici specifici che prendono il nome di tecniche dei sottoprogrammi. Il programma che risolve il problema P sarà quindi costituito da: un programma principale (main), avente la funzione di risolvere globalmente il problema P, uno o più sottoprogrammi la cui funzione è quella di risolvere i sottoproblemi contenuti in P. Programma principale Chiamata sp. A Chiamata sp. B Sottoprogramma A Chiamata sp. C -- Sottoprogramma B Sottoprogramma C - Chiamata sp. D Sottoprogramma D Un sottoprogramma può essere: una funzione se, quando termina, restituisce al programma chiamante un valore, una procedura se, quando termina, non restituisce al programma chiamante nessun valore. Ogni sottoprogramma è identificato da un nome a cui un'istruzione del programma principale, detta chiamata, fa riferimento in ogni punto del programma in cui è richiesta l'esecuzione del sottoprogramma chiamato. Anche nei sottoprogrammi si possono trovare delle chiamate ad altri sottoprogrammi. Durante l'elaborazione del programma principale il computer, ogni volta che incontra un'istruzione di chiamata ad un sottoprogramma, sospende l'elaborazione del programma principale ed esegue le istruzioni del sottoprogramma chiamato, per poi tornare ad elaborare il programma principale a partire dalla prima istruzione successiva a quella della chiamata
3 In generale un sottoprogramma implementa un algoritmo che opera su alcuni valori, detti dati di ingresso o parametri di ingresso, che il sottoprogramma riceve dal programma principale (o dal sottoprogramma chiamante) mediante l'istruzione di chiamata. Dopo aver ricevuto i dati di ingresso, il sottoprogramma calcola dei valori, detti dati di uscita o parametri di uscita, e restituisce tali valori al programma principale (o al sottoprogramma chiamante). Ci sono casi in cui il sottoprogramma non ha né dati di ingresso né dati di uscita. Il programma principale comunica con il sottoprogramma mediante una lista di variabili, dette parametri attuali o effettivi, che vengono specificati nella chiamata al sottoprogramma e destinati a contenere i dati di ingresso su cui il sottoprogramma deve operare. Il sottoprogramma contiene all'inizio della sua definizione una lista di variabili, dette parametri formali, che servono a contenere i dati di ingresso del sottoprogramma che saranno riempiti con i valori dei parametri attuali del programma chiamante. In C++ ogni sottoprogramma è una funzione. In C++ anche il programma principale è una funzione che, in genere, non ha nessun dato di ingresso e nessun dato di uscita ( void main ( ) ). Esempio int max (int, int ); void main( ) { int N, M, X; cout<<"inserisci un primo valore intero : " ; cin >> N; cout<<"inserisci un secondo valore intero : " ; cin >> M; X= max (N, M); // chiamata alla funzione di // nome max alla quale vengono // passati i valori contenuti nei // parametri attuali N e M cout<< "\n Il valore maggiore è : "<<X ; // funzione max che ha come // parametri formali A e B int max (int A, int B) { if (A>=B) return A; else return B; - 3 -
4 IMPLEMENTAZIONE DELLE FUNZIONI IN C++ In C++ ogni funzione ha bisogno di due parti: la dichiarazione della funzione per mezzo di un prototipo la definizione della funzione stessa Il prototipo di una funzione viene specificato nel seguente modo: tipo_valore_restituito nome_funzione ( tipo_param1, tipo_param2,..); e viene posto subito prima del programma principale (main). Il tipo_valore_restituito indica il tipo del dato in uscita (restituito al programma chiamante) e può essere uno qualsiasi dei tipi di dati ammessi in C++ ( ad es. int o float o long int.); se non viene specificato è sottinteso int ; per indicare che la funzione non restituisce nessun valore si deve scrivere void (ad es. void main ( ) ). Il nome_funzione è il nome che il programmatore assegna alla funzione e che usa nelle chiamate. I tipo_param1, tipo_param2,.. indicano l'elenco dei tipi dei parametri di ingresso. Quindi se i parametri di ingresso sono 3 devono essere specificati 3 tipi ( ad es. int, int, float). Se non vi sono parametri di ingresso non si scrive nessun tipo. La definizione della funzione viene posta dopo la definizione della funzione main, cioè dopo il programma principale ed ha la seguente struttura: tipo_valore_restituito nome_funzione ( tipo_param1 nome_param1, tipo_param2 nome_param2,..) { corpo della funzione tipo_param1 nome_param1, tipo_param2 nome_param2 sono i nomi dei parametri di ingresso preceduti ciascuno dal tipo che è già stato specificato nel prototipo della funzione. Il corpo della funzione è composto da: a) eventuali dichiarazioni di variabili locali alla funzione, cioè variabili usate e conosciute solo all'interno della funzione; b) le istruzioni che realizzano la funzione; c) una o più istruzioni del tipo: return espressione che restituiscono il valore (parametro di uscita) al programma chiamante; se la funzione ha come tipo_valore_restituito void si mette solo return senza che sia seguito da alcun valore
5 Esempio di programma in C++ strutturato in sottoprogrammi /* Date da tastiera le misure dei cateti di un triangolo rettangolo visualizza i valori dell'ipotenusa, dell'area e dell'altezza relativa all'ipotenusa */ #include <iostream> #include <math.h> using namespace std; //Prototipi float ipotenusa (float, float); float area (float, float); float altezza (float, float); Prototipi delle funzioni void main() {float c1, c2, ar, ip, alt; // richiesta dati do {cout << "Inserisci il primo cateto: "; cin >> c1; while(c1<=0); do {cout << "Inserisci il secondo cateto: "; cin >> c2; while(c2<=0); // Determina area, ipotenusa e altezza ar = area ( c1, c2 ); Variabili locali al main e quindi conosciute solo nel corpo del main // Programma principale ip = ipotenusa ( c1, c2 ); alt= altezza ( ar, ip ); Parametri attuali Chiamate delle funzioni // Visualizza i risultati cout <<"\nl'ipotenusa è: "<< ip ; cout <<"\nl'area è: "<< ar ; cout <<"\nl'altezza è: "<< alt << endl; system ("pause"); // Definizione di funzione // Restituisce il valore dell'ipotenusa // dati i valori dei cateti float ipotenusa (float a, float b ) {float q, ipo; q =a*a + b*b; ipo =sqrt(q); return ipo; Parametri formali // Definizione di funzione (parametri di ingresso) // Restituisce l'area del triangolo dati // i cateti float area (float c, float d ) {float a ; a = c*d/2; return a ; Variabili locali alla funzione e quindi conosciute solo in ipotenusa (parametri di uscita che rappresentano i valori restituiti) // Definizione di funzione // Restituisce l'altezza relativa all'ipotenusa // data l'area e l'ipotenusa float altezza (float area_tri, float ipo_tri ) {float h; h = area_tri * 2 /ipo_tri; return h ; - 5 -
PROGETTAZIONE TOP-DOWN E BOTTOM-UP
PROGETTAZIONE TOP-DOWN E BOTTOM-UP Top-down e bottom-up sono strategie di elaborazione dell'informazione e di gestione delle conoscenze, riguardanti principalmente il software e, per estensione, altre
Procedura. Procedure e funzioni. Esempio di procedura in C. Procedure in C. Esempio con prototipo. Esecuzione del codice
Procedure e funzioni In linguaggio C Procedura Una procedura può essere rappresentata come una macchina in grado di eseguire un certo compito quando attivata. In un primo tempo la macchina deve essere
Top down e bottom up
Top down e bottom up Top down e bottom up sono termini di lingua inglese attribuiti a metodologie adoperate per analizzare situazioni problematiche e costruire ipotesi adeguate alla loro soluzione: il
La formalizzazione dell informazione: Dati e Diagrammi di Flusso
La formalizzazione dell informazione: Dati e Diagrammi di Flusso Codifica degli algoritmi Algoritmo formulato per essere comunicato tra esseri umani chiaro, sintetico e intuitivo codificato in linguaggi
ITI M. FARADAY. Programmazione a. s
ITI M. FARADAY Programmazione a. s. 2018-2019 Disciplina: INFORMATICA Indirizzo: INFORMATICA E TELECOMUNICAZIONI Classi: Terza A Terza B Ore settimanali previste: 6 (3 ora Teoria - 3 ore Laboratorio) Docenti:
Classe Squadra. #include <iostream> using namespace std;
Classe Squadra Si vuole scrivere un programma che gestisce la classifica di un campionato tra squadre di calcio, ognuna identificata dal proprio nome. Il programma deve essere in grado di assegnare un
ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)
1 LEZIONE 9 ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE) Laboratorio di Informatica per l Educazione A. A. 2014/2015 IN SINTESI (ELABORAZIONE) Con i COMPUTER, le macchine diventano
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni
Programmazione I. Fondamenti di programmazione. Problemi, Algoritmi, Diagrammi di flusso
Programmazione I Fondamenti di programmazione ( Lezione I ) Problemi, Algoritmi, Diagrammi di flusso Fabrizio Messina [email protected] www.dmi.unict.it/~messina Algoritmo Dato un problema, un algoritmo
Introduzione alla programmazione. Alice Pavarani
Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello
L ELABORATORE ELETTRONICO!
L ELABORATORE ELETTRONICO! Il calcolatore elettronico è uno strumento in grado di eseguire insiemi di azioni ( mosse ) elementari le azioni vengono eseguite su oggetti (dati) per produrre altri oggetti
Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi
Obiettivi Unità F1 Primi programmi Conoscere il significato di dichiarazione e definizione di variabili Conoscere i tipi di dato numerici Essere in grado di realizzare semplici algoritmi in pseudolinguaggio
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
ELEMENTI DI INFORMATICA L. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Esempi di Testi di esame Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del corso
Implementazione dell albero binario in linguaggio C++
Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve
Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
Linguaggio C: le funzioni. Introduzione e sintassi
ISIS "Guido Tassinari" di Pozzuoli Indirizzo Informatico - Articolazione Informatica Informatica Prof. A.S. 2012/2013 Linguaggio C: le funzioni. Introduzione e sintassi 21/10/2012 Introduzione Spesso alcuni
Corso di Fondamenti di Informatica Linguaggi di Programmazione
Corso di Fondamenti di Informatica Linguaggi di Programmazione Anno Accademico Francesco Tortorella Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann permette l esecuzione di
Informatica! Appunti dal laboratorio 1!
Informatica Appunti dal laboratorio 1 Sistema Operativo Windows Vista, Windows 7, Mac OS X, Linux, Debian, Red Hat, etc etc Il sistema operativo è un programma che serve a gestire TUTTE le risorse presenti
Funzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
2 Operatori matematici e costrutto if
Questa dispensa propone esercizi sulla scrittura di algoritmi, in linguaggio C, utili alla comprensione delle operazioni tra numeri e del costrutto condizionale if. Si introducono anche le due funzioni
L AMBIENTE CODE BLOCKS E L IO
L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout
Programmazione modulare
Programmiamo in.. Programmazione modulare Un programma complesso si suddivide in più sottoprogrammi o funzioni. Un programma suddiviso in piccoli pezzi, è più semplice da gestire da aggiornare da correggere
INTRODUZIONE ALLA PROGRAMMAZIONE
INTRODUZIONE ALLA PROGRAMMAZIONE Prof. Enrico Terrone A. S: 2008/09 Definizioni Programmare significa risolvere problemi col computer, cioè far risolvere problemi al computer attraverso un insieme di informazioni
Qualsiasi programma in C++ segue lo schema:
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè
Pr1: determinare il maggiore di n numeri interi 1 2 3 4 n 1 Pr1: determinare il maggiore di n numeri interi 1 2 3 4 n P1. trovare il maggiore fra i primi 2 numeri; P2. trovare il maggiore fra il terzo
Linguaggio C: le funzioni. Introduzione e sintassi
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Introduzione e sintassi La presente dispensa
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E03 Esempi di algoritmi e programmi A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di algoritmi e
Nota: Si consideri il valore di pi greco.
ESERCIZIO 1 (Costrutti condizionali + Casting delle variabili) Realizzare un programma che, dato in ingresso un angolo specificato in gradi come un numero intero, fornisca la relativa conversione in radianti.
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni Lab 06 Array" Lab06 1 Esercizio 1" n Creare un programma che legga da input un numero non noto a priori di interi
Laboratorio di Informatica
Strutture di dati Laboratorio di Informatica 5. Strutture / Array di oggetti / Pila&Coda in C++ Una struttura è un insieme finito di variabili (dette campi) non necessariamente dello stesso tipo, ognuna
CL 3 - Es_01.cpp. #include <iostream> using namespace std;
Problema: Individua gli errori, sintattici, lessicali e logici, presenti nel seguente programma affinché risolva il problema: "Visualizzare il prodotto di due valori interi inseriti da tastiera ". (Riscrivere
Introduzione al linguaggio C Funzioni
Introduzione al linguaggio C Funzioni Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
Corso di Fondamenti di Informatica Sottoprogrammi
Corso di Fondamenti di Informatica Sottoprogrammi Anno Accademico Francesco Tortorella Nuove operazioni? In qualunque linguaggio di programmazione il tipo di dati non specifica solo l insieme dei valori
L ELABORATORE ELETTRONICO
L ELABORATORE ELETTRONICO Il calcolatore elettronico è uno strumento in grado di eseguire insiemi di azioni ( mosse ) elementari le azioni vengono eseguite su oggetti (dati) per produrre altri oggetti
Corso di Informatica Modulo T3 2 Ambiente locale e globale
Corso di Informatica Modulo T3 2 Ambiente locale e globale 1 Prerequisiti Struttura elementare della memoria Area dati e area programma Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità
Strutture di iterazione
Strutture di iterazione 1. Leggi i programmi qui sotto e disegna le tabelle di traccia nelle situazioni seguenti: a. Nel primo e nel secondo programma viene inserito da tastiera il valore 2; b. Nel primo
