Cvičenie 4 - Rozhrania, Finálne triedy, metódy a premenné, Ošetrenie výnimiek

Cieľom štvrtého cvičenia je precvičiť si vytváranie rozhraní, definovanie finálnych typov a základné ošetrenie výnimiek. Názvy a typ premenných a metód sú zapísané v UML notácii.

Úlohy

Úloha 4.1

Vytvorte rozhranie Zariadenie s metódami zapni(): void a vypni(): void.

Úloha 4.2

Vytvorte rozhranie Termostat s metódou nastavTeplotu(teplota: int): void.

Úloha 4.3

Vytvorte abstraktnú triedu ZakladneZariadenie, ktoré implementuje rozhranie Zariadenie. Do triedy pridajte chránené premenné stav: boolean a nazov: String. Do triedy pridajte konštruktor ZakladneZariadenie(nazov: String), ktorý nastaví členskú premennú nazov. Implementujte metódy zapni(): void tak, aby ak zariadenie nie je ešte zapnuté, nastaví stav na true a vypíše správu "zariadenie zapnuté" a metódu vypni(): void tak, aby ak zariadenie nie je vypnuté nastavilo stav na false a vypíše správu "zariadenie vypnuté".

Úloha 4.4

Vytvorte triedu Osvetlenie odvodenú z triedy ZakladneZariadenie implementujúcu rozhranie Zariadenie. Pridajte konštruktor Osvetlenie(nazov: String), ktorý volá konštruktor nadradenej triedy. Predefinujte metódu zapni(): void a vypni(): void tak aby sa najprv otestovalo či už zariadenie nie je zapnuté resp. vypnuté, potom sa zavolala implementácia nadradenej triedy a nakoniec sa vypísala správa "osvetlenie zapnuté" resp. "osvetlenie vypnuté".

Úloha 4.5

Vytvorte triedu Vykurovanie odvodené od triedy ZakladneZariadenie implementujúce rozhrania Zariadenie a Termostat. Do triedy pridajte členskú premennú teplota: int. Pridajte konštruktor Vykurovanie(nazov: String), ktorý volá konštruktor nadradenej triedy. Predefinujte metódy zapni(): void a vypni(): void tak, aby sa pri zapnutí nastavila teplota na 25 a pri vypnutí na 0. Pridajte implementáciu nastavTeplotu(teplota: int): void, ktorá nastaví teplotu a vypíše správu "aktuálna teplota: [teplota]".

Úloha 4.6

Vytvorte triedu Dom, ktorá bude mať členské premenné vykurovanie: Vykurovanie a osvetlenie: Osvetlenie. Pridajte konštruktor, ktorý nastaví členské premenné. Pridajte metódy zapniSvetlo(): void, vypniSvetlo(): void, zapniKurenie(): void, vypniKurenie(): void a nastavTeplotu(teplota: int): void, ktoré volajú zodpovedajúce metódy členských premenných.

Úloha 4.7

Vytvorte triedu Program do ktorej pridajte metódu main. V metóde main vytvorte jeden dom, zapnite svetla, zapnite kúrenie a nastavte teplotu na 30 stupňov.

Úloha 4.8

Do triedy Vykurovanie pridajte statickú finálnu premennú MAX_TEPLOTA: int, ktorú nastavte na 40 stupňov.

Úloha 4.9

V triede Vykurovanie upravte metódu nastavTeplotu(teplota: int): void tak aby ak je teplota menej ako 0, alebo viac ako MAX_TEPLOTA sa vyvolá výnimka IllegalArgumentException so správou, že teplota je mimo rozsahu.

Úloha 4.10

Upravte metódu main tak aby ste otestovali nastavenie teploty a ošetrili výnimku IllegalArgumentException. Pri obsluhe chyby vypíšte správu a nastavte teplotu na 25 stupňov. Pridajte aj kód, ktorý sa na konci vykoná vždy (aj keď došlo k chybe) a ktorý vypne kúrenie.