Проекты

ООП, или объектно-ориентированное программирование: что это такое и как работает

ООП, или объектно-ориентированное программирование: что это такое и как работает

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

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

Какие бывают парадигмы разработки

Парадигмой в разработке называют набор правил для создания кода. Парадигма не равна языку программирования. Это что-то вроде книги рецептов: приготовить можно и без нее, но тогда другие повара не смогут повторить блюдо или изменить рецепт. То же самое и в программировании:

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

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

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

Что такое функциональное программирование

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

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

  • предлагает ввести пароль;
  • раскладывает его на отдельные символы;
  • сверяет каждый символ с образцом;
  • отвечает пользователю, правильный пароль или нет.

Трудности начинаются, когда разработчику нужно переделать код. Например, функция для проверки пароля выдает результаты «верно» и «неверно». Заказчик просит, чтобы она выдавала еще и код ошибки: один для опечатки, другой для старого пароля, третий для несуществующего.

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

Что такое ООП, или объектно-ориентированное программирование

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

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

схема1
Любая программа, написанная по принципам ООП, состоит из объектов

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

Объясняем основные термины ООП

Главные понятия в объектно-ориентированной парадигме — это объект, класс, атрибуты и методы. Рассмотрим на примере карточки товара в интернет-магазине Тарантасик:

скриншот с https://tarantasik.ru/catalog/elektrosamokaty/dvukhkolesnye_elektrosamokaty/elektrosamokat_oxyvolt_pat_comfort/
Карточка товара — пример объекта в ООП. У нее есть атрибуты, например цена. С атрибутами можно произвести операции с помощью методов, например изменить цену

Объект — основной элемент кода. Это сущность с данными и набором операций, которые можно с ними совершать. Например, в интернет-магазине объектом может быть карточка товара.

Атрибуты — это данные внутри объекта. Например, чтобы заполнить карточку, нужно добавить название товара, цену, описание и фото.

Методы — это операции, которые можно совершить с данными внутри объекта. Методы у каждого объекта могут быть разными. Например, в «Карточке товара» можно обновить данные о наличии или изменить цену.

Методы и атрибуты бывают открытыми и закрытыми:

  • Открытые методы и атрибуты доступны другим объектам. Если атрибут «Цена» у объекта «Карточка товара» открытый, его можно использовать в объекте «Корзина». Это позволит сложить цены нескольких товаров и получить общую стоимость заказа.
  • С закрытыми атрибутами и методами можно работать только внутри класса. Так ошибки в одних объектах не повлияют на работу других.

Класс — это шаблон, по которому создаются объекты. Например, чтобы создать тысячи карточек товаров, нужно создать класс «Товары» и прописать, какие атрибуты и методы будут у всех объектов внутри этого класса.

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

Основные принципы ООП

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

Инкапсуляция

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

Принцип инкапсуляции позволяет сохранить данные внутри класса и объекта от случайных или специальных изменений. Изменения в классе «Товары», не затронут объекты класса «Пользователи».

Наследование

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

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

Принцип наследования в ООП ускоряет и упрощает разработку. Создавая подклассы, не нужно прописывать все атрибуты и методы заново. Можно использовать нужные, а лишние удалить.

Полиморфизм

Принцип полиморфизма позволяет одним и тем же методам работать с разными

типами объектов. Например, метод «Удалить» всегда приводит к удалению чего-либо. При этом в каждом объекте и даже классе результат метода может быть разным:

  • «Удалить» для «Корзины» удаляет товар из корзины.
  • «Удалить» для «Базы данных» удаляет товар из базы.

Абстракция

Иногда этот принцип не относят к основным в отличие от инкапсуляции, полиморфизма и наследования, потому что он заложен в саму суть объектно-ориентированного программирования.

Принцип абстракции означает, что при проектировании классов и объектов важно концентрироваться на ключевых методах и атрибутах и отказываться от лишних. Например, чтобы объект «Карточка товара» работал правильно, ему нужны атрибуты «Название», «Цена», «Фото», «Описание», «Наличие на складе» — остальное уже не так важно.

Также принцип абстракции означает, что для использования объектов не имеет значения, как реализован код. Главное — какая информация в нем используется и каким образом. Например, разработчикам, которые создают платежную систему для интернет-магазина, не обязательно знать, как написан профиль пользователя. Важно понимать, какие в нем есть атрибуты и методы.

Плюсы и минусы использования ООП

У объектно-ориентированного программирования существуют объективные преимущества и недостатки.

Плюсы:
  1. В рамках ООП разработчики проще и быстрее создают код. Достаточно один раз написать класс с нужными атрибутами и методами. Дальше можно использовать эти наработки, чтобы создавать внутри него подклассы и объекты. В процедурной парадигме для создания больших проектов пришлось бы переписывать десятки строк кода.
  2. Проще проверять чужой код. Во время code review или доработок разработчики знают: нужно смотреть на классы и объекты и проверять, правильно ли они взаимодействуют между собой.
  3. Легче изменять код. Например, заказчик попросил добавить поля в карточку товара или поменять цвет всех кнопок. Для этого достаточно изменить атрибуты в классе или подклассе — они изменятся сразу во всех объектах, которые в них входят.
  4. Легче работать в команде. За разные объекты или классы могут отвечать разные разработчики. Они работают, не мешая друг другу и не ломая чужой код. Главное — определить правила и принципы, по которым части программы взаимодействуют между собой.
  5. Удобно использовать заранее написанный код. Разработчики могут написать объект «Корзина» и использовать его для разных интернет-магазинов и приложений, внося лишь незначительные корректировки. Именно на базе ООП написаны многие библиотеки с готовыми решениями для разных проектов.
  6. Легко масштабировать проект. Если нужно расширить набор функций интернет-магазина, можно добавить новые модули, не меняя основной код и принципы его работы.
Минусы:
  1. Сложно разобраться в основах. Порог входа в ООП намного выше, чем при изучении функциональной парадигмы. Перед тем как писать программу в парадигме ООП, нужно разобраться в классах и наследовании, научиться писать публичные и внутренние функции, изучить способы взаимодействия объектов между собой.
  2. Не подходит для небольших программ. В ООП нужно создавать классы, объекты, методы и атрибуты даже для простой программы, например калькулятора. В функциональной парадигме достаточно написать несколько функций.
  3. Тратится больше ресурсов. Сокрытие деталей реализации и многократное использование кода в ООП может увеличить расход памяти. Однако разница в скорости незначительна по сравнению с проектами, созданными в других парадигмах. Грамотная оптимизация кода снижает расход ресурсов.

Какие языки используют для ООП

Языки программирования не делятся по парадигмам. Так, на PHP можно создавать как простые функции, так и объекты. Но есть языки, с которыми проще работать в рамках ООП. Вот некоторые из них:

Java часто используют при разработке веб-приложений. Этот язык высокоуровневый, независимый от платформы, бесплатный, простой в освоении, безопасный и быстрый. Код структурирован и может использоваться повторно. Рассказываем, что это за язык, зачем он нужен, какие у него плюсы и минусы, какие задачи можно решать с его помощью.

Kotlin создавался как язык, совместимый с Java, но с более современным и выразительным синтаксисом. Поэтому в разработке Android-приложений программисты перешли именно на Kotlin. Кроме того, язык используют для разработки веб- и кросс-платформенных приложений и при работе с большими данными. Рассказываем, какие задачи решаем с помощью Kotlin.

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

C++ используется для создания браузеров, программных приложений, операционных систем, структур данных. В кейсе рассказываем, как с помощью графов на С++ увеличили точность прогноза курсы криптовалюты на 17%

JavaScript прост в освоении и используется для создания динамических веб-сайтов, мультимедиа, анимации. Заполнение форм, нажатие кнопок, выделение текста — за все это на сайте отвечает JavaScript.

C# поддерживает множество парадигм программирования. Программы, созданные на этом языке экономичны и не требуют больших вычислительных мощностей. Часто используется на платформах .net для разработки динамических веб-сайтов, игр.

Ruby применяется для обработки данных и написания серверной части для сайтов и приложений. Ruby — чисто объектно-ориентированный язык программирования, при этом простой и интуитивно понятный. По синтаксису похож на Python.

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

Для каких цифровых продуктов подойдет ООП, примеры

ПродуктыПримеры
Корпоративные приложения с множеством модулейВ ERP-системах (Enterprise Resource Planning) модули управления кадрами и складом могут быть представлены отдельными классами или объектами
Веб-приложения со множеством пользовательских интерфейсов и взаимодействийИнтернет-магазины, где каждый товар — объект класса «Товары», а функции корзины реализованы с помощью класса «Корзина»
Мобильные приложенияПринципы ООП позволяют создавать абстракции, которые можно адаптировать для разных мобильных платформ: iOS и Android. Это упрощает разработку кросс-платформенных приложений
Системы управления контентом, CMSWordPress использует ООП для моделирования структуры контента, плагинов и тем
Банковские приложенияПри создании банковских систем ООП применяют для моделирования счетов, транзакций и клиентских данных
ИгрыПринципы ООП подходят для управления персонажами, объектами, игровым миром

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

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

Получите ответ по смс

Ваше сообщение успешно отправлено!
Представьтесь пожалуйста
Укажите номер, на который придет ответ
Нажимая на кнопку, вы даете согласие
на обработку персональных данных.

Перезвонить вам, чтобы ответить на вопросы?

Когда с вами связаться?

Связаться по телефону:+7 499 321-59-32

Нажимая на кнопку, я принимаю условия политики и пользовательского соглашения

Фото эксперта
Дмитрий

Проектный менеджер

Получите ответ на ваш вопрос в любимом мессенджере

Выберите удобный мессенджер и начните диалог прямо сейчас

Telegram WhatsApp

Рассчитать стоимость проекта

Расскажите о вашем проекте, чтобы мы могли проконсультировать вас.

Напишите ваше имя
Укажите ваш email

Выберите удобный для вас способ связи

Мы сразу получим ваш запрос и поможем в решении проблемы

Написать в Telegram

Написать в WhatsApp

Позвонить нам