Обобщённое программирование

From Wiki Abbreviations
Jump to: navigation, search

Обобщённое программирование


Обобщённое программирование (generic programming) - это технология программирования, в которой используются способы описании данных и алгоритмов, позволяющие применять эти данные и алгоритмы к различным типам данных, не меняя само это описание. Обобщённое программирование  поддерживается разными языками программирования. В 1970-х годах возможности обобщённого программирования впервые появились в форме обобщённых функций (дженериков)  в языках Клу и Ада. Позднее в виде параметрического полиморфизма в ML и его потомках, а затем во многих объектно-ориентированных языках, таких как C++, Java, Object Pascal, D, Eiffel, языках программироавния для платформы .NET. Средства обобщённого программирования реализуются в языках программирования в виде тех или иных синтаксических средств, дающих возможность описывать данные (типы данных) и алгоритмы (процедуры, функции, методы), параметризуемые типами данных.

Описание функций и типов.

У функции или у типа данных явно описываются формальные параметры-типы. Это описание является обобщённым и в исходном виде непосредственно использовано быть не может.

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


Примеры обобщённой процедуры и обобщенных данных.

Обобщённая процедура

Обобщённая процедура перестановки местами двух значений может иметь параметр-тип, определяющий тип значений, которые она меняет местами. Когда программисту нужно поменять местами два целых значения, он вызывает процедуру с параметром-типом «целое число» и двумя параметрами — целыми числами, когда две строки — с параметром-типом «строка» и двумя параметрами — строками.

Обобщённые данные

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


Компиляция обобщенных процедур и данных.

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