Joomla Vorlagen by Website Hosting

Programování v Java 1 - cvičení

Odkazy na jednotlivá cvičení jsou v systému lms.vsb.cz.

Informace pro dálkové studium

Podmínky získání zápočtu

Získat alespoň 20 bodů z 45 možných bodů. Body jsou udělovány za:

  • domácí úlohy až 10 bodů (minimálně 1);
  • zápočtové testy až 35 bodů (minimálně 1).

Zápočtové testy se budou psát dva a termín bude domluven na tutoriálu.

Domácí úlohy

Zpracované úkoly vkládejte do systému LMS - https://lms.vsb.cz/course/view.php?id=64819 - sekce "Domácí úlohy". Dodržte uvedené termíny. Po termínu úlohu již nelze vložit.

Projekty studentů - rok 2014

Na této stránce jsou vybrané projekty studentů předělané do podoby Java Web Start aplikací nebo Java appletu. Původně tyto projekty byly vytvořeny jako "desktopové" aplikace, takže jejich vzhled a chování v podobě appletů může být v horší oproti originální odevzdané formě.

Pokud Vám neběží Java Web Start aplikace, tak postupujte podle popisu zde.

Arkanoid - 1

autor: přál si zůstat v anonymitě

spustit Java Web Start 

Dáma- 1

autor: Petrskovský Jan

spustit Java Web Start

Frogger - 1

autor: Kubiš Lukáš

spustit Java Web Start

Go - 1

autor: přál si zůstat v anonymitě

spustit Java Web Start

Minesweeper - 1

autor: Bartoš Václav

spustit Java Web Start

Pexeso - 1

autor: Hub Michal

spustit Java Web Start

Piškvorky - 1

autor: Vavera Filip

spustit Java Web Start

Skořápky - 1

autor: přál si zůstat v anonymitě

spustit Java Web Start

"Space Invaders" - 1

autor: Hrtús Daniel

spustit Java Web Start

Sudoku - 1

autor: Trlifaj Ondřej

spustit Java Web Start

Ukázky případů užití

Příklady případů užití převzaté z knihy: "COCKBURN, Alistair, 2001. Writing effective use cases. Boston: Addison-Wesley. ISBN 0201702258 9780201702255."

Jednoduchý sytémový případ užití na úrovni uživatelského cíle

uc01

Podnikový případ užití na souhrné úrovni

uc02

Podsystémový případ užití na úrovni uživatelského cíle

uc03

Podnikový případ užití na souhrné úrovni

uc04

Komplexní systémový případ užití na úrovni uživatelského cíle

uc05

Známé problémy a jejich řešení

GUI nereaguje, jak by se čekalo, ve verzi Javy 1.8

Problém se projevuje tím, že GUI programu se zasekne a nereaguje na akci, která měl způsobit pokračování, a toto se navíc děje pouze v případě, že program je spuštěn ve verzi Javy 1.8. Ve verzi 1.7 to jede. Tento problém se objevuje, pokud máte pozastaveno vykonávání kontrolního toku programu pomocí prázdné smyčky:

while (some_variable == SOME_CONST) {
}

Příčina

Důvod tohoto chování je objasněn zde https://stackoverflow.com/questions/8409609/java-empty-while-loop

Řešení

Možné řešení je nastíněno ve výše zmíněném odkazu - u proměnných, na jejichž změnu se čeká v prázdném cyklu, použít klíčové slovo volatile. Nicméně čekání pomocí prázdné smyčky je neefektivní a zbytečně zatěžuje procesor. Ideální řešení je čekat pomocí synchronizačních mechanismů wait a notifyAll - detailně to je vysvětleno zde https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html.

Kód, který má počkat, než se nastaví hodnota proměnné na požadovanou hodnotu vypadá nějak takto:

synchronized (ref_of_monitor) {
  while (some_variable == SOME_CONST) {
    try {
      ref_of_monitor.wait();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}

 Kód, který modifikuje hodnotu testované proměnné (na jiném vlákně), vypadá nějak takto:

synchronized (ref_of_monitor) {
  some_variable = SOME_CONST;
  ref_of_monitor.notifyAll();
}

Pokud jste nebyly schopni tuto věc vyřešit výše zmíněným ideálním způsobem, tak stačí do původního cyklu, který způsoboval problém, vložit nějakou drobnou prodlevu:

while (some_variable == SOME_CONST) {
  try {
    Thread.sleep(100);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}

Procesor bude sice stále zatěžován zbytečným čekáním, ale mnohem méně.