Modelli
Il problema principale nella progettazione e nella realizzazione di un sistema è la complessità: ragionare su sistemi complessi e realizzarli è difficile.
Allora, per poter analizzare particolari caratteristiche di un sistema complesso, trascurando i dettagli non rilevanti, è necessario costruire dei modelli. Essi sono infatti il linguaggio dei progettisti: si usano per rappresentare un sistema da costruire o costruito, sia per analizzarne particolari caratteristiche, sia come strumento di comunicazione.
Astrazione
Con astrazione si intende la descrizione di un sistema (o di parte di esso) che ne riporta solo le caratteristiche rilevanti (per un determinato contesto).
La modellizzazione sfrutta proprio l'astrazione per dominare la complessità: un modello può e deve trascurare i dettagli irrilevanti.
Modularità
Un sistema è modulare se è diviso in parti che hanno
- una sostanziale autonomia individuale
- una ridotta interazione con le altre parti
cioè alta coesione interna e basso grado di accoppiamento
Criteri
- Scomponibilità modulare: scomporre un problema in sottoproblemi di minori dimensioni e complessità (in modo che la somma delle complessità dei sottoproblemi sia minore della complessità dell'intero problema).
- Componibilità modulare: ri-aggregare moduli esistenti per risolvere nuovi problemi. Per rispettare questo criterio, in modo da favorire la riusabilità, già in fase di scomposizione del problema bisogna costruire i componenti in modo che siano riusabili.
- Comprensione modulare: capire un modulo osservando solo quelli e i "confinanti"
- Continuità modulare: un piccolo cambiamento delle specifiche comporta cambiamenti solo in uno o pochi moduli. In pratica, non è sempre possibile raggiungere quest'obbiettivo, anche perchè cambiamenti apparentemente piccoli delle specifiche possono alterare notevolmente il funzionamento del sistema.
- Protezione modulare: gli errori in un modulo influenzano solo il modulo stesso, o, al massimo, si propagano ai confinanti, quindi deve essere corretto un numero limitato di moduli.
Metodi
I metodi per realizzare un sistema modulare sono:
- utilizzare linguaggi che mettano a disposizione unità linguistiche modulari (ad esempio, linguaggi di programmazione con funzioni e classi)