==== Hodnocení předmětu ==== * Klasifikace předmětu - 0-100 bodů * max. 10 bodů za úkoly zadané na cvičeních. * max. 50 bodů za kvalitu a včasnost odevzdání semestrální práce. * max. 40 bodů za závěrečný test. Test nebude delší než 90 min, bude poté opraven a následně bude probíhat udělování známek. * Předmět je zakončen klasifikovaným zápočtem, který bude udělen za **úspěšné** (viz níže) odevzdání všech tří checkpointů, získání **alespoň 5 bodů** z úkolů na cvičení a za získání **alespoň 20 bodů** v závěrečném testu. * Semestrální práci budete vypracovávat ve dvojicích. Skupiny o více či méně lidech jsou možné pouze po domluvě. * Body za semestrální práci se získávají průběžně v následujících checkpointech: ^ datum odevzdání ^ co musí odevzdávaný ZIP archiv obsahovat ^ maximální počet bodů ^ | **9.10.2022** | [[cp0 | CP0: Téma semestrální práce a krátký popis plánovaného řešení]]| 5 | | **13.11.2022** | [[cp1 | CP1: High-level design aplikace, objektový model a persistentní vrstva]]| 15 | | **8.1.2023** | [[cp2 | CP2: Odevzdání kompletní semestrální práce]]| 30 | * Veškerý kód i dokumenty související se SP musí být nahrány v Git repozitáři v systému Gitlab, který jsme vám pro tento předmět vygenerovali. * Možná témata semestrálních prací: {{ :courses:b6b36ear:semestral-work-topics.pdf |topics.pdf}}. * **Než začnete vypracovávat SP, pozorně si přečtěte popis všech checkpointů.**, * Pro všechny checkpointy platí, že * **Datum odevzdání znamená poslední možné datum uploadu** (ve 23.59.59) do odevzdávacího systému (viz link na úvodní straně předmětu). * **Pro každý checkpoint se odevzdává soubor commit.txt, jehož jediným obsahem je URL commitu určeného k hodnocení ve Vašem Git repozitáři v systému Gitlab.** Tedy např. https://gitlab.fel.cvut.cz/ear/rest-client-demo/commit/7682643f08890a8ec1713c8217dae4654562ae9b * Nejbližší cvičení následující po datu skutečného odevzdání je třeba daný checkpoint prezentovat svému cvičícímu; **prezentace musí vycházet z toho, co bylo odevzdáno do systému** (viz link na úvodní straně předmětu) - to bude předmětem hodnocení daného checkpointu. V dobře odůvodněných případech je možné prezentovat checkpoint v jiném termínu, vždy po předchozí **včasné** domluvě se cvičícím. * **Při odevzdání musí být přítomni všichni členové skupiny. Od všech členů skupiny se očekává znalost celého systému. Každý člen skupiny může dostat jiné hodnocení.** * **Za každý týden zpoždění se hodnocení daného checkpointu snižuje o 5 bodů. CP2 je navíc třeba odevzdat nejpozději týden před koncem zkouškového období, abychom měli dost času na ohodnocení práce.** * Checkpoint je **úspěšně odevzdaný**, pokud za něj získáte alespoň 50% bodů (bez započtení penalizace za časové zpoždění) * Přečtěte si [[https://docs.google.com/document/d/1mJVCTrZe8O5x1Z-YUplvhd72N9BZt1KBw93mrdyaG0w/edit?usp=sharing | tipy, na co si dát pozor]]. * Celkové hodnocení předmětu se provádí dle ECTS stupnice: ^ Body ^ Stupeň ECTS ^ Známka ^ | 100 - 90 | A | výborně | | 89 - 80 | B | velmi dobře | | 79 - 70 | C | dobře | | 69 - 60 | D | uspokojivě | | 59 - 50 | E | dostatečně | | 49 a méně | F | nedostatečně | === Úkoly na cvičeních === Na vybraných cvičeních budou zadány bodované úkoly. Požadavkem předmětu je, aby student získal alespoň polovinu z možných bodů udělovaných za tyto úlohy. Úlohy lze vypracovat a odevzdat na cvičení, nebo je dokončit doma, a to vždy do půlnoci neděle následující bezprostředně po daném cvičení. Kód řešení úlohy student nahraje do gitu, kde ho cvičího zkontroluje. === Závěrečný test === Závěrečný test trvá 90 minut a skládá se z 10 otázek, každé hodnocené 4 body. **Kromě prvního pokusu, je možné test ještě dvakrát opakovat.** Otázky spadají do následujících kategorií: * Zaškrtávací * Otázka má 4 možnosti, * Správně může být 0 či více možností, * Za každou správnou odpověď získáte 1 bod, za špatnou 1 bod ztratíte (minimum je 0 bodů za otázku). Tedy např. má-li otázka správné možnosti //a)//, //c)// a student zaškrtne pouze možnost //a)//, získá 2 body, protože za nezaškrtnutí //c)// nejenže nezíská bod, ale zároveň je mu bod stržen za chybnou odpověď. * **Příklad** * Vyberte pravdivá tvrzení * a) JPA slouží k odstínění uživatele od konkrétního druhu databázové technologie (souborový systém, relační databáze, NoSQL databáze, atp.), nikoliv však od její konkrétní implementace (PostgreSQL, MySQL, atp.). * b) Metodu EntityManager.persist() je možné použít na objekt, který má hodnotu identifikátoru (@Id) různou od null. * c) Perzistentní jednotka (Persistence Unit) slouží k popisu struktury konkrétní databáze a je tak sdílena více perzistentními kontexty. * d) Inverzní stranu obousměrného vztahu nelze použít pro modifikaci daného vztahu. * Analytická * Otázka obsahuje část kódu a úkolem studenta je: * Vysvětlit, co daný kód dělá, * Odhalit chybu v kódu, * Vysvětlit, proč daný kód nebude dělat to, co se od něj očekává apod. * ** Příklad ** * Následující kód (metoda EnterpriseInformationSystem.addPerson) využívá framework Spring. Má umožnit přidání jména uživatele do hlavního repozitáře systému, a zálohování tohoto jména v druhém, záložním, repozitáři. Vysvětlete, jak předložený kód po zavolání metody addPerson funguje a co vypíše na konzoli. @Component @Scope("prototype") public class EnterpriseInformationSystem { @Autowired private PersonRepository repository; @Autowired private PersonRepository backupRepository; ... public void addPerson(String name) { repository.getPersons().add(name); backupRepository.getPersons().add(name); repository.getPersons().clear(); System.out.println(backupRepository.getPersons().size()); } } @Component @Scope("singleton") public class PersonRepository { private List persons; public List getPersons() { return persons; } } * Syntetická * Úkolem bude v pseudokódu naimplementovat nějakou funkcionalitu, * Nebo popsat postup implementace nějaké funkcionality. * ** Příklad ** * Jaké technologie využívá Spring pro implementaci horizontálních služeb (cross-cutting concerns). např. transakční přístup k metodám, autorizace přístupu k metodám, atp. Jak daná technologie funguje ?