Web

Что такое обобщенные функции на примерах, для чего они нужны

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

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

Что такое обобщенные функции?

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

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

  • С++;
  • Python;
  • Java;
  • Паскаль;
  • Eiffel;
  • D;
  • и др.

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

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

  • круги,
  • треугольники,
  • квадраты,
  • и др.

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

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

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

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

  • «поменять местами числа»;
  • «поменять местами буквы»;
  • «поменять местами предложения»;
  • «поменять местами строки»;
  • и др.

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

Заключение

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

Схожие статьи

Web

Что такое веб-портал, какова их деятельность и виды, чем они отличаются от сайтов

Float CSS: что это такое и как работают адаптивные блоки Div в CSS?
Web

Float CSS: что это такое и как работают адаптивные блоки Div в CSS?

Web

Как я могу добавить динамически созданный URL-адрес в переменную PHP?

Плагины Chrome - недооцененная ниша бизнеса
Web

Плагины Chrome - недооцененная ниша бизнеса