parametric polymorphism
Megjelenés
| polymorphism |
|---|
| ad hoc polymorphism |
| parametric polymorphism |
| subtyping |
Főnév
parametric polymorphism (tsz. parametric polymorphisms)
- (informatika) Parametric polymorphism (paraméteres polimorfizmus) a polimorfizmus egy fajtája, amely lehetővé teszi, hogy függvények vagy osztályok többféle adattípuson működjenek, miközben a kód csak egyszer van megírva. Ez a generikus programozás alapja – például a C++
templatemechanizmusa vagy Javagenericsrendszere.
🧠 Mi az a parametric polymorphism?
- A “parametric” szó arra utal, hogy a viselkedés egy vagy több típusparaméterre van paraméterezve.
- A kód nem függ konkrét típusoktól: a működése általános.
- A különböző típusú adatokra ugyanaz a kód példányosítható, típusparaméterek behelyettesítésével.
🔍 Példák különböző nyelveken
✅ C++ (template segítségével)
template <typename T>
T maximum(T a, T b) {
return (a > b) ? a : b;
}
Használat:
maximum(3, 7); // int
maximum(3.14, 2.71); // double
maximum("apple", "pear"); // const char*
Itt T a típusparaméter – ez a paraméteres polimorfizmus példája.
✅ Java (generics segítségével)
public class Box<T> {
private T item;
public void set(T item) { this.item = item; }
public T get() { return item; }
}
Box<Integer> b1 = new Box<>();
Box<String> b2 = new Box<>();
A T típus bármilyen típussal helyettesíthető.
✅ Haskell (még általánosabb)
length :: [a] -> Int
A length függvény bármilyen típusú lista hosszát visszaadja – a lehet Int, Char, Bool, stb. Ez a tiszta paraméteres polimorfizmus példája.
📦 Hogyan különbözik más polimorfizmusoktól?
| Típus | Leírás |
|---|---|
| Parametric polymorphism | A függvény/osztály típusparaméterekre általános |
| Subtype polymorphism (alapú típus) | A függvények az alosztályok példányain is működnek (pl. C++ virtuális függvények, Java override) |
| Ad-hoc polymorphism | Függvények különböző típusokra más implementációt kapnak (pl. overloading, type class instance) |
🧰 Használata C++-ban
template<typename T>– típusparaméterek- STL konténerek (
vector<T>,map<K, V>) is paraméteres polimorfizmust használnak - Kompatibilis
constexpr,SFINAE,conceptseszközökkel
🧩 Előnyök
| Előny | Magyarázat |
|---|---|
| Kód újrahasznosítás | Egyetlen általános megvalósítás több típusra |
| Típusbiztonság | Fordítás idején történik típusellenőrzés |
| Olvashatóság | Nincs szükség ismételt kódra minden típushoz |
❌ Hátrányok
| Hátrány | Magyarázat |
|---|---|
| Nehezebb hibakeresés | Bonyolult hibaüzenetek sablonpéldányosításkor (C++) |
| Fordítási idő | Sok típuspéldányosítás lelassíthatja a buildet |
| Kódrobbanás | Minden típuspéldány külön gépi kódot eredményezhet (C++) |
🧪 Példák kombinálva
template <typename T>
class Pair {
public:
T first, second;
Pair(T a, T b) : first(a), second(b) {}
T max() const { return (first > second) ? first : second; }
};
Pair<int> p1(1, 5);
Pair<double> p2(3.14, 2.71);
Mindkét Pair<T> típus ugyanazt a sablont használja, különböző típusparaméterrel – ez a paraméteres polimorfizmus.
🧠 TL;DR
Parametric polymorphism azt jelenti, hogy ugyanazt a kódot többféle típusra is használhatjuk, a típust paraméterként megadva. Ez a sablonok (
template), generikus programozás, és funkcionális nyelvek egyik legfontosabb képessége.
- parametric polymorphism - Szótár.net (en-hu)
- parametric polymorphism - Sztaki (en-hu)
- parametric polymorphism - Merriam–Webster
- parametric polymorphism - Cambridge
- parametric polymorphism - WordNet
- parametric polymorphism - Яндекс (en-ru)
- parametric polymorphism - Google (en-hu)
- parametric polymorphism - Wikidata
- parametric polymorphism - Wikipédia (angol)