Vyučující
|
-
Bartl Eduard, doc. RNDr. Ph.D.
-
Krupka Michal, doc. RNDr. Ph.D.
|
Obsah předmětu
|
Kurs navazuje na kurs Paradigmata programování 1. Jeho náplní je všeobecný úvod do objektově orientovaného programování. Probrány budou základní principy OOP bez omezení na konkrétní programovací jazyk. Cílem kurzu je poskytnout studentům nadhled nad probíranou problematikou, proto se věnuje i dnes méně rozšířeným oblastem objektového programování. Kurs tak slouží jako protiváha předmětů, v nichž je objektové programování probíráno se zřetelem k přímému uplatnění v praxi. Jako modelový jazyk kurzu bude použit Common Lisp, v němž lze probíranou problematiku dobře demonstrovat a který je příbuzný jazyku Scheme, s nímž studenti již mají zkušenosti. Principy objektově orientovaného programování budou procvičovány na netriviálních příkladech, student si vyzkouší tři základní role při práci v OOP: roli implementátora objektově orientovaného programovacího jazyka, roli autora objektové knihovny i roli jejího uživatele. 1. Od Scheme ke Common Lispu. Rozdíly v terminologii. Rozdíly ve vyhodnocovacím procesu a pojetí prázdného seznamu. Alternativy nástrojů z R5RS v Common Lispu. Nástroje, které ve Scheme nenajdeme. 2. Třídy a instance, zprávy a metody. Sloty a jejich inicializace. Jednoduchá objektová grafická knihovna. 3. Zapouzdření. Motivace: tři problémy řešené principem zapouzdření. Formulace principu, vyjímky. Použití v objektové grafické knihovně. 4. Polymorfismus. Princip polymorfismu. Použití v objektové grafické knihovně. 5. Jednoduchá dědičnost. Pojem dědičnosti. Dědičnost jako nástroj redukující opakování v kódu. Hierarchie tříd. Přepisování metod, volání zděděné metody. Zásady používání dědičnosti, princip "is-a". Použití při inicializaci instancí. Použití v objektové grafické knihovně. 6. Události. Programování řízené událostmi. Pojem delegáta. Práce s událostmi v jednoduché grafické knihovně. Zprávy a události jako data a jejich využití. 7. Prototypové jazyky. Dědičnost a zprávy v prototypových jazycích. Srovnání prototypových jazyků a jazyků založených na třídách, implementace jednoduchého prototypového jazyka a práce s ním, implementace a použití prototypové objektové knihovny. Ukázka čistě objektového prototypového jazyka. 8. Vícenásobná dědičnost. Pojem vícenásobné dědičnosti, vícenásobná dědičnost v různých programovacích jazycích. Programování pomocí rozhraní (interface) a mixinů. Výhody a úskalí vícenásobné dědičnosti. 9. Netradiční rysy CLOSu. Generické funkce a multimetody, kombinace metod a jejich využití. Spojení funkcionálního a objektového programování, dynamické objektové programování. Metaobjektové protokoly.
|
Studijní aktivity a metody výuky
|
Metody práce s textem (učebnicí, knihou), Nácvik pohybových a pracovních dovedností, Laborování
|
Výstupy z učení
|
Náplní kurzu je všeobecný úvod do objektově orientovaného programování.
1. Znalost Definuj výhody a styly vývoje objektově orientovaných programů.
|
Předpoklady
|
nespecifikováno
|
Hodnoticí metody a kritéria
|
Analýza výkonů studenta
K získání zápočtu je nutno vypracovat několik menších projektů. Závěrečná zkouška je praktická a spočívá v napsání a odladění programu podle zadání.
|
Doporučená literatura
|
-
Fowler, M. (2003). Patterns of enterprise application architecture. Addison-Wesley.
-
GRAHAM P. (1996). ANSI Common Lisp. Prentice Hall.
-
KICZALES GREGOR, DES RIVIERES JIM AND BOBROW DANIEL G. (1991). The Art of the Metaobject Protocol. Cambridge, MA ; London : MIT Press.
-
MEYER BERTRAND. (1997). Object-Oriented Software Construction. Prentice Hall.
-
Seibel P. (2005). Practical Common Lisp. Apress.
-
Weitz, E. (2015). Common Lisp Recipes: A Problem-Solution Approach. Apress.
|