Przejdź do zawartości

Programowanie uogólnione

Z Wikipedii, wolnej encyklopedii

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.:

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]
  1. Sean Parent: Generic Programming. stlab.cc, 2018-11-08. s. 7. [dostęp 2026-01-19].
  2. Typy generyczne - JavaStart [online], JavaSart, 9 lipca 2021 [dostęp 2026-01-19] (ang.).
  3. a b c https://zsoitmilowka.pl/upload/file/PAI/4_paradygmaty.pdf
  4. 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].
  5. Poznaj podstawy Javy - typy generyczne [online], bulldogjob.pl [dostęp 2026-01-19].
  6. a b The Java Language Specification (Java SE 7), 8.1.2: Generic Classes and Type Parameters. Oracle. [dostęp 2026-01-19].
  7. 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].
  8. Template metaprogramming (C++). cppreference.com. [dostęp 2026-01-19].
  9. Bjarne Stroustrup: Concept-Based Generic Programming in C++. 2025. s. 1. [dostęp 2026-01-19].
  10. Templates (D Language Specification). dlang.org. [dostęp 2026-01-19].
  11. ECMA-334: C# language specification (7th edition, December 2023). Ecma International, 2023, s. 85–86. [dostęp 2026-01-19].
  12. Simon Marlow: Haskell 2010 Language Report. haskell.org, 2010, s. 24. [dostęp 2026-01-19].
  13. Handbook: Generics. TypeScriptLang.org. [dostęp 2026-01-19].
  14. Template argument deduction. cppreference.com. [dostęp 2026-01-19].
  15. Templates (D Language Specification) – Function Templates. dlang.org (docarchives). [dostęp 2026-01-19].
  16. Generic Types (The Java Tutorials). Oracle. [dostęp 2026-01-19].
  17. Generic methods (C# programming guide). Microsoft Learn. [dostęp 2026-01-19].
  18. Haskell 2010 Language Report – Chapter 4: Declarations and Bindings (Types). haskell.org. [dostęp 2026-01-19].
  19. Documentation – Generics (TypeScript Handbook). TypeScriptLang.org. [dostęp 2026-01-19].

Zobacz też

[edytuj | edytuj kod]