4it101»4IT101 - Král

4IT101 - Král

4IT101 cvičení - cvičící Ing. David Král

zimní semestr 2022/2023

Přidělení bodů

druh úkolupočet bodůpoznámka
domácí úkoly204 domácí úkoly po 5 bodech
průběžné testy20jeden programovací test za 8 bodů a 3 menší testy v insisu
semestrální práce - adventura30Pro získání bodů je nutná osobní prezentace v k tomu určených termínech nebo v konzultačních hodinách. Termíny obhajob prací budou vypsány přes InSIS. Termín odevzdání adventury je do termínu Vaší obhajoby. Povinné minimum je 10 bodů.
závěrečný test30bližší informace

Harmonogram průběžných testů:

termínobsahpočet bodůpoznámka
na začátku 3. cvičeníúvod do objektů, primitivní datové typy a operátory4 
sedmý týden výukytest bude praktické programování, ukázky několika testů jsou uvedeny pod tabulkou8 
na začátku 9.cvičenídatové struktury (pole, seznamy, množiny a mapy), výčtový typ, statické prvky tříd4 
na začátku 13.cvičenítřída Object, dědičnost, polymorfismus, rozhraní4 

Programovací test

- ukázky zadání a další informace zde

Domácí úkoly:

Pravidla pro domácí úkoly

Domácí úkol by měl být samostatnou prací, případně prací dvojice maximálně trojice studentů kurzu. Jméno autora či autorů vždy musí být uvedeno v hlavičkách všech tříd, kterou jsou v úkolu upravovány nebo přidávány. V případě spolupráce studentů, je toto vyžadováno, jelikož pokud bude odevzdáno několik shodných úkolů bez uvedení více autorů, budou ohodnoceny jako plagiáty! Pokud si stále nejste jisti, zeptejte se strejdy Googla na Javadoc a kam se píší autoři.

Pokud je domácí úkol pokračováním práce za cvičení, musí odevzdaný úkol obsahovat nejen to co je zadáno jako domácí úkol ale i vše, co bylo naprogramováno během cvičení.

Odevzdání
  • soubory projektu včetně adresáře zabalte do archivu .zip,
  • vytvořený archiv zip uložte na insis.vse.cz do příslušné odevzdávárny a to nejpozději před začátkem příštího cvičení (přesná hodina a minuta je vždy uvedena u odevzdávárny, pak se odevzdávarna uzavře a nepřijímám úkoly jinou cestou např. mailem.)
  • zdrojové kódy, které jste v rámci úkolu upravovali či přidali budou "podepsané", tj. v dokumentačním komentáři bude uvedeno jméno studenta (případně studentů, pokud se jedná o úkol vytvořený ve dvojici případně trojici)

První domácí úkol: PujcovnaLyzi (do pátého cvičení)

Vytvořte 2 nové třídy Lyze a Zakaznik.

Třída Zakaznik bude obsahoval fieldy jmeno, prijmeni a vek. Určení správných typů fieldů je na vás. Ke všem fieldům vytvořte POUZE gettery. Všechny zmíněné fieldy budou zadané při vytváření přes konstruktor. Zároveň definujte metodu toString tak, aby vracela hodnoty fieldů jmeno a prijmeni v následujícím formátu: "Jan Novák".

Třída Lyze bude obsahovat fieldy inventarniCislo, vyrobce a zakaznik (musí být typu Zakaznik). Určení správných typů fieldů je opět na vás. Ke všem fieldům doplňte gettery, ale setter POUZE pro field zakaznik. Pomocí konstruktoru zadejte pouze inventarniCislo a vyrobce. Field zakaznik bude v konstruktoru nastaven na null (nikoliv pomocí parametru konstruktoru!). Dále upravte metodu toString tak, aby pokud jsou lyže půjčené (mají zákazníka), tak aby výpis byl například "Lyže 123 má půjčené Jan Novák", pokud lyže nejsou půjčené (zákazník je null), výpis bude vypadat podobně tomuto "Lyže 123 nejsou vypůjčené".

Druhý domácí úkol: PujcovnaLyzi (do sedmého cvičení)

Tento domácí úkol navazuje na první úkol.

Do třídy Lyže přidejte metody equals(Object obj) a hashCode() implementované tak, že dvě lyže jsou stejné, pokud mají stejné inventární číslo.

Dále vytvořte interface EvidenceLyží, který bude mít definované tyto metody

public boolean vlozLyze(Lyze lyze) - která přidá lyže do evidence lyží a to pouze v případě, že v seznamu ještě nejsou lyže se stejným inventárním číslem. Metoda vrací true, pokud lyže byly do seznamu vloženy a false, jestliže již v seznamu byly a tudíž je znovu nelze vložit.

public Collection<Lyze> vratSeznam() - vrátí seznam všech lyží z evidence, metoda vrací vždy seznam, třeba i prázdný, nikdy hodnotu null.

public Collection<Lyze> vratSeznamVolnychLyzi() - vrátí seznam lyží z evidence, které nejsou půjčené, pokud v evidenci žádné volné lyže nejsou, vrátí prázdný seznam.

public Lyze vratLyze(int inventarniCislo) - najde v evidenci lyže se zadaným inventárním číslem a vrátí jejich instanci, pokud takové lyže v evidenci nejsou, vrátí hodnotu null.

Vašim úkolem je napsat k tomuto interfacu testy i implementaci (novou třídu, která implementuje tento interface). Testem se NEROZUMÍ logika v metodě main. Jako test jsou akceptovány pouze testy vytvořené pomocí frameworku JUnit.

Domácí úkol odevzdáváte do odevzdávárny, která bude/je otevřená v InSISu. Odevzdání úkolu po termínu není možné.

Třetí domácí úkol: Zadání adventury (do devátého cvičení)

Tento úkol nelze dělat ve dvojici, každý má své zadání.

Zadání pro adventuru musí obsahovat:

  • Příběh jak hra začíná, tj. uvedení do příběhu, co se stalo a co je hráčovým úkolem. Tento text pak budete hráči zobrazovat při spuštění hry.
  • Plánek hry (obrázek), jaké prostory bude hra obsahovat a jak jsou propojeny.
  • Popis toho, co bude muset hráč udělat, aby hru vyhrál. Případně také, co se stane, když některé úkoly nesplní (špatné konce hry).
  • Seznam příkazů, které bude moci hráč při hře používat.

Odevzdejte jako soubor ve formátu doc, docx nebo pdf.

Připomínám, že hra musí splňovat alespoň základní požadavky uvedené zde. Není nutné řešit nastavení a použití PMD, které je zmíněno na stránce se zadáním pro adventuru!

Čtvrtý domácí úkol: Práce se souborem (do jedenáctého cvičení)

Vytvořte nový projekt Soubory. Budou v něm dvě třídy:

  • třída Start s metodou main
  • třída ZpracovaniSouboru

Metoda main ve třídě Start bude jako vstupní parametr očekávat název zpracovávaného souboru.

Třída Zpracování souboru bude mít statickou metodu zpracovani (public static void zpracovani(File soubor)), tato metoda zpracuje soubor zadaný jako parametr. Aplikace předpokládá, že se jedná o soubor s logy v následující struktuře:

den měsíc rok hodina minuta IP-adresa operace

Jeden řádek souboru tedy vypadá takto:

01 03 2007 07 22 146.102.174.106 DELETE

Metoda zpracování vypíše na konzoli všechny řádky, ve kterých je zaznamenáno, že operace byla DELETE a proběhla v době od 13:00 do 16:30 (včetně). Pokud dojde k výjimce (nenalezený soubor atd.), informace o výjimce bude vypsána také do konzole. Pokud nedojde k výjimce a soubor bude úspěšně zpracován, jako poslední se vypíše informace kolik bylo zpracováno řádků a kolik z nich vypsáno.

Pro úkol použijte tento soubor:soubor s logy

Pátý domácí úkol: PujcovnaLyzi se streamy (do 31.12.2022)

Zadání je shodné se zadáním předchozí verze domácího úkolu Pujcovna lyzi s tím rozdílem, že metody public Lyze vratLyze(int inventarniCislo) a public Collection<Lyze> vratSeznamVolnychLyzi() musí být implementovány pomocí streamů a lambd.

Přidejte novou metodu public Collection<Lyze> setridenySeznam(), ktera vrati seznam vsech lyží, ale seřazený sestupně (9,8,7..) podle inventárního čísla lyží. Originální kolekce se touto operací nesmí změnit. Použijte streamy a lambdy. V implementaci použijte lamda výraz pro třídění (je jedno zda budete implementovat Comparable nebo Comparator).