Paradigmata programování 3 Mgr. Tomáš Kühr, Ph.D.
Tato webová stránka obsahuje informace k mému cvičení předmětu Paradigmata programování 3 (KMI/PP3, KMI/PAPR3, KMI/OOP). Další informace lze najít na stránkách přednášejícího.Požadavky na zápočet
Zápočet bude udělen z vyřešení 4 úloh, které budou postupně zadávány v průběhu semestru.
Program cvičení
- cvičení - Objekty a třídy
- cvičení - Zapouzdření
- cvičení - Polymorfismus (základ třídy ellipse, řešení)
- cvičení - Dědičnost (řešení)
- cvičení - Dědičnost + kontrakty (řešení)
- cvičení - Události
- cvičení - Události - klikání (řešení úlohy 1, řešení úlohy 2)
- cvičení - Události - princip vlastnění
- cvičení - Prototypy (řešení úlohy)
- cvičení - Prototypy
- cvičení - Vícenásobná dědičnost, CLOS
Zápočtové úlohy
Úloha 1
Napište funkci, která vytvoří novou instanci třídy picture představující nějaký netriviální zajímavý obrázek (podobně jako funkce make-bulls-eye z přednášky). Funkce by měla mít alespoň jeden parametr, který určuje nějakou zajímavou kvantitativní vlastnost obrázku (jako je třeba parametr count u funkce make-bulls-eye). Samotný obrázek by měl obsahovat nejlépe instance všech dalších tříd grafických objektů (point, polygon, circle) a k jeho vytvoření by měla být použita většina nastavovacích zpráv, které jsme zatím definovali (set-color, set-thickness, move, scale, ...).
Úloha 2
Definujte třídu semaphore
, která bude potomkem třídy
picture
nebo abstract-picture
(rozhodněte,
co je správně), jejíž instance budou simulovat dopravní
semafor. Dále definujte třídu crossroads
, která
bude rovněž potomkem třídy picture
nebo abstract-picture
a jejíž instance budou představovat obrázky křižovatky.
Požadavky na třídu semaphore
:
- Světla semaforu budou instancemi třídy
light
ze souboru 04_light.lisp. - Semafor bude mít nastavitelnou vlastnost
semaphore-type
s možnými hodnotami (minimálně):pedestrian
a:vehicle
. - Instance třídy
semaphore
se budou vykreslovat jako jednoduchý obrázek semaforu (správný počet koleček v obdélníku). - Semafor se může nacházet v jedné z několika fází, podle
svého typu. Např. semafor pro vozidla bude mít čtyři fáze (červená, červená +
oranžová, zelená, oranžová). Aktuální barvy světel semaforu musí
odpovídat jeho fázi. Číslo fáze bude uložené v
nastavitelné vlastnosti
semaphore-phase
. Počet fází bude uložen ve vlastnostiphase-count
. Fáze se číslují od nuly. - Pro přechod k následující fázi bude semafor
implementovat metodu
next-phase
.
Požadavky na třídu crossroads
:
- Vlastnost
items
bude nastavitelná uživatelem. Může obsahovat libovolné; grafické objekty, z nichž některé mohou být semafory. - Třída definuje vlastnost
semaphores
(jen ke čtení), která bude obsahovat seznam všech semaforů v křižovatce. - Křižovatka se podobně jako semafor může nacházet v různých fázích.
Jednotlivé fáze křižovatky se budou opět přepínat zprávou
next-phase
a budou uloženy ve vlastnosticrossroads-phase
. Počet fází bude uložen ve vlastnostiphase-count
. - Fáze křižovatky určují, v jakých fázích jsou její semafory. To je zadáno nastavitelnou vlastností
program
, která obsahuje program semaforu. To je seznam seznamů. Jeho délka udává počet fází, i-tý podseznam programu určuje stav křižovatky v její i-té fázi. Každý podseznam má délku rovnou počtu semaforů v křižovatce a pro každý semafor obsahuje číslo jeho fáze. Příklad: pro křižovatku o třech semaforech a programem((0 0 0) (0 1 0) (0 2 1))
platí, že je-li křižovatka ve fázi2
, je její první semafor ve fázi0
, druhý ve fázi2
a třetí ve fázi1
.
Pracujte s načtenou knihovnou micro-graphics a načtenými soubory 05.lisp a 04_light.lisp.
Úloha 3
Definujte třídy inspector-window
a inspected-window
, které budou splňovat požadavky úlohy 10 z učebního textu k tématu princip vlastnění.
Úloha 4
Vyřešte úlohy 1; 2; 4 nebo 5; 6; 7; 8; 9; 10 (stačí 2 z uvedených); 11; 13 (stačí násobení) z nejnovější (5. prosince) verze učebního textu "Prototypy 2: všechno je objekt".
Pokyny k vypracování zápočtových
- Při opakovaném řešení úkolu zahrňte do mailu veškerou předchozí korespondenci o úkolu, aby vyučující viděl své připomínky.
- Řešení nepište přímo do mailu, vždy je připojte jako soubor s příponou .lisp.
- Zdrojový kód musí obsahovat pouze definice (tedy výrazy defun, defvar, defclass, defmethod a podobně). Jeho vyhodnocení by nikdy nemělo vést k vyhodnocení testovacích výrazů. Ty uvádějte pouze jako komentář (uvozený znaky #| a |#).
- Zdrojový soubor musí být samostatný. Needitujte soubory, které dostáváte od vyučujících. Zdrojové soubory knihovny micro-graphics i zdrojové soubory k jednotlivým kapitolám textu musí zůstat beze změny (a nemusíte je ke svému řešení přikládat).
- Soubor musí jít zkompilovat bez jediné chyby a warningu. Pokud soubor není psán v čistém ASCII, musí být uložen v kódování UTF-8.