Design in the small
Progettazione software in piccolo
Principi Chiave
Motivazioni per la Progettazione Software
Obiettivi di Qualità: Raggiungere alta qualità, basso sforzo e breve tempo.
Decisioni di Progettazione: Affrontare dati, metodi/funzioni e politiche.
Obiettivi di Sviluppo
Descrivere parti del sistema software in modo astratto ma pronte per l'implementazione.
Problemi nella Progettazione Software
Problema 1: Modificabilità del Software
Rappresentazioni modificabili delle strutture di dati (es. interi).
Importanza dell’incapsulamento (i dati non dovrebbero essere pubblici).
Cambiamenti nella rappresentazione della classe influenzano tutte le classi client.
Classi di esempio che dimostrano la modificabilità:
SetOfIntegers
LicensePlateManagement
StudentIDNumberManagement
BankAccountManagement
Impatto della Modifica della Struttura Dati
Se la struttura dati di SetOfIntegers cambia, le classi client necessitano aggiornamenti anche se la funzionalità rimane la stessa.
Nuovi Approcci di Implementazione
Introdotto IntegerListNode per una migliore gestione dei dati.
Aggiornate le classi client per utilizzare la nuova struttura dati senza perdita di funzionalità.
Problema 2: Integrità dei Dati
Molti metodi che accedono e modificano i dati possono portare a inconsistenze.
Esempi che mostrano potenziali insidie in:
BankAccountManagement
SpecialAccountManagement classi.
Sfide di Coerenza
Variazioni nei metodi di cancellazione tra diverse classi di gestione degli account possono creare incoerenze.
Problema 3: Riutilizzo del Software
Sottolinea la necessità di un tipo di dati astratto con un comportamento di metodo coerente attraverso più rappresentazioni.
Moduli e Interfacce
Definizione del Modulo: Una parte di un sistema che offre un insieme di servizi.
Interfacce dei Moduli: Definiscono il contratto tra il modulo e i suoi utenti, delineando i servizi richiesti.
Concetti di Progettazione
Tipi di Parametri
Parametri In, Out e InOut: Diversi tipi di passaggio dei parametri nelle funzioni influenzano l'integrità dei dati.
Eccezioni
Le eccezioni devono essere gestite appropriatamente nei metodi, segnalando problemi ai processi chiamanti.
Metodi Membro
Metodi Setter e Getter: Utilizzati per manipolare e accedere responsabilmente ai dati membro.
Metodi Utilitari: Servono come assistenti interni per le funzionalità della classe.
Caratteristiche Aggiuntive
Costruttori
Sottolinea l'importanza dei costruttori di default, parametrizzati e di copia.
Membri Statistici
Discute il comportamento e l'uso dei membri e dei metodi statici all'interno della progettazione della classe.
Modificatori di Visibilità
Livelli di Accesso
Membri Pubblici: Visibili a tutti.
Membri Protetti: Accessibili all'interno della classe e delle sottoclassi.
Membri Privati: Nascosti dall'accesso esterno.
Membri di tipo package privilegiato: Visibilità predefinita per le classi nello stesso pacchetto.
Classi Astratte Finali e Interfacce
Classi Astratte: Servono come modello per le sottoclassi.
Interfacce: Definiscono contratti per le classi che implementano.
Progettazione per Contratti
Stabilisce un quadro per le obbligazioni tra clienti e appaltatori, utilizzando precondizioni e postcondizioni.