Classe base o superclasse
Classe base o superclasse racchiude le componenti comuni di un considerevole numero di oggetti. Nelle classi generali sono individuate le caratteristiche comuni, per poi scendere nel dettaglio e individuare le specificità. Chi utilizza l’oggetto è interessato alle caratteristiche e alle funzioni che mette a disposizione, ma non al modo in cui è realizzato. Questa considerazione sfrutta le proprietà di information hiding. Il termine information hiding indica il mascheramento delle modalità di implementazione, rendendo disponibile solo le sue funzionalità. La classe è quasi sempre costruita da un programmatore diverso da colui che la userà.
L’utilizzatore deve sapere come interagire con l’oggetto, quali sono i metodi che mette a disposizione e come poterli richiamare. Questo modo di intendere gli oggetti induce a considerarli come delle scatole nere (black box). I dettagli sulle caratteristiche e la struttura dell’oggetto sono nascosti all’interno, garantendo l’information hiding. Partendo dai principi dell’information hiding si è sviluppato un nuovo modo di concepire il software come formato da scatole, che mettono a disposizione un insieme di funzionalità. Il contenuto di questi componenti resta nascosto, mentre se ne conosce il modo con cui operano.
Si consideri per esempio l’oggetto Automobile: possiamo effettuare una generalizzazione definendo l’oggetto Veicoli a motore come superclasse dell’oggetto Automobile. In questo modo si ottiene una gerarchia di classi, che si può rappresentare con il diagramma seguente.

diagramma classe mezzi di trasporto
I simboli utilizzati negli schemi grafici precedenti rispettano gli standard del linguaggio UML (Unified Modeling Language).
Dopo aver implementato una classe di base, si può passare alla creazione di una classe più specifica (o sottoclasse), strettamente legata alla classe che si deve trattare nel proprio problema specifico. Tale classe deriva dalla precedente attraverso il meccanismo dell’ereditarietà, che è un altro concetto fondamentale della programmazione ad oggetti.