ООП включает в себя три основных понятия: абстрактные типы данных, наследование, полиморфизм. Языки ООП (ООЯ) поддерживаются этой парадигмой с помощью классов, методов, объектов, передаваемых сообщений.
Основные вопросы при обсуждении ООЯ:

Smalltalk – чисто ООЯ. Все сущности в этом языке являются объектами, все вычисления производятся через передачу сообщений. Методы конструируются из выражений, выражение описывает объект, который представляет собой значение выражения. Управляющие структуры конструируются с использованием объектов и сообщения. В этом языке все подклассы являются подтипам. Все проверки типов и связывание сообщений с методами выполняется динамически, и любое наследование является одиночным. Язык не имеет явного оператора удаления объектов из памяти.

C++ обеспечивает поддержку абстракции данных, наследование, возможное динамическое связывание сообщений с объектами наряду с остальными свойствами языка C.
C++ имеет две различных системы типов, также обеспечивается множественное наследование, явное удаление объектов из памяти, разнообразные средства управления доступа к сущностям в классе, некоторые из которых позволяют подклассам быть подтипами. Класс может содержать неявные методы конструктора и деструктора.

Язык Java, в отличие от C++, является полностью ООЯ. Все объекты размещаются в динамической памяти и доступны через ссылки на них. В языке нет явной операции удаления объектов из памяти. Методами являются только подпрограммы, и вызывать их можно только через объекты или классы. Непосредственно поддерживается одиночное наследование, возможна реализация множественного наследования.
Все связывания сообщений с методами динамические, за исключением методов, которые не могут быть замещаемыми. Кроме классов в качестве второй конструкции инкапсуляции Java содержит пакеты.

ADA 95 обеспечивает поддержку ООП с помощью меченых типов, которые могут использовать наследование, возможное динамическое связывание с использование ассоциированных типов. Производные типы являются расширением родительских типов. В случае, если они не определены в библиотеке дочерних пакетов, сущности родительского типа могут быть исключениями из производного типа. В небиблиотечных дочерних пакетах все подклассы являются подтипами.

Eiffel – новый ООЯ, который не основан ни на одном из существующих языков. Содержит средства управления доступом к сущностям в классах, средства ограничения доступа к классам клиентов, подклассов, их обоих. В нем нет явной операции удаления из памяти. Пользователь может определять конструкторы и деструкторы в своих классах. Все связывания сообщений с методами являются динамическими.