Un oggetto è un’entità che raggruppa un insieme di dati (attributi o membri) e le operazioni che è possibile effettuare sui dati stessi (metodi o messaggi).
La cosiddetta programmazione orientata agli oggetti (OOP, Object-oriented programming) rappresenta uno dei paradigmi di programmazione più noti e utilizzati, e molti linguaggi hanno costrutti specificamente dedicati a questo paradigma. Un oggetto è un’entità che raggruppa un insieme di dati (attributi o membri) e le operazioni che è possibile effettuare sui dati stessi (metodi o messaggi). Il programmatore progetta in genere gli oggetti in modo che rappresentino entità del mondo reale (un oggetto può, per es., rappresentare una nave, con la sua posizione geografica, la sua velocità o il peso del suo carico e le operazioni relative possono essere la modifica della velocità, l’aggiornamento della posizione in base alla velocità, ecc.). Il paradigma della programmazione orientata agli oggetti si articola attorno a tre concetti chiave: l’incapsulamento, il polimorfismo e l’ereditarietà. L’incapsulamento consiste nella separazione fra l’utilizzo di un oggetto e la conoscenza dei dettagli del suo funzionamento. Il polimorfismo permette a oggetti diversi di eseguire in modo differente la stessa operazione: per esempio, oggetti che rappresentino differenti figure geometriche sono in grado di disegnarsi sullo schermo ognuno in maniera diversa. Non è insolito che un’operazione coinvolga più di un oggetto e può essere utile definire un comportamento polimorfo che tenga conto del tipo di tutti gli oggetti coinvolti (per es., il calcolo dell’intersezione di due figure geometriche dipende ovviamente da entrambe le forme coinvolte). Alcuni linguaggi (CLOS, Dylan, Nice, ecc.) prevedono un costrutto specifico (multimetodi) per gestire questi casi.