Зачем изучать ООП и как эти знания облегчат вам жизнь

8 января 2024
7 мин.

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

Спойлер

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

Что же такое ООП

Почему возникла потребность в ООП?

Какие проблемы призвано решить ООП

Что еще нужно знать в контексте ООП?

Практическое задание

Кому поможет знание ООП

Что же такое ООП

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

“Я рассматривал объекты как биологические клетки и/или отдельные компьютеры в сети, способные общаться друг с другом только с помощью сообщений”, – говорил ученый.

Результатом такого подхода стала масштабируемость и относительная независимость элементов программы друг от друга. Для понимания, давайте рассмотрим мир вокруг нас. Все объекты в реальной жизни — это отдельные сущности, обладающие своими характеристиками и взаимодействующие друг с другом.

Допустим, у нас есть объект «автомобиль» с такими свойствами, как цвет, модель, скорость и так далее. В мире ООП автомобиль был бы объектом, а его характеристики — атрибутами.

Теперь представьте, что у нас есть несколько автомобилей, и они могут выполнять различные действия, например: двигаться, тормозить, или даже взаимодействовать друг с другом. В ООП мы моделируем эти действия как методы, привязанные к объекту. Таким образом, у нашего объекта «автомобиль» может быть метод «двигаться», который изменяет его положение.

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

Почему возникла потребность в ООП?

Компьютеры не понимают человеческий язык. Для общения у них есть машинный код – набор команд в виде бинарного кода, состоящего из нулей и единиц. Обычно разработчики “переводят” написанную программу на машинный код с помощью компиляторов. Чтобы программа выполнила нужное действие (машинную операцию), например, арифметическое вычисление или ввод-вывод данных, разработчик пишет ей команду.

Hello world! На машинном коде.
«Hello world!» на машинном коде

Вот только разобраться в этом наборе нулей и единиц сложно даже автору кода. Еще труднее это сделать другим разработчикам, поэтому со временем языки программирования стали более абстрактными, и, как следствие, понятными.

Хорошо, когда я что-то не знаю: о силе абстракции

На следующем этапе их развития появился ассемблер – представление команд процессора в виде, доступном для чтения. Затем разработчики придумали высокоуровневые языки программирования, такие как Fortran и COBOL. Они позволяли программистам выражать свои идеи на еще более абстрактном уровне, не привязываясь к деталям железа. С развитием технологий появились C, Pascal, и другие языки, открывшие дополнительные уровни абстракции.

Затем программисты перешли на объектно-ориентированные языки программирования, типа C++, Java, и Python. С ними появились и новые подходы, упростившие организацию кода и его читаемость.

Java

Python

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

“Концепция ООП входит в круг знаний, которые нужны всем программистам. Если ты умеешь водить машину, тебе не обязательно каждый раз обучаться заново при смене автомобиля. Когда я изучаю новый язык программирования, я всегда ищу похожие моменты, это упрощает процесс”, – говорит операционный директор DAR Tech Айдын Тойбаев.

Какие проблемы призвано решить ООП

У первых программистов было множество проблем, включая ограничение ресурсов компьютеров и отсутствие стандартов, которые затрудняли переносимость кода между различными системами. Такие ограничения в ресурсах и стандартах приводили к ещё одной серьёзной проблеме — зависимости от конкретной аппаратной архитектуры.

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

Такой подход позволил:

  • упростить абстрагирование деталей
  • повторно использовать код
  • облегчить техническое сопровождение 
  • улучшить распределение обязанностей между различными компонентами программы. 

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

Что еще нужно знать в контексте ООП?

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

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

Наследование позволяет создавать новые классы на основе уже существующих, наследуя их свойства и методы. Это способствует повторному использованию кода и созданию иерархии классов, что делает программу более структурированной.

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

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

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

Практическое задание

Самым лучшим способом понять ООП Айдын Тойбаев считает выполнение практических заданий.

“Попробуйте делать собственные проекты. Либо попытайтесь повторить, самостоятельно спроектировать имеющиеся. В процессе вы будете искать информацию, смотреть реализации на том же GitHub. Помимо ООП я бы посоветовал всем начинающим разработчикам изучать и функциональное программирование. В “общую” базу знаний также входят алгоритмы и структуры данных — это надо знать всем программистам”, — говорит специалист

Пройти обучение по профессии Java-разработчик и освоить новую специальность в DAR University можно всего за 6 месяцев.

А пока попробуйте выполнить простое задание. Оно представляет собой введение в основы объектно-ориентированного программирования (ООП) на языке Java. Целью этого задания является ознакомление с базовыми концепциями ООП и практическими аспектами создания классов и объектов. Допустим, вы хотите создать простой класс для представления автомобиля и его базовых действий.

  1. Создайте класс Car, представляющий автомобиль. В этом классе определите два свойства: make (марка) и model (модель).
  2. Добавьте метод start(), который выводит сообщение «The car is started.»
  3. Создайте объект Car в методе main класса CarDemo и вызовите метод start() для демонстрации.

Писать код на Java и компилировать можно установив на свой компьютер ряд необходимых программ, либо с помощью онлайн-ресурса.

Пример решения

Шаг первый: создайте файл Car.java для класса Car

Шаг второй: создайте файл CarDemo.java для класса CarDemo

Убедитесь, что оба файла находятся в одном каталоге. Теперь у вас должно не возникнуть ошибки, и программа должна успешно скомпилироваться и выполниться.

Кому поможет знание ООП

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

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

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

Автор статьи и заглавного изображения: Алишер Ахметов

Редактор: Роман Лукьянчиков