PROGRAMMIAMO
Algoritmi - Difetti del flowchart
Difetti del flow chart

Il linguaggio dei diagrammi di flusso è abbastanza semplice e naturale da usare, ma presenta alcuni inconvenienti piuttosto gravi.

Anzitutto è scomodo da usare per rappresentare algoritmi lunghi e complessi, in quanto richiede l'uso di schemi grafici complicati e difficili da leggere. Inoltre la struttura dei diagrammi di flusso non si adatta bene a rappresentare gli algoritmi scritti per i moderni computer.

Infatti i diagrammi di flusso usano un unico simbolo (il blocco di test o di controllo) per rappresentare due tipologie di istruzioni diverse fra loro: la selezione e il ciclo.

Blocco di controllo

La cosa è molto evidente se torniamo ad esaminare l'algoritmo per il calcolo dell'elevamento a potenza:

Algoritmo elevamento a potenza

Come si vede sono presenti due blocchi di test nel nostro diagramma, ma hanno funzioni completamente diverse, in quanto uno serve per comandare una selezione, mentre l'altro controlla un ciclo. Questo può indurre confusione in chi si avvicina per la prima volta alla programmazione e alla scrittura di algoritmi.

Un altro problema dei diagrammi di flusso è che è possibile costruire qualsiasi percorso usando i blocchi di test per "saltare" da un punto all'altro dell'algoritmo, in modo caotico e disordinato. Questo tipo di programmazione, un tempo molto frequente e detta anche, in modo evocativo, spaghetti-code, genera codice difficile da leggere, da sviluppare e da correggere.

 

Obbiettivi della moderna programmazione

Nella programmazione classica (quella che si usava quaranta e più anni fa) uno degli obbiettivi fondamentali nella scrittura di un algoritmo e di un programma era l'efficienza, valutata in base alla velocità di esecuzione e allo spazio occupato in memoria dal programma. Questo obbiettivo era utile all'epoca, poiché i computer erano lenti e avevano una memoria limitata, ma ha perso gran parte della sua validità oggi. Oggi risparmiare qualche linea di codice (qualche istruzione) per ottenere un algoritmo più efficiente è spesso inutile, di fronte a computer che normalmente sono in grado di eseguire qualsiasi programma in frazioni di secondo. Anzi, spesso migliorare l'efficienza può peggiorare la qualità dell'algoritmo, rendendolo più complicato e difficile da leggere.

Gli obbiettivi della programmazione moderna sono invece:

Il linguaggio dei diagrammi di flusso, come impareremo meglio nel seguito, è inadatto a produrre algoritmi che rispettino gli obbiettivi precedenti.

 

Programmazione strutturata

Il problema dei flow chart è che essi non mettono in evidenza le tre strutture base di cui si compone un programma: sequenze, selezioni e cicli. In particolare, le selezioni e i cicli, essendo entrambe realizzate con lo stesso blocco di test (il rombo) si confondono fra loro.

Diamo ora un'occhiata a come sarebbe scritto l'algoritmo precedente usando un moderno linguaggio di programmazione, il C++:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
double base, pot;
int esp;

cout<<"Dammi la base: ";
cin>>base;

cout<<"Dammi l'esponente: ";
cin>>esp;

pot = 1;

// SELEZIONE
if (esp<0)
{
esp = - esp;
base = 1/base;
}

// CICLO
while (esp>0)
{
pot = pot * base;
esp = esp - 1;
}

cout<<"L'elevamento a potenza vale "<<pot<<endl;

system("PAUSE");
return EXIT_SUCCESS;
}

Senza entrare qui nei dettagli di funzionamento del programma, osserviamo però che selezione e ciclo sono tradotte con istruzioni diverse in linguaggio C: if per la selezione e while per il ciclo.

Notiamo inoltre, attraverso l'uso delle parentesi graffe, la suddivisione del programma in blocchi (i quali possono essere contenuti in altri blocchi). Questa struttura modulare (a blocchi) e la distinzione fra istruzioni di selezione e ciclo sono tipiche di tutti i moderni linguaggi di programmazione. La tecnica di programmazione si dice programmazione strutturata e i linguaggi che ne fanno uso si dicono linguaggi strutturati.

Il C (e le sue varianti C++, C#), il Java, il JavaScript, il Pascal e tutti i moderni linguaggi sono linguaggi strutturati. I diagrammi di flusso invece sono destrutturati e per tale ragione non sono adatti a scrivere algoritmi che poi dovranno essere implementati con un linguaggio strutturato.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it