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.