Zkouška 16.1.2018

Cílem semináře je seznámit posluchače s jazykem C#, prostředím platformy .NET a tvorbou aplikací s grafickým uživatelským rozhraním. Předpokládají se znalosti objektově orientovaného programování.
Speedding
Matfyz(ák|ačka) level I
Příspěvky: 35
Registrován: 10. 1. 2017 19:32
Typ studia: Informatika Mgr.
Kontaktovat uživatele:

Zkouška 16.1.2018

Příspěvek od Speedding »

http://d3s.mff.cuni.cz/teaching/csharp_ ... .01.16.pdf

1) Možností je spoustu, třeba napsat test na expected exception, když se pokouším přidat prvek na záporný index, pak přidávání prvek na konec listu pomocí list.Count, nebo prostě přidání několika prvků přes for.
2) Ne, komentáře jsou moc stručné, třeba rozepsat. Dále by bylo vhodné přidat komentář na výjimky, které metoda může vyhodit (IndexOutOfRange a popřípadě i NullReferenceException)
3) Ne, přidávání prvků za konec listu nemusí být vůbec nic výjimečného, výjimky mají obrovskou režii. Lze to přepsat pomocí ifu na pár instrukcí.
4a) Kód v rámci assembly, třída je defaultně internal. Kdyby byla public, byla by součástí API, což je otázka, jestli to tak chceme.
4b) Přepíše se to pomocí string.Format()
5) Koncept, kdy JIT místo instrukce call vloží do strojového kódu přímo instrukce dané metody, když je velikost jejího CIL kódu menší než 16B. Příklad: automaticky implementované vlastnosti.
6) Vypíše se float, overloady metod se vybírají za překladu, přičemž nejdřív se vybírá podle arity, potom podle kontextu. Intová metoda je o kontext výš. Kdyby to tak nebylo, byl by problém, že kdyby třída X byla v nějaké .dll knihovně a neobsahovala metodu m(), třída Y by ji obsahovala, tak v nové verzi .dll knihovny (kdyby už obsahovala metodu m()) by mohlo při opětovném překladu našeho projektu dojít k nejednoznačnému volání, respektive 1 je intová konstanta, tak by se zavolala metoda z .dll knihovny, což nechceme.
7a) var x = new D();, x se typuje na D a volá se nevirtuální metoda. U toho druhého se na x koukáme jako na B a volá se virtuální metoda, tak když si nakreslíte VMT, bude to pak zřejmé. Měl jsem tam chybu, protože jsem myslel, že sice i když mám nastavený parametr funkce na nějakou defaultní hodnotu, tak se to bere jako funkce arity 1, ale Ježek mi u ústní říkal, že se to bere zároveň jako 0 i 1, ale že to na přednášce nejspíš neříkal a dal mi za to celý 1 bod.
7b) Označení abstraktní třídy v tomhle případě nehraje roli. Abstraktní metody do tříd zavádí virtualitu, což není vždycky to, co chceme (tenhle popis mu stačil).
8 ) Návratová hodnota funkce je odkaz na call stack, který se po ukončení volání vyprázdní. Byl by problém s neoprávněným přístupem do paměti.

Zkouška je jednoduchá, já sice víkend před ní koukal na všechny přednášky (s rychlostí 1.5), nicméně si myslím, že na trojku to lze dát i bez jakékoliv přípravy. Ježek dává u nějakých otázek i 1,25 bodu, když se kolem toho hodně rozepíšete a je s odpovědí spokojený. Ze cvika jsem měl 2,5 bodu, v součtu 13,5.


Jenom se připravte na to, že písemná část naší zkoušky začínala v 11.30 a poslední odcházel z ústní až v 19.00.
pheeck
Matfyz(ák|ačka) level I
Příspěvky: 8
Registrován: 13. 6. 2021 14:51
Typ studia: Informatika Bc.

Re: Zkouška 16.1.2018

Příspěvek od pheeck »

Link v tomhle postu nefunguje. Tady je soubor, na který měl odkazovat. Ale upozorňuji, že Pavel Ježek stejně dává před zkouškou k dispozici testy z minulých let a tenhleten je také nejspíš mezi nimi. Tedy tenhle soubor se pravděpodobně dá najít i na stránkách předmětu.
Odpovědět

Zpět na „NPRG035 Jazyk C# a platforma .NET“