Sablonok
Az absztrakció, referencia és szintézis (ARS) alkalmazásának következménye, hogy a programsablonokat egyszerűen és hatékonyan
fel lehet használni szinte bármely programozási nyelvben.
- Closure sablon
A closure (zárt) sablon a leg alapvetobb programsablon, amit az ARS-bol (Abstraction, Reference, Synthesis) származtattak.
A zártság a teljes környezetével beágyazódott a lambda absztrakcióba. Ez a környezet tartalmazza az összes nevet, amit a lambda
absztrakció elfogad. A lambda absztrakcióban a nevek hozzáférését az úgynevezett "lexical scope" (lexikális tér) kontrollálja.
A "lexical scope"-ot úgy is lehet mondani, mint a lambda absztrakció kontextusát a programozási szövegben.
A closure egy első osztályú objektum
, ami azt jelenti, hogy úgy lehet kezelni, mint bármely más adat elemet:
- Lehet a memóriában tárolni;
- Egy funkciónak argumentumként át lehet adni;
- Egy funkció értékeként vissza lehet kapni;
Két apró különbség van a closure és az objektum között az OOP-ban:
- A closure lényegében egy funkció, amit meg lehet hívni, de bele lehet ágyazni az összes "gyerek" adatát és eljárását;
- Az objektum lényegében egy adat elem, beágyazva az összes "gyerek" adata és eljárása. Az egyik eljárását (methódusát)
érvényesíttetni lehet az objektum argumentum halmazába, ami lényegében olyan, mint egy funkció hívás.
- CLAM sablon
A CLAM sablon csak egy implementációja az általános closure sablonnak C-ben.
Jelentése: C Lambda Absztrakció. A CLAM tulajdonképpen egy lambda absztrakció
implementációja, ahogy az ARS szerint definiálták a C programozási nyelvben. Mert a CLAM az egy beágyazása az adatoknak és az eljárásoknak.
Egy objektum orientált technológiában objektumként lehet fordítani.
- Lista sablon
Minden programozási nyelv rendelkezik egy tulajdonsággal, ami előbb-utóbb összegyűjti az adatokat valamilyen konténerben.
Az A++ a "gyűjteményét" listaként és lexikonként implementálja. A listát egy linkelt lista párként implementálja.
A pár egy fejből és egy farokból áll. A fej az adatelemre mutat, a farok a lista következő párjára.
Az utolsó pár farka egy speciális elemre mutat, amit "nil"-nek, vagy "null"-nak nevezünk. A programozó felelőssége, hogy a
lista tartalmazza a "nil"-t.
A következő absztrakciók minimális követelménye a párok és listák működésének:
- cons a pár konstruktora
- car a pár head-jének a szelektora
- cdr a pár tail-jének a szelektora
- nullp ellenörző predikátum, mikor a lista empty (üres)
- pairp ellenörző predikátum, mikor az objektum egy pár
- Lexikális sablon (Dictionary Pattern)
A lexikonok azok a listapárok, ahol a pár első eleme kulcsként funkcionál és a második elemet jelöli. A második elem a pár értéke. (Más programozási nyelvekben hash table-nek nevezik)
A lexikonok asszociatív listaként, vagy hash táblaként implementálható. Az A++-ban az asszociatív listákat a section assoc fedi le.
- Halmaz sablon
Ez a sablon többé-kevésbé megegyezik a lista sablonnal. Annyival több annál, hogy megengedi a halmazműveletek használatát
a listákon.
- Rekurzió sablon
Sok hurok konstrukció a programokban a rejtett rekurzív adat struktúra miatt áll elő. Ebben az esetben a legrosszabb az ellenőrzés.
Ilyen esetekben a rekurzív program struktúra a legjobb választás.
- Magasabbrendű muködésű sablon (Higher Order Function Pattern)
Ez a sablon a funkciókhoz kapcsolódik és a funkciókat argumentumként és/vagy értékként adja vissza. A klasszikus példa a
magasabrendű funkcióra az a compose absztrakció. Ez a funkció vesz 2 funkciót, mint argumentumot és egy új funkciót hoz létre
ami értékként adódik vissza.
- Üzenet továbbító sablon
A sablon egy statikus objektum modellt implementál, ahogy a Java-ban, C++-ban és más OOP alapú programozási nyelvben használatos.
Ebben a modellben az objektumok üzeneteken keresztül jönnek létre és kommunikálnak.
- Meta objektum protokol sablon:
A sablon a dinamikus objektum modellt implementálja. Ebben a modell metódusban dinamikusan lehet létrehozni, módosítani és törölni.
Mint dinamikus objektum model elérhető a Common Lisp-ben CLOS névként. A++-ban általában nem, de nincs kizárva a használata.