Progettazione del software – parte I



Introduzione

Con l’aumentare della complessità del software e con la diffusione capillare dei computer sono nate due esigenze:

  • poter studiare a tavolino il sistema da implementare nel modo più comodo e veloce possibile, rendendo poi la traduzione in un linguaggio di programmazione più rapida possibile.

  • Facilitare la manutenibilità del codice scomponendo il progetto in più parti riutilizzabili in futuro e di facile estensione

La chiave di tutto in questa evoluzione è stata l’astrazione. Quando si usavano i primi elaboratori si programmava direttamente con il linguaggio della macchina e la fase di progettazione iniziale era la mera pianificazione di un algoritmo e rendere mantenibile il codice in maniera agevole per il futuro richiedeva uno sforzo enorme nella fase iniziale dello sviluppo e questo portava a seri sprechi di tempo e denaro.

E’ così che è iniziato questo processo di astrazione, che ha cercato di allontanare l’uomo dalla macchina e avvicinarlo alla realtà in modo tale da vedere il problema e pensare alla soluzioni nel modo che verrebbe spontaneo studiando il caso reale.

Una premessa da fare è che il metodo di progettazione e il metodo di implementazione con un linguaggio di programmazione, per quanto possa essere un vantaggio averli in sinergia, possono anche essere diversi; per fare un esempio posso progettare un sistema con un metodo vicinissimo alla realtà e implementarlo con un linguaggio che invece è più vicino al modo di funzionare della macchina. Inoltre esistono linguaggi di programmazione detti ibridi che possono supportare intrinsecamente due o più metodi di progettazione.

I due paradigmi

Una volta morta l’improponibile tecnica di continuare a scrivere l’intero programma direttamente con il linguaggio della macchina riducendosi a pensare come la macchina anche durante la progettazione, per astrarre progettazione e implementazione e avvicinarsi di più alla realtà i due principali paradigmi nati sono: la programmazione strutturata e la programmazione orientata agli oggetti.

Esistono anche altri approcci allo sviluppo quali programmazione logica, programmazione per contratto, programmazione per eventi, programmazione orientata agli utenti, programmazione concorrente la più recente programmazione per concetto e altre, ma non sono particolarmente usati di norma se non per lavori specifici e in particolare il metodo per concetti non ha nessun linguaggio che la sfrutti intrinsecamente al momento.

La programmazione strutturata

Detto questo facciamo un piccolo discorso sulla programmazione strutturata-procedurale, essa si basa sulla creazione di procedure e funzioni che opereranno sui dati necessari alla soluzione del problema e prevede l’uso di strutture di controllo e di iterazione. Il linguaggio per antonomasia che la implementa è il C, ma viene usata anche dal Pascal in maniera più pulita, motivo per cui è apprezzato in ambito accademico mentre il C, essendo stato il primo linguaggio creato da programmatori per programmatori, ha avuto decenni di successo ed è stato usato per scrivere moltissimo software. Ad ogni modo oggi viene usato solo se non ci sono alternative dal punto di vista tecnico o per mantenere vecchio codice che non conviene tradurre in un altro linguaggio.

Dal punto di vista dell’analisi con il metodo strutturato, al centro dell’attenzione ci sono le azioni da svolgere e le strutture dati su cui operare; nel caso siano richieste strutture dati più complesse (quindi non la semplice variabile intera o i vettori omogenei) l’unica relazione esistente è la relazione di aggregazione (“has a” ovvero “ha un”).

Ovvero se si crea la struttura complessa “Persona” essa sarà formata dagli attributi di una persona come nome, città ecc… e l’unica relazione esistente sarà avere quegli attributi.

La programmazione orientata agli oggetti

Oggi giorno è il paradigma maggiormente usato per la progettazione e realizzazione di software e permette una notevole possibilità di astrazione e quindi riutilizzo di codice.

L’unità fondamentale della OOP (Object Oriented Programming, dall’inglese) è la classe; una classe è la definizione generica di un tipo di dato creato dal programmatore/analista, essa può comprendere sia attributi sia metodi, ovvero le azioni associate. Inizializzando una classe si crea un’istanza o oggettto.

Un oggetto è per definizione formato da tre caratteristiche che sono Stato, Comportamento e Identità; lo stato rappresenta l’insieme delle informazioni conservate dell’oggetto, e possono ovviamente variare durante l’esecuzione del software. Il comportamento è l’insieme della funzioni che quell’oggetto può svolgere.

A questo punto si crea il problema di distinguere oggetti con lo stesso stato, è per questo che ogni oggetto ha una sua identità quindi il programma distingue un oggetto da un altro anche se tutti i campi hanno lo stesso valore.

La OOP si basa proprio sulla ricerca delle classi da definire, degli oggetti da creare e sulla loro reciproca interazione, proprio come avviene nella realtà. È per questo che a differenza della programmazione strutturata durante l’analisi al centro dell’attenzione ci saranno quegli oggetti o categorie di oggetti ai quali dovranno essere assegnate le responsabilità da compiere e le regole per interagire con gli altri, e non l’azione in se; con la OOP si avrà quindi un punto di incontro fra i dati su cui lavorare e le azioni da svolgere, e il tutto sarà organizzato logicamente facendo da modello della realtà.

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest