====== Semestrální práce ======
/*
==== Témata ====
Jsou doporučena témata, která budou v souladu s předmětem Databázové systémy ([[https://cw.fel.cvut.cz/wiki/courses/a4b33ds/cviceni-1|témata ZDE]]). Semestrální práce z databázových systému je vhodné koncipovat jako aplikace Client-Server s komunikací po síti (především tak je možné rozumně použít technologie probírané v cvičeních). Po dohodě s cvičícím je ale možné vybrat si i jiné - vlastní, pokud bude splňovat všechny náležitosti SP.
Vzhledem k tomu, že se předpokládá práce ve dvojici a témata předmětu DBS jsou obvykle typu informační systém, doporučujeme práci koncipovat jako distribuovanou aplikaci klient-server. Klientská část se bude primárně starat o komunikaci se serverem (např. po síti), vizualizaci a vstup uživatelských dat. Serverová část bude zajišťovat data ve vhodné formě z externího úložiště (např. SQL databáze), bude kontrolovat konzistenci dat a poskytovat data klientské aplikaci. Je tedy potřeba definovat vhodný komunikační protokol mezi klientem a serverem.
*/
==== Odevzdání ====
Práce bude odevzdána v předepsaných týdnech (**dva poslední týdny semestru, tj. 9.-13. a 16.-20. 5. 2022**). Odevzdání ve zkouškovém termínu není možné, pouze ve výjimečných případech (nemoc apod.) lze po domluvě s cvičícím umožnit odevzdání v prvním týdnu zkouškového období.
==== Termíny ====
Do pátku **1.4.2022 do 23:59** bude na GitLab ve skupině ''https://gitlab.fel.cvut.cz/B212_B0B36PJV'' (a ne jinde!) založen projekt, a na stránce Wiki popsaná téma a cíl projektu, rozpracovaná dokumentace z hlediska uživatele (např. manuál) a z pohledu programátora (popisy tříd, stavů aplikace, použité technologie, knihovny, apod.) případné dělba práce. V repositáři budou i zdrojové soubory - kostry hlavních tříd a rozhraní, tak aby byla patrná navržená architektura. **Hodnotí se dodržení termínu**, dále kvalita a rozsah dokumentace. Představení práce a jeho ohodnocení se děje v během konzultace studenta s cvičícím.
Kompletní práce se odevzdává do konce posledního výukového týdne, tj. do pátku **20.5.2022** opět v rámci konzultace s cvičícím.
==== Témata ====
Je možné pracovat samostatně i ve dvojicích. Semestrální práce tak bude rozsáhlejší, například se vyžaduje implementace síťové verze hry nebo distribuovaná simulace.
* [[courses:b0b36pjv:semestral:herni_engine|Herní engine]]
* [[courses:b0b36pjv:semestral:simulace|Simulace]]
* [[courses:b0b36pjv:semestral:sachy|Šachy]]
==== Podmínky pro vypracování SP ====
- Pracuje se ve dvojicích nebo jednotlivě. Členové týmu nemusí být ze stejného cvičení.
- Práce je vyvíjena za pomoci verzovacího systému GIT. Veškeré změny jsou ukládány výhradně na [[http://gitlab.fel.cvut.cz]]. Zadání pište do wiki u Vašeho projektu.
- Na Gitlabu bude ve wikipedii do předepsaného termínu zapsáno téma práce a jména obou účastníků projektu.
- Ve wiki bude udržována zvláštní stránka s odhadem pracnosti jednotlivých částí práce a rozdělení úkolů každého z týmu.
- Oba členové týmu se v předepsaný týden musí společně zúčastnit **kontrolního pohovoru** nad vypracovaným objektovým návrhem práce a předpokládaným protokolem komunikace klient-server (bude-li použit).
* **Ideální stav práce připravené k této konzultaci je:**
* Pokud bude použita komunikace po síti, bude specifikován komunikační protokol - tedy jaká data a v jakém formátu se budou mezi serverem a klientem posílat. Tento protokol je zásadní a proto by se v průbehu další práce už ideálně neměl měnit
* Student předvádí objektový návrh ideálně ve formátu kostry programu v Javě (balíčky, .java soubory). Ten by měl obsahovat definované třídy včetně vztahu dědičnosti mezi nimi, atributy tříd, hlavní metody všech tříd, pomocí kterých mezi sebou budou objekty komunikovat a také metody, které budou sloužit k ovládání objektů z GUI. Metody nemusí obsahovat tělo, ale je doporučeno, aby byl už připraven stručný Javadoc, který obsahuje textovou informaci, k čemu daná metoda nebo objekt slouží.
* Objekty nemusí obsahovat privátní a jiné pomocné metody, stejně tak se nepředpokládá, že v metodách bude již definováno tělo.
* Je možné konzultovat i materiál v jiné formě, ale musí z něj být patrné všechny informace, které jsou uvedeny výše.
- Oba členové týmu se musí společně zúčastnit **odevzdání práce** na konci semestru. Oba musí rozumět a být schopni odpovědět na otázky ohledně všech částí kódu (tedy ne jen svých).
Technické požadavky na semestrální práci:
- Bude dokladovatelný progres projektu na Gitlabu.
- Projekt bude v Mavenu.
- Oba učástníci projektu musí vytvořit GUI (nemusí být shodné náročnosti). Alespoň jedno netriviální okno bude vytvořeno bez požití Designeru v Netbeans nebo jiném "klikacím" nástroji.
- V projektu budou rozumně použita vlákna (za to se nepovažuje použití např. třídy Timer).
- Několik netriviálních tříd bude pokryto unittesty
- Budou použity loggery.
- Javadoc - Veškeré public prvky v programu musí mít smysluplný Javadoc
- Kód bude vhodně okomentován.
- Návod/Popis - Na wiki FEL GitLabu musí být návod na používání programu (uživatelský manuál) a popis programu - jeho vlastností, struktura projektu, použité technologie (technická dokumentace). Pozor, nesuplujte Javadoc.
- Angličtina - všechno kromě dokumentace na GitLabu musí být v angličtině. Anglicky musí být i Javadoc.