====== 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. */ ==== Témata ==== * [[courses:b0b36pjv:semestral:herni_engine|Herní engine]] * [[courses:b0b36pjv:semestral:simulace|Simulace]] * [[courses:b0b36pjv:semestral:arima|Arimaa]] Je možné pracovat samostatně nebo ve dvojicích. Semestrální práce v tomto případě bude rozsáhlejší, například se vyžaduje implementace síťové verze hry nebo distribuovaná simulace. Členové týmu nemusí být ze stejného cvičení. Práce je vyvíjena za pomoci verzovacího systému GIT na [[http://gitlab.fel.cvut.cz]] v předem připravených projektech pojmenovaných podle schématu ''https://gitlab.fel.cvut.cz/B232_B0B36PJV/id_studenta''. Dokumentace se píše na stránce Wiki projektu. ==== Odevzdání ==== /* Dokumentace k projektu a hotový projekt se odevzdává v rámci konzultací v následujících termínech: Do pátku **12. 4. 2024 do 23:59** bude na GitLab ve skupině ''https://gitlab.fel.cvut.cz/B232_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. */ Odevzdání semestrálních prací probíhá ve třech "Checkpointech", a to vždy v GitLab projektu založeném ve skupině ''https://gitlab.fel.cvut.cz/B232_B0B36PJV'' (ne jinde!) - tedy např. ''https://gitlab.fel.cvut.cz/B232_B0B36PJV/novakjan'': * **CP1 - Vize projektu** (do 3. týdne - 10. 03., 23:59) * na Wiki GitLab projektu nebo dle instrukcí cvičícícho do BRUTE dokument, max. ~2x A4, popisující semestrální práci * zvolené téma, očekávané funkce a vize celého projektu * z dokumentu by mělo být možné si představit, jak práce bude vypadat * **CP2 - Objektový návrh** (do 8. týdne - 12. 04., 23:59) * na Wiki projektu rozpracovaná dokumentace z pohledu uživatele (např. manuál) * na Wiki projektu přidaná dokumentace z pohledu programátora (popisy tříd, stavů aplikace, použité technologie, knihovny, apod.); případné dělba práce * v repozitáři projektu zdrojové soubory - kostry hlavních tříd a rozhraní, tak aby byla patrná navržená architektura * **CP3 - Finální prezentace** (do 14. týdne - 24. 05., 23:59) * prezentace celé práce a architektury aplikace cvičícímu * dokončena dokumentace z pohledu uživatele === Podmínky pro odevzdání dokumentace === * Dokumentace je umístěna na Wiki stránkách Vašeho projektu v GitLab ČVUT (například: https://gitlab.fel.cvut.cz/seredlad/java-examples/-/wikis/home a je snadno dostupná ze stránky projektu: https://gitlab.fel.cvut.cz/seredlad/java-examples) * V dokumentaci je popsáno kompletní fungování aplikace z hlediska uživatele. Popis může být formou uživatelského manuálu, nebo jako návrh projektu k realizaci pro potenciálního investora. Musí být dostatečně konkrétní, tedy například nikoliv „hráč bude hledat určité předměty“ ale „hráč bude hledat krystal, lektvar a meč...“ a ne „uživatel ovládá raketu“ ale „uživatel pomocí kláves WASD ovládá raketu“, a zahrnout všechny podstatné aspekty aplikace, jako: * cíl hry * popis všech prvků hry * ovládání * ukládání a načtení hry * způsob vytváření nových levelů případně popis editoru úrovní * pro lepší pochopení lze přidat obrázky jako drátěné modely (wireframes) obrazovek, náčrty herního pole nebo herních map, vizuální návrhy prvků aplikace, atd. * Objektový návrh předpokládaných tříd ve formě diagramu UML: * vygenerované z už napsaných zdrojových kódů v Java. Ideálně se jedná o kostru programu (balíčky, soubory .java). Kód a tedy i diagram by měl obsahovat definované třídy včetně vztahu dědičnosti mezi nimi, atributy tříd, hlavní metody všech tříd (bez privátních a jiných pomocných metod) pomocí kterých mezi sebou budou objekty komunikovat a také metody, které budou sloužit k interakcí s objekty 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ží * **nebo** náčrtu (ve vhodném nástroji, např. draw.io nebo fotografii ručně nakresleného grafu) s popisem, vysvětlující účel jednotlivých tříd, jejich vztahy a jejich vzájemnou komunikaci * Pokud bude použita komunikace po síti, doporučuje se specifikovat 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ůběhu další práce už ideálně neměl měnit. Po dohodě s cvičícím je možné konzultovat materiál i v jiné formě, ale musí z něj být patrné všechny informace, které jsou uvedeny výše. Student/ka (případně oba členové týmu) se musí zúčastnit konzultace k odevzdání dokumentace v termínech, které oznámí cvičící (obvykle krátce po termínu odevzdání dokumentace do GitLab - viz. výše). Kompletní práce se odevzdává během dvou posledních týdnů semestru tedy od pondělka **13.5** do konce posledního výukového týdne, tj. do pátku **24. 5. 2024** opět v rámci konzultace s cvičícím. V případě dvojic se oba členové týmu musí zúčastnit konzultace společně. 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). Dřívější termín odevzdání je možné pouze po domluvě s cvičícím. Pozdější odevzdání je možné pouze ve výjimečných případech (nemoc, apod.) po domluvě s cvičícím === Technické požadavky na semestrální práci === - Bude dokladovatelný progres projektu na GitLab. **Průběžně** (každou hotovou funkcionalitu s popisem) **commitují** všichni členové týmu. Pozor: neadekvátně málo commitů (velmi orientačně: méně než 10) obvykle vzbudí u cvičících (oprávněné) podezření na plagiát! - Projekt bude v **Mavenu**. - Oba účastníci projektu musí podílet na tvorbě **GUI**. Alespoň jedno netriviální okno bude vytvořeno bez požití Designeru v Netbeans nebo jiném "klikacím" nástroji. - V projektu student předvede schopnost správně použít **vlákna** (za to se nepovažuje použití např. třídy Timer). Například vytvořením hodin reálného času, které interagují s průběhem hry. - Několik netriviálních tříd bude pokryto **unittesty** nebo komplexnějším funkčním testem. Bude použit libovolný testovací framework. - Budou použity **loggery**. Logovací zprávy bude možno zapnout nebo vypnout parametrem při spuštění. - Veškeré netriviální ''public'' prvky v programu musí mít smysluplný **Javadoc**. Za triviální se považují například jednoduché gettery a settery bez vedlejších efektů, ty Javadoc nepotřebují. - Všechny netriviální části kódu budou vhodně **okomentovány**. - Ve Wiki projektu musí být aktuální a použitelný **uživatelský manuál a technická dokumentace** programu - jeho vlastností, struktura projektu, použité technologie podle výše popsaných podmínek. Pozor, nejedná se o Javadoc! - Všechno kromě dokumentace na GitLabu musí být **v angličtině**. Anglicky musí být i Javadoc.