Cserék (Generikus programozás)
Ezzel a programmal hatalmasat ugrunk, mégpedig a generikus programozás témakörébe! Példát mutatunk egy olyan generikus/sablon (más nyelveken template) cserét használó program elkészítésére, amelynél a sablon leírása külön fájlokban található. (Megjegyezzük, hogy a beágyazásra ebben az esetben is van lehetőségünk. Később látunk rá példát.)
A generikus program lényegében véve egy olyan program, amely paraméterként nem csak értékeket, hanem típusokat és más programegységeket is kaphat. Egyik fő célja, hogy általánosan, újrahasznosítható formában, típus-függetlenül fogalmazzuk meg az algoritmusainkat.
Amikor sablon programot írunk először meg kell fogalmaznunk egy általános algoritmust, amit végre szeretnénk hajtani. Ezt úgy kell megtennünk, hogy az algoritmusunk minél inkább független legyen az adat típusától, amivel dolgozik majd. Gondoljunk a cserére. A csere általában a következő három utasítás végrehajtásából áll: c:=a; a:=b; b:=c; Ezt a megoldást alkalmazzuk legyen szó akár egész, akár lebegőpontos számok vagy bármely más két egyforma típusú dolog megcseréléséről. A fenti egyszerű utasításokat sokszor kell leírnunk, ha különböző típusokra szeretnénk elvégezni a felcserélés műveletét. Ez a programozási nyelvek típusrendszere miatt van így. (Egyszer az a,b,c egész típusú változók, egyszer lebegőpontosak.) Azonban lehetőség van arra, hogy magát a műveletet csak egyszer írjuk le, csökkentve ezáltal a gépelési hibákból, vagy a későbbi esetleges módosításokból származó hibák esélyét. Miután az algoritmust egyszer megfogalmaztuk, már csak azt kell megmondanunk, hogy mi legyen a benne szereplő a,b,c változók típusa. Ezután amikor a fordítóprogram dolgozik, és a sablon megkapta a paramétereket, legenerálódik a megfelelő kód. Innentől a változók már ténylegesen léteznek a nekik megadott típussal. Ez a folyamat a példányosítás. Fontos, hogy a példányosítás előtt nem keletkezik kód a sablonból, hiszen ekkor még nem tudunk memóriaterületet biztosítani olyan változókhoz amelyeknek a típusa ismeretlen.
A következő program példát mutat a felüldefiniálásra/túlterhelésre is. (Több csere nevű függvény is van, amelyek más és más típusokat cserélnek.)
A pontos megértéséhez javasoljuk, hogy magunktól próbáljunk meg írni más ilyen sablon algoritmusokat. A sablonok lehetséges paramétereire a későbbiekben számos példát látunk, azonban minden lehetőséget nem ismertetünk. A lehetséges sablonparaméterek, és típusok megtalálhatóak az ajánlott irodalmakban.
csere.ads
csere.adb
cserek.adb
magyarázat:
A példányosítás a cserek.adb 11. sorában történik a new kulcsszó segítségével.
Csere nevű eljárás többször is szerepel a programban. (cserek.adb 14. , 22. sor)