Обобщенные функции бывают в математике и программировании. Мы не будем разбирать, что такое обобщенные функции в математике, но обязательно разберем их определение в программировании.
Обобщенные функции являются важной частью парадигмы обобщенного программирования. Обобщенное программирование является ответвлением объектно-ориентированного программирования. Поэтому реализовать обобщенные функции можно лишь в тех языках, которые объектно ориентированы.
Что такое обобщенные функции?
Обобщенное программирование — это подход в программировании, при котором функции и алгоритмы применяются к разным типам данных, при этом они никак не видоизменяются. Важным инструментом обобщенного программирования являются обобщенные функции.
Впервые об обобщенных функциях заговорили еще в 70-х годах прошлого столетия. Тогда их применяли в языке ADA. Чуть позже возможность реализовывать такие функции перекочевала в другие объектно-ориентированные языки, такие как:
- С++;
- Python;
- Java;
- Паскаль;
- Eiffel;
- D;
- и др.
Многие языки, поддерживающие обобщенные функции, используются и в наше время.
Суть обобщенных функций сводится к тому, что они описывают требования не к каким-то конкретным типам данных, а к абстрактным сущностям. Классическим примером использования обобщенной функции в объектно-ориентированном программировании является рисование объектов. В этом случае реализуется одна концептуальная операция — «рисование объекта», которая может рисовать объекты разных форм:
- круги,
- треугольники,
- квадраты,
- и др.
То есть не нужно для каждой отдельной фигуры создавать отдельную функцию, так как создается одна функция «рисовать», которая реализуется с разными методами, определяющими форму рисуемого объекта. Таким образом мы получаем, что обобщенные функции определяют абстрактные операции, где известны название и параметры операции, но не известны способы ее реализации.
Обобщенные функции сами по себе ничего собой не представляют. То есть, если просто создать и определить обобщенную функцию в коде, то в конечном счете ничего не произойдет или возникнет ошибка. Для того чтобы реализовать обобщенную функцию, она должна принять основополагающие аргументы. В качестве аргументов могут выступать любые объекты или методы. К примеру, каждый отдельный метод может определять реализацию обобщенной функции для каких-то отдельных классов.
Вернемся к рисованию. Если у нас есть обобщенная функция «рисовать» и мы ее запустим, то ничего не произойдет, так как функция не будет понимать что рисовать. Для этого мы должны создать несколько методов для этой функции, например «треугольник», «квадрат», «круг» и др. и определять их в качестве аргументов обобщенной функции. Таким образом обобщенная функция должна выглядеть так: «рисовать треугольник», «рисовать круг», «рисовать квадрат» и др.
Или другой пример. Допустим в программе нужно что-то постоянно менять местами. Тогда мы создаем обобщенную функцию «менять местами» и несколько методов к ней. Тогда при вызове функции в каком-то конкретном месте, мы указываем в ее аргументах, что конкретно нужно поменять местами. Например:
- «поменять местами числа»;
- «поменять местами буквы»;
- «поменять местами предложения»;
- «поменять местами строки»;
- и др.
В общем, любая функция, если она написана таким образом, что ее код может использоваться многократно с разными аргументами, может считаться обобщенной. В обобщенных функциях тело функции всегда остается одно и то же, но меняется лишь реализация функции.
Заключение
Обобщенные функции — основной инструмент обобщенного программирования. Обобщенное программирование несет в себе важную идею — научиться программировать таким образом, чтобы единожды написанный код можно было использовать многократно и максимально широко.
Web