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í

  1. cvičení - Objekty a třídy
  2. cvičení - Zapouzdření
  3. cvičení - Polymorfismus (základ třídy ellipse, řešení)
  4. cvičení - Dědičnost (řešení)
  5. cvičení - Dědičnost + kontrakty (řešení)
  6. cvičení - Události
  7. cvičení - Události - klikání (řešení úlohy 1, řešení úlohy 2)
  8. cvičení - Události - princip vlastnění
  9. cvičení - Prototypy (řešení úlohy)
  10. cvičení - Prototypy
  11. 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:

  1. Světla semaforu budou instancemi třídy light ze souboru 04_light.lisp.
  2. Semafor bude mít nastavitelnou vlastnost semaphore-type s možnými hodnotami (minimálně) :pedestrian a :vehicle.
  3. Instance třídy semaphore se budou vykreslovat jako jednoduchý obrázek semaforu (správný počet koleček v obdélníku).
  4. 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 vlastnosti phase-count. Fáze se číslují od nuly.
  5. Pro přechod k následující fázi bude semafor implementovat metodu next-phase.

Požadavky na třídu crossroads:

  1. Vlastnost items bude nastavitelná uživatelem. Může obsahovat libovolné; grafické objekty, z nichž některé mohou být semafory.
  2. Třída definuje vlastnost semaphores (jen ke čtení), která bude obsahovat seznam všech semaforů v křižovatce.
  3. 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 vlastnosti crossroads-phase. Počet fází bude uložen ve vlastnosti phase-count.
  4. 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ázi 2, je její první semafor ve fázi 0, druhý ve fázi 2 a třetí ve fázi 1.

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

Správce stránky: Tomáš Kühr