Ahoj, prosil bych moc, jestli byste prosím podíval do zdrojáku.
Nejlépe bude na tom, když přečteš tom zadání:
ZADÁNÍ ÚKOLU:
Pro vyřešení této úlohy je třeba
rozumět pojmu rozhraní,
znát podmíněný výraz if() a aritmetické operátory,
znát statické metody
Rozhraní a třídy ze zadání neměňte!
--------------------------------------------------------------------------------
Úloha simuluje zařízení, která nějakým způsobem reagují na stisk ovládacího tlačítka, případně ovladače hlasitosti.
Následující pojmy jsou důležité pro správnou implementaci a jsou striktně používány v následujícím zadání i v nápovědě testovací třídy.
Zmáčknout tlačítko /push button/: znamená stlačit a držet tlačítko
Uvolnit tlačítko /release button/: znamená pustit zmáčknuté tlačítko
Stisknout tlačítko /click/: znamená zmáčknout a uvolnit
K dispozici máte dvě rozhraní. Rozhraní VolumeControl předepisuje metody pro ovládání hlasitosti. Rozhraní Switching předepisuje metody pro zmáčknutí a uvolnění tlačítka. Protokol pro použití rozhraní Switching striktně předepisuje, že zmáčknout lze pouze uvolněné tlačítko a uvolnit lze pouze zmáčknuté tlačítko. Při implementaci rozhraní proto ignorujte situaci, kdy někdo vyvolá např. pushButton() dvakrát po sobě. Toto je zkrátka zakázáno.
Zadání
Vytvořte třídu Light implementující rozhraní Switching. Třída bude reagovat na stisknutí /click/ tlačítka tak, že pokud světlo svítí, vypne se, pokud je vypnuté, rozsvítí se (je na vás, jestli se rozsvítí/zhasne při zmáčknutí /push/ nebo až při uvolnění /release/ tlačítka). Do třídy přidejte metody
boolean isTurnedOn() - vrátí true pokud světlo svítí, jinak false.
String toString() - vrátí řetězec "This light is on" nebo "This light is off" podle toho, jestli je světlo rozsvícené.
Vytvořte třídu Ventilator implementující rozhraní Switching. Ventilátor má tři rychlosti. Na stisknutí /click/ tlačítka bude reagovat tak, že pokud je ventilátor vypnutý, přepne se na první rychlost. Každé další stisknutí přepne na vyšší rychlost. Pokud je ventilátor na třetí rychlosti, tak se po stisknutí tlačítka vypne. Do třídy přidejte metody
int getSpeed() - vrátí aktuální rychlost 0-3 (0 pro vypnutý ventilátor).
String toString() - vrátí řetězec "This ventilator has speed <X>", kde <X> je aktuální rychlost.
Vytvořte třídu Bell představující elektrický zvonek s možností ovládání hlasitosti. Třída tedy bude implementovat rozhraní Switching i rozhraní VolumeControl. Na zmáčknutí /push/ tlačítka bude zvonek reagovat tak, že začne zvonit. Po uvolnění /release/ tlačítka zvonit přestane. Do třídy přidejte metody
boolean isRinging() - vrátí true pokud zvonek zvoní (bez ohledu na hlasitost), jinak false.
String toString() - vrátí řetězec "This bell is ringing" nebo "This bell is not ringing" podle toho, jestli zvonek zvoní.
Vytvořte třídu Service, simulující opravnu, která mačká tlačítko a sleduje reakci přístroje. Třída Service bude mít statickou metodu
void testDevice(Switching device),
která bude fungovat následovně:
Zmáčne /push/ tlačítko na zařízení
Na std. výstup vypíše "Pushed button: <informace o zařízení>"
Tlačítko uvolní /release/
Na std. výstup vypíše "Released button: <informace o zařízení>"
Kroky 1-4 se provedou ještě jednou
Kde <informace o zařízení> je text získaný voláním toString() metody. K dispozici máte třídu Main, která třídu Service používá a postupně ji předkládá na otestování světlo, ventilátor a zvonek. Výstup by měl být následující. U světla a ventilátoru se výstup může mírně lišit podle toho, jestli tato zařízení reagují na zmáčknutí tlačítka /push/ nebo až na uvolnění /release/.
Light in service:
Pushed button: This light is on
Released button: This light is on
Pushed button: This light is off
Released button: This light is off
Ventilator in service:
Pushed button: This ventilator has speed 1
Released button: This ventilator has speed 1
Pushed button: This ventilator has speed 2
Released button: This ventilator has speed 2
Bell in service:
Pushed button: This bell is ringing
Released button: This bell is not ringing
Pushed button: This bell is ringing
Released button: This bell is not ringing
Zkoušel jsem naprogramovat, takže dvě třídy Light a Ventilator jdou v pořádku.
Otestoval jsem a jedině jen třídu Bell - nevím jak mám naprogramovat.
Díky moc, a těším se moc.
Třída: Light
Třída: VentilatorCode:package cz.muni.fi.pb162.task2; public class Light implements Switching { private boolean click = false; private boolean push; private boolean release; public boolean isTurnedOn() { if(click == true) { return true; } else { return false; } } public String toString() { if(isTurnedOn() == true) { return "This light is on"; } else { return "This light is off"; } } public void pushButton() { if (push == false) { push = true; click = true; } else { click = false; } } public void releaseButton() { release = true; } }
Třída: BellCode:package cz.muni.fi.pb162.task2; public class Ventilator implements Switching { private int rychlost = 0; private boolean push; private boolean release; public int getSpeed() { return rychlost; } public String toString() { return "This ventilator has speed " + rychlost; } public void pushButton() { if (push == false) { push = true; rychlost = (rychlost + 1)%4; } } public void releaseButton() { push = false; } }
Třída: VolumeControlCode:package cz.muni.fi.pb162.task2; public class Bell implements Switching, VolumeControl { private boolean push; private boolean release; private int hlasitost = 1; public boolean isRinging() { if(push == true) { return true; } else { return false; } } public String toString() { if(isRinging() == true) { return "This bell is ringing"; } else { return "This bell is not ringing"; } } public void mute() { this.hlasitost = 0; } public void up() { this.hlasitost++; } public void down() { this.hlasitost--; } public int getVolume() { return this.hlasitost = hlasitost; } public void pushButton() { if (push == false) { push = true; } } public void releaseButton() { push = false; } }
Třída: SwitchingCode:package cz.muni.fi.pb162.task2; public interface VolumeControl { void mute(); void up(); void down(); int getVolume(); }
Třída: ServiceCode:package cz.muni.fi.pb162.task2; public interface Switching { void pushButton(); void releaseButton(); }
Třída: MainCode:package cz.muni.fi.pb162.task2; public class Service { public static void testDevice(Switching device) { device.pushButton(); System.out.println("Pushed button: " + device.toString()); device.releaseButton(); System.out.println("Released button: " + device.toString()); device.pushButton(); System.out.println("Pushed button: " + device.toString()); device.releaseButton(); System.out.println("Released button: " + device.toString()); } }
Code:package cz.muni.fi.pb162.task2; public class Main { public static void main(String[] args) { System.out.println(); System.out.println("Light in service: "); Service.testDevice(new Light()); System.out.println(); System.out.println("Ventilator in service: "); Service.testDevice(new Ventilator()); System.out.println(); System.out.println("Bell in service: "); Service.testDevice(new Bell()); } }


Reply With Quote