Najbardziej rozpowszechnionym w dzisiejszych czasach paradygmatem programowania jest paradygmat obiektowy. Jest to paradygmat strukturalny rozszerzony jedynie o pojęcia klas i obiektów. Obiekty są tutaj zamkniętymi kontenerami zawierającymi dane (co przypomina rekordy czy też struktury znane z takich języków jak Pascal czy C), ale oprócz danych także podprogramy na tych danych działające, zwane metodami.
Program w języku obiektowym jest nadal sekwencją rozkazów. Jednakże te rozkazy — w języku czysto obiektowym — nie są wydawane maszynie, lecz są wydawane poszczególnym obiektom, także przez inne obiekty.
Takie wydzielenie danych wraz z możliwymi do wykonania na nich czynnościami (w odróżnieniu od procedur, które są opakowaniem samych czynności, oraz w odróżnieniu od wspomnianych wyżej rekordów, które są opakowaniem samych danych) pozwala na wyróżnienie pewnych cech programowania obiektowego, których próżno szukać w innych paradygmatach imperatywnych:
— hermetyzacja, inaczej enkapsulacja, polegająca na tym, że tylko pewne dane i metody obiektu (stanowiące jego interfejs) są widoczne „na zewnątrz", dla innych obiektów; natomiast jego implementacja jest ukryta przed — umyślnym bądź przypadkowym „uszkodzeniem" czy też złym wykorzystaniem;
— dziedziczenie pozwalające tworzyć obiekty bardziej skomplikowane na bazie prostszych; co więcej, dziedziczenie klas przekłada się na zawieranie się jednej w drugiej, a to oznacza, że obiekty mogą należeć jednocześnie do wielu klas, co ma istotne znaczenie dla polimorfizmu
— abstrakcja danych wynikająca bezpośrednio z hermetyzacji i dziedziczenia — można w prosty sposób definiować ogólne obiekty (czy też klasy), które są jedynie wzorcami pewnych bardziej skomplikowanych, doprecyzowanych obiektów;
— polimorfizm dynamiczny (inaczej polimorfizm obiektowy], który dzięki dziedziczeniu pozwala obiektom automatycznie dobierać odpowiednie metody do swojego aktualnego typu.