|   Войти

Объектно-ориентированное программирование

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

ООП базируется на 3-х принципах:

Инкапсуляция - изоляция свойств и методов внутри объекта. Все, что необходимо объекту для его функционирования, находится внутри него. Например, если объекту требуется какая-то переменная, то она будет описана внутри него, а не снаружи в коде. Инкапсуляция позволяет скрыть некоторые свойства и методы объекта от основного кода. Например, у объекта «Повар» посетителю ресторана важен метод "Приготовить еду", но не важно, каким образом он готовит еду и какие ресурсы при этом использует.

Наследование - механизм, позволяющий создать класс, который будет содержать в себе свойства и методы другого (родительского) класса, при этом можно добавить в этот новый класс свои свойства и методы. Например, пускай есть класс «Человек». У него есть свойства, характерные для всех людей: количество глаз, рук, ног и т.д., цвет кожи, рост, вес, а также, методы "Ходить", "Говорить" и др. Предположим, мы хотим создать класс «Программист». Очевидно, что программист - это тоже человек. Поэтому он наследует все свойства от класса «Человек», но у него добавляются новые свойства и методы характерные именно для программиста, например свойство "язык программирования" и метод "писать программу".

Полиморфизм - механизм, позволяющий для одного метода, задать несколько реализаций. Например, у объекта «Человек» есть метод "работать". Однако, учитель, программист, повар будут выполнять этот метод по-разному. Полиморфизм позволяет переопределить свойства и методы, унаследованные от родительского объекта.

Выше мы использовали понятия «Класс» и «Объект». Чем они отличаются? Класс - это некое описание объекта, его "чертеж". А объект - это экземпляр класса. Например, есть понятие «Учитель» - это класс. А конкретный педагог Мария Ивановна - это объект, принадлежащий классу «Учитель» (экземпляр этого класса).

Рассмотрим программу из предыдущего урока и изменим ее таким образом, чтобы все необходимое для отображения цифры на 7-сегментном дисплее содержалось внутри класса Display7seg.

Описание класса начинается с ключевого слова class, затем идет имя класса. Тело класса заключается в фигурные скобки, после закрывающейся фигурной скобки обязательно ставится точка с запятой.

Наша программа с использованием класса будет выглядеть следующим образом:

Однако, наш класс Display7seg не является самодостаточным. Он сможет работать только с дисплеем, подключенным к ножкам контроллера с 4-й по 10-ю и только в правильном порядке. Кроме того, если мы забудем эти ножки сделать выходами в функции setup, то дисплей не сможет отобразить цифру. Если нам надо будет подключить дисплей к другим выводам контроллера, то нам придется переписывать класс, что крайне нежелательно.

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

Переделаем нашу программу с использованием конструктора. Конструктор примет 7 значений - номера ножек, к которым подключены сегменты дисплея от A до G, конструктор сохранит эти значения в приватном массиве pins, и дальше будет использовать эти значения.

Теперь наш класс будет работать, не зависимо от того, к каким выводам контроллера подключен дисплей.