Diskuze: Využití jazyka C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Vlastník
Zobrazeno 9 zpráv z 59.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Například šablony pro Smarty jsou imperativní a kvůli tomu musí být rozděleny do více částí (hlavička, střed, patička,...). Když tu šablonu uděláš deklarativně nebo objektově, tak ji v klidu strčíš do jednoho souboru a vypadá mnohem přehledněji a udržovatelněji.
Uh, placen podle počtu řádků? S tím jsem se ještě nepotkal
Hmm, to bych splakal nad výdělkem nebo bych si musel účtovat aspoň 100 Kč/řádek
Kupodivu mi základní knihovna objektů připadá OK. Možná proto, že ty třídy používají rozhraní, které je pro mne akceptovatelné, mohu si je rozšířit a nemusím se přitom dívat do zdrojového kódu, jak to ten autor myslel.
Osobně hlavní rozdíl v OOP přístupu mezi C++ a moderními jazyky vidím v tom, že C++ bere objekty jako klasické proměnné a umožňuje programátorovy s nimi tak i zacházet. Zatímco Java nebo C# s objekty zachází jinak než s primitivními typy (systém referencí). Co se týče vracení objektů, tak pokud v daném případě nijak zásadně nezáleží na rychlosti, pak není problém vrátit objekt pomocí dočasné proměnné, která se zkopíruje. Jinak můžeš využít třeba smart pointery.
Ty dočasné proměnné jsou při návratu problém, protože ji musíš ve volající metodě mít dostupnou, což je zátěž navíc. Pokud neznáš její typ, je to problém. Pokud návratovou hodnotu vložíš přímo jako parametr do další metody, tak to rozhraní musí znát až ta volaná metoda.
Messenger se prostě bez návratu returnem dělá blbě.
Neprogramátoři (např. zaměstnavatelé) mají počet řádků často jaké jediné měřítko které jsou schopni posoudit. V dobách SAPI se měřila pravítkem výška stohu listingů programu.
C++ může pracovat s objekty úplně stejně jako jiné jazyky (jako např. Java). U sdílených objektů (obrázky, texty) se používá také počítadlo referencí na objekt - viz např. CString z ATL. O snížení počítadla a zrušení objektu se stará destruktor lokálního objektu. Lze tak objekt vytvořit v nějaké funkci, vrátit jej v návratové hodnotě a předat jiným funkcím či objektům, aniž je třeba se starat o jeho životnost. Dobrým příkladem jsou COM objekty.
Ve skutečnosti mezi objektovým a strukturovaným programováním není až tak propastný rozdíl. Objekty jsou jen běžné struktury, jen se zjednodušil zápis a funkcím (metodám) se předává skrytě ukazatel na objekty (=struktury). Spíš že OOP nutí programátora k přehlednějšímu přístupu k programu a zjednodušuje tak práci. Dá se programovat čistě i v assembleru a naopak prasácky ve vysokém jazyce.
Objektově programovat lze i v základním C, jen musí programátor zajišťovat to, co jinak dělá OOP skrytě - předávat funkcím ukazatel na struktury (objekty), volat konstruktory a destruktory. Lze takto používat i referenční čítače počtu vlastníků objektů nebo virtuální funkce. V názvech metod pro přehlednost namísto teček uvádět např. podtržítka: Picture_Flip. Při dědění struktury se musí bázová struktura explicitně vložit (z nějakého důvodu nebylo v C pamatováno na odvozování struktur). Takto lze programovat objektově např. u jednočipů.
Na druhou stranu lze používat OOP (např. C++) i u nízkoúrovňovějších záležitostí jako např. programování kernelu systémů, není nutné používat C. Jen je nutné před prvním použitím objektů inicializovat správce paměti a explicitně zavolat konstruktor globálních objektů.
Zobrazeno 9 zpráv z 59.