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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

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

Комментарии

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