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

Объектно-ориентированное программирование – это программирование, сфокусированное на данных, причем данные и поведение неразрывно связаны между собой. Вместе данные и поведение представляют собой класс, а объекты являются экземплярами класса.

Составными частями объектно-ориентированного подхода являются:

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

Таким образом, такая простая в понимании игра требует создания нескольких моделей - модель фигуры, модель стакана, модель движения фигуры в стакане и так далее.  Все эти модели являются абстракциями, представленными вычислениями в компьютере. Для описания таких моделей применяют понятие абстрактный тип данных, АТД (или сложный тип данных). Строго говоря, модель движения "фигуры" в "стакане" не является типом данных, а является совокупностью операций над данными типа "фигура", использующих ограничения данных типа "стакан".

Объекты являются переменными класса. Объектно-ориентированное программирование позволяет легко создавать и использовать АТД. Объектно-ориентированное программирование использует механизм наследования. Наследование выгодно тем, что позволяет получать производные типы из уже определенных пользователем типов данных. Так, для создания фигур в тетрисе удобно сначала создать базовый класс Shape, на основе которого получены производные типы всех семи возможных в тетрисе фигур. В базовом классе определено поведение фигур, а в производных уточнена реализация поведения каждой конкретной фигуры.

В ООП объекты отвечают за свое поведение. Разработчик АТД должен включать в него код для описания любого поведения, которое обычно можно ожидать от соответствующих объектов. То, что объект сам отвечает за свое поведение, значительно упрощает задачу программирования для пользователя этого объекта.

Если мы хотим нарисовать на экране фигуру, нам надо знать где будет находиться ее центр и как ее рисовать. Если отдельная фигура прекрасно понимает, как себя нарисовать, программист при использовании такой фигуры должен лишь передать объекту сообщение "нарисоваться".

Язык MQL5 является С++ подобным, и в нем также реализован механизм инкапсуляции для реализации АТД. Инкапсуляция сочетает в себе, с одной стороны, внутренние детали реализации конкретного типа и, с другой, доступные извне функции, которые могут действовать на объекты этого типа. Детали реализации могут быть недоступны для программы, которая использует данный тип.

 

К понятию ООП имеет отношение целый набор концепций, включая нижеследующие:

  • Моделирование действий из реального мира
  • Наличие типов данных, определяемых пользователем
  • Сокрытие деталей реализации
  • Возможность многократного использования кода благодаря наследованию
  • Интерпретация вызовов функций на этапе исполнения

Некоторые из этих понятий довольно расплывчаты, некоторые – абстрактны, другие носят общий характер.