Le classi sono i moduli del sistema software. I moduli devono avere: riusabilità, estensibilità e potenza espressiva.

I moduli devono avere le seguenti caratteristiche:

  1. devono disporre di un'interfaccia che consenta di definire, istanziare, inizializzare oggetti ed applicarvi i metodi disponibili;
  2. devono nascondere, al loro interno, la struttura dati e gli algoritmi dei metodi;
  3. devono essere definiti in modo da prescindere dagli aspetti implementativi. In tal modo è possibile cambiare la struttura dati, senza modificare l'interfaccia.
  4. 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;
  5. genericità del tipo dell'oggetto: consente di associare ad un metodo, oggetti di tipo diverso.