Paradigmata programování 3
Aplikaci PP-Polyglot, kterou budeme používat na cvičení, lze stáhnout v tomto odkazu odkazu.
Seznam úkolů
Úkol 1. Křižovatka
Na cvičení 9.11. se bude psát "test", který ověří, že rozumíte kódu, který jste odevzdali. V případě, že test psát z nějakého důvodu nebudete, proběhne odevzdání ústně (např. v konzultačních hodinách).
Definujte třídu semaphore (zvolte pro ni vhodného předka), jejíž instance budou simulovat dopravní semafor. Požadavky:
- Vlastnost
itemsnebude nastavitelná uživatelem. - Světla semaforu budou instancemi třídy light ze souboru 04_light_example.lisp.
- Semafor bude mít nastavitelnou vlastnost
semaphore-types možnými hodnotami (minimálně):pedestriana:vehicle. - Instance třídy
semaphorese 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
current-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.
Definujte třídu crossroads (zvolte pro ni vhodného předka), jejíž instance budou představovat obrázky křižovatky. Požadavky:
- Vlastnost
itemsbude 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-phasea budou uloženy v nastavitelné vlastnosticurrent-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ázi 2, je její první semafor ve fázi 0, druhý ve fázi 2 a třetí ve fázi 1.
Do kódu (zakomentovaného) napište testovací scénář křižovatky, která obsahuje alespoň 3 semafory (:vehicle i :pedestrian).
Úkol je opravován pomocí automatických testů, proto dbejte na správné pojmenování metod a tříd!
Nejzazší datum pro odevzdání je 9.11. ve 11:00. Odevzdávejte pouze soubor s příponou lisp (pojmenování souboru příjmení_jméno.lisp), který obsahuje pouze Váš kód k tomuto úkolu.
Link pro odevzdání: zde (heslo je pp3)
Zápočet
- docházka na cvičeních sice nebude vyžadována, ale je silně doporučená
- v průběhu semestru budou zadány 3 domácí úkoly, které všechny musíte splnit:
- nestačí přístup "ono to funguje" – aby byl úkol uznán, musí splňovat principy OOP (hlavní smysl tohoto předmětu)
- úkol může být vrácen k přepracování v případě chyby, warningu nebo porušení principů OOP
- na cvičení po odevzdání úkolu se bude psát "test", který ověří, že rozumíte kódu, který jste odevzdali
- způsob odvezdávání úkolů bude upřesněm při zadání prvního úkolu
- zadání úkolů bude postupně aktualizováno na těchto stránkách.
Plagiátorství a odevzdvání úkolů
“Pokud se student dopustí plagiátorství, opisování při písemném testu, opisování při práci na domácím úkolu nebo se jiným způsobem pokusí o podvod, zahájí s ním vedoucí katedry kárné řízení. Pokud se takové jednání studenta opakuje, vedoucí katedry navrhne děkanovi fakulty vyloučit studenta ze studia.” – viz web katedry
Zadaní z prvního cvičení
Vytvořte datové struktury (například pomocí property seznamů) pro geometrické objekty:
point(bod v rovině), který má dvě hodnoty souřadnic'xa'ycircle, který má svůj střed'centerreprezentovaný bodem a poloměr'radiuspolygon, který se skládá z bodů v seznamu'items
Dále máme tyto požadavky:
- Napište konstruktory, selektory a mutátory pro tyto datové struktury.
- Napište funkci, která zjistí o struktuře jakého je typu.
- Napište funkci
move, která posune zadaný geometrický objekt o hodnoty x a y. - Zamyslete, jak bychom museli upravit tyto struktury, aby měli nějakou společnou vlastnost. Například pokud by každy geometrický objekt měl obsahovat informaci o své barvě.
- Zamyslete se, jaké problémy bychom museli řešit, pokud bychom chtěli přidat další strukturu pro trojúhelník.