📑 Table of Contents

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.1][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[4.2][7].

W wielu językach programowania istnieją mechanizmy wspierające uogólnienia[3], m.in.:

Przykłady

edytuj

C++ (szablony)[13]

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)[14]

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)[15]

/** 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)[16]

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)[17]

-- Typ a -> a oznacza typ uniwersalnie kwantyfikowany: ∀ a. a -> a
id' :: a -> a
id' x = x

TypeScript (generics)[18]

function identity<Type>(arg: Type): Type {
  return arg;
}

Zobacz też

edytuj

Przypisy

edytuj
  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. ISBN 978-0-201-70431-0. [dostęp 2026-01-19].
    1. S. xviii.
    2. S. xv.
  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. Template metaprogramming (C++). cppreference.com. [dostęp 2026-01-19].
  8. Bjarne Stroustrup: Concept-Based Generic Programming in C++. 2025. s. 1. [dostęp 2026-01-19].
  9. Templates (D Language Specification). dlang.org. [dostęp 2026-01-19].
  10. ECMA-334: C# language specification (7th edition, December 2023). Ecma International, 2023, s. 85–86. [dostęp 2026-01-19].
  11. Simon Marlow: Haskell 2010 Language Report. haskell.org, 2010, s. 24. [dostęp 2026-01-19].
  12. Handbook: Generics. TypeScriptLang.org. [dostęp 2026-01-19].
  13. Template argument deduction. cppreference.com. [dostęp 2026-01-19].
  14. Templates (D Language Specification) – Function Templates. dlang.org (docarchives). [dostęp 2026-01-19].
  15. Generic Types (The Java Tutorials). Oracle. [dostęp 2026-01-19].
  16. Generic methods (C# programming guide). Microsoft Learn. [dostęp 2026-01-19].
  17. Haskell 2010 Language Report – Chapter 4: Declarations and Bindings (Types). haskell.org. [dostęp 2026-01-19].
  18. Documentation – Generics (TypeScript Handbook). TypeScriptLang.org. [dostęp 2026-01-19].

📚 Artikel Terkait di Wikipedia

ECMAScript

those used in other programming languages; in particular C, Java™, Self, and Scheme as described in: ISO/IEC 9899:1996, Programming Languages — C. Gosling

Fork-bomba

Dhamdhere: Operating Systems: A Concept-based Approach. 2006, s. 285. ISBN 0-07-061194-7. Mark Hammond: Python Programming On Win32: Help for Windows Programmers

Programowanie obiektowe

programming is more than just classes and objects; it’s a whole programming paradigm based around objects (data structures) that contain data fields and

Windows Portable Devices

2026-02-05]  (ang.). Microsoft: WPD Programming Guide. Microsoft Learn. [dostęp 2026-02-06]. Cytat: The WPD API is a COM-based interface that allows applications

Lista skrótów i skrótowców używanych w informatyce

Application Programing Interface CAx – Computer-Aided technologies CBQ – Class Based Queueing CBR – Constant Bit Rate CD – Compact Disc CDFS – Compact Disc

Permakultura

Kristof Nordin: Permaculture Design for Orphans and Vulnerable Children Programming: Low-Cost, Sustainable Solutions for Food and Nutrition Insecure Communities

Lista seriali i programów oryginalnych Disney+

Aaron Couch, Lesley Goldberg: Disney+: A Comprehensive Guide to All Its Programming (So Far). The Hollywood Reporter. [dostęp 2019-04-09]. [zarchiwizowane

Fotostereoskopia

Rendering 2006, Nicosia, Cyprus, June 26–28, 2006. Brian W. Kernighan – „Programming in C: A Tutorial”, Bell Laboratories, Murray Hill, N.J. (presented as