Объектно-ориентированное, или объектное, программирование (в дальнейшем ООП) – одна из парадигм программирования, которая опирается на модель классов и их представлениях в виде объектов. По сути, объекты это реализация классов в программе, класс как будто бы тип объекта.
Если вы посмотрите вокруг себя, тогда вы можете увидеть, что все что вокруг вас можно представить в виде объектов.
Вот для примера, у нас есть класс “people” со своими полями для хранения информации об имени человека, дате рождения, месте рождения и прочее, но создав объект по образцу “people”, ми создаем объекты со своими уникальными именами и датой рождения. Таким образом, ми можем создать несколько объектов от прототипа “people”. Все эти объекты имеют нечто общее, а именно количество и названия полей, с уникальными данными, что хранятся в этих полях.
В основе объектно-ориентированного программирования лежит четыре понятия: абстракция, инкапсуляция, наследование и полиморфизм.
Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик. Абстракция – это представления программы в виде объектов реального мира.
Инкапсуляция — это способность объекта скрывать некоторые поля от пользователя с целю не навредить внутренней структуре объекта. Инструментом инкапсуляции в С++, есть модификаторы доступа, которые регламентируют доступ к полям и методам функции из внешней среди. Некоторые поля и методы используются внутри объекта и не предвидят использование из самой программы. Для безопасности эти поля и методы необходимо скрыть от внешней среды, и уберечь данные от переопределения.
Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс наследник принимает полностью или частичную информацию класса родителя. Если у нас есть некоторые класс «Животные», тогда от него можно наследовать другие подклассы: млекопитающие, земноводные, рыбы, бесхребетные, птицы. В таком случае нам необходимо создать класс наследник, в котором нам необходимо описать только отличные данные от класса родителя. По сути ми пишем дополнения до класса родителя.
Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Проще говоря, в разных классах, одинаковые методы могут выполнять различные действия. В двоих классах «Собака» и «Кот», есть одинаковые методы «голос», но в зависимости от класса этот метод исполняет разные действия (голос в собак и котов различается).
В дальнейшим ми рассмотрим реализацию ООП в языке программирования С++.