Le classi sono i moduli del sistema software. I moduli devono avere: riusabilità, estensibilità e potenza espressiva.
I moduli devono avere le seguenti caratteristiche:
- devono disporre di un'interfaccia che consenta di definire, istanziare, inizializzare oggetti ed applicarvi i metodi disponibili;
- devono nascondere, al loro interno, la struttura dati e gli algoritmi dei metodi;
- devono essere definiti in modo da prescindere dagli aspetti implementativi. In tal modo è possibile cambiare la struttura dati, senza modificare l'interfaccia.
- ereditarietà delle classi: deve essere possibile, scrivere nuovi moduli derivati da moduli preesistenti. Gli oggetti della classe derivata, ereditano i metodi della classe superiore. Nella sottoclasse si possono definire nuovi metodi o ridefinire dei metodi della classe superiore;
- genericità del tipo dell'oggetto: consente di associare ad un metodo, oggetti di tipo diverso.