Обобщённое программирование — это парадигма программирования, заключающаяся в написании алгоритмов, которые можно применять к различным типам данных. В том или ином виде поддерживается разными языками программирования. Возможности обобщённого программирования впервые появились в 70-х годах в языках CLU и Ada, а затем во многих объектно-ориентированных языках, таких как C++, Java, D и языках для платформы .NET.
Содержание |
В языке C++ обобщённое программирование основывается на понятии «шаблон», обозначаемом ключевым словом template. Широко применяется в стандартной библиотеке C++ (см. STL), а также в сторонних библиотеках boost, Loki. Большой вклад в появление развитых средств обобщённого программирования в C++ внёс Александр Степанов.
Функция, возвращающее большее значение из двух.
template <typename T> T max(T x, T y) { if (x < y) return y; else return x; }
Java предоставляет средства обобщённого программирования, синтаксически основанные на C++, начиная с версии J2SE 5.0. В этом языке имеются generics или «контейнеры типа T» — подмножество обобщённого программирования.
На платформе .NET средства обобщённого программирования появились в версии 2.0.
interface IPerson { string GetFirstName(); string GetLastName(); } class Speaker { public void speakTo<T>(T person) where T : IPerson { string name = person.GetFirstName(); this.say("Hello, " + name); } }
В языке «D» средства обобщённого программирования значительно эволюционировали в сравнении с С++, как в процедурной так и в объектно ориентированной составяющей. Значительно проще стало и лингвистическое представление.
// http://digitalmars.com/d/2.0/template.html template Foo(T, R...) // T - тип, R - набор типов { void Foo(T t, R r) { writefln(t); static if (r.length) // if more arguments Foo(r); // do the rest of the arguments } } void main() { Foo(1, 'a', 6.8); } /+++++++++++++++ prints: 1 a 6.8 +++++++++++++++/