📑 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

Metaheurystyka

wyżarzanie Tabu Search heurystyka Fred Glover. Future Paths for Integer Programming and Links to Artificial Intelligence. „Computers and Operations Research”

Pascal (język programowania)

zakresem danych typu). program silnia_liczby; var n: integer; function silnia(n: integer): integer; begin if n = 0 then silnia := 1 else silnia := n *

Problem P vs NP

 Gondzio JacekJ., TamásT. Terlaky TamásT., Advances in Linear and Integer Programming, Oxford University Press, 1996, s. 103–144  (ang.). RussellR. Impagliazzo RussellR

Ada (język programowania)

adb”): with Text_IO, Ada.Integer_Text_IO; use Text_IO, Ada.Integer_Text_IO; procedure Short_Circuit is function Is_Odd (i : Integer) return Boolean is begin

Pętla (informatyka)

Textboxem Dim i As Integer Text1.Text = "" For i = 0 To 10 Text1.Text = Text1.Text & i Next i Przykład w VB6 z Debugwindow Dim i As Integer For i = 0 To 10

Fortran

integer (liczby całkowite o zakresie zależnym od implementacji i opcji); jest to równoważne deklaracjom „implicit real (A-H,O-Z)” i „implicit integer

Podłoga i sufit

OCLC 38992868 [dostęp 2021-02-19] . Kenneth E.K.E. Iverson Kenneth E.K.E., A programming language, New York 1962, s. 12, ISBN 0-471-43014-5, OCLC 523128 [dostęp

Clojure

bar")) Funkcja string->integer występująca w języku Scheme. (defn string->integer ([str] (Integer/parseInt str 10)) ([str base] (Integer/parseInt str base)))