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

Объектно-ориентированное программирование (ООП) — методология программирования, в которой основными являются понятия «объект» и «класс».

Основные принципы ООП: абстракция, наследование, инкапсуляция и полиморфизм.

Абстракция (abstraction) – характеристика сущности, которая отличает ее от других сущностей. Абстракция применяется для определения фундаментальных понятий ООП, таких как класс и объект.

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

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

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

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

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

Для наглядного представления информации о соотношении классов в можно использовать окружности или прямоугольники. С помощью этой графической нотации, иерархию классов для рассмотренного примера можно представить в виде вложенных прямоугольников или окружностей, каждый из которых соответствует отдельному классу (см. Рисунок 16).     Рисунок 16. Иерархия вложенности классов для примера общего класса «Компьютер»

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

Полиморфизм также один из основных принципов ООП. Под полиморфизмом (греч. poly – много, morfos – форма) понимается свойство объектов принимать различные внешние формы в зависимости от обстоятельств. Применительно к ООП полиморфизм означает, что действия, выполняемые одноименными методами, могут отличаться в зависимости от того, к какому из классов относится тот или иной метод. К примеру, три объекта соответствующих классов: автомобиль, электрический свет в комнате и ПК. Для каждого из них можно определить операцию «выключить». Однако эта операция будет отличаться для каждого из рассмотренных объектов.

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