Объектно-ориентированное программирование (ООП) – подход, при котором программа рассматривается как набор объектов, взаимодействующих друг с другом. Его используют 9 из 10 самых популярных языках программирования, а изучение этого метода поможет разработчику улучшить качество кода и взаимодействие с коллегами в команде.
Спойлер
ООП позволяет продуктовым IT-командам работать над крупными софтверными проектами, не мешая друг другу и отвечая за свою часть кода (отсюда и объекты в названии). Его обычно требуется много, поэтому разработчики создают шаблоны (класс). Затем они объединяют объекты, формируя из них единую систему. Но так было не всегда. Как разработка пришла к ООП, сейчас расскажем.
Почему возникла потребность в ООП?
Какие проблемы призвано решить ООП
Что еще нужно знать в контексте ООП?
Что же такое ООП
Это подход, при котором программа рассматривается как набор взаимодействующих друг с другом объектов с разными свойствами. Автор термина ООП Алан Кэй рассматривал компьютеры как клетки человеческого организма. Тот же принцип он применил и к программированию. К слову, сам Алан Кэй не очень любит слово “объект”.
“Я рассматривал объекты как биологические клетки и/или отдельные компьютеры в сети, способные общаться друг с другом только с помощью сообщений”, – говорил ученый.
Результатом такого подхода стала масштабируемость и относительная независимость элементов программы друг от друга. Для понимания, давайте рассмотрим мир вокруг нас. Все объекты в реальной жизни — это отдельные сущности, обладающие своими характеристиками и взаимодействующие друг с другом.
Допустим, у нас есть объект «автомобиль» с такими свойствами, как цвет, модель, скорость и так далее. В мире ООП автомобиль был бы объектом, а его характеристики — атрибутами.
Теперь представьте, что у нас есть несколько автомобилей, и они могут выполнять различные действия, например: двигаться, тормозить, или даже взаимодействовать друг с другом. В ООП мы моделируем эти действия как методы, привязанные к объекту. Таким образом, у нашего объекта «автомобиль» может быть метод «двигаться», который изменяет его положение.
Вернемся к программированию. Вместо того, чтобы думать о программе, как о большом списке инструкций, предлагаем разбить ее на набор объектов, каждый из которых отвечает за свою часть функциональности.
Почему возникла потребность в ООП?
Компьютеры не понимают человеческий язык. Для общения у них есть машинный код – набор команд в виде бинарного кода, состоящего из нулей и единиц. Обычно разработчики “переводят” написанную программу на машинный код с помощью компиляторов. Чтобы программа выполнила нужное действие (машинную операцию), например, арифметическое вычисление или ввод-вывод данных, разработчик пишет ей команду.
Вот только разобраться в этом наборе нулей и единиц сложно даже автору кода. Еще труднее это сделать другим разработчикам, поэтому со временем языки программирования стали более абстрактными, и, как следствие, понятными.
Хорошо, когда я что-то не знаю: о силе абстракции
На следующем этапе их развития появился ассемблер – представление команд процессора в виде, доступном для чтения. Затем разработчики придумали высокоуровневые языки программирования, такие как Fortran и COBOL. Они позволяли программистам выражать свои идеи на еще более абстрактном уровне, не привязываясь к деталям железа. С развитием технологий появились C, Pascal, и другие языки, открывшие дополнительные уровни абстракции.
Затем программисты перешли на объектно-ориентированные языки программирования, типа C++, Java, и Python. С ними появились и новые подходы, упростившие организацию кода и его читаемость.
Java
Python
Как видно на примерах, абстракция позволяет не вникать в детали работы процессора и архитектуру компьютера, упрощая создание программ для решения повседневных задач.
“Концепция ООП входит в круг знаний, которые нужны всем программистам. Если ты умеешь водить машину, тебе не обязательно каждый раз обучаться заново при смене автомобиля. Когда я изучаю новый язык программирования, я всегда ищу похожие моменты, это упрощает процесс”, – говорит операционный директор DAR Tech Айдын Тойбаев.
Какие проблемы призвано решить ООП
У первых программистов было множество проблем, включая ограничение ресурсов компьютеров и отсутствие стандартов, которые затрудняли переносимость кода между различными системами. Такие ограничения в ресурсах и стандартах приводили к ещё одной серьёзной проблеме — зависимости от конкретной аппаратной архитектуры.
Раньше компьютеры были не такими универсальными, как сейчас, и были предназначены для разных целей. Тем не менее, идея объединить устройства и усилия разработчиков еще на ранних этапах была очень привлекательной. Создатели ООП стремились упростить управление проектами и изменение кода в больших проектах и сделать программирование более интуитивным. Они хотели представить программы в виде объектов, которые взаимодействуют между собой путем сообщений.
Такой подход позволил:
- упростить абстрагирование деталей
- повторно использовать код
- облегчить техническое сопровождение
- улучшить распределение обязанностей между различными компонентами программы.
В результате, ООП стал удобным инструментом для создания более понятного и структурного программного кода, что особенно важно в больших и сложных проектах разработки программного обеспечения.
Что еще нужно знать в контексте ООП?
Одно из ключевых понятий ООП – класс. Это своего рода шаблон или чертеж для создания объектов. Если вернуться к примеру с машиной, класс «автомобиль» определит, какие характеристики и методы будут доступны для каждого создаваемого объекта этого класса.
Инкапсуляция — еще одна важная концепция ООП. Она предполагает упаковку данных и методов, оперирующих этими данными, внутри класса, скрывая их от внешнего мира. Это повышает уровень абстракции и защищает данные от непосредственного доступа извне, что обеспечивает безопасность и стабильность программы.
Наследование позволяет создавать новые классы на основе уже существующих, наследуя их свойства и методы. Это способствует повторному использованию кода и созданию иерархии классов, что делает программу более структурированной.
Если в компьютерной игре есть различные транспортные средства, такие как автомобили и велосипеды, то использование иерархии классов может упростить управление их общими характеристиками (скорость, цвет) и добавление уникальных особенностей для каждого типа транспорта.
Полиморфизм позволяет объектам разных классов использовать общий интерфейс, что делает код более гибким и удобным для изменений. Разные классы могут иметь методы с одним и тем же именем, но с различной реализацией.
Таким образом, ООП предоставляет структурированный подход к программированию, позволяя создавать модульные, легко поддерживаемые и расширяемые программы. Сначала мы видим программу как целостное множество взаимосвязанных объектов, а затем углубляемся в детали, определяя их характеристики и взаимодействие.
Практическое задание
Самым лучшим способом понять ООП Айдын Тойбаев считает выполнение практических заданий.
“Попробуйте делать собственные проекты. Либо попытайтесь повторить, самостоятельно спроектировать имеющиеся. В процессе вы будете искать информацию, смотреть реализации на том же GitHub. Помимо ООП я бы посоветовал всем начинающим разработчикам изучать и функциональное программирование. В “общую” базу знаний также входят алгоритмы и структуры данных — это надо знать всем программистам”, — говорит специалист
Пройти обучение по профессии Java-разработчик и освоить новую специальность в DAR University можно всего за 6 месяцев.
А пока попробуйте выполнить простое задание. Оно представляет собой введение в основы объектно-ориентированного программирования (ООП) на языке Java. Целью этого задания является ознакомление с базовыми концепциями ООП и практическими аспектами создания классов и объектов. Допустим, вы хотите создать простой класс для представления автомобиля и его базовых действий.
- Создайте класс Car, представляющий автомобиль. В этом классе определите два свойства: make (марка) и model (модель).
- Добавьте метод start(), который выводит сообщение «The car is started.»
- Создайте объект Car в методе main класса CarDemo и вызовите метод start() для демонстрации.
Писать код на Java и компилировать можно установив на свой компьютер ряд необходимых программ, либо с помощью онлайн-ресурса.
Пример решения
Шаг первый: создайте файл Car.java для класса Car
Шаг второй: создайте файл CarDemo.java для класса CarDemo
Убедитесь, что оба файла находятся в одном каталоге. Теперь у вас должно не возникнуть ошибки, и программа должна успешно скомпилироваться и выполниться.
Кому поможет знание ООП
Для программистов и разработчиков ООП давно стал одним из ключевых навыков, необходимых для создания ПО. Также пользу в нем найдут аналитики данных и инженеры тестирования. Первым ООП помогает эффективно организовывать и анализировать биг дату, а вторым – создавать более комплексные и надежные тестовые сценарии для проверки программного обеспечения.
Знание ООП особенно полезно в веб-разработке, где применяются различные фреймворки и библиотеки, использующие объектно-ориентированный подход. При этом ООП — не единственный подход к разработке и даже не самый быстрый. Его главное преимущество заключается в экономии времени на этапах поддержки уже разработанного продукта (расширение, модификация, отладка и тестирование).
Если вам требуется написать одноразовый скрипт, который не нуждается в последующей поддержке, то и ООП в этой задаче, скорее всего, не пригодится. Но значительную часть жизненного цикла большинства современных IT-проектов составляют именно поддержка и расширение, поэтому ООП востребовано.
Автор статьи и заглавного изображения: Алишер Ахметов
Редактор: Роман Лукьянчиков