composite data type (tsz. composite data types)
Egyszerű típusok (primitive types): pl. int, char, float Összetett típusok: pl. tömb, struktúra, osztály, rekord, unió, tuple, lista, stb.
Miért jó? Azért, mert a valós életben az adataink is összetettek: egy embernek lehet neve, életkora, magassága, címe stb. Ezeket nem akarjuk szétbontva, hanem egy egységben kezelni.
Azonos típusú elemekből álló, fix méretű sorozat.
Példa (C++):
int tomb; // 10 elemű int tömb
Eltérő típusú elemeket fog össze.
Példa (C/C++):
struct Szemely {
char nev;
int eletkor;
float magassag;
};
Rekord néven is ismert adatbázisokban, Pascalban.
Az OOP kiterjeszti a struktúra fogalmát: adatok + metódusok.
Példa (C++):
class Pont {
int x, y;
public:
void set(int _x, int _y) { x = _x; y = _y; }
};
Véges, fix elemszámú, különböző típusú értékek sorozata.
Példa (Python):
t = ("abc", 42, 3.14)
Elemei lehetnek különböző típusúak (dinamikus nyelvben), vagy csak egyfélék (statikus nyelvben).
Példa (Python):
lista =
Kulcs-érték párokból álló összetett típus.
Példa (Python):
d = {"név": "Anna", "életkor": 25}
Az összetett adattípus lehet rekurzívan is összetett (pl. struktúra mezője egy másik struktúra, lista, stb.). Matematikailag a szorzat fogalmával rokon (Cartesian product): Egy Szemely
= (Név, Életkor, Magasság) hármas.
struct Pont {
int x;
int y;
};
Pont p;
p.x = 10;
p.y = 20;
struct Auto {
std::string rendszam;
int evjarat;
double ar;
};
Auto bmw = {"ABC-123", 2019, 7890000};
class Auto:
def __init__(self, rendszam, evjarat, ar):
self.rendszam = rendszam
self.evjarat = evjarat
self.ar = ar
auto1 = Auto("XYZ-789", 2018, 5200000)
class Auto {
String rendszam;
int evjarat;
double ar;
public Auto(String rendszam, int evjarat, double ar) {
this.rendszam = rendszam;
this.evjarat = evjarat;
this.ar = ar;
}
}
Az összetett adattípus az absztrakció eszköze is: nem kell tudnunk, hogy az adat belül hogyan van elrendezve, csak azt, hogy milyen mezői, tulajdonságai, vagy metódusai vannak.
Tömb: Az elemek egybefüggő memóriaterületen, index-szel elérhetők.
Struktúra: A mezők sorrendben egymás után helyezkednek el a memóriában.
Lista: Elemei láncoltan, minden elem tartalmazza a következő címét (mutatóját).
Az összetett (composite) adattípusok elengedhetetlenek a programozásban, hiszen a valós problémák is összetettek. Lehetővé teszik, hogy egységben, logikus csoportban kezeljünk különböző típusú adatokat. Használatukkal bonyolultabb adatszerkezeteket is hatékonyan, átláthatóan modellezhetünk.