Skúška 9.9.2019

Přednáška je vhodná především pro studenty informatiky - jak odborného, tak i učitelského studia, mohou ji však navštěvovat i posluchači jiných oborů, kteří se hlouběji zajímají o programování. Přednáška předpokládá u posluchačů znalosti základů programování, programovacích jazyků Pascal (včetně objektového programování v něm), C a C++ a některého neprocedurálního jazyka - nejlépe Prologu. Složení příslušných zkoušek však není vstupní podmínkou. Na přednášce se společně zamyslíme nad vývojem metodiky programování (strukturované, modulární, objektové, event-driven, logické, funkcionální,... programování) a nad tím, jak se tyto koncepty projevily v nejdůležitějších programovacích jazycích. Půjde nám o souvislosti, ne o detaily nebo přesný historický popis vývoje. Při výběru programovacích jazyků budeme větší pozornost věnovat těm, které se skutečně "ujaly v praxi".

Skúška 9.9.2019

Příspěvekod SaNuel » 16. 9. 2019 00:25

Keďže som si všimol, že k metodike je značne menší počet príspevkov ako k iným predmetom, rozohodol som sa prispieť svojou troškou, nech budúci zelenáči majú predstavu o tom, do čoho sa rútia.

(Neviem písať stručne, ako je asi očividné z mojich príspevkov, preto TL;DR na konci)

Toto bol môj prvý termín z metodiky (uznávam, nie práve najlepší rozvrh, ale ako správny matfyzák žijem rád na hrane).

Počas učenia som narážal na celkovú nedostač informácii, čo sa odo mňa čaká na skúške, resp. do akej hĺbky by som sa mal učiť. Jediné veci, čo som vedel, boli názvy okruhov... a to je tak všetko. Ale ku skúške:

Boli sme traja mušketieri. Dvaja sme sa rozhodli ísť vychodenou cestičkou C++, tretí odvážlivec si vzal Python (čo bola asi podstatne lepšia voľba).
    - Spolubojovníčka dostala otázku: C++ ako OOP (dôraz na C++, teda špecifiká C++ v objektovom programovaní, nie OOP ako také...)
    - Ja som dostal "výhody, nevýhody a na čo si dať pozor".
    - Náš Pythonovský priateľ dostal.... Python.

Natešený som spísal všetky kľúčové slová na papier, od raw pointerov a memory management, cez výhody voči C až po diamond.
No a teraz k nejakej predstave o tom, ako do hĺbky sa vyžadujú jednotlivé informácie:
Spustil som a veľmi okrajovo som prechádzal jednotlivé body. Nikde ma nezastavil, nespýtal sa hlbšie, tak som rozprával len veĺmi povrchne.
Keď som sa dostal k diamondu, zastavil ma a spýtal sa, čo to, ako to, prečo to, čo s tým. Až na "ako" som mal predstavu o tom, čo ten diamond je, no nevedel som sa nikde dopátrať odpovede, čo tá začarovaná virutálna dedičnosť znamená po technickej stránke, a odpoveď "compiler si vďaka tomu dá pozor", nebola veľmi objasňujúca. Kryl sa následne zo mňa snažil vytlačiť odpoveď tým, že mi začal ako analógiu dávať interfacy zo C# a podobné iné indície, ktoré vďaka môjmu nedostatku vygooglených informácii padali na úplne bezúrodnú pôdu. K ďalším odrážkam v mojom liste o C++ sme sa nedostali..

Ako doplňujúcu otázku mi dal: "aká bola motivácia vývoja konkurenčných jazykov C++ ako C#, Java", postavil sa a podišiel ku kolegyni, ktorá zakopla o rovnaký diamant úrazu, kým ja som zatiaľ so studeným potom na čele pozeral na svoje 2 odrážky:
    - C# - lepšie na GUI, GC
    - Java - nezávislá na OS, GC
S vedomím, že sa ešte spolu stretneme som iba ticho nazeral v diaľav cez okno, skrz ulicu, cez druhé okno, oproti, čakajúc na nevyhnuteľnú 4ku.
Keď sa ku mne druhýkrát posadil a zistil, že diamant zostal nedotknutý, zasvätil ma sám do tajov virtuálnej dedičnosti a prešiel so mnou môj rozsiahly zoznam rozdielov medzi C++ a jeho konkurentami.
Po ďalšom bolestivom páčení správnej odpovede na otázku, "čo je hlavnou myšlienkou C#", Kryl skonštatoval, že je to na veľmi slabú 2ku. Nevedel som, ktorá časť mojej odpovede mala akúkoľvek výpovednú hodnotu, no neprotestoval som.
Doplňujúcu otázku, už druhú v poradí, som dostal "životnosť a viditeľnosť premenných", bez ohľadu na jazyk. S tým sa postavil a vycestoval za ďalším C++ gladiátorom.

V tejto dobe už náš Pythonovský priateľ dávno opustil operačný sál. Kryl sa pri jeho odpovedi ozval asi 2-krát s otázkou, na ktorú dostal promptnú odpoveď. Kolega dostal za 1.

Pri poslednej návšteve Kryla som sa už pochlapil a otázku zodpovedal viac-menej bez prešľapov. Na konci Kryl skonštatoval, že to je na trojku, načo som sa potešil so slovami, že to mi vôbec nevadí. Kryl odvetil, že aj keby nie, tak dostanem tri a s úsmevom sa presunul o sedadlo ďalej. Posledný gladiátor dostal tiež za 3. Očividne ten diamant naozaj nosí smolu... alebo šťastie. Podľa toho kto ako efektívne googli.


TL;DR (ako tak na to pozerám, veľmi TL;DR to ani nie je.... nuž, čo sa dá robiť)

1. C++ - výhody, nevýhody, na čo si dať pozor
- tu toho netreba veľa, o všetkom troška
- v predošlom príspevku je pdf ako na C++, tak na obecné otázky, to je viac než dosť informácii
- krom toho prikladám vlastné spísané veci na C++, v ktorých je kopa blbostí navyše, ale človek nikdy nevie. A je mi to ľúto vyhodiť, keď už som kvôli tomu toľko do klávesnice ťukal.
cpp_poznamky.pdf
(224.13 KiB) 3 krát
:D
- tu vás na 95% (Ako aj pri iných otázkach) zastaví na Diamond Patterne. Ľahko sa dá nájsť na nete, čo to je, ale nikde som napr. nenašiel, ako sa to rieši (teda, rieši sa to v kóde virtuálnym dedením, čo to znamená som sa nikde nedočítal). V poznámkach to mám dopísané. Ak si to dobre pamätám z vysvetlenia Kryla, malo by to byť dobre. Basically virtuálne dedenie uchováva v dediacej triede plytkú (mělkú) kópiu rodiča, nie hlbokú. Teda pointer, nie kópiu metód a dát. Tak ľahko možno zistiť, že nejaký prarodič je tam viackrát.
- schválne som spätne pozrel, či niekde nie je napísané, ako ten diamond presne funguje, a ešte na wiki je pri multiple inheritance diamond problem presne napísané "C++ takes special care to only create one A object" - Black Magic

2. Hlavné rozdiely Javy, C# oproti C++:
    - určite GC a žiadny user memory management je jedna z vecí, ale hlavne:
    - C# - všetko je objekt, teda všetko má rovnakého predka a má vstavané metódy (toStrint(),hash(),etc...)
    - Java - prenositeľnosť vďaka JVM

3. životnosť a viditeľnosť
    - životnosť
      - scope - životnosť od deklarácice až po koniec scopu, v ktorom je definovaná, nech už je to metóda, funkcia alebo block {}
      - dynamicky alokovaná - ako v C++ pomocou new. Žije až kým nie je ručne zmazaná z pamäte (delete)
    - viditeľnosť
      - public, protected, private
      - tu aj static (nielen v triede. static vo funkcii je globálna premenná, ktorá nie je nanovo deklarovaná v nových volaniach funkcie (ako napr. counter), ale nie je viditeľná zvonka)

To je asi všetko, čo by som k tomu mal. :) Snáď som pomohol, prípadne rozosmial. Aj to sa cez skúškové cení. Matike zdar a nezabudnite na k...u!
Kód: Vybrat vše
if ( exam.date > critical_date ) {
    this.procrastination.enable();
    Steam.launch("Skyrim");
}
else {
    this.panic.start();
    // TODO: This isn't working...
}
Uživatelský avatar
SaNuel
Matfyz(ák|ačka) level I
 
Příspěvky: 5
Registrován: 11. 10. 2018 13:52
Typ studia: Informatika Bc.
Login do SIS: novelins

Zpět na PRG003 Metodika programování a filozofie programovacích jazyků

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník