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. Nasledujúci UML diagram zobazuje triedy a rozhrania, ktoré máte naprogramovať v jednotlivých úlohách.
Vytvorte rozhranie Zariadenie s metódami zapni(): void a vypni(): void.
Vytvorte rozhranie Termostat s metódou nastavTeplotu(teplota: int): void.
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é".
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é".
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]".
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.
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.
Do triedy Vykurovanie pridajte statickú finálnu premennú MAX_TEPLOTA: int, ktorú nastavte na 40 stupňov.
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.
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.