Logo Czechitas
Updatováno: 9. 11. 2018

Úkol - Třídy a objekty

Část 1

Založte nový projekt, stejně jako v hodině: Create new project -> User Defined Template -> Java Console App. Nazvěte ho 20-Model_pocitace, uložte do JAVATRAINING/Projects/Java1/Lekce05/20-Model_pocitace a base package zvolte cz.czechitas.pocitac.

Vytvořte třídy Disk, Pamet, Procesor, Pocitac tak, aby měly následující složky:

Disk
  |
  +-- long kapacita;
  |
  +-- long vyuziteMisto;
  |
  +-- public void vypisInfo()
Pamet
  |
  +-- long kapacita;
  |
  +-- public void vypisInfo()
Procesor
  |
  +-- String vyrobce;
  |
  +-- long rychlost;
  |
  +-- public void vypisInfo()
Pocitac
  |
  +-- boolean jeZapnuty;
  |
  +-- Procesor cpu;
  |
  +-- Pamet ram;
  |
  +-- Disk pevnyDisk;
  |
  +-- public void vypisInfo()
  |
  +-- public void zapniSe()
  |
  +-- public void vypniSe()

Do každé třídy naprogramujte vypisInfo(), podobně, jak jsme to dělali v hodině.

Do třídy Pocitac navíc naprogramujte metodu zapniSe() a vypniSe(), které budou "zapínat" a "vypínat" počítač, t.j. nastavovat proměnnou jeZapnuty na správnou hodnotu a vypíše o tom informaci. Počítač je možno zapnout jen v případě, že má procesor, pamět i disk. Pokud kterákoliv část chybí (např. ram == null), metoda zapniSe() vypíše chybovou hlášku (klasicky pomocí System.out.println()) a počítač se nezapne (nenastaví proměnnou jeZapnuty na true). Počítač není možno zapnout dvakrát. Při takovém pokusu opět vypište chybovou hlášku. Počítač je možno vypnout vícekrát, ale opakované volání metody vypniSe() se ignoruje.

V metodě main(...) ve SpousteciTrida vytvořte model svého počítače a vyzkoušejte, že vám fungují správně metody vypisInfo() u všech tříd a že počítač jde zapnout, jen pokud je správně sestavený.

Příklad metody main(...) Kamilova počítače:

public static void main(String[] args) {
    Pocitac kamiluvNotebook;
    kamiluvNotebook = new Pocitac();
    kamiluvNotebook.vypisInfo();
    kamiluvNotebook.zapniSe();      // Vypise chybu, protoze pocitac
                                    // nema vsechny povinne soucasti

    Procesor kamiluvProcesor = new Procesor();
    kamiluvProcesor.rychlost = 3600L * 1000L * 1000L;
    kamiluvProcesor.vyrobce = "Intel";

    Pamet kamilovaPamet = new Pamet();
    kamilovaPamet.kapacita = 32L * 1024L * 1024L * 1024L;

    Disk kamiluvDisk = new Disk();
    kamiluvDisk.kapacita = 150L * 1000L * 1000L * 1000L;

    kamiluvNotebook.cpu = kamiluvProcesor;
    kamiluvNotebook.ram = kamilovaPamet;
    kamiluvNotebook.pevnyDisk = kamiluvDisk;

    kamiluvNotebook.vypisInfo();

    kamiluvNotebook.zapniSe();
    kamiluvNotebook.zapniSe();      // Vypise chybu, protoze pocitac uz bezi
    kamiluvNotebook.vypisInfo();
    kamiluvNotebook.vypniSe();

    kamiluvNotebook.vypniSe();      // Nevypise chybu, ale nic neprovede,
    kamiluvNotebook.vypniSe();      // protoze pocitac je uz vypnuty
}

Nezapomeňte, že je úkolem vytvořit model svého počítače. Parametry vašeho počítače budou pravděpodobně jiné než Kamilova počítače.

Poznámka: Číslo, které končí na L znamená, že jde o číslo typu long a nikoliv int. Rozdíl je v rozsahu. int pojme čísla od -2147483648 do +2147483647, což není dostatečné pro kapacitu harddisku ani paměti. Proto použijte long, který zvládne čísla od -9223372036854775808 do +9223372036854775807. To už je dostatečné na uchování libovolné současné kapacity harddisku.

Část 2

Vylepšete třídu Pocitac o metody:

Pocitac
  |
 ...
predchozi obsah
 ...
  |
  +-- public void vytvorSouborOVelikosti(long velikost)
  |
  +-- public void vymazSouboryOVelikosti(long velikost)

Metoda vytvorSouborOVelikosti(long velikost) zvýší proměnnou vyuziteMisto o velikost. Pokud by se už nově vytvářený soubor na disk nevešel (vyuziteMisto > kapacita), metoda vypíše chybu a vyuziteMisto se nebude měnit. Metoda vymazSouboryOVelikosti(long velikost) sníží proměnnou vyuziteMisto o velikost. vyuziteMisto nemůže klesnout pod 0. Metody budou fungovat pouze, pokud je počítač zapnutý.

Demonstrujte v main(...), že se metody chovají, jak mají.

Část 3 - Nepovinná část

Tuto část nemusíte naprogramovat, a přesto vám bude úkol uznán jako splněný. Ale zkuste to :-)

Vylepšete třídu Pocitac o druhý disk:

Pocitac
  |
 ...
predchozi obsah
 ...
  |
  +-- Disk druhyDisk

Opravte metody vytvorSouborOVelikosti(long velikost) a vymazSouboryOVelikosti(long velikost) tak, aby nejprve zabíraly místo na prvním harddisku a potom na druhém. Teprve pokud se soubor nedá vytvořit ani na druhém harddisku, vypíše metoda vytvorSouborOVelikosti(long velikost) chybu.

Demonstrujte v main(...), že se metody chovají, jak mají.

Odevzdání domácího úkolu

Nejprve appku (20-Model_pocitace) zbavte přeložených spustitelných souborů. Zařídíte to tak, že v IntelliJ IDEA vpravo zvolíte Maven Projects -> Lifecycle -> Clean. Úspěch se projeví tak, že v projektové složce zmizí podsložka target. Následně složku s projektem zabalte pomocí 7-Zipu pod jménem Ukol04-Vase_Jmeno.7z. (Případně lze použít prostý zip, například na Macu). Takto vytvořený archív nahrajte na Google Drive do složky Ukol04.

Vytvořte snímek obrazovky spuštěného programu (výpisu v konzoli) a pochlubte se s ním v galerii Ukol04 na Facebooku.

Pokud byste chtěli odevzdat revizi úkolu (např. po opravě), zabalte ji a nahrajte ji na stejný Google Drive znovu, jen tentokrát se jménem Ukol04-Vase_Jmeno-verze2.7z.

Termín odevzdání je do úterý 6. 11. 2018 23:59. Pokud úkol nebo revizi odevzdáte později, prosím pošlete svému opravujícímu kouči/lektorovi email nebo zprávu přes FB.