Классы и интерфейсы

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

В предыдущих частях книги мы познакомились со встроенными типами MQL5, такими как double, int или string. Компилятор знает, как хранить значения этих типов и какие операции над ними можно выполнять. Однако этими типами может быть не очень удобно пользоваться при описании какой-либо прикладной области. Например, трейдеру приходится оперировать такими сущностями как торговая стратегия, фильтр сигналов, корзина валют, портфель открытых позиций. Каждая из них состоит из целого набора связанных свойств, подчиняющихся конкретным правилам обработки и непротиворечивости.

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

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

Со структурами и объединениями мы уже познакомились в предыдущей главе. Эти знания пригодятся и для классов, однако классы предоставляют больше инструментов из арсенала ООП.

По аналогии со структурой, класс является описанием пользовательского типа с произвольным внутренним способом хранения и правилами работы с ним. На его основе программа может создавать экземпляры данного класса — объекты, которые следует рассматривать как составные переменные.

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

  • абстракция
  • инкапусляция
  • наследование
  • полиморфизм
  • композиция (дизайн)

Несмотря на мудреные названия, они скрывают за собой довольно простые и привычные нормы реального мира, перенесенные в мир программирования. Мы начнем погружение в ООП с разбора этих концепций. А синтаксис описания классов и способы создания объектов рассмотрим позднее.