Объектно ориентированное программирование (ООП) - что это такое - статья

Ранее мы говорили, о двух возможных подходах, теперь рассмотрим подробнее ООП.

Предположим, что мы программируем систему, моделирующую космический корабль в некотором пространстве.
Что он может?
Он может:

  1. Разгоняться
  2. Тормозить
  3. Открывать и закрывать солнечные паруса

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

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

ООП

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

Наш космический корабль - это объект, который в исходном коде программы описывается классом , у него есть:

  1. Поля - это значения (переменные класса), которые можно менять как непосредственным обозначением так и через вызов методов (см. ниже) - в них мы можем ранить все необходимые данные - скорость, суммарную массу, название корабля, имя капитана и т.д.
  2. Методы - это функции (подпрограммы) ,которые могут работать как с внешними данными (например считать путь до звезды по её координатам, которые передаются на наш корабль с Земли - то есть извне) , так и с данными самого класса - то есть, например, функция управляющая парусом может править значение скорости, которое мы договорились хранить в соответствующем поле.

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

Тип класса обычно описывается отдельно (не на месте объявления) - после того как он описан можно объявить поле соответствующего типа.

Вывод

Таким образом мы представили нашу систему в виде совокупности (в частности - иерархии ,как как например объект "двигатель" входит в объект "корабль") объектов и теперь можем поговорить об основных принципах ООП.