Spis treści
Programowanie uogólnione
Programowanie uogólnione (rodzajowe, generyczne) – jeden z paradygmatów programowania, polegający na definiowaniu algorytmów i struktur danych na poziomie abstrakcyjnym (niezależnym od konkretnej reprezentacji danych), tak aby ten sam schemat rozwiązania mógł być stosowany do wielu różnych typów[1][2][3]. W ujęciu praktycznym akcentuje się abstrahowanie od szczegółowych typów do wąskiego zestawu wymagań funkcjonalnych, dzięki czemu ten sam algorytm może działać na szerokiej klasie typów spełniających te wymagania[3][4][5].
Programowanie uogólnione umożliwia pisanie kodu (zwłaszcza w językach statycznie typowanych) w postaci uogólnionej, bez wiązania go z jednym, konkretnym typem danych na etapie definicji; typy są podstawiane w momencie użycia (instancjacji) mechanizmu uogólnień[6].
W ekosystemie C++ programowanie uogólnione jest często omawiane obok metaprogramowania szablonowego, ponieważ oba podejścia wykorzystują szablony jako mechanizm językowy, przy czym metaprogramowanie szablonowe obejmuje m.in. techniki obliczeń na etapie kompilacji i tworzenia nowych typów[7][8].
W wielu językach programowania istnieją mechanizmy wspierające uogólnienia[3], m.in.:
- w C++ – szablony (templates)[9].
- w D – szablony (templates) opisane w specyfikacji języka[10].
- w Java – typy generyczne (generic classes/type parameters)[6].
- w C# – typy generyczne oparte na parametrach typów (type parameters)[11].
- w Haskell – polimorfizm parametryczny (parametric polymorphism) w systemie typów języka[12].
- w TypeScript – typy generyczne (generics) w systemie typów języka[13].
Przykłady
[edytuj | edytuj kod]C++ (szablony)[14]
template<typename To, typename From>
To convert(From f);
void g(double d)
{
int i = convert<int>(d); // instancjacja: To=int, From=double
char c = convert<char>(d); // instancjacja: To=char, From=double
int(*ptr)(float) = convert; // dedukcja argumentów szablonu
}
D (szablony)[15]
T Square(T)(T t)
{
return t * t;
}
void main()
{
import std.stdio;
writefln("%s", Square(3)); // T jest dedukowane jako int
writefln("%s", Square!(int)(3)); // instancjacja jawna
}
Java (typy generyczne)[16]
/** Generic version of the Box class. */
public class Box<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
Box<Integer> integerBox; // użycie typu parametryzowanego
C# (typy generyczne)[17]
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
{
T temp;
if (lhs.CompareTo(rhs) > 0)
{
temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Haskell (polimorfizm parametryczny)[18]
-- Typ a -> a oznacza typ uniwersalnie kwantyfikowany: ∀ a. a -> a
id' :: a -> a
id' x = x
TypeScript (generics)[19]
function identity<Type>(arg: Type): Type {
return arg;
}
Przypisy
[edytuj | edytuj kod]- ↑ Sean Parent: Generic Programming. stlab.cc, 2018-11-08. s. 7. [dostęp 2026-01-19].
- ↑ Typy generyczne - JavaStart [online], JavaSart, 9 lipca 2021 [dostęp 2026-01-19] (ang.).
- ↑ a b c https://zsoitmilowka.pl/upload/file/PAI/4_paradygmaty.pdf
- ↑ Andrei Alexandrescu: Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley, 2001, s. xviii. ISBN 978-0-201-70431-0. [dostęp 2026-01-19].
- ↑ Poznaj podstawy Javy - typy generyczne [online], bulldogjob.pl [dostęp 2026-01-19].
- ↑ a b The Java Language Specification (Java SE 7), 8.1.2: Generic Classes and Type Parameters. Oracle. [dostęp 2026-01-19].
- ↑ Andrei Alexandrescu: Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley, 2001, s. xv. ISBN 978-0-201-70431-0. [dostęp 2026-01-19].
- ↑ Template metaprogramming (C++). cppreference.com. [dostęp 2026-01-19].
- ↑ Bjarne Stroustrup: Concept-Based Generic Programming in C++. 2025. s. 1. [dostęp 2026-01-19].
- ↑ Templates (D Language Specification). dlang.org. [dostęp 2026-01-19].
- ↑ ECMA-334: C# language specification (7th edition, December 2023). Ecma International, 2023, s. 85–86. [dostęp 2026-01-19].
- ↑ Simon Marlow: Haskell 2010 Language Report. haskell.org, 2010, s. 24. [dostęp 2026-01-19].
- ↑ Handbook: Generics. TypeScriptLang.org. [dostęp 2026-01-19].
- ↑ Template argument deduction. cppreference.com. [dostęp 2026-01-19].
- ↑ Templates (D Language Specification) – Function Templates. dlang.org (docarchives). [dostęp 2026-01-19].
- ↑ Generic Types (The Java Tutorials). Oracle. [dostęp 2026-01-19].
- ↑ Generic methods (C# programming guide). Microsoft Learn. [dostęp 2026-01-19].
- ↑ Haskell 2010 Language Report – Chapter 4: Declarations and Bindings (Types). haskell.org. [dostęp 2026-01-19].
- ↑ Documentation – Generics (TypeScript Handbook). TypeScriptLang.org. [dostęp 2026-01-19].









