Progettazione orientata agli oggetti
# Progettazione orientata agli oggetti

La progettazione orientata agli oggetti (in inglese object-oriented design, abbreviato in OOD) è un approccio alla progettazione di sistemi software fondata sul paradigma a oggetti. La progettazione a oggetti può (ma non necessariamente deve) accompagnarsi all'analisi a oggetti, alla programmazione a oggetti e alla modellazione a oggetti.

## Descrizione

Nel paradigma a oggetti, un oggetto è un componente software che rappresenta una entità, raggruppando e incapsulando i dati che rappresentano lo stato di tale entità e le procedure che ne rappresentano il comportamento. Il concetto di incapsulamento implica una netta separazione fra la struttura interna dell'oggetto (la sua implementazione) e l'interfaccia che esso espone, ovvero le modalità con cui il resto del sistema può interagire con l'oggetto. Oggetti dotati della stessa implementazione e della stessa interfaccia appartengono alla stessa classe. Altri concetti del paradigma a oggetti che possono o meno venire applicati nella progettazione a oggetti includono l'ereditarietà, il polimorfismo, il binding dinamico e la programmazione generica.

La progettazione a oggetti applica questi concetti alla progettazione di un sistema software, che viene descritto da un modello a oggetti, ovvero come sistema di oggetti interconnessi e interagenti l'uno con l'altro. Obiettivo principale della progettazione è identificare un sistema di oggetti la cui interazione complessiva porti a soddisfare i requisiti del sistema software.

### Relazione con altri metodi orientati agli oggetti

L'analisi a oggetti è un approccio all'analisi dei requisiti di un sistema software fondata sui concetti della programmazione a oggetti. Tale analisi comprende tipicamente un'analisi del dominio il cui scopo è quello di descrivere in termini orientati agli oggetti le entità che costituiscono il dominio applicativo in cui il sistema deve operare. Questa operazione produce un modello a oggetti del dominio applicativo. Se l'analisi a oggetti è seguita dalla progettazione a oggetti, il modello prodotto in fase di analisi può solitamente essere utilizzato come modello di partenza anche per la fase di progettazione, che può procedere raffinando tale modello e arricchendolo di dettagli di livello più implementativo. Molti strumenti di modellazione a oggetti (per esempio UML) prevedono esplicitamente la creazione di modelli di analisi e di modelli di progetto integrati e correlati l'uno con l'altro.

La progettazione a oggetti, analogamente, può costituire un punto di partenza vantaggioso per la programmazione a oggetti, poiché il modello di progetto può essere interpretato come prima bozza della struttura di dettaglio del codice dal punto di vista della suddivisione in classi e oggetti e dell'organizzazione del sistema di relazioni e interazioni fra diverse classi e diversi oggetti. Un modello di progetto a oggetti sviluppato con una notazione formale (per esempio UML) può essere usato per generare automaticamente parte del codice a oggetti dell'implementazione, per esempio in linguaggio Java o C++.

