Klasy i obiekty
Klasa powinna być realizacją dobrze zdefiniowanego abstrakcyjnego typu danych (w obiektowych językach programowania klasa jest rozszerzeniem klasycznego pojęcia typu z języków proceduralnych).
Klasa powinna spełniać podobne funkcje jak komponent: mieć precyzyjny interfejs, być przystosowana do wielokrotnego użycia.
Istotną trudnością tworzenia oprogramowania obiektowego jest zaprojektowanie odpowiedniej struktury klas i obiektów. Rozmaite metodologie tworzenia oprogramowania obiektowego oferują różne sposoby ustalania klas i obiektów dla danego systemu.