К основным принципам (базовым положениям) ООП относятся: абстрагирование, инкапсуляция, наследование и полиморфизм.
Абстрагирование
Объект — это программная конструкция, представляющая некоторую сущность. В нашей повседневной жизни сущностями, или объектами, например, можно считать: автомобили, велосипеды, настольные компьютеры, банковский счет. Каждый объект обладает определенной функциональностью и свойствами. Объект представляет собой завершенную функциональную единицу, содержащую все данные и предоставляющую всю функциональность, необходимую для решения задачи, для которой он предназначен. Описание объектов реального мира при помощи программных объектов называют абстрагированием (abstraction).
Инкапсуляция
Смысл инкапсуляции состоит в отделении реализации объекта (его внутреннего содержания) от способа взаимодействия с ним. Другие объекты приложения взаимодействуют с рассматриваемым объектом посредством имеющихся у него открытых (public) свойств и методов, которые составляют его интерфейс. В общем виде под интерфейсом понимается открытый способ взаимодействия между разными системами. Если интерфейс класса не будет меняться, то приложение сохраняет способность к взаимодействию с его объектами, даже если в новой версии класса его реализация значительно изменится.
Объекты могут взаимодействовать друг с другом только через свои открытые методы и свойства, поэтому объект должен предоставлять доступ только к тем свойствам и методам, которые пользователям необходимы. Интерфейс ни в коем случае не должен открывать доступ к внутренним данным объекта, поэтому поля с внутренними данными объекта обычно объявляют с модификатором private.
Например, у объектов класса Автомобиль, которые могут взаимодействовать с объектами класса Водитель через открытый интерфейс, открытыми объявлены только методы Ехать_вперед, Ехать_назад, Повернуть и Остановиться — их достаточно для взаимодействия объектов классов Водитель и Автомобиль. У объекта класса Автомобиль может быть вложенный объект класса Двигатель, но будет закрыт для объектов класса Водитель, которому будут открыты лишь методы, требуемые для управления автомобилем. В этом случае можно заменить вложенный объект класса Двигатель, и взаимодействующий с ним объект класса Водитель не заметит замены, если она не нарушит корректную работу интерфейса.