Что такое полиморфизм в ООП: зачем нужен, примеры использования

Интернет-маркетолог
Стаж 10 лет

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

Что такое полиморфизм

Полиморфизм — это свойство функции обрабатывать различные типы объектов и классов.

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

Рассмотрим пример. Допустим, у нас в магазине есть два товара: один вызывается методом AddToCartBoll, а другой AddToCartChess. Нам не нужно прописывать каждый метод по отдельности, потому что достаточно одного AddToCart. При этом если у нас появится третий товар, мы просто чуть изменим код, чтобы работа AddToCart распространялась и на него.

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

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

Виды полиморфизма

Существует несколько типов полиморфизма, однако на практике обычно выделяют три больших вида:

  1. Полиморфизм подтипов (наследование). Дает возможность функциям дочернего класса использовать параметры родительского класса. То есть если у нас есть запрос, подходящий по параметрам к родительскому классу, он может срабатывать и на дочерних функциях.
  2. Параметрический полиморфизм. В этом случае нет привязки к типу. Функция может выполняться вместе с любым типом данных.
  3. Ad-hoc-метод. Его еще иногда называют перегрузкой методов. В этом случае функции дается одно имя, а выполняться она может вместе с разными классами и типами данных.

В качестве примера Ad-hoc-метода можно взять функцию len () в Python. Эта функция позволяет работать с разными типами данных. Допустим у нас есть длина строки, а также есть длина строения. По идее это разные данные, но функция len () позволяет коду отрабатывать одинаково в обоих случаях и выводит на экран нужный нам результат.

Преимущества полиморфизма:

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

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

Примеры использования

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

Пример кода с перегрузкой. Источник: авторское изображение
Пример кода с перегрузкой. Источник: авторское изображение

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

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

Пример кода с переопределением. Источник: авторское изображение
Пример кода с переопределением. Источник: авторское изображение

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

Пример наследования в javascript. Источник: авторское изображение
Пример наследования в javascript. Источник: авторское изображение

Это наиболее простые и распространенные варианты использования полиморфизма в программировании. Но на практике даже эти варианты дают большое поле для применения в сложных программных продуктах.

Заключение

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

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

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

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

Коротко о главном

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

Оценить статью
Нет ответов

Комментарии

Написать комментарий
Популярные статьи автора
Узнайте стоимость продвижения сейчас
Выберите удобный способ связи:
Выберите удобный способ связи:
Введите Ваш номер телефона:
Введите адрес Вашего сайта:
Введите Ваше имя:
Нажимая кнопку «Получить предложение» вы соглашаетесь с Политикой конфиденциальности.
Введите Ваш Email:
Введите адрес Вашего сайта:
Введите Ваше имя:
Нажимая кнопку «Получить предложение» вы соглашаетесь с Политикой конфиденциальности.
Оперативно отвечаем в рабочее время: с 10:00 до 19:00
Оперативно отвечаем в рабочее время: с 10:00 до 19:00
Вы уже проголосовали
Возьмем ТОП вместе?
Здравствуйте, меня зовут
,
я представляю компанию
.
Со мной можно связаться по телефону
Со мной можно связаться по тел.
,
или по email
ник в телеграм
Спасибо!
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Цена лидов в различных нишах
Тематика Стоимость лида (Москва/Россия)
Отдых 500
Мебель 350
Оборудование 500
Бансковские услуги 500
Безопасность 500
Организация мероприятий, концерты, праздники 500
Недвижимость 500
Строительство и отделка 500
Грузоперевозки 500
Доставка еды 350
Юридические услуги 500
Бухгалтерские услуги 500
Пластиковые окна 500
Детские товары 350
Автозапчасти 350
Образование 500
Возьмем ТОП вместе?
Здравствуйте, меня зовут
,
У меня есть сайт
.
Со мной можно связаться по телефону
Со мной можно связаться по тел.
,
или по email
ник в телеграм
Спасибо!
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Оставить заявку сейчас
Ваше имя*
Введите адрес Вашего сайта:*
Введите Ваш номер телефона:*
Введите Ваш e-mail:*
Введите Ваш ник в телеграм:
Выберите интересующую услугу *
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Подпишитесь на рассылку
Не пропустите самое интересное из мира SEO и Digital. Только актуальные и самые крутые статьи.
Заявка успешно отправлена!
Наши сотрудники уже приступили к анализу Вашего сайта. Наш менеджер свяжется с вами в течение дня, спасибо!