Anotácia
Metaprogramovanie je písanie programov, ktoré pracujú s programami ako s dátami. Tento predmet je venovaný technikám metaprogramovania a ich využitiu pri návrhu a implementácii programov. Študenti sa oboznámia s rôznymi reprezentáciami programov, s možnosťami ich analýzy a generovania. Budeme sa tiež venovať pokročilým vlastnostiam programovacích jazykov, ktoré umožňujú programom analyzovať a upravovať vlastnú štruktúru. Medzi témy predmetu patria reflexia, atribútové programovanie, makrá, generovanie kódu, aspektovo-orientované programovanie.
Z čoho sa učiť?
Snímky z prednášok nie sú študijným materiálom, ale iba pomôckou pre sledovanie prednášky. Preto nemá zmysel sa z nich učiť. Hlavnými zdrojmi pre učenie sa preto sú:
- záznamy prednášok a vlastné poznámky z nich,
- témy opísané na stránke predmetu (work in progress),
- zdroje — odporúčaná literatúra.
Zápočet
- Zadanie: 3 iterácie po 10 bodov
- Aktivita — 6 bodov
- Povinné čítanie — prvé 4 body
Skúška
- Písomná práca — 10 bodov
- Povinné čítanie — zvyšných 10 bodov
- Ústna skúška — 40 bodov (2 náhodné otázky z okruhov)
Písomná práca
Opíšte aspoň štyri návrhy na využitie poznatkov získaných na tomto predmete v praxi. Napríklad vo vašich školských alebo iných projektoch. Opis návrhu by mal obsahovať stručné vysvetlenie projektu a problému, ktorý by bolo možné riešiť pomocou metaprogramovania, a samotného navrhovaného riešenia.
Použitie príkladov uvádzaných na prednáškach a cvičeniach sa neráta. Musí isť o vlastné použitie metaprogramovania, a nie o použitie existujúceho nástroja, ktorý používa metaprogramovanie.
Práca musí byť odovzdaná najneskôr 24 hodín pred termínom skúšky.
Okruhy skúškových otázok
- Metaprogramovanie — definícia, použitie, typy metaprogramovania
- Reflexia — definícia, prostriedky realizácie reflexie, použitie v jazyku Java
- Zásobník volaní a jeho introspekcia
- Realizácia tried v jazyku Java a ich načítavanie (ClassLoader)
- Dynamické proxy v jazyku Java
- Anotácie — význam a typy metadát v programovom kóde, ich použitie
- Anotácie v jazyku Java — definícia a použitie anotačných typov pomocou reflexie
- Spracovanie anotácií počas prekladu — anotačný procesor
- Princíp inverzie závislostí v architektúre softvéru a vzor Dependency Injection
- Prostriedky metaprogramovania v jazyku Python
- Generovanie kódu — typy generátorov a techniky generovania kódu
- Vývoj softvéru na základe modelu (MDSD), význam modelu pri generovaní
- Makrá a ich použitie v programovacích jazykoch
- Systémy typov a ich využitie
- Aspektovo orientované programovanie — význam, základné vlastnosti, realizácia v AspectJ
- AspectJ — body spájania a súvisiace bodové prierezy (kinded pointcuts)
- AspectJ — non-kinded pointcuts (scoping pointcuts, contextual pointcuts)
- AspectJ — odporučenia