NPRG038 Pokročilé programování pro .NET I (LS 2017/2018)
Informace o předmětu
Semestr | letní 2017/2018 |
---|---|
Přednášející | Pavel Ježek |
Informace v SISu | SIS/Předměty/NSWI038 |
Rozvrh | St 17:20 v S3 (přednáška) |
Informace o zakončení a organizaci předmětu
Požadavky na zápočet/zkoušku jsou níže a ve slidech z první přednášky!!!Informace o průběhu zkoušky jsou níže v samostatné sekci!!!
Informace ke zkoušce (zobrazit/skrýt):
Kromě informací uvedených ve slidech z první přednášky navíc pro zkoušky z NPRG035, NPRG038, a NPRG057 platí následující 2 body:
Student X získá na 1. termínu známku 2 a odmítne ji. Na 2. termínu získá známku 3 a odmítne ji. Na 3. termínu získá známku 1.
Aktuální stav studenta X: 1. termín = propadlý, 2. termín = propadlý, 3. termín = 1, tj. student X zkoušku splnil s hodnocením 1.
Modelový příklad 2:
Student Y získá na 1. termínu známku 3 a odmítne ji. Na 2. termínu získá známku 4.
Aktuální stav studenta Y: 1. termín = propadlý, 2. termín = 4, tj. pokud chce zkoušku splnit, musí student Y přijít na 3. termín. Pokud na 3. termínu opět získá známku 4, tak zkoušku nesplnil.
Modelový příklad 3:
Student Z se nedostaví na 1. termín, na 2. termínu získá známku 3 a odmítne ji, na 3. termínu získá známku 4.
Aktuální stav studenta Z: 1. termín = propadlý, 2. termín = propadlý, 3. termín = 4, tj. student Z zkoušku nesplnil.
- Pokud někdo bude zapsán na nějakém z termínů zkoušky a na termín se nedostaví, bude mu tento termín v SISu označen jako propadlý (tj. student přijde o jeden pokus). Cílem tohoto opatření je optimalizace vytíženosti jednotlivých termínů, aby všichni studenti měli možnost přijít až na 3 termíny zkoušky.
- Pokud někdo na zkoušce získá známku 2 nebo 3 a bude si chtít svůj výsledek zlepšit, může explicitně na místě během vyhodnocení zkouškové písemky požádat zkoušejícího o nezapsání známky. Zkušební termín mu pak bude v SISu označen jako propadlý. Takový student může pak později
- požádat o dodatečné zapsání získané známky, nebo
- přijít na jiný termín zkoušky (jakýmkoliv výsledkem této "opravné" zkoušky se ovšem anuluje předchozí získaná známka).
Student X získá na 1. termínu známku 2 a odmítne ji. Na 2. termínu získá známku 3 a odmítne ji. Na 3. termínu získá známku 1.
Aktuální stav studenta X: 1. termín = propadlý, 2. termín = propadlý, 3. termín = 1, tj. student X zkoušku splnil s hodnocením 1.
Modelový příklad 2:
Student Y získá na 1. termínu známku 3 a odmítne ji. Na 2. termínu získá známku 4.
Aktuální stav studenta Y: 1. termín = propadlý, 2. termín = 4, tj. pokud chce zkoušku splnit, musí student Y přijít na 3. termín. Pokud na 3. termínu opět získá známku 4, tak zkoušku nesplnil.
Modelový příklad 3:
Student Z se nedostaví na 1. termín, na 2. termínu získá známku 3 a odmítne ji, na 3. termínu získá známku 4.
Aktuální stav studenta Z: 1. termín = propadlý, 2. termín = propadlý, 3. termín = 4, tj. student Z zkoušku nesplnil.
Poznámka: Virtuální cvičení je určeno pro studenty, kteří nechtějí chodit na cvičení (např. protože minulý rok nestihli dodělat pouze zápočtový program, splnit zápočtový test, apod.). Studenti virtuálního cvičení budou zápočtový program budou předvádět PJ.
Uznávání povinností z minulých let: Pokud jste tento předmět měli zapsaný loňský akademický rok a splnili jste pouze některé z povinností potřebných pro udělení zápočtu, může vám je po explicitním požádání (např. při předvádění zápočtového programu) uznat váš letošní cvičící (lze uznat splněné požadavky na domácí úkoly, odevzdaný a schálený zápočtový program). Téma zápočtového programu (pokud ho ještě nemáte dokončený) nemusí být novým cvičícím uznáno. Pokud jste v loňském roce úspěšně složili zkoušku, ale nepodařilo se vám získat zápočet, opět po explicitním požádání vám můžu zkoušku uznat já (PJ). Toto je iniciativa vyučujících tohoto předmětu a nelze ji požadovat po studijním oddělení!
Informace o zkoušce
Zkouška probíhá primárně písemnou formou, a v každé zkouškové písemce je kolem 6 otázek (některé obsahují podotázky). U každé otázky, případně podotázky, je dole uvedeno, jaký maximální počet bodů (=
Každá zkoušková písemka tvrá 150 minut, tj. ideálně 20 minut na každou otázku + 30 minut bezpečnostní rezerva. Po písemné části následuje ústní část, kde zkoušející se studentem prochází jeho písemku, a případně nepřesností/nejaností u některých odpovědí se ptá na doplňující otázky - na základě toho je určeno finální bodové hodnocení každé otázky. Základem hodnocení je ale vždy písemná část, tedy u otázky bez odpovedi nebo se špatnou odpovědí nelze ani po ústní části získat více než 0 bodů.
Níže jsou pro ilustraci uvedena zadání písemek z termínů v AR 2015/2016:
Níže jsou pro ilustraci uvedena zadání písemek z termínů v AR 2014/2015:
N
) lze za správně odpovězenou otázku/podotázku získat: N
bodů získáte v případě, že je odpověď na otázku správně; 0,5 * N
bodu získáte, pokud odpověď není zcela kompletní, ale jinak je správná (tj. nějaká malá část odpovědi chybí nebo je nepřesná); v ostatních případech získáte 0
bodů (tj. pokud v odpovědi chybí větší část, nebo je odpověď na otázku plně nebo i jen z části nesprávná).
Celkem lze z každé písemky získat maximálně 10
bodů. Mapování získaných bodů na výslednou známku je následující:
Body z písemky | Výsledná známka | ||
|
1 | ||
|
2 | ||
|
3 | ||
|
4 |
Každá zkoušková písemka tvrá 150 minut, tj. ideálně 20 minut na každou otázku + 30 minut bezpečnostní rezerva. Po písemné části následuje ústní část, kde zkoušející se studentem prochází jeho písemku, a případně nepřesností/nejaností u některých odpovědí se ptá na doplňující otázky - na základě toho je určeno finální bodové hodnocení každé otázky. Základem hodnocení je ale vždy písemná část, tedy u otázky bez odpovedi nebo se špatnou odpovědí nelze ani po ústní části získat více než 0 bodů.
Níže jsou pro ilustraci uvedena zadání písemek z termínů v AR 2015/2016:
Níže jsou pro ilustraci uvedena zadání písemek z termínů v AR 2014/2015:
Náplň přednášek
-
1. přednáška (21.2.2018)
Stručný obsah:Informace o předmětu a navazujících předmětech ♦ příklady na rozehřátí a explicitní volání třídního (statického) konstruktoru ♦ rozhraníMateriály:IEnumerable
aIEnumerator
a generické varianty • bězná sémantika enumerátorů • cyklusforeach
• iterátové/enumerátorové metody ayield return
- CsharpSummerI 2017-18 - 01st Lecture.pptx - slidy z přednášky (informace o zkoušce a zápočtu • termíny)
- 00-IndirectStaticConstructorUsage.zip
- 01-ExtensionMethodsAndValueTypes.zip
- 01-GotoLabelsAndSwitch.zip
- https://en.wikipedia.org/wiki/Finite-state_machine
- https://commons.wikimedia.org/wiki/File:Turnstile_state_machine_colored.svg
- 01-IEnumerableImplementation.zip
- 01-ForEachExplicitCast.zip
- 01-EnumeratorStructures.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
2. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 02nd Lecture.pptx - slidy z přednášky
- 02-TwoArraysWithoutIteratorMethods.zip
- 02-TwoArraysViaIteratorMethods.zip
- 02-IteratorMethods.zip
- 02-IteratorMethods-GeneratedStateMachine.jpg
- 02-ParametricIteratorMethods.zip
- 02-ParametricIteratorMethods-ParallelEnumeration.zip
- 02-ParametricIteratorMethodsWithExceptions.zip
- 02-ParametricIteratorMethodsWithExceptionsCorrect.zip
- 02-LazyEnumerableEvaluation.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
3. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 03rd Lecture.pptx - slidy z přednášky
- 03-DictionaryInitializer.zip
- 03-ArrayCovariance.zip
- 03-LimitingArrayCovariance.zip
- 03-BasicInterfaceVariance.zip
- 03-Delegates.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
4. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 04th Lecture.pptx - slidy z přednášky
- 04-CppMemberPointerToVirtualMethod.zip
- 04-DelegateAndVirtualMethods.zip
- 04-DelegateVariance.zip
- 04-LambdasAndTypeInference.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
5. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 05th Lecture.pptx - slidy z přednášky
- 05-Cpp11HelloWorld.zip
- 05-Cpp11LambdasVariableCapture.zip
- 05-AlgorithmCustomization.zip
- 05-LambdasAndVariableScope.zip
- 05-LambdasAndVariableScopeDecompiled.zip
- 05-MultipleLambdasAndVariableScope.zip
- 05-MultipleLambdasAndVariableScopeDecompiled.zip
- 05-CSharp7LocalMethods.zip
- 05-CSharp7LocalMethodsPassedAsDelegates.zip
- 05-EventsAutoimplemented.zip
- 05-EventsExplicit.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
6. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 06th Lecture.pptx - slidy z přednášky
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
7. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 07th Lecture.pptx - slidy z přednášky
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
8. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 08th Lecture.pptx - slidy z přednášky
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
9. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 09th Lecture.pptx - slidy z přednášky
- 08-09-VariousDispatchMethodsTest-Reflection-ExpressionTrees-Dynamic-ReflectionEmit.zip (stejný projekt jako u 8. přednášky)
- 09-LinqAwareSortedList.zip
- 09-IlCodeIntroduction.zip
- 09-CodeInjectionUsingCecil.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
10. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 10th Lecture.pptx - slidy z přednášky (prezentace má jen úvodní slide)
- 10-SimdViaVectorStructs.zip
- 10-ThreadBasics.zip
- 10-ClassConstructorsAndThreadSafety.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
11. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 11th Lecture.pptx - slidy z přednášky (prezentace má jen úvodní slide)
- 11-WindowsFormsThreadingModel.zip
- 11-ThreadStaticVsThreadLocal.zip
- 11-SimpleProducerConsumer.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
12. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 12th Lecture.pptx - slidy z přednášky
- 12-SimpleProducerConsumer-WeirdButCorrect.zip
- 12-LockAndValueTypes.zip
- 12-IncorrectCombinationOfMutexAndMonitor.zip
- 12-XX-LockingOverhead.zip - rozšířená verze benchmarku zámků ze cvičení (navíc overhead třídy Mutex, overhead ThreadLocal, overhead vytváření vláken)
- 12-XX-LockTests-report-2core-commented.html - okomentované výsledky benchmarku 12-XX-LockingOverhead.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
13. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 13th Lecture.pptx - slidy z přednášky
- 13-ThreadSafeEvents.zip
- 13-TasksAndLamdas-Prednaska.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
14. přednáška ()
Stručný obsah:- 14-TaskSchedulingOptions.zip
- 14-TasksParentRelationship.zip
- 14-TasksAndWinForms.zip
- 14-TaskAsFuturesVS2012.zip
- 14-TasksAndCustomWhenAll.zip
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
-
15. přednáška ()
Stručný obsah:- CsharpSummerI 2017-18 - 15th Lecture.pptx - slidy z přednášky
- 15-TaskCancellation.zip
- 15-LinqAsParallelOrdering.zip
- 15-FromLabs-ReferenceLibraryQueries.zip
- 15-ContinueWithVsAsyncMethods.zip
- 15-AsyncProcessTable-v1.zip
- 15-AsyncProcessTable-v2.zip
- 15-XX-AsyncProcessTable-WinForms.zip
- https://blogs.msdn.microsoft.com/pfxteam/2012/09/22/new-taskcreationoptions-and-taskcontinuationoptions-in-net-4-5/ - zjímavé čtení ke continuations (na přednášce použit příklad ze sekce HideScheduler)
-
Kopie tabule na konci přednášky (pozor: po mazání, připisování a přepisování v průběhu, tj. nemusí dávat bez kontextu smysl):
Přednáška
Materiály k 1. bonusu (awaiters + problémy s rekurzivními async metodami) [nebude na zkoušce]:- 15-XX-AsyncUsingStandardTaskAwaiters.zip
- 15-XX-AsyncCustomAwaiters.zip
- 15-XX-AsyncRecursiveMethods.zip
- https://blogs.msdn.microsoft.com/pfxteam/2015/02/02/new-task-apis-in-net-4-6/ - zajímavé čtení navíc
Materiály ke 3. bonusu (asynchronní volání delegátů) [nebude na zkoušce]:
Doporučená literatura
- Mark Michaelis with Eric Lippert: Essential C# 5.0, Addison-Wesley, November 2012 (lze koupit např. na Amazon UK)
- Jeffrey Richter: CLR via C# (4th Edition), Microsoft Press, December 2012 (lze koupit např. na Amazon UK)
- Jon Skeet: C# in Depth (3rd Edition), Manning Publications, September 2013 (lze koupit např. na Amazon UK)
- blog Erica Lipperta (bývalý člen C# týmu v Microsoftu): Fabulous Adventures In Coding
- C# Language Specification 5.0
- Serge Lidin: Expert .NET 2.0 IL Assembler, Apress, August 2006 (lze koupit např. na Amazon UK) [v červenci 2014 vyjde nová verze viz např. Amazon UK - kvalita tohoto nového vydání ale ještě neověřena]
- Christian Nagel, Evjen, Jay Glynn, Karli Watson, Morgan Skinner: Professional C# 4.0 and .NET 4, Wrox, John Wiley & Sons, March 2010 (lze koupit např. na Amazon UK)
Náplň cvičení
- Všechny domácí úkoly odevzdávejte jako
.ZIP
(!!!, tj. NE RAR, NE 7ZIP, NE něco jiného) archiv celého projektu (i s jeho adresářem) do vhodného sloupečku v Grupíku v SISu. - Upozornění: Domácí úkoly jsou samostatnou prací, jejímž cílem je zhodnotit schopnost studenta samostatně vypracovat složitější program v jazyce C#. Pokud bude zjištěno, že některý student odevzdal cizí řešení (např. několik studentů odevzdalo různé instance stejného řešení některého domácího úkolu, apod.), bude to považováno za pokus o podvod. Všichni takoví studenti nesplní předmět NPRG038 v tomto akademickém roce a přicházejí o možnost uznání splněných povinností v roce příštím; případně bude disciplinární komisi UK MFF doporučeno jejich vyloučení ze studia!
-
5. cvičení (11.4.2018) - Úloha: na procvičení reflection a Mono.Cecil:
-
Úloha: Aspect weaver (6. DÚ) - Zadání: Vytvořte jednoduchý program pro weavování aspektů:
CecilAspectWeaver.exe assemblyFileName pointcutClassRegex pointcutMethodRegex [cache|log|logInt32|logValue]*
.
-
Úloha: Aspect weaver (6. DÚ) - Zadání: Vytvořte jednoduchý program pro weavování aspektů:
-
8. cvičení (2.5.2018) - Úloha: Antisocial Robots (zdroj: Microsoft Research) - procvičení synchronizačních problémů:
-
9. cvičení (9.5.2018) - Úloha: paralelní hledání souborů
-
Paralelní hledání souborů - knihovna s implementací Aho-Corasick algoritmu:
- pro .NET 4.5/VS2012/VS2013/VS2015 je AhoCorasickSearch.dll implementující AhoCorasickSearch.cs
-
Paralelní hledání souborů - knihovna s implementací Aho-Corasick algoritmu:
-
10. cvičení (virtuálně) - Úloha: ThreadSafeObjectHolder
- Cv10_LockFreeQueueSkeleton.zip
- Cv10_LockFreeStack.zip
- Cv10_ThreadSafeObjectHolder_AssignmentSkeleton.cs