Seminář 4 (Úkoly)
Úkol č.1
Upravte úkoly 1 až 5 z druhého semináře tak, aby:
- třídy, které mají shodné metody, používaly vhodné rozhraní,
- demonstrovaly použití polymorfismu, viz text k semináři.
Úkol č. 2
Navhrněte rozhraní Switchable, která bude mít dvě metody boolean turnOn() a void turnOff(). První metoda slouží k zapnutí nějakého objektu/zařízení a vrací true, pokud byla operace úspěšná, jinak vrací false. Metoda turnOff slouží k vypnutí objektu/zařízení.
Vytvořte dvě třídy Light a CheapLight reprezentující světlo a levné světlo, které se po několika zapnutích rozbije, viz text k druhému semináři.
Naprogramujte statickou metodu isCheapDevice(Switchable device), která na základě opakovaného zapnutí/vypnutí rozpozná, jestli bylo jako argument předáno běžné nebo laciné světlo. Uvažujte, že pokud zadaný objekt nevydrží dvacet opakovaných vypnutí a zapnutí, jedná se o levný výrobek.
Úkol č. 3
Rozšiřte třídu IntList z 6. úkolu z druhého semináře tak, aby obsahovala metodu int get(int index), která vrátí prvek v seznamu na zadaném indexu. Pokud takový prvek neexistuje, je chování nedefinováno.
Vytvořte třídu IntArray, která bude mít stejné metody jako třída IntList, avšak bude uchovávat hodnoty v poli. Tyto hodnoty budou předány v konstruktoru, kterému je možné předat libovolný počet čísel typu int.
Vytvořte a použijte rozhraní IntSequence, které bude reprezentovat posloupnost celých čísel a bude obsahovat společné metody tříd IntList a IntArray.
Vytvořte statickou metodu int sum(IntSequence seq), která vrátí součet čísel v dané posloupnosti celých čísel. Vyzkoušejte, že funguje správně pro IntList a IntArray.