В объектно-ориентированном программировании полиморфизм — одна из базовых концепций. Он применяется практически во всех языках программирования и может использоваться для самых разных задач. В статье я рассказываю, что это такое, как и для чего он применяется.
Что такое полиморфизм
Полиморфизм — это свойство функции обрабатывать различные типы объектов и классов.
Основная задача полиморфизма — оптимизация кода и удаление дублирующих друг друга команд. Если проще, функции из разных классов будут выполнять одну и ту же команду. Для этого не нужно прописывать отдельные команды для каждого участка кода.
Рассмотрим пример. Допустим, у нас в магазине есть два товара: один вызывается методом AddToCartBoll, а другой AddToCartChess. Нам не нужно прописывать каждый метод по отдельности, потому что достаточно одного AddToCart. При этом если у нас появится третий товар, мы просто чуть изменим код, чтобы работа AddToCart распространялась и на него.
Совершенно не важно, что это за объекты — они будут выполнять одну и ту же команду. При этом реакция на команду будет разной. К примеру, у нас есть два объекта с разными свойствами: с помощью этого способа можно добиться, чтобы они обрабатывались одним методом или функцией.
Простыми словами, полиморфизм — это то, что позволяет использовать один и тот же метод для разных объектов.
Виды полиморфизма
Существует несколько типов полиморфизма, однако на практике обычно выделяют три больших вида:
- Полиморфизм подтипов (наследование). Дает возможность функциям дочернего класса использовать параметры родительского класса. То есть если у нас есть запрос, подходящий по параметрам к родительскому классу, он может срабатывать и на дочерних функциях.
- Параметрический полиморфизм. В этом случае нет привязки к типу. Функция может выполняться вместе с любым типом данных.
- Ad-hoc-метод. Его еще иногда называют перегрузкой методов. В этом случае функции дается одно имя, а выполняться она может вместе с разными классами и типами данных.
В качестве примера Ad-hoc-метода можно взять функцию len () в Python. Эта функция позволяет работать с разными типами данных. Допустим у нас есть длина строки, а также есть длина строения. По идее это разные данные, но функция len () позволяет коду отрабатывать одинаково в обоих случаях и выводит на экран нужный нам результат.
Преимущества полиморфизма:
Разберемся с плюсами полиморфизма. Это позволит нам понять, действительно ли это свойство полезно с практической точки зрения. Вот основные преимущества.
- Упрощение кода. С помощью подобных методов можно снизить дублирование кода. В зависимости от его разновидности абстрактный базовый класс или общий интерфейс указывает на общее поведение функции вне зависимости от типа данных.
- Расширяемость и гибкость. Появляется возможность, не изменяя код, добавлять новые операции и типы объектов. При использовании общих методов или интерфейса новые классы легко встраиваются в код.
- Читаемость кода. Благодаря такому способу код становится более понятным для других разработчиков. Общие методы работы с разными классами делают его простыми для понимания.
- Повторное использование кода. Один и тот метод применяется для разных типов данных. Благодаря полиформизму удаляет необходимость создавать одинаковые функции для разных классов, достаточно сделать их универсальными.
- Расширенная функциональность. Можно быстро сделать код более функциональным, добавляя новые классы и типы данных без значительных трудозатрат. Можно просто прописать новый класс, который будет использовать общий метод с уже имеющимися.
- Инкапсуляция и абстракция. С помощью полиморфизма можно заниматься в первую очередь поведением объектов, не обращая внимания на отдельные методы их реализации. Также упрощается инкапсуляцию, разделяя интерфейс и детали реализации кода.
- Упрощение тестирования. Так как для разных классов используются одни методы, можно значительно ускорить тестирование. Для теста достаточно написать проверку одного метода, который будет работать для всех классов и участков кода.
- Упрощение командной разработки. Часто над большими программами работают разные команды программистов. Общие методы, применяемые при полиморфизме, дают возможность им наладить взаимодействие между отдельными элементами программы благодаря общим методам и интерфейсу.
Примеры использования
Рассмотрим, как может применяться способ на практике. Для начала приведем пример перегрузки кода на Java. Для этого нам нужно создать в одном классе несколько методов: все они будут с одинаковым названием и при этом будут иметь разный функционал. Получается такой код:
При запуске кода он без проблем выведет нужные данные в зависимости от фигуры, площадь которой нам нужно высчитать.
Приведу еще один пример кода, но уже с использованием переопределения. В этом случае мы дали дочернему классу такое же название метода, как и у родительского класса. При вызове дочернего класса, функция срабатывает как положено и интерпретатор выводится как «Управлять автомобилем».
Теперь рассмотрим, как может использоваться в JavaScript. В примере у нас есть два класса с одинаковым названием add. Второй класс наследует название у первого. При этом у каждого класса отличные определения используемого метода. Поэтому код будет срабатывать в зависимости объекта, которым вызывается, и будут выполняться разные операции.
Это наиболее простые и распространенные варианты использования полиморфизма в программировании. Но на практике даже эти варианты дают большое поле для применения в сложных программных продуктах.
Заключение
Полиморфизм — одно из важнейших свойств для объектно-ориентированного программирования. С помощью этой способности одна функция может работать с разными типами данных, что упрощает процесс написания кода, особенно если с ним работает команда, и каждый программист работает со своими подпрограммами.
Также он сильно упрощает добавление новых функций в имеющийся код. Вы можете использовать те же классы, не переживая, что они будут отрабатывать неправильно.
В целом такой способ дает возможность писать более чистый код, который можно прочитать, даже если его писали не вы. В результате новые сотрудники смогут быстрее разобраться в написанном ранее и вносить правки.
Благодаря полиморфизму удается оптимизировать и ускорять исполнение кода. Помимо перечисленного такой код проще тестировать. Один тест дает возможность проверки работы функции с разными типами данных. Это значительно ускоряет проверку программ перед сдачей проекта заказчику.
Коротко о главном
- Полиморфизм — одно из основных свойств объектно-ориентированного программирования.
- Это свойство позволяет ускорять написание кода и делает его чище.
- Одни классы для разных типов данных позволяют оптимизировать код.
- Тестирование программ, написанных с его применением, происходит быстрее.
Комментарии