Az ada sablonok Generikus programozs Mire jk Algoritmusok
Az ada sablonok Generikus programozás.
Mire jók? • Algoritmusok és adatszerkezetek általános, típusfüggetlen leprogramozása 2
Sablon faják: • Alprogram sablon: eljárás és függvény • Csomag sablon pl. nagyon gyakran átlátszatlan típus definiálására 3
Sablon specifikáció és törzs (prog. ): -- Alprogram: külön szerepelnie kell a két résznek! generic type T is private; procedure Swap( A, B: in out T ) is C: T : = A; begin A : = B; B : = C; end Swap; 4
Sablon specifikáció és törzs: -- Csomagok esetében szokásosan két külön rész. generic type Element is private; package Stacks is … end Stacks; package body Stacks is … end Stacks; 5
Sablon csomag (prog. ): generic type Element is private; package Stacks is type Stack( Max: Positive ) is limited private; procedure Push ( S: in out Stack; E: in Element ); procedure Pop ( S: in out Stack; E: out Element ); function Is_Empty ( S: Stack ) return Boolean; . . . -- további műveletek private. . . -- reprezentáció end Stacks; … -- műveletek megvalósítása a csomag törzsében 6
Sablon objektumparamétere: generic type Element is private; Max: Positive; package Stacks is type Stack is limited private; procedure Push ( S: in out Stack; E: in Element ); … end Stacks; package Int_Stacks is new Stacks(Integer, 10); S: Int_Stacks. Stack; 7
Példányosítás (1): procedure Int_Swap is new Swap(Integer); package Int_Stacks is new Stacks(Integer); 8
Példányosítás (2): generic type Element is private; Max: Positive; package Stacks is type Stack is limited private; … package IStacks is new Stacks(Integer, 10); use IStacks; S 1, S 2: Stack; 9
Példányosítás (3): generic type Element is private; package Stacks is type Stack(Max: Positive) is limited private; … package IStacks is new Stacks(Integer); use IStacks; S 1: Stack(5); S 2: Stack(10); 10
Sablonok alprogramparaméterei: generic type T is private; with function "<" (A, B: T) return Boolean; function Maximum ( A, B: T ) return T is begin if A < B then return B; else return A; end if; end Maximum; 11
Sablonok alprogramparaméterei: generic Alapértelmezett „érték” type T is private; with function "<" (A, B: T) return Boolean is <>; function Maximum ( A, B: T ) return T; function Maximum ( A, B: T ) return T is begin if A < B then return B; else return A; end if; end Maximum; 12
Példányosítás: with Maximum; procedure Max_Demo is function I_Max is new Maximum( Integer, "<" ); function I_Min is new Maximum( Integer, ">" ); function F_Max is new Maximum( Float ); … end Max_Demo; 13
Feladat: Valósítsuk meg az összegzés tételt, úgy hogy az elemek típusa, egy tömb, egy index és egy művelet legyenek a paraméterek. Type elem is range <>; Type index is (<>); Type Vektor is array(index) of Elem; 14
Paraméter típusok Formális Aktuális type T is private; definit nem korlátozott type T(<>) is private; type T is limited private; (in)definit nem korlátozott definit (nem) korlátozott type T(<>) is limited private (in)definit (nem) korlátozott Törzsben obj. létrehozás : = = /= obj. létrehozás 15
Néhány típusosztály megjelölés: • Egész típus type T is range <>; • Diszkrét típus type T is (<>); • Moduló, lebegőpontos, fixpontos, decimális fixpontos • Tömb, mutató, diszkriminánsos, származtatott, kiterjesztett 16
Sablonok csomagparamétere: generic with package Arithmetics is new Matrix_Arithmetics(<>); use Arithmetics; function Inverse( M: Matrix ) return Matrix; 17
Lehetséges paraméterek: • type T is private; -- pl. String nem lehet megoldás: type T(<>) is private; • type T(<>) is private; -- pl. C: T : = A; nem lehet!! • ha a paraméter limited típusú, akkor a sablon típusa is limited kell legyen • type T is limited private; -- esetén C: T : = A; hibás 18
Feladat 1 Valósítsuk meg a négyzetes mátrix típust csomag sablonnal. Paraméterek legyenek: az elemek típusa, az összeadás és szorzás művelete két elem között és a méret. Műveletek: összeadás, szorzás, elem lekérdezése, beállítása. 19
Feladat 2 Készítsünk sablon függvényt, amely egy vektor elemeinek részletösszegeiből álló sorozat (a 1, a 1+a 2+a 3, . . . ) maximumát számítja ki. Paraméterek: vektorelemek típusa, vektorindexek típusa, vektor típus (megszorítás nélküli indexhatárokkal), összeadás művelete valamint az összehasonlítás relációja. 20
Feladat 3 Szétválogató kettős verem típust sablon csomagban. Paraméterek: elemek típusa (átlátszatlan), egy függvény amelyik minden elemre igaz vagy hamis értéket ad, a verem mérete. A kettősverem: korlátozott, átlátszatlan (rekorddal) 21
- Slides: 21