Фрагмент для ознакомления
2
Объектно-ориентированное программирование (ООП) - это подход, при котором программа рассматривается как набор объектов, которые взаимодействуют друг с другом. У каждого есть свои особенности и поведение. Если вы попытаетесь объяснить это простыми словами, ООП ускорит написание кода и сделает его более читабельным.
Идеология объектно-ориентированного программирования (ООП) была разработана для того, чтобы связать поведение конкретного объекта с его классом. Людям легче воспринимать окружающий мир как объекты, которые можно классифицировать определенным образом (например, разделение на живую и неживую природу) [7].
Зачем нужен ООП? До появления ООП в разработке использовался другой подход — процедурный подход. Программа представлена в нем в виде набора процедур и функций - подпрограмм, которые выполняют определенный блок кода с необходимыми входящими данными. Процедурное программирование хорошо подходит для легких программ без сложной структуры. Но если блоки кода большие и содержат сотни функций, вам нужно отредактировать каждый из них и продумать новую логику. Это может привести к появлению большого количества плохо читаемого, беспорядочного кода — "спагетти-кода" или "макарон" (рис. 1).
Рис. 1 - Пример спагетти кода
В отличие от процедурного программирования, объектно-ориентированное программирование позволяет вносить единовременные изменения в объект. Это ключевой элемент программы. Все операции представлены как взаимодействие между объектами. В то же время код более читабелен и понятен, программу легче масштабировать.
Объектно-ориентированное программирование используется для:
- структурирования информации и избегания путаницы;
- точного определения взаимодействия одних элементов с другими;
- улучшения управления программой;
- быстрого масштабирования кода для различных задач;
- лучшего понимания написанного;
- более эффективного поддержания готовых программ;
- внесения изменений без необходимости переписывать весь код [3].
Функции ООП поддерживаются большинством популярных языков программирования, включая JavaScript, PHP, Python и другие.
Структура ООП. Объекты и классы.
Для упрощения кода программа разделена на независимые объектные блоки. В реальной жизни это может быть стол, чашка, человек, книга, здание и многое другое. В программировании объектами являются структуры данных: пользователь, кнопка, сообщение. Они, как и реальные объекты, могут иметь свойства: цвет, содержимое или имя пользователя. И есть классы для объединения объектов с похожими свойствами.
Класс - это "шаблон" для объекта, который описывает его свойства. Несколько похожих объектов, например профили разных пользователей, имеют одинаковую структуру, что означает, что они принадлежат к одному классу. Каждый объект является экземпляром класса.
Аналогия поможет понять, что такое ООП.
Термин "программист" - это класс.
Некий разработчик по имени Иван - это объект, принадлежащий классу "Программист" (экземпляр класса).
Зарплата, должностные обязанности, изученные технологии и должность в компании - это качества, которыми обладают все объекты класса программиста, включая Ивана. Характеристики разных объектов различаются: зарплата и обязанности Ивана отличаются от зарплаты и обязанностей другого разработчика, Миши.
Атрибуты и методы.
Объект - это набор переменных и функций, как в традиционном функциональном программировании. Переменные и функции являются его свойствами.
Атрибуты - это переменные, специфические свойства объекта, такие как цвет поля или имя пользователя.
Методы - это функции, которые описываются внутри объекта или класса. Они относятся к определенному объекту и позволяют взаимодействовать с ним или с другими частями кода.
Рис. 2 - Объект, класс, атрибуты и методы в ООП на примере
Принципы ООП. Объектно-ориентированное программирование определяется четырьмя принципами, которые помогут вам понять основы работы. Иногда их число сокращается до трех — понятие абстракции отпадает.
Абстракция. Абстракция - это способ выделить ряд наиболее важных атрибутов и методов и исключить несущественные. Соответственно, абстракция - это использование всех этих свойств для описания объекта. Важно представлять объект с минимальным набором полей и методов, не ставя под угрозу решаемую проблему [4].
Пример: объект класса programmer, вероятно, не нуждается в свойствах "Навыки приготовления" или "Любимый цвет". Они не влияют на его характеристики как программиста. Но "базовый язык программирования" и "рабочие навыки" - важные качества, без которых невозможно описать программиста.
Набор атрибутов и методов, доступных извне, функционирует как интерфейс для доступа к объекту. Другие структуры данных могут получить к ним доступ через вас, и вам не нужно точно знать, как объект устроен внутри.
Инкапсуляция. Каждый объект является независимой структурой. Все, что ему нужно для работы, уже есть в нем. Когда используется переменная, она описывается в теле объекта, а не вне кода. Это делает объекты более гибкими. Даже если внешний код переписан, рабочая логика не изменится.
Инкапсуляция помогает вам с легкостью управлять вашим кодом. Мы говорили выше, что для доступа к объекту вам не нужно понимать, как работают его методы. Начальнику Ивана не обязательно точно знать, как он программирует: главное, чтобы поставленные задачи выполнялись.
Внутренняя структура одного объекта закрыта от других: снаружи видны только значения атрибутов и результаты выполнения метода.
Наследование. Вы можете создавать классы и объекты, которые похожи друг на друга, но немного отличаются — у них есть дополнительные атрибуты и методы. В этом случае более общим понятием становится "родитель", а более конкретным и подробным - "наследник".
Упомянутый программист Иван - человек. Но "человек" - это более общее определение, которое не описывает какие-либо свойства, которые особенно важны для программиста. Можно сказать, что класс "программист" унаследован от класса "человек": программист тоже человек, но у него есть дополнительные характеристики.
В этом случае разработчик Иван будет одновременно и человеком, и программистом. У него будут наборы свойств из обоих классов.
"Родитель" может иметь несколько дочерних структур. Например, не только "программист", но и "директор" может быть унаследован от "человека".
Фрагмент для ознакомления
3
1. Абстрактные классы (C++) | Microsoft Docs [Электронный ресурс]. — https://docs.microsoft.com/ru-ru/cpp/cpp/abstract-classes-cpp?view=vs-2019.
2. Дейтел Х., Дейтел П. Как программировать на C++: Пер. с англ. - Москва: ЗАО "Издательство БИНОМ", 1998. 1024с.
3. Джамса К. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997. 320с.
4. Ирэ П. Объектно-ориентированное программирование с использованием C++ / Пер. с англ. Киев, 2005.
5. НОУ ИНТУИТ | Лекция | Понятие модели и моделирования [Электронный ресурс]. — http://www.intuit.ru/studies/courses/643/lecture/11351 Виртуальные функции (C++) | Microsoft Docs [Электронный ресурс]. — https://docs.microsoft.com/ru-ru/cpp/cpp/virtual-functions?view=vs-2017
6. Сван Т. Освоение Borland C++ 4.5: Пер. с англ. - Киев: Диалектика, 1996. 544с.
7. Скляров В.А.. Язык C++ и объектно-ориентированное программирование: Справочное издание. - Минск: Вышэйшая школа, 1997. 480с.
8. Сэвитч У. C++ в примерах: Пер. с англ. - Москва: ЭКОМ, 1997. 736с.
9. Фейсон Т. Объектно-ориентированное программирование на Borland C++ 4.5 / Пер. с англ. М., 2007.
10. Шилдт Г. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.