📑 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

Fork-bomba

getProperty("java.class.path"), "ForkBomb"}); } } } Ruby: loop { fork { load(__FILE__) } } Alternatywna postać: loop do fork do load(__FILE__) end end Haskell:

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

Technology eXtended JDK – Java Development Kit JDO – Java Data Object JDOQL – Java Data Object Query Language JFS – Journaling File System JIT – Just In Time

Serializacja

wyżej wspomnianego wektora. Przykład: package test; import java.io.Serializable; public class Account implements Serializable { private String surname =

Apache Ant

dir="classes"/> </target> <target name="compile" description="compile the Java source code to class files"> <mkdir dir="classes"/> <javac srcdir="." destdir="classes"/>

Interfejs dostawcy usługi

Processing Java Business Integration Java Sound Java Image I/O Java File Systems Wtyczka (przetwarzanie) Java (język programowania) Java (platforma oprogramowania)

Samsung SGH-E900

(*.png), GIF (*.gif), BMP (*.bmp) Java MIDP 2.0 CLDC 1.1 Preinstalowane gry Java Pamięć przeznaczona na aplikacje Java 4096 KB Wiadomości SMS (T9) MMS E-mail

Quine (program komputerowy)

replace(0,q)").replace(0,q) Inny pokazujący rzadko używaną w JavaScripcie funkcjonalność: function f() { alert(f.toString()+"f()"); }f() (funcall

Nokia E7-00

4.8.1 Java Runtime: 2.3 dla Symbiana Technologie Java: JSR 139 Connected, Limited Device Configuration (CLDC) 1.1 JSR 118 MIDP 2.1 JSR 75 FileConnection