POŽADAVKY KE ZKOUŠCE z PRG003
METODIKA PROGRAMOVÁNÍ a
FILOSOFIE PROGRAMOVACÍCH JAZYKŮ

A) Obecné otázky
1. Vývoj programovacích jazyků
FORTRAN, Algol  60, PL/I, Algol 68,  Pascal, Simula 67, Ada, C a C++,Java, APL, LISP, PROLOG
2. Programovací styly
Strukturované, modulární, objektové programování, event-driven
3. Logické programování (Prolog)
unifikace, backtracking,, procedurální a deklarativní sémantika, neúplně definované datové struktury (např. rozdílové seznamy), použití akumulátoru (např. revers_append), řez, negace, bagof (setof), predikáty ovlivňující databázi (assert, retract, .. ), ovlivňování časové složitosti programů. 
4. Funkcionální programování 
Lisp – princip programování, základní formy, lambda notace, typy vyhodnocování výrazů.
Haskell – typový systém, typová specifikace funkce, curryfikace, matchování parametrů, lazy vyhodnocování, nekonečné termy, třídy, techniky optimalizace. 
5. Datové typy a datové  abstrakce, generické typy
6. Řídící struktury programovacích jazyků
7. Struktura programovacího jazyka,
proměnné,  jejich hodnoty,  typy, definiční oblast, životní cyklus
Překlad  a  interpretace   programovacího  jazyka,  separátní překlad
8. Podprogramy a předávání parametrů
9. Zpracování výjimek

B) 	Podrobněji znalost jednoho z následujících jazyků:
( Je možné si domluvit individuálně jiný jazyk )
a) SIMULA 67
pojem třídy - objektové programování
text, předávání parametrů,
kvalifikace a inspekce
prefixování, virtuální atributy, hidden a private, inner,
kvaziparalelní systém - koprogramy
třídy SIMSET a SIMULATION, princip procesní simulace
b) C++
realizace myšlenek objektového programování
pojem třídy, členu, konstruktor a destruktor
ochrana přístupu ke členům tříd
vícenásobná dědičnost, abstraktní třídy, 
zpracování výjimek, šablony 
přetěžování operátorů a metod
srovnání jazyků C a C++
c) Ada
charakteristika jazyka
typy a typové kontroly, atributy,
separátní kompilace, práce s knihovnami
generiky
podprogramy, předávání parametrů
výjimky
paralelismus, mechanismus randevous
d) Java
koncepce jazyka
applety
realizace myšlenek objektového programování
konstruktory, metoda finalize a garbage collector
abstraktní a finální metody a třídy
rozhraní
vnitřní třídy
ochrana přístupu k členům tříd
balíky
vlákna
příkazy a výrazy
zpracování výjimek
předávání parametrů
automatické dokumentování 

e) Haskell
Typy v Haskellu, typová specifikace funkce 
Základní způsoby definování výrazů, sémantika „mečování“ parametrů, as patterns ( @s ), žolíky ( _ ), lazy paterns
lazy vyhodnocování, „nekonečné“ termy 
Lambda abstrakce, používání jmen funkcí jako operátorů a naopak, specializace operátorů { (např. (x+) Třídy, podtřídy, instance. 
Pole v Haskellu. 

LITERATURA :

Ghezzi C., Jazayeri,M. : Programming Language Concepts
     John Wiley 1987
Pratt T.W. : Programming Languages - Design and Implementation
     Prentice Halll 1975
     ruský překlad Moskva "Mir" 1978
Horowitz E. (editor): Programming Languages - A Grand Tour
     Computer Science Press  1985  ISBN 0-88175-073-5
	
SIMULA 
Benda, Staudek : Programování v jazyce SIMULA'67
Malík : Programovací jazyk SIMULA skripta MFF UK

ADA
Barnes J.G.P. : Programming in ADA
       Addison-Wesley 1983

C++
Stroustrup Bjarne: C++ Programming Language
	second edition
Addison-Wesley 1993, Reading Massachusets
Lippman Stanley.B. : C++ Primer
second edition
Addison-Wesley 1993, Reading Massachusets

JAVA
Bruce Eckel : Thinking in Java	WWW
Pavel Herout : Učebnice jazyka Java, 2001 Kopp
P.J.Perry : Java – tvorba dokonalých WWW stránek
	
HASKELL
Paul Hudak, Joseph H. Fasel: A Gentle Introduction to Haskell
ke stažení z www.haskell.org