Zkouška LS 2015

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".
madvorak
Matfyz(ák|ačka) level I
Příspěvky: 8
Registrován: 2. 9. 2015 19:50
Typ studia: Informatika Bc.

Zkouška LS 2015

Příspěvek od madvorak »

Ahoj! Dneska jsem byl na zkoušce u Kryla (termín v září a byl jsem tam jediný). Protože jsem od mnoha lidí slyšel, že je problém nenechat se u Kryla vyhodit (že stačí říct jednu nějakou blbost), tak bych tady chtěl přidat svoji pozitivní zkušenost.

Protože mi Kryl nedovolil vybrat si Pascal, rozhodl jsem se pro C#, přestože Kryl explicitně říkal, že tuto volbu nedoporučuje. Nicméně jsem prolezl, takže bych tady chtěl dát určitý hint, jak to pojmout, aby byl Kryl spokojený :) Kryl chtěl samozřejmě C# porovnat s C++ a Javou (to je celkem logické a navíc se domnívám, že C# vlastně ani tak dobře nezná, aby z něj chtěl přímo zkoušet). Dostal jsem papír na přípravu (cca 15 minut, ale je povoleno déle) a bylo mi řečeno, že mám začít od podstatných věcí, potom se dostat k těm méně podstatným a nemám vynechat subjektivní dojmy (že prý je to pro něj zajímavější, když se dozví náš názor).

Osnova mého vyprávění byla asi takováto:
Společné znaky: syntax založená na C, imperativní objektově orientované jazyky, spousta knihoven, podpora vláken, ...
Zbytek byl už víceméně srovnávání.
C++ je neřízený jazyk, kdežto Java a C# jsou řízené jazyky.
C++ je nejstarší a C# je nejnovější.
V C++ je "ruční" správa paměti, například je tam potřeba dělat destruktory. To způsobuje určité problémy, na druhou stranu je tam možné programovat tak, aby měla aplikace vyšší výkon. V Javě a C# je GC.
Java je navržená jako multiplatformní jazyk a tak, aby co nejvíce věcí řešil a kontroloval kompilátor. Snaha o bezpečný jazyk. Zároveň obsahuje nejmenší množství různých "programovacích stylů", takže je nejjednodušší z těch tří jazyků. To budou taky důvody, proč je Java nejrozšířenější u velkých korporací (typicky velké banky, které mají úplný backend v Cobolu a nad tím je mnoho vrstev vybudovaných v Javě).
C# se hodně inspiroval Javou, takže z ní přejímá většinu principů OOP a obohacuje to o různé "moderní" směry a spoustu Mrkvosochtích technologií. Je tam znát podpora funkcionálních přístupů: lambda výrazy, delegáty, LINQ. Narozdíl od Javy, kde jsou jen "obyčejné třídy" jsou v C# třídy, statické třídy i struktury.
V C++ je vícenásobná dědičnost. Při problému, který Kryl nazývá kundička, se používá virtuální dědičnost, aby se stejné datové položky nedědily vícekrát. V Javě a C# není vícenásobná dědičnost, ale je tu možnost implementovat více rozhraní. Zmínil jsem generika, ale vynechal jsem z toho C++, abych nemusel mlžit :)
U C++ jsem trochu zkritizoval méně příjemnou syntax (mezery v názvech základních typů, "opačný" zápis polí, ...).
U Javy jsem zkritizoval, že musí být každá public třída v samostatném souboru. K tomu jsem ještě zmínil vnitřní třídy (rozdíl mezi Javou a C#) a anonymní třídy v Javě. A předepsaný systém balíčků v Javě.
U C# jsem vyzvihnul VS jako IMO nejlepší IDE. Přetěžování operátorů v C#, zmínka že v C++ je to taky, ale v Javě ne a to mě štve. A připomenul jsem, že C# není pouze pro Windows.
Java i C# jsou vhodné jazyky pro webové aplikace. Na okraj jsem zmínil Tomcat, applety (s dodatkem, že vyšly z módy), frameworky, a ASP.NET.
Ještě jsem se pak víc rozpovídal o rozdílném pojmu enumu v C# (jiný zápis pro int, zkrátka pojmenované konstanty) a Javě (plnohodnotná třída, enum jako singleton).
Na okraj jsem zmínil srovnání efektivity Javy proti C# na Windowsu a na Linuxu.

Jediná věc, kterou chtěl Kryl víc vysvětlit, byla ta virtuální dědičnost v C++. Jinak mě nechal samotného mluvit a byl spokojený. Dostal jsem bez problémů jedničku. Na "přehledové" otázky (druhá část) ani nedošlo :)

Věci, o kterých jsem nemluvil, ale možná bych mohl: rozdíly v základních typech a int/Integer v Javě, systém výjimek, public/protected/private/internal věci, finalizéry.
Odpovědět

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