/ janturon.cz / Od kodéra k analytikovi / Implementované vzory

Implementované vzory

Tato kapitola je zde zařazena jako oddech, umožňující získat nadhled nad probranými návrhovými vzory. Pokud patříte k mladým dravcům hltajícím nové znalosti, nedozvíte se v této kapitole nic praktického, klidně ji přeskočte.


Programovací jazyky se vyvíjejí. Původně byly myšleny jako ovládací nástroj hardware, ale časem se z nich začal stávat nástroj pro vyjádření problémů. Všimněte si například přístupu k řetězcům:

  1. C const char* je konstantní ukazatel do paměti, jejíž obsah je typu znak. Už zde je vidět vývoj, že vůbec existují nějaké typy, v Assembleru se pracuje pouze s 1,8,16,32 a 64 bitovými entitami. Ale přece: programátor zde není odstíněn od hardware (paměť), instruuje kompilátor, jak k ní přistupovat (const či mutable), může také dávat kompilátoru doporučení (register, inline), což dělá kód efektivním, na druhou stranu to nesouvisí s řešením problému (řeší se zde problém hardware) a do programu je možné zavléci více chyb (např. zápis do nealokované paměti).
  2. C++ string je třída obalující const char*. Už samotný pojem třída je hodně abstraktní a programátor se nestará, jak jsou její členy uloženy v paměti. Cčkový programátor žasne, jak neuvěřitelně komplexní (a také neefektivní!) je operátor +=, který modernější programátor používá bez mrknutí oka, soustředíc se na zapsání problému a vůbec neřešící paměť.
  3. Javascript var "proměnná" se blíží lidskému myšlení. Z pohledu interpretu je vše neuvěřitelně přetížené a musí se dělat spousta dalších operací. Za časů vlády interpretu Trident to byl proto velmi pomalý jazyk a zvlášť při manipulaci s DOM to bylo znát. (S nástupem Gecka a zvláště Presta a WebKitu se interprety mnohonásobně zrychlily.) Na druhou stranu: všimněte si, že zdejší ukázky v Javascriptu jsou obvykle stručnější a přímočarejší než v C++.

Je vidět, že vývoj vede k čím dál abstraktnějším (snadněji použitelným) a čím dál neefektivnějším jazykům, což je kompenzováno rychlostí hardware. Přišel jsem si jako cyklista na dálnici, když jsem otevřel knihu Judith Bishop, v níž popisuje návrhové vzory v C#: s operátory new, tak uctívané a obávané v C++, je tu zacházeno jako s kusem hadru - v cyklech, které se vůbec nestarají o něco tak podřadného, jako uvolňování paměti a přenechávají tyto "triviální implementační záležitosti" .NET frameworku, aby se programátor mohl soustředit na "obchodní logiku".

Návrhové vzory nejsou nic jiného než vyjádření příliš abstraktní, než aby byly vyjádřitelné nativní syntaxí dnešních jazyků. Některé k tomu mají blízko (třeba Proxy, Singleton), některé už se implementace dočkaly (Iterátor či Observer jako Posluchač událostí). V dalších částech jsou popsány některé tehdy abstraktní a dnes samozřejmé nástroje.

V budoucnu tedy vyjadřovací síla jazyků nejspíš poroste a s tím poroste i jejich neefektivita daná zvýšením výkonu hardware. Podívejte se na grafické detaily vašeho desktopového prostředí. Tyto drobnosti vyžadují řádově více prostředků než před deseti lety. Z pohledu ovladatelnosti to nepřineslo žádné nebo minimální zlepšení. Proč tato neefektivita? Protože to hardware umožňuje.

Zhoubné je, kolik se tomu věnuje úsilí. Vyhrává ten, kdo dokáže nové technologie využít k novým možnostem. Kupříkladu využití dotykového displeje k simulaci klávesnice je využití starým způsobem, který nepřináší nic nového, ale bere: diskvalifikuje z ovládání zařízení hmat, grafické klávesy si nelze osahat. Například vytvoření vývojového prostředí by byl onen správný krok. Neefektivita by byla značná: procesor by dostal mnohem méně zabrat, kdybychom jako dnes vložili rozměry ovládacího prvku jako číslo. Nastavit je roztažením prstů ale umožňuje soustředit se na návrh.

Do budoucna se proto vyplatí studovat kvalitativně nové věci, a nevěnovat příliš úsilí těm zastaralým v zářivějších kabátech. Deset let starý desktopový počítač s deset let starým operačním systémem je na poli kancelářských aplikací stejně výkonný jako moderní počítač s "moderním" (tj. převlečeným do zářivého kabátu) operačním systémem. A pokud chcete na počítači pouze psát text, zkuste u nějakého dědy oprášit stařičkou 386 s editorem T602: věřte nebo ne, je mnohem rychlejší než dnešní stroje, i když jeho výpočetní výkon je z dnešního pohledu směšný.