Con il termine di "riuso" si indica il riutilizzo di codice sviluppato per una applicazione in un’altra. Ovviamente quando questo è possibile si ottengono grandissimi vantaggi: tutte le verifiche e validazioni, tutti i test svolti la prima volta sono automaticamente validi anche per la componente riutilizzata.
Le moderne tecniche orientate agli oggetti spingono in questa direzione sia per la fase di codifica di basso livello, che per la fase di analisi e progettazione.
L’atteggiamento generale di fronte ad un nuovo problema da parte di chi utilizza tecniche strutturate è di dividerlo nelle sue componenti principali che verranno poi specificate in modo sempre più dettagliato (progettazione top-down). Questo metodo però non da nessuna guida per riconoscere le parti già sviluppate in altre occasioni.
Chi utilizza metodi ad oggetti riconosce nello spazio del problema le entità principali, assegnando ognuna ad una classe.
Se la classe è stata sviluppata per altre applicazioni viene automaticamente derivata ogni caratteristica, compreso il codice.
Se l’entità non rientra esattamente in una già sviluppata, si associa a quella più simile. Verrà poi applicato il meccanismo di ereditarietà per svilupparne solo le caratteristiche completamente nuove.
Se non esiste nessuna classe appropriata bisogna crearla ex-novo, ma ci si ritrova almeno nelle condizioni dei metodi strutturati.
Dopo un certo periodo chi sviluppa ad oggetti si ritrova con una vasta libreria di classi e questo cambia notevolmente l’atteggiamento di fronte ad un nuovo problema: non è più un affrontare la nuova "montagna", ma un chiedersi dove si è già fatto qualcosa di simile.